diff --git a/CHANGELOG.md b/CHANGELOG.md index 1df6e8ef..3ded8135 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1538,7 +1538,7 @@ Expected behavior after upgrade: ### šŸ› Bug Fixes -* **storage**: Fix `clear()` not deleting COW version control data ([#workshop-bug-report](https://github.com/soulcraftlabs/brainy/issues)) +* **storage**: Fix `clear()` not deleting COW version control data (consumer-reported) - Fixed all storage adapters to properly delete `_cow/` directory on clear() - Fixed in-memory entity counters not being reset after clear() - Prevents COW reinitialization after clear() by setting `cowEnabled = false` diff --git a/README.md b/README.md index 0dd38a86..7597a680 100644 --- a/README.md +++ b/README.md @@ -196,9 +196,10 @@ CSV, Excel, PDF, URLs — auto-detected format, auto-classified entities. ```javascript await brain.import('customers.csv') -await brain.import('sales-data.xlsx', { excelSheets: ['Q1', 'Q2'] }) -await brain.import('research-paper.pdf', { pdfExtractTables: true }) +await brain.import('sales-data.xlsx') // all sheets processed +await brain.import('research-paper.pdf') // tables extracted automatically await brain.import('https://api.example.com/data.json') +await brain.import('./handbook.md', { vfsPath: '/imports/handbook' }) // preserve in VFS ``` **[Import Guide](docs/guides/import-anything.md)** @@ -265,7 +266,7 @@ await brain.relate({ // Filter on the fast path — column-store hit, not metadata fallback: const employees = await brain.find({ type: NounType.Person, subtype: 'employee' }) -const directReports = await brain.getRelations({ from: ceoId, subtype: 'direct' }) +const directReports = await brain.related({ from: ceoId, subtype: 'direct' }) // O(1) counts via the persisted rollups: brain.counts.bySubtype(NounType.Person) diff --git a/RELEASES.md b/RELEASES.md index 1bc72f57..4fd0b489 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -106,6 +106,12 @@ Hard renames, no aliases. Every pair below is verified against the 8.0 source. | Brainy 7.x | Brainy 8.0 | |---|---| +| `brain.delete(id)` | `brain.remove(id)` — matches the transact op vocabulary (`add` / `update` / `remove` / `relate` / `unrelate`) | +| `brain.deleteMany(params)` | `brain.removeMany(params)` | +| `DeleteManyParams` (type) | `RemoveManyParams` | +| `brain.getRelations(paramsOrId)` | `brain.related(paramsOrId)` — the same name a pinned `Db` exposes (`db.related()`) | +| `GetRelationsParams` (type) | `RelatedParams` | +| CLI `delete ` | CLI `remove ` (JSON output `{ id, removed: true }`, matching `unrelate`) | | `HnswProvider` (from `@soulcraft/brainy/plugin`) | `VectorIndexProvider` | | `HNSWIndex` (exported class) | `JsHnswVectorIndex` | | Provider keys `'hnsw'` and `'diskann'` | `'vector'` (the only key Brainy consults for the vector index) | @@ -129,9 +135,17 @@ find . -name '*.ts' -not -path '*/node_modules/*' -print0 | xargs -0 sed -i \ -e "s/registerProvider('hnsw'/registerProvider('vector'/g" \ -e "s/registerProvider('diskann'/registerProvider('vector'/g" \ -e "s/getProvider('hnsw'/getProvider('vector'/g" \ - -e "s/getProvider('diskann'/getProvider('vector'/g" + -e "s/getProvider('diskann'/getProvider('vector'/g" \ + -e 's/\.getRelations(/.related(/g' \ + -e 's/\bGetRelationsParams\b/RelatedParams/g' \ + -e 's/\.deleteMany(/.removeMany(/g' \ + -e 's/\bDeleteManyParams\b/RemoveManyParams/g' ``` +`delete()` → `remove()` is deliberately **not** in the snippet: `.delete(` is +too common (`Map`/`Set`/storage adapters) for a blind sed. Find your +`brain.delete(...)` call sites and rename them by hand. + The config shape changes need a human (they are not 1:1 textual): ```ts @@ -192,7 +206,7 @@ this rename; only the API surface moved. implements the BFS in the JS graph index and routes to a native provider when one is registered. - **Every write advances the generation clock; only `transact()` writes - history.** Single-operation writes (`add` / `update` / `delete` / `relate` + history.** Single-operation writes (`add` / `update` / `remove` / `relate` outside `transact()`) bump `brain.generation()` so watermarks and CAS stay sound, but they do not stage historical records — they remain visible through earlier pins and are not reported by `db.since()`. Writes you want @@ -210,13 +224,20 @@ this rename; only the API surface moved. no-ops, closing a 7.x trap), system-managed fields drop with a one-shot warning naming the right path; (3) **split at read time** through one canonical helper, so `entity.metadata` / `relation.metadata` contain ONLY - custom fields on every read path — `get`, `find`, `getRelations` (several + custom fields on every read path — `get`, `find`, `related` (several paginated/by-source/by-target paths previously echoed the full stored record, including the `verb` type key, inside `metadata`), batch reads, - and historical `asOf()` reads. `getRelations()` results now also surface + and historical `asOf()` reads. `related()` results now also surface `confidence`/`updatedAt` top-level, and `updateRelation()` no longer erases a relationship's `service`/`createdBy`. See "Reserved fields" in `docs/concepts/consistency-model.md`. +- **Named errors for not-found contract failures.** `update()`, `relate()`, + `updateRelation()`, `similar({ to: id })`, `transact()` planning, and + speculative `db.with()` planning now throw `EntityNotFoundError` / + `RelationNotFoundError` (both exported from the package root, both carrying + the missing `id` as a field) instead of a generic `Error`. Message texts are + unchanged, so existing `/not found/` matching keeps working — `instanceof` + is now the supported way to branch. - **Unchanged from 7.31:** per-entity `_rev`, `update({ ifRev })` (`RevisionConflictError`), and `add({ ifAbsent })` work exactly as before, and `ifRev` is also accepted on `transact()` update operations (a conflict diff --git a/docs/ADR-001-generational-mvcc.md b/docs/ADR-001-generational-mvcc.md index 71ee3d70..d6e32441 100644 --- a/docs/ADR-001-generational-mvcc.md +++ b/docs/ADR-001-generational-mvcc.md @@ -28,7 +28,7 @@ path and the native path. - A **monotonic u64 generation counter** is the store's logical clock. It advances once per committed `transact()` batch and once per - single-operation write (`add`/`update`/`delete`/`relate`/…), so + single-operation write (`add`/`update`/`remove`/`relate`/…), so `brain.generation()` is always a meaningful watermark. It is persisted in `_system/generation.json` and never reissued for anything durable. - `brain.now()` **pins** the current generation in O(1) and returns a `Db` — diff --git a/docs/BATCHING.md b/docs/BATCHING.md index 057fc84f..96239ba6 100644 --- a/docs/BATCHING.md +++ b/docs/BATCHING.md @@ -316,7 +316,7 @@ const entities = Array.from(results.values()) ```typescript const allVerbs = [] for (const sourceId of sourceIds) { - const verbs = await brain.getRelations({ from: sourceId }) + const verbs = await brain.related({ from: sourceId }) allVerbs.push(...verbs) } ``` diff --git a/docs/CREATING-AUGMENTATIONS.md b/docs/CREATING-AUGMENTATIONS.md deleted file mode 100644 index 2983472c..00000000 --- a/docs/CREATING-AUGMENTATIONS.md +++ /dev/null @@ -1,435 +0,0 @@ -# Creating Augmentations for Brainy - -> **Updated** - Includes metadata structure changes and type system improvements - -## The BrainyAugmentation Interface - -Every augmentation implements this simple yet powerful interface: - -```typescript -interface BrainyAugmentation { - // Identification - name: string // Unique name for your augmentation - - // Execution control - timing: 'before' | 'after' | 'around' | 'replace' // When to execute - operations: string[] // Which operations to intercept - priority: number // Execution order (higher = first) - - // Lifecycle methods - initialize(context: AugmentationContext): Promise - execute(operation: string, params: any, next: () => Promise): Promise - shutdown?(): Promise // Optional cleanup -} -``` - -## Breaking Changes for Augmentation Developers - -### 1. Metadata Structure Separation -Brainy introduces strict metadata/vector separation for billion-scale performance: - -```typescript -// āœ… Metadata has required type field -interface NounMetadata { - noun: NounType // Required! Must be a valid noun type - [key: string]: any // Your custom metadata -} - -interface VerbMetadata { - verb: VerbType // Required! Must be a valid verb type - sourceId: string - targetId: string - [key: string]: any -} -``` - -### 2. Storage Adapter Return Types -Storage adapters now return different types at different boundaries: - -```typescript -// Internal methods: Pure structures (no metadata) -abstract _getNoun(id: string): Promise - -// Public API: WithMetadata structures -abstract getNoun(id: string): Promise -``` - -### 3. Verb Property Renamed -The verb relationship field changed from `type` to `verb`: - -```typescript -// āŒ v3.x -verb.type === 'relatedTo' - -// āœ… Current -verb.verb === 'relatedTo' -``` - -## Creating a Storage Augmentation - -Storage augmentations are special - they provide the storage backend for Brainy. - -### Important: Storage Requirements - -Your storage adapter MUST: -1. **Wrap metadata** with required `noun`/`verb` fields -2. **Return pure structures** from internal `_methods` -3. **Return WithMetadata types** from public methods - -```typescript -import { StorageAugmentation } from 'brainy/augmentations' -import { BaseStorageAdapter, HNSWNoun, HNSWNounWithMetadata, NounMetadata } from 'brainy' - -export class MyCustomStorage extends BaseStorageAdapter { - // Internal method: Returns pure structure - async _getNoun(id: string): Promise { - const data = await this.fetchFromDatabase(id) - return data ? { - id: data.id, - vector: data.vector, - nounType: data.type - } : null - } - - // Public method: Returns WithMetadata structure - async getNoun(id: string): Promise { - const noun = await this._getNoun(id) - if (!noun) return null - - // Fetch metadata separately - const metadata = await this.getNounMetadata(id) - - return { - ...noun, - metadata: metadata || { noun: noun.nounType || 'thing' } - } - } - - // CRITICAL: Always save with proper metadata structure - async saveNoun(noun: HNSWNoun, metadata?: NounMetadata): Promise { - // Validate metadata has required 'noun' field - if (!metadata?.noun) { - throw new Error('NounMetadata requires "noun" field') - } - - await this.database.save({ - id: noun.id, - vector: noun.vector, - nounType: noun.nounType, - metadata: metadata // Stored separately - }) - } -} - -export class MyStorageAugmentation extends StorageAugmentation { - private config: MyStorageConfig - - constructor(config: MyStorageConfig) { - super() - this.name = 'my-custom-storage' - this.config = config - } - - // Called during storage resolution phase - async provideStorage(): Promise { - const storage = new MyCustomStorage(this.config) - this.storageAdapter = storage - return storage - } - - // Called during augmentation initialization - protected async onInitialize(): Promise { - await this.storageAdapter!.init() - this.log(`Custom storage initialized`) - } -} -``` - -### Using Your Storage Augmentation - -```typescript -// Register before brain.init() -const brain = new Brainy() -brain.augmentations.register(new MyStorageAugmentation({ - connectionString: 'redis://localhost:6379' -})) -await brain.init() // Will use your storage! -``` - -## Creating a Feature Augmentation - -Here's a complete example of a caching augmentation: - -```typescript -import { BaseAugmentation, BrainyAugmentation } from 'brainy/augmentations' - -export class CachingAugmentation extends BaseAugmentation { - private cache = new Map() - - constructor() { - super() - this.name = 'smart-cache' - this.timing = 'around' // Wrap operations - this.operations = ['search'] // Only cache searches - this.priority = 50 // Mid-priority - } - - async execute(operation: string, params: any, next: () => Promise): Promise { - if (operation === 'search') { - // Check cache - const cacheKey = JSON.stringify(params) - if (this.cache.has(cacheKey)) { - this.log('Cache hit!') - return this.cache.get(cacheKey) - } - - // Execute and cache - const result = await next() - this.cache.set(cacheKey, result) - return result - } - - // Pass through other operations - return next() - } - - protected async onInitialize(): Promise { - this.log('Cache initialized') - } - - async shutdown(): Promise { - this.cache.clear() - await super.shutdown() - } -} -``` - -## The Four Timing Modes - -### 1. `before` - Pre-processing -```typescript -timing = 'before' -async execute(op, params, next) { - // Validate/transform input - const validated = await validate(params) - return next(validated) // Pass modified params -} -``` - -### 2. `after` - Post-processing -```typescript -timing = 'after' -async execute(op, params, next) { - const result = await next() - // Log, analyze, or modify result - console.log(`Operation ${op} returned:`, result) - return result -} -``` - -### 3. `around` - Wrapping (middleware) -```typescript -timing = 'around' -async execute(op, params, next) { - console.log('Starting', op) - try { - const result = await next() - console.log('Success', op) - return result - } catch (error) { - console.log('Failed', op, error) - throw error - } -} -``` - -### 4. `replace` - Complete replacement -```typescript -timing = 'replace' -async execute(op, params, next) { - // Don't call next() - replace entirely! - return myCustomImplementation(params) -} -``` - -## Operations You Can Intercept - -Common operations in Brainy: -- `'storage'` - Storage resolution (special) -- `'add'` - Adding data -- `'search'`, `'similar'` - Searching -- `'update'`, `'delete'` - Modifications -- `'saveNoun'`, `'saveVerb'` - Storage operations -- `'all'` - Intercept everything - -## Context Available to Augmentations - -```typescript -interface AugmentationContext { - brain: Brainy // The brain instance - storage: StorageAdapter // Storage backend - config: BrainyConfig // Configuration - log: (message: string, level?: 'info' | 'warn' | 'error') => void -} -``` - -## Real-World Examples - -### 1. Redis Storage Augmentation -```typescript -export class RedisStorageAugmentation extends StorageAugmentation { - async provideStorage(): Promise { - return new RedisAdapter({ - host: 'localhost', - port: 6379, - // Implement full StorageAdapter interface - }) - } -} -``` - -### 2. Audit Trail Augmentation -```typescript -export class AuditAugmentation extends BaseAugmentation { - timing = 'after' - operations = ['add', 'update', 'delete'] - - async execute(op, params, next) { - const result = await next() - - // Log to audit trail - await this.logAudit({ - operation: op, - params, - result, - timestamp: new Date(), - user: this.context.config.currentUser - }) - - return result - } -} -``` - -### 3. Rate Limiting Augmentation -```typescript -export class RateLimitAugmentation extends BaseAugmentation { - timing = 'before' - operations = ['search'] - private limiter = new RateLimiter({ rps: 100 }) - - async execute(op, params, next) { - await this.limiter.acquire() // Wait if rate limited - return next() - } -} -``` - -## Publishing to Brain Cloud Marketplace - -Future capability for premium augmentations: - -```typescript -// package.json -{ - "name": "@brain-cloud/redis-storage", - "brainy": { - "type": "augmentation", - "category": "storage", - "premium": true - } -} - -// Users can install via: -// brainy augment install redis-storage -``` - -## Best Practices - -### General Practices - -1. **Use BaseAugmentation** - Provides common functionality -2. **Set appropriate priority** - Storage (100), System (80-99), Features (10-50) -3. **Be selective with operations** - Don't use 'all' unless necessary -4. **Handle errors gracefully** - Don't break the chain -5. **Clean up in shutdown()** - Release resources -6. **Log appropriately** - Use context.log() for consistent output -7. **Document your augmentation** - Include examples - -### Specific Best Practices - -8. **Always include `noun` field** when creating/modifying NounMetadata: - ```typescript - const metadata: NounMetadata = { - noun: 'thing', // REQUIRED! - yourField: 'value' - } - ``` - -9. **Use `verb` property** not `type` when working with relationships: - ```typescript - // āœ… Correct - if (verb.verb === 'relatedTo') { ... } - - // āŒ Wrong (v3.x pattern) - if (verb.type === 'relatedTo') { ... } - ``` - -10. **Access metadata correctly** from storage: - ```typescript - // āœ… Correct - metadata is already structured - const nounType = noun.metadata.noun - - // āš ļø Fallback pattern for robustness - const nounType = noun.metadata?.noun || 'thing' - ``` - -11. **Respect the two-file storage pattern** - Don't mix vector and metadata operations: - ```typescript - // āœ… Good - Separate concerns - await storage.saveNoun(noun) - await storage.saveMetadata(noun.id, metadata) - - // āŒ Bad - Mixing concerns - await storage.saveNounWithEverything(combinedData) - ``` - -## Testing Your Augmentation - -```typescript -import { Brainy } from 'brainy' -import { MyAugmentation } from './my-augmentation' - -describe('MyAugmentation', () => { - let brain: Brainy - - beforeEach(async () => { - brain = new Brainy() - brain.augmentations.register(new MyAugmentation()) - await brain.init() - }) - - afterEach(async () => { - await brain.destroy() - }) - - it('should enhance searches', async () => { - // Test your augmentation's effect - const results = await brain.search('test') - expect(results).toHaveProperty('enhanced', true) - }) -}) -``` - -## Summary - -Augmentations are Brainy's extension system. They can: -- Replace storage backends -- Add caching layers -- Implement audit trails -- Add rate limiting -- Sync with external systems -- Transform data -- And much more! - -The unified BrainyAugmentation interface makes it easy to create powerful extensions while maintaining consistency across the entire system. \ No newline at end of file diff --git a/docs/DATA_MODEL.md b/docs/DATA_MODEL.md index e683238f..aa3cd351 100644 --- a/docs/DATA_MODEL.md +++ b/docs/DATA_MODEL.md @@ -238,7 +238,7 @@ await brain.relate({ Fast-path filter on the verb side: ```typescript -const direct = await brain.getRelations({ +const direct = await brain.related({ from: ceoId, type: VerbType.ReportsTo, subtype: 'direct' diff --git a/docs/DEVELOPER_LEARNING_PATH.md b/docs/DEVELOPER_LEARNING_PATH.md index 2be36680..955ec607 100644 --- a/docs/DEVELOPER_LEARNING_PATH.md +++ b/docs/DEVELOPER_LEARNING_PATH.md @@ -193,21 +193,21 @@ console.log('āœ… Created relationships') console.log('\nšŸ” Querying relationships...') // Who works for TechCorp? -const techcorpEmployees = await brain.getRelations({ +const techcorpEmployees = await brain.related({ to: techcorpId, type: VerbType.WorksWith }) console.log(`TechCorp has ${techcorpEmployees.length} employees`) // Who works on the AI project? -const projectContributors = await brain.getRelations({ +const projectContributors = await brain.related({ to: projectId, type: [VerbType.WorksOn, VerbType.Manages] }) console.log(`AI Project has ${projectContributors.length} contributors`) // Who does John collaborate with? -const johnsCollaborators = await brain.getRelations({ +const johnsCollaborators = await brain.related({ from: johnId, type: VerbType.CollaboratesWith }) @@ -294,7 +294,7 @@ await brain.update({ 1. Create an organizational hierarchy (CEO → Managers → Engineers) 2. Build a project dependency graph 3. Model a social network with CollaboratesWith relationships -4. Query "Who reports to Alice?" using getRelations() +4. Query "Who reports to Alice?" using related() 5. Batch update all projects to add a "year: 2024" field ### Next Steps @@ -676,7 +676,7 @@ if (readmeEntity.length > 0) { } // Query relationships -const conceptDocs = await brain.getRelations({ +const conceptDocs = await brain.related({ from: conceptId, type: VerbType.DocumentedBy }) @@ -798,7 +798,7 @@ await brain.relate({ }) // Query across boundaries -const conceptDocs = await brain.getRelations({ +const conceptDocs = await brain.related({ from: conceptId, type: VerbType.DocumentedBy }) diff --git a/docs/FIND_SYSTEM.md b/docs/FIND_SYSTEM.md index a3c4fa21..5bf8ef1a 100644 --- a/docs/FIND_SYSTEM.md +++ b/docs/FIND_SYSTEM.md @@ -1228,7 +1228,7 @@ where: { age: { gt: 18 } } **No connected entities found**: ```typescript // Verify relationship exists -const relations = await brain.getRelations({ +const relations = await brain.related({ from: 'entity-a', to: 'entity-b' }) diff --git a/docs/MIGRATION-V3-TO-V4.md b/docs/MIGRATION-V3-TO-V4.md index 9b9dec3f..069bda73 100644 --- a/docs/MIGRATION-V3-TO-V4.md +++ b/docs/MIGRATION-V3-TO-V4.md @@ -48,7 +48,7 @@ await storage.setLifecyclePolicy({ ```typescript // v3: Delete one at a time (slow, expensive) for (const id of idsToDelete) { - await brain.delete(id) // 1000 API calls for 1000 entities + await brain.remove(id) // 1000 API calls for 1000 entities } // v4.0.0: Batch delete (fast, cheap) diff --git a/docs/QUERY_OPERATORS.md b/docs/QUERY_OPERATORS.md index a13b0f62..16482de1 100644 --- a/docs/QUERY_OPERATORS.md +++ b/docs/QUERY_OPERATORS.md @@ -216,18 +216,18 @@ See the **[Subtypes & Facets guide](./guides/subtypes-and-facets.md)** for the f ### Filter relationships by subtype (7.30+) -Verbs are first-class peers — `getRelations()` and graph traversal both honor subtype filters on the fast path: +Verbs are first-class peers — `related()` and graph traversal both honor subtype filters on the fast path: ```typescript // Filter relationships by VerbType subtype -const direct = await brain.getRelations({ +const direct = await brain.related({ from: ceoId, type: VerbType.ReportsTo, subtype: 'direct' }) // Set membership on verb subtype -const all = await brain.getRelations({ +const all = await brain.related({ from: ceoId, type: VerbType.ReportsTo, subtype: ['direct', 'dotted-line'] diff --git a/docs/README.md b/docs/README.md index c65822fc..3abab230 100644 --- a/docs/README.md +++ b/docs/README.md @@ -89,14 +89,11 @@ See [vfs/](./vfs/) for the complete VFS documentation set. --- -## Plugins & Augmentations +## Plugins | Document | Description | |----------|-------------| -| [Plugins](./PLUGINS.md) | Plugin system overview | -| [Creating Augmentations](./CREATING-AUGMENTATIONS.md) | Build custom plugins | -| [Augmentations Reference](./augmentations/COMPLETE-REFERENCE.md) | Full augmentation API | -| [Augmentations Developer Guide](./augmentations/DEVELOPER-GUIDE.md) | Plugin development guide | +| [Plugins](./PLUGINS.md) | Plugin system overview — providers, `plugins` config, `brain.use()` | --- diff --git a/docs/api/README.md b/docs/api/README.md index 3e1b993d..75fc615c 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -185,12 +185,12 @@ await brain.update({ --- -### `delete(id)` → `Promise` +### `remove(id)` → `Promise` -Delete a single entity. +Remove a single entity (and every relationship where it is source or target). ```typescript -await brain.delete(id) +await brain.remove(id) ``` **Parameters:** @@ -444,7 +444,7 @@ brain.defineAggregate({ name: 'monthly_spending', source: { type: NounType.Event, - where: { domain: 'financial', subtype: 'transaction' } + where: { domain: 'financial' } // matches custom metadata fields }, groupBy: [ 'category', @@ -468,10 +468,10 @@ brain.defineAggregate({ |-------|------|-------------| | `name` | `string` | Unique identifier for this aggregate | | `source.type` | `NounType \| NounType[]` | Entity types that feed into this aggregate | -| `source.where` | `Record` | Metadata filter (same syntax as `find({ where })`) | +| `source.where` | `Record` | Filter on custom **metadata** fields (matched against the entity's `metadata` bag) | | `source.service` | `string` | Multi-tenancy filter | -| `groupBy` | `GroupByDimension[]` | Dimensions to group by — plain field names or `{ field, window }` for time bucketing | -| `metrics` | `Record` | Named metrics with `op` (`sum`, `count`, `avg`, `min`, `max`, `stddev`, `variance`) and optional `field` | +| `groupBy` | `GroupByDimension[]` | Dimensions to group by — plain field names, `{ field, window }` for time bucketing, or `{ field, unnest: true }` for array fields (one contribution per element) | +| `metrics` | `Record` | Named metrics with `op` (`sum`, `count`, `avg`, `min`, `max`, `stddev`, `variance`, `percentile`, `distinctCount`) and optional `field`. `percentile` additionally requires `p` in `[0, 1]`. | | `materialize` | `boolean \| object` | Write results as `NounType.Measurement` entities (auto-visible in OData/Sheets/SSE) | **Time window granularities:** `'hour'`, `'day'`, `'week'`, `'month'`, `'quarter'`, `'year'`, or `{ seconds: number }` for custom intervals. @@ -539,6 +539,20 @@ const recentFood = await brain.find({ } ``` +### `queryAggregate(name, params?)` → `Promise` + +The first-class analytics path — returns plain group rows (`{ groupKey, metrics, count }`) instead of `find()`-style `Result` wrappers. Supports `where` (group-key filter), `having` (SQL-HAVING metric filter), `orderBy`, `order`, `limit`, `offset`: + +```typescript +const rows = await brain.queryAggregate('monthly_spending', { + having: { total: { greaterThan: 100 } }, // filter by computed metrics + orderBy: 'total', + order: 'desc', + limit: 10 +}) +// [{ groupKey: { category: 'food', date: '2024-01' }, metrics: { total: 342.5, count: 28 }, count: 28 }, ...] +``` + ### How It Works Aggregation hooks run **outside transactions** on every write operation: @@ -557,16 +571,16 @@ Aggregation hooks run **outside transactions** on every write operation: ### Financial Data Modeling -Brainy supports financial analytics through **metadata conventions** on existing NounTypes — no custom types needed: +Brainy supports financial analytics through **subtypes and metadata conventions** on existing NounTypes — no custom types needed: ```typescript -// Transaction = NounType.Event + financial metadata +// Transaction = NounType.Event + 'transaction' subtype + financial metadata await brain.add({ data: 'Coffee at Blue Bottle', type: NounType.Event, + subtype: 'transaction', // top-level standard field (reserved — never in metadata) metadata: { domain: 'financial', - subtype: 'transaction', amount: 5.50, currency: 'USD', category: 'food', @@ -575,26 +589,26 @@ await brain.add({ } }) -// Account = NounType.Collection + financial metadata +// Account = NounType.Collection + 'account' subtype + financial metadata await brain.add({ data: 'Checking Account', type: NounType.Collection, + subtype: 'account', metadata: { domain: 'financial', - subtype: 'account', accountType: 'checking', currency: 'USD', institution: 'Chase' } }) -// Invoice = NounType.Document + financial metadata +// Invoice = NounType.Document + 'invoice' subtype + financial metadata await brain.add({ data: 'Invoice #1234 from Acme Corp', type: NounType.Document, + subtype: 'invoice', metadata: { domain: 'financial', - subtype: 'invoice', amount: 15000, currency: 'USD', status: 'pending', @@ -672,32 +686,33 @@ await brain.updateRelation({ id: relId, type: VerbType.WorksWith }) --- -### `getRelations(params)` → `Promise` +### `related(params)` → `Promise` -Get relationships for an entity. +Get relationships for an entity. Same name and surface as `db.related()` on a +pinned `Db` view. ```typescript // Get all relationships FROM an entity -const outgoing = await brain.getRelations({ from: entityId }) +const outgoing = await brain.related({ from: entityId }) // Get all relationships TO an entity -const incoming = await brain.getRelations({ to: entityId }) +const incoming = await brain.related({ to: entityId }) // Filter by type -const related = await brain.getRelations({ +const contains = await brain.related({ from: entityId, type: VerbType.Contains }) // Filter by subtype (fast path, column-store hit) -const direct = await brain.getRelations({ +const direct = await brain.related({ from: entityId, type: VerbType.ReportsTo, subtype: 'direct' }) // Set membership on subtype -const all = await brain.getRelations({ +const all = await brain.related({ from: entityId, type: VerbType.ReportsTo, subtype: ['direct', 'dotted-line'] @@ -739,12 +754,12 @@ console.log(result.failed) // Array of errors --- -### `deleteMany(params)` → `Promise>` +### `removeMany(params)` → `Promise>` -Delete multiple entities. +Remove multiple entities. ```typescript -const result = await brain.deleteMany({ +const result = await brain.removeMany({ ids: [id1, id2, id3] }) ``` @@ -757,7 +772,7 @@ Update multiple entities. ```typescript const result = await brain.updateMany({ - updates: [ + items: [ { id: id1, metadata: { updated: true } }, { id: id2, data: 'New content' } ] @@ -772,7 +787,7 @@ Create multiple relationships. ```typescript const ids = await brain.relateMany({ - relations: [ + items: [ { from: id1, to: id2, type: VerbType.RelatedTo }, { from: id1, to: id3, type: VerbType.Contains } ] @@ -1213,39 +1228,16 @@ const todos = await brain.vfs.getTodos('/src/App.tsx') --- -#### `vfs.getAllTodos(path?)` → `Promise` +#### `vfs.searchEntities(query)` → `Promise>` -Get all TODOs from directory tree. +Search for semantic entities tracked by the VFS, filtered by type, name, or metadata. ```typescript -const allTodos = await brain.vfs.getAllTodos('/src') -``` - ---- - -### Project Analysis - -#### `vfs.getProjectStats(path?)` → `Promise` - -Get project statistics. - -```typescript -const stats = await brain.vfs.getProjectStats('/projects/my-app') -console.log(stats.fileCount) -console.log(stats.totalSize) -console.log(stats.fileTypes) // Breakdown by extension -``` - ---- - -#### `vfs.searchEntities(query)` → `Promise` - -Search for VFS entities by metadata. - -```typescript -const tsxFiles = await brain.vfs.searchEntities({ - type: 'file', - extension: '.tsx' +const people = await brain.vfs.searchEntities({ + type: 'person', // entity type filter + name: 'Ada', // semantic name search + where: { role: 'author' }, // metadata filters + limit: 50 }) ``` @@ -1280,48 +1272,52 @@ console.log(result.explanation) --- -### `neural().clusters(input?, options?)` → `Promise` +### `neural().clusters(input?, options?)` → `Promise` -Automatic clustering. +Automatic clustering. Accepts a text query, an array of texts, or a `ClusteringOptions` object. ```typescript const clusters = await brain.neural().clusters({ - algorithm: 'kmeans', - k: 5, - minSize: 3 + algorithm: 'kmeans', // 'auto' | 'hierarchical' | 'kmeans' | 'dbscan' | ... + maxClusters: 5, + minClusterSize: 3 }) clusters.forEach(cluster => { - console.log(cluster.label) - console.log(cluster.items) - console.log(cluster.centroid) + console.log(cluster.label) // auto-generated label (when available) + console.log(cluster.members) // entity ids in the cluster + console.log(cluster.centroid) // centroid vector }) ``` --- -### `neural().neighbors(id, options?)` → `Promise` +### `neural().neighbors(id, options?)` → `Promise` -Find k-nearest neighbors. +Find nearest neighbors. ```typescript -const neighbors = await brain.neural().neighbors(entityId, { - k: 10, - threshold: 0.7 +const result = await brain.neural().neighbors(entityId, { + limit: 10, + minSimilarity: 0.7 }) ``` +**Options:** `limit?`, `radius?`, `minSimilarity?`, `includeMetadata?`, `sortBy?: 'similarity' | 'importance' | 'recency'` + --- -### `neural().outliers(threshold?)` → `Promise` +### `neural().outliers(options?)` → `Promise` Detect outlier entities. ```typescript -const outliers = await brain.neural().outliers(0.3) -// Returns entity IDs that are outliers +const outliers = await brain.neural().outliers({ threshold: 0.3 }) +// Each outlier carries the entity id plus outlier scoring details ``` +**Options:** `threshold?`, `method?: 'isolation' | 'statistical' | 'cluster-based'`, `minNeighbors?`, `includeReasons?` + --- ### `neural().visualize(options?)` → `Promise` @@ -1342,27 +1338,28 @@ const vizData = await brain.neural().visualize({ ### Performance Methods -#### `neural().clusterFast(options)` → `Promise` +#### `neural().clusterFast(options?)` → `Promise` Fast clustering for large datasets. ```typescript const clusters = await brain.neural().clusterFast({ - k: 10, - maxIterations: 50 + maxClusters: 10 }) ``` +**Options:** `level?` (hierarchy level), `maxClusters?` + --- -#### `neural().clusterLarge(options)` → `Promise` +#### `neural().clusterLarge(options?)` → `Promise` -Streaming clustering for very large datasets. +Sampling-based clustering for very large datasets. ```typescript const clusters = await brain.neural().clusterLarge({ - k: 20, - batchSize: 1000 + sampleSize: 1000, + strategy: 'diverse' // 'random' | 'diverse' | 'recent' }) ``` @@ -1381,17 +1378,15 @@ await brain.import('data.csv', { createEntities: true }) -// Excel import +// Excel import (all sheets processed automatically) await brain.import('sales.xlsx', { format: 'excel', - sheets: ['Q1', 'Q2'] + vfsPath: '/imports/sales', // optional: mirror into the VFS + groupBy: 'sheet' }) -// PDF import -await brain.import('research.pdf', { - format: 'pdf', - extractTables: true -}) +// PDF import (tables extracted automatically) +await brain.import('research.pdf', { format: 'pdf' }) // URL import await brain.import('https://api.example.com/data.json') @@ -1400,10 +1395,17 @@ await brain.import('https://api.example.com/data.json') **Parameters:** - `source`: `string | Buffer | object` - File path, URL, buffer, or object - `options?`: Import configuration - - `format?`: `'csv' | 'excel' | 'pdf' | 'json'` - Auto-detected if omitted + - `format?`: `'excel' | 'pdf' | 'csv' | 'json' | 'markdown' | 'yaml' | 'docx' | 'image'` - Auto-detected if omitted + - `vfsPath?`: `string` - Mirror imported content into the VFS at this path + - `groupBy?`: `'type' | 'sheet' | 'flat' | 'custom'` - VFS grouping strategy - `createEntities?`: `boolean` - Create entities from rows - - `sheets?`: `string[]` - Excel sheets to import - - `extractTables?`: `boolean` - Extract tables from PDF + - `createRelationships?`: `boolean` - Create relationships between extracted entities + - `preserveSource?`: `boolean` - Save the original file in the VFS + - `enableNeuralExtraction?`: `boolean` - Extract entity names via AI + - `enableRelationshipInference?`: `boolean` - Infer relationships via AI + - `enableConceptExtraction?`: `boolean` - Extract entity types via AI + - `confidenceThreshold?`: `number` - Minimum confidence for extracted entities + - `onProgress?`: `(progress) => void` - Progress callback (stage, counts, throughput, ETA) **Returns:** `Promise` - Import statistics @@ -1414,9 +1416,6 @@ await brain.import('https://api.example.com/data.json') ### Export & Snapshots ```typescript -// Export to file -await brain.export('/path/to/backup.brainy') - // Instant hard-link snapshot via the Db API const pin = brain.now() await pin.persist('/backups/2026-06-11') @@ -1453,12 +1452,11 @@ const brain = new Brainy({ // Model: all-MiniLM-L6-v2 (384 dimensions) // Device: CPU via WASM (works everywhere) - // Cache configuration - cache: { - enabled: true, - maxSize: 10000, - ttl: 3600000 // 1 hour in ms - } + // Cache configuration — `true`/`false`, or an options object + cache: { + maxSize: 10000, + ttl: 3600000 // 1 hour in ms + } }) await brain.init() // Required! VFS auto-initialized @@ -1672,7 +1670,7 @@ When strict mode is on: - Brainy's own VFS infrastructure writes bypass via the `metadata.isVFSEntity: true` marker. - Per-type registrations always apply regardless of the brain-wide flag. -Becomes the default in 8.0.0. +The default since 8.0.0 — pass `requireSubtype: false` to opt out while migrating pre-8.0 data. #### `trackField(name, options?)` → `void` @@ -1718,6 +1716,27 @@ await brain.migrateField({ Returns `{ scanned: number, migrated: number, skipped: number, errors: Array<{id, error}> }`. +#### `fillSubtypes(rules, options?)` → `Promise` (8.0+) + +Back-fill missing `subtype` values across entities AND relationships in one streaming pass — the migration companion to `audit()`. Keys are `NounType`/`VerbType` values; each rule is a literal subtype string or a function deriving one from the entry (return `undefined` to decline). Idempotent: entries that already carry a subtype are never touched, so a crashed run is resumed safely by re-running. + +```typescript +const report = await brain.fillSubtypes({ + [NounType.Person]: (e) => e.metadata?.kind ?? 'unspecified', // derived + [NounType.Document]: 'general', // literal default + [VerbType.RelatedTo]: 'unspecified' // relationship rule +}) +// → { scanned, filled, skipped, errors, byType } +``` + +**Parameters:** +- `rules`: `FillSubtypeRules` - Map of NounType/VerbType → literal subtype or `(entry) => string | undefined` +- `options.includeVFS?`: `boolean` - Also fill VFS infrastructure entries (default `false`) +- `options.batchSize?`: `number` - Pagination batch size (default `200`) +- `options.onProgress?`: `(progress: { scanned, filled, skipped }) => void` - Per-batch callback + +Returns `{ scanned, filled, skipped, errors, byType }`. After a clean run, `skipped` equals the remaining `audit().total`. See the [migration recipe](../guides/subtypes-and-facets.md). + --- ### `embed(data)` → `Promise` ✨ @@ -1812,7 +1831,7 @@ for (const group of duplicates) { // Find person duplicates with higher threshold const personDupes = await brain.findDuplicates({ - type: NounType.PERSON, + type: NounType.Person, threshold: 0.9, limit: 50 }) @@ -1885,15 +1904,19 @@ const docClusters = await brain.cluster({ --- -### `getStats()` → `Statistics` +### `getStats(options?)` → `Promise` -Get comprehensive statistics. +Get complete entity/relationship statistics (convenience wrapper over `brain.counts`). ```typescript -const stats = brain.getStats() -console.log(stats.entityCount) -console.log(stats.relationshipCount) -console.log(stats.cacheHitRate) +const stats = await brain.getStats() +console.log(stats.entities.total) // total entity count +console.log(stats.entities.byType) // counts per NounType +console.log(stats.relationships) // relationship stats +console.log(stats.density) // relationships per entity + +// Exclude VFS infrastructure entities from the counts +const semanticOnly = await brain.getStats({ excludeVFS: true }) ``` --- @@ -1914,7 +1937,7 @@ VFS is auto-initialized during `brain.init()` - no separate `vfs.init()` needed! ### Shutdown ```typescript -await brain.shutdown() // Graceful shutdown, flush caches +await brain.close() // Graceful shutdown — flushes pending writes and releases the writer lock ``` --- @@ -1940,8 +1963,8 @@ await brain.update({ metadata: { updated: true } }) -// Delete -await brain.delete(id) +// Remove +await brain.remove(id) ``` --- @@ -2001,7 +2024,7 @@ const results = await brain.find({ // Speculate: what would this change look like? (nothing touches disk) const base = brain.now() const whatIf = await base.with([ - { op: 'add', type: NounType.Document, subtype: 'note', data: 'New feature' } + { op: 'add', type: NounType.Document, subtype: 'note', data: 'New feature', metadata: { draft: true } } ]) await whatIf.find({ where: { draft: true } }) await whatIf.release() @@ -2009,7 +2032,7 @@ await base.release() // Commit it for real — one atomic generation, with audit metadata await brain.transact( - [{ op: 'add', type: NounType.Document, subtype: 'note', data: 'New feature' }], + [{ op: 'add', type: NounType.Document, subtype: 'note', data: 'New feature', metadata: { draft: true } }], { meta: { author: 'dev@example.com', message: 'Add new feature' } } ) ``` @@ -2115,7 +2138,8 @@ For the full taxonomy with all 169 types and their descriptions, see: - **[Stage 3 CANONICAL Taxonomy](../STAGE3-CANONICAL-TAXONOMY.md)** - Complete list with categories - **[Noun-Verb Taxonomy Architecture](../architecture/noun-verb-taxonomy.md)** - Design rationale -### Migration from +### Migration from pre-Stage-3 taxonomies + **Breaking Changes:** - `NounType.Content` removed → Use `Document`, `Message`, or `InformationContent` - `NounType.User` removed → Use `Person` or `Agent` @@ -2161,7 +2185,6 @@ For the full taxonomy with all 169 types and their descriptions, see: - **[Find System](../FIND_SYSTEM.md)** - Natural language find() details - **[VFS Quick Start](../vfs/QUICK_START.md)** - Complete VFS documentation - **[Import Anything Guide](../guides/import-anything.md)** - CSV, Excel, PDF, URL imports -- **[Cloud Deployment](../deployment/CLOUD_DEPLOYMENT_GUIDE.md)** - Production deployment - **[Consistency Model](../concepts/consistency-model.md)** - The guarantees behind the Db API - **[Snapshots & Time Travel](../guides/snapshots-and-time-travel.md)** - Backup, restore, what-if, audit recipes diff --git a/docs/architecture/aggregation.md b/docs/architecture/aggregation.md index 3921edc0..10b55689 100644 --- a/docs/architecture/aggregation.md +++ b/docs/architecture/aggregation.md @@ -97,7 +97,7 @@ On `brain.update(entity)`, the engine reverses the old entity's contribution and ### Delete Handling -On `brain.delete(id)`, the engine reverses the entity's contribution: +On `brain.remove(id)`, the engine reverses the entity's contribution: - `count` and `sum` are decremented - `min`/`max` may become stale (marked in `staleMinMax` for lazy recompute) diff --git a/docs/architecture/augmentation-system-audit.md b/docs/architecture/augmentation-system-audit.md deleted file mode 100644 index 7501460e..00000000 --- a/docs/architecture/augmentation-system-audit.md +++ /dev/null @@ -1,359 +0,0 @@ -# šŸ” Brainy 2.0 Augmentation System Architecture Audit (REVISED) - -**Author**: Senior Architecture Review -**Date**: 2025-08-25 -**Status**: 🟔 **WORKING BUT NEEDS MARKETPLACE FEATURES** - -## Executive Summary - -The augmentation system core execution is WORKING correctly through `AugmentationRegistry`. The system properly executes augmentations before/after operations. However, there's no discovery, installation, or marketplace integration for the brain-cloud registry vision. - ---- - -## 🟢 What's Actually Working - -### 1. Execution Mechanism āœ… -The `AugmentationRegistry` class properly implements: -```typescript -async execute(operation: string, params: any, mainOperation: () => Promise): Promise -``` -- Chains augmentations correctly -- Respects timing (before/after/around) -- Handles operation filtering -- Works with all 27 augmentations - -### 2. Registration System āœ… -```typescript -brain.augmentations.register(augmentation) -``` -- Two-phase initialization works (storage first) -- Context injection works -- Lifecycle management works - -### 3. Clean Interface āœ… -- 100% of augmentations use `BrainyAugmentation` -- `BaseAugmentation` provides solid foundation -- Proper TypeScript types - -### 4. Auto-Configuration āœ… -```typescript -new Brainy({ - cache: true, // Auto-registers CacheAugmentation - index: true, // Auto-registers IndexAugmentation - storage: { type: 'filesystem', rootDirectory: './data' } // Auto-registers FileSystemStorageAugmentation -}) -``` - ---- - -## 🟔 Missing for Marketplace Vision - -### 1. No Package Discovery -**Current**: Manual registration only -```typescript -// Current (manual) -import { NotionSynapse } from './my-custom-synapse' -brain.augmentations.register(new NotionSynapse()) - -// Needed -await brain.discover('notion') // Search npm/brain-cloud -await brain.install('@soulcraft/notion-synapse') -``` - -### 2. No Installation Mechanism -**Current**: Must be bundled at build time -**Needed**: Dynamic installation -```typescript -interface AugmentationMarketplace { - search(query: string): Promise - install(packageId: string): Promise - uninstall(packageId: string): Promise - listInstalled(): Promise - checkUpdates(): Promise -} -``` - -### 3. No Brain Cloud Registry Client -**Current**: No registry concept -**Needed**: Registry integration -```typescript -class BrainCloudRegistry { - private apiUrl = 'https://api.soulcraft.com/brain-cloud' - - async search(query: string): Promise { - const response = await fetch(`${this.apiUrl}/augmentations/search?q=${query}`) - return response.json() - } - - async getPackage(id: string): Promise { - const response = await fetch(`${this.apiUrl}/augmentations/${id}`) - return response.json() - } -} -``` - -### 4. No License Management -**Current**: All augmentations free/bundled -**Needed**: License verification -```typescript -interface LicenseManager { - verify(packageId: string, licenseKey: string): Promise - activate(packageId: string, licenseKey: string): Promise - deactivate(packageId: string): Promise - getStatus(packageId: string): Promise -} -``` - -### 5. No Version Management -**Current**: No versioning -**Needed**: Semver support -```typescript -interface VersionManager { - checkCompatibility(pkg: Package, brainyVersion: string): boolean - resolveConflicts(packages: Package[]): Package[] - upgrade(packageId: string, toVersion: string): Promise -} -``` - ---- - -## šŸ“‹ Implementation Plan for Marketplace - -### Phase 1: Local Package Discovery (1 week) -```typescript -class LocalPackageDiscovery { - async discover(): Promise { - // 1. Search node_modules for brainy augmentations - const packages = await glob('node_modules/@*/package.json') - - // 2. Filter for brainy augmentations - return packages.filter(pkg => pkg.brainy?.type === 'augmentation') - } - - async load(packageId: string): Promise { - // Dynamic import - const module = await import(packageId) - return new module.default() - } -} -``` - -### Phase 2: NPM Integration (1 week) -```typescript -class NPMRegistry { - async search(query: string): Promise { - // Search npm for packages with brainy keyword - const response = await fetch( - `https://registry.npmjs.org/-/v1/search?text=${query}+keywords:brainy-augmentation` - ) - return response.json() - } - - async install(packageId: string): Promise { - // Use npm programmatically - await exec(`npm install ${packageId}`) - - // Auto-register after install - const aug = await this.load(packageId) - this.brain.augmentations.register(aug) - } -} -``` - -### Phase 3: Brain Cloud Registry (2 weeks) -```typescript -class BrainCloudMarketplace { - private registry = new BrainCloudRegistry() - private licenses = new LicenseManager() - private installer = new AugmentationInstaller() - - async browse(category?: string): Promise { - const packages = await this.registry.list(category) - - return packages.map(pkg => ({ - ...pkg, - installed: this.isInstalled(pkg.id), - licensed: this.isLicensed(pkg.id), - updates: this.hasUpdates(pkg.id) - })) - } - - async purchase(packageId: string): Promise { - // 1. Process payment - const license = await this.processPayment(packageId) - - // 2. Activate license - await this.licenses.activate(packageId, license) - - // 3. Install package - await this.install(packageId) - } -} -``` - -### Phase 4: Developer Tools (1 week) -```typescript -// CLI for augmentation development -class AugmentationCLI { - async create(name: string): Promise { - // Scaffold new augmentation project - await this.scaffold(name, 'augmentation-template') - } - - async test(path: string): Promise { - // Test augmentation locally - const aug = await this.load(path) - await this.runTests(aug) - } - - async publish(path: string): Promise { - // Publish to brain-cloud - const pkg = await this.package(path) - await this.registry.publish(pkg) - } -} -``` - ---- - -## šŸ—ļø Recommended Architecture - -### 1. Augmentation Package Structure -```json -{ - "name": "@soulcraft/notion-synapse", - "version": "1.0.0", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "brainy": { - "type": "augmentation", - "class": "NotionSynapse", - "timing": "after", - "operations": ["addNoun", "updateNoun"], - "priority": 20, - "license": "premium", - "price": 9.99, - "compatibility": ">=2.0.0", - "dependencies": [] - }, - "keywords": ["brainy-augmentation", "notion", "sync"] -} -``` - -### 2. Installation Flow -```typescript -// User flow -await brain.marketplace.search('notion') -// Returns: [@soulcraft/notion-synapse, @community/notion-sync, ...] - -await brain.marketplace.install('@soulcraft/notion-synapse') -// 1. Check license (prompt for purchase if needed) -// 2. Check compatibility -// 3. Install dependencies -// 4. Download package -// 5. Load augmentation -// 6. Register with brain -// 7. Initialize - -// Now it's working! -brain.augmentations.list() -// [..., { name: '@soulcraft/notion-synapse', enabled: true }] -``` - -### 3. Discovery UI -```typescript -// Web UI component - - - - - - - - - - - -``` - ---- - -## šŸŽÆ Priority for 2.0 Release - -### Must Have (Release Blockers) -- āœ… Working execution (DONE) -- āœ… Clean interface (DONE) -- āœ… Documentation (DONE) -- ā³ Fix augmentationPipeline.ts removal -- ā³ Test all 27 augmentations work - -### Nice to Have (2.0.x) -- Local package discovery -- NPM integration -- Basic CLI tools - -### Future (2.1+) -- Brain Cloud Registry -- License management -- Payment processing -- Marketplace UI -- Developer portal - ---- - -## šŸ“Š Current State Assessment - -| Component | Status | Notes | -|-----------|--------|-------| -| Core Execution | āœ… Working | AugmentationRegistry.execute() works | -| Registration | āœ… Working | Manual registration works | -| Auto-Config | āœ… Working | Cache, index, storage auto-register | -| Lifecycle | āœ… Working | Init, execute, shutdown work | -| Discovery | āŒ Missing | No package discovery | -| Installation | āŒ Missing | No dynamic installation | -| Marketplace | āŒ Missing | No registry client | -| Licensing | āŒ Missing | No license management | -| Versioning | āŒ Missing | No version checks | - ---- - -## šŸ’” Recommendations - -### For 2.0 Release -1. **Ship with manual registration** - It works! -2. **Document how to create augmentations** - Critical for adoption -3. **Create 2-3 example augmentations** - Show the patterns -4. **Add basic CLI for testing** - Help developers - -### For 2.1 (Q1 2025) -1. **Add NPM discovery** - Find installed augmentations -2. **Dynamic loading** - Import augmentations at runtime -3. **Basic marketplace API** - List available augmentations -4. **Version checking** - Ensure compatibility - -### For 3.0 (Q2 2025) -1. **Full marketplace** - Browse, search, install -2. **Payment integration** - Premium augmentations -3. **Developer portal** - Publish augmentations -4. **Enterprise features** - Private registries - ---- - -## āœ… Good News Summary - -The augmentation system WORKS! The core architecture is solid: -- Execution mechanism is correct -- Registration works -- Lifecycle management works -- All 27 augmentations function properly - -What's missing is the marketplace/discovery layer, which can be added incrementally without breaking the core system. The 2.0 release can ship with manual augmentation registration, and the marketplace features can be added in 2.1+. - -**Recommendation: Ship 2.0 with current system, add marketplace in 2.1** \ No newline at end of file diff --git a/docs/architecture/data-storage-architecture.md b/docs/architecture/data-storage-architecture.md index fe0fce60..56428db5 100644 --- a/docs/architecture/data-storage-architecture.md +++ b/docs/architecture/data-storage-architecture.md @@ -195,7 +195,7 @@ tx-log line is appended last (advisory). Crash recovery on open discards any Two write classes share the generation clock: -- **Single-operation writes** (`add`/`update`/`delete`/`relate` outside +- **Single-operation writes** (`add`/`update`/`remove`/`relate` outside `transact()`) bump `generation.json` so watermarks and `_rev` CAS stay sound, but write **no** history — they are not visible to `db.since()` and remain visible through earlier pins. diff --git a/docs/architecture/storage-architecture.md b/docs/architecture/storage-architecture.md index 1ff846bd..0c876638 100644 --- a/docs/architecture/storage-architecture.md +++ b/docs/architecture/storage-architecture.md @@ -239,37 +239,30 @@ await brain.storage.withLock('resource-id', async () => { ## Migration and Backup -### Export Data +Backup and restore go through the Db API — see +[Snapshots & Time Travel](../guides/snapshots-and-time-travel.md) for the full +recipe book. + +### Snapshot (backup) ```typescript -// Export entire database -const backup = await brain.export({ - format: 'json', - includeVectors: true, - includeIndexes: false -}) +// Instant, self-contained snapshot (hard links on filesystem storage) +const db = brain.now() +await db.persist('/backups/2026-06-11') +await db.release() ``` -### Import Data +### Restore ```typescript -// Import from backup -await brain.import(backup, { - mode: 'merge', // or 'replace' - validateSchema: true -}) +// Replace the store's entire state from a snapshot (destructive — confirm required) +await brain.restore('/backups/2026-06-11', { confirm: true }) ``` -### Storage Migration +### Move to a new directory ```typescript -// Migrate between storage types -const oldBrain = new Brainy({ storage: { type: 'filesystem', rootDirectory: './old' } }) -const newBrain = new Brainy({ storage: { type: 'filesystem', rootDirectory: './new' } }) - -await oldBrain.init() -await newBrain.init() - -// Transfer all data -const data = await oldBrain.export() -await newBrain.import(data) +// A snapshot directory is a complete store: restore it into a fresh brain +const brain = new Brainy({ storage: { type: 'filesystem', rootDirectory: './new' } }) +await brain.init() +await brain.restore('/backups/2026-06-11', { confirm: true }) ``` ## Performance Tuning diff --git a/docs/architecture/zero-config.md b/docs/architecture/zero-config.md index 162ad391..1aa5a7c9 100644 --- a/docs/architecture/zero-config.md +++ b/docs/architecture/zero-config.md @@ -1,11 +1,11 @@ --- title: Zero Configuration slug: concepts/zero-config -public: true +public: false category: concepts template: concept order: 3 -description: Brainy auto-detects storage, initializes embeddings, and builds indexes — no configuration required. Works in Node.js, Bun, OPFS, and cloud environments. +description: Brainy auto-detects storage, initializes embeddings, and builds indexes — no configuration required. Works in Node.js and Bun (server-only since 8.0). next: - getting-started/installation - guides/storage-adapters @@ -13,7 +13,13 @@ next: # Zero Configuration & Auto-Adaptation -> **Current Status**: Basic zero-config is fully functional. Advanced auto-adaptation features are in development. +> **Status (8.0):** This document predates Brainy 8.0 and needs a rewrite before +> republication. Large parts describe storage backends and environments that 8.0 +> removed (browser/OPFS/IndexedDB, edge KV, S3) or features that were never built +> (model auto-selection, workload detection). Brainy 8.0 is server-only (Node.js/Bun) +> with two storage adapters: `memory` and `filesystem` — see +> [Storage Adapters](../concepts/storage-adapters.md) for the accurate story. +> Basic zero-config (`new Brainy()` with auto-selected storage) works as described. ## Overview diff --git a/docs/augmentations/COMPLETE-REFERENCE.md b/docs/augmentations/COMPLETE-REFERENCE.md deleted file mode 100644 index 3f6b4b60..00000000 --- a/docs/augmentations/COMPLETE-REFERENCE.md +++ /dev/null @@ -1,396 +0,0 @@ -# šŸ”Œ Brainy Augmentations Complete Reference - -> **All augmentations that power Brainy's extensibility - with locations, usage, and examples** -> -> **āš ļø Update**: Updated for metadata structure changes and billion-scale optimizations - -## Quick Start - -```typescript -import { Brainy } from '@soulcraft/brainy' - -const brain = new Brainy({ - // Augmentations auto-configure based on environment - storage: { type: 'auto', rootDirectory: './brainy-data' }, // Storage augmentation - cache: true, // Cache augmentation - index: true // Index augmentation -}) - -await brain.init() // Augmentations initialize automatically -``` - -## Augmentation Architecture - -### Key Improvements for Billion-Scale Performance - -1. **Metadata/Vector Separation**: Augmentations now work with separated metadata and vectors - - Metadata stored separately from vector data - - 99.2% memory reduction for type tracking - - Two-file storage pattern for optimal I/O - -2. **Type System Enforcement**: All metadata requires type fields - - `NounMetadata` requires `noun: NounType` - - `VerbMetadata` requires `verb: VerbType` - - Type inference system available as public API - -3. **Storage Adapter Pattern**: Internal vs public method distinction - - `_methods`: Return pure structures (HNSWNoun, HNSWVerb) - - Public methods: Return WithMetadata types - - MetadataEnforcer Proxy ensures proper access - -### What This Means for Augmentation Users - -**āœ… If you use built-in augmentations**: No changes needed! They're all updated. - -**āš ļø If you created custom storage augmentations**: Update your storage adapter to: -- Wrap metadata with required `noun`/`verb` fields -- Follow the internal/public method pattern -- Use two-file storage approach - -**āš ļø If you access relationship data**: Change `verb.type` to `verb.verb` - -## Core Concepts - -### What are Augmentations? -Augmentations are modular extensions that add functionality to Brainy without cluttering the core API. They follow a unified interface and can be: -- **Auto-enabled**: Based on configuration (cache, index, storage) -- **Manually registered**: For custom functionality -- **Chained**: Multiple augmentations work together seamlessly -- **Billion-scale ready**: Optimized for datasets with billions of nouns and verbs - -### Augmentation Lifecycle -1. **Registration**: Augmentations register before init() -2. **Initialization**: Two-phase init (storage first, then others) -3. **Execution**: Hook into operations (before/after/both) -4. **Shutdown**: Clean teardown on brain.shutdown() - ---- - -## Storage Augmentations - -### MemoryStorageAugmentation -**Location**: `src/augmentations/storageAugmentations.ts` -**Auto-enabled**: When `storage: { type: 'memory' }` or in test environments -**Purpose**: In-memory storage for testing and temporary data -```typescript -const brain = new Brainy({ storage: { type: 'memory' } }) -``` - -### FileSystemStorageAugmentation -**Location**: `src/augmentations/storageAugmentations.ts` -**Auto-enabled**: When `storage: { type: 'filesystem' }` or Node.js detected -**Purpose**: Persistent file-based storage for Node.js applications -```typescript -const brain = new Brainy({ - storage: { type: 'filesystem', rootDirectory: './data' } -}) -``` - -For off-site backup, snapshot `rootDirectory` from your scheduler using `gsutil rsync`, `aws s3 sync`, `rclone`, or `tar` — there are no cloud storage augmentations. - -### StorageAugmentation (base) -**Location**: `src/augmentations/storageAugmentation.ts` -**Purpose**: Base class for custom storage implementations - -### DynamicStorageAugmentation -**Location**: `src/augmentations/storageAugmentation.ts` -**Purpose**: Runtime storage adapter switching - ---- - -## Performance Augmentations (7 total) - -### CacheAugmentation -**Location**: `src/augmentations/cacheAugmentation.ts` -**Auto-enabled**: When `cache: true` (default) -**Purpose**: LRU cache for search results and frequent queries -```typescript -brain.clearCache() // Exposed via API -brain.getCacheStats() // Cache hit/miss statistics -``` - -### IndexAugmentation -**Location**: `src/augmentations/indexAugmentation.ts` -**Auto-enabled**: When `index: true` (default) -**Purpose**: Metadata indexing for O(1) field lookups -```typescript -brain.rebuildMetadataIndex() // Exposed via API -// Enables fast where queries: -brain.find({ where: { category: 'tech' } }) -``` - -### MetricsAugmentation -**Location**: `src/augmentations/metricsAugmentation.ts` -**Auto-enabled**: Always active -**Purpose**: Performance metrics and statistics collection -```typescript -brain.getStats() // Comprehensive metrics -``` - -### MonitoringAugmentation -**Location**: `src/augmentations/monitoringAugmentation.ts` -**Manual**: Register for detailed monitoring -**Purpose**: Real-time performance monitoring and alerts - -### BatchProcessingAugmentation -**Location**: `src/augmentations/batchProcessingAugmentation.ts` -**Auto-enabled**: For batch operations -**Purpose**: Optimizes bulk add/update/delete operations -```typescript -brain.addNouns([...]) // Automatically batched -``` - -### RequestDeduplicatorAugmentation -**Location**: `src/augmentations/requestDeduplicatorAugmentation.ts` -**Auto-enabled**: Always active -**Purpose**: Prevents duplicate concurrent operations - ---- - -## Data Integrity Augmentations (3 total) - -**Auto-enabled**: When `wal: true` -**Purpose**: Write-ahead logging for crash recovery -```typescript -const brain = new Brainy({ wal: true }) -// Automatic recovery on restart after crash -``` - -### EntityRegistryAugmentation -**Location**: `src/augmentations/entityRegistryAugmentation.ts` -**Auto-enabled**: For streaming operations -**Purpose**: High-speed deduplication for real-time data -```typescript -// Prevents duplicate entities in streaming scenarios -brain.add(data) // Automatically deduplicated -``` - -### AutoRegisterEntitiesAugmentation -**Location**: `src/augmentations/entityRegistryAugmentation.ts` -**Manual**: For automatic entity discovery -**Purpose**: Auto-discovers and registers entities from data - ---- - -## Intelligence Augmentations (2 total) - -### NeuralImportAugmentation -**Location**: `src/augmentations/neuralImport.ts` -**Manual**: Via `brain.neuralImport()` -**Purpose**: AI-powered smart data import -```typescript -const result = await brain.neuralImport(data, { - confidenceThreshold: 0.7, - autoApply: true -}) -// Automatically detects entities and relationships -``` - -### IntelligentVerbScoringAugmentation -**Location**: `src/augmentations/intelligentVerbScoringAugmentation.ts` -**Auto-enabled**: When verbs are used -**Purpose**: ML-based relationship strength scoring -```typescript -brain.verbScoring.train(feedback) -brain.verbScoring.getScore(verbId) -``` - ---- - -## Communication Augmentations (4 total) - -### APIServerAugmentation -**Location**: `src/augmentations/apiServerAugmentation.ts` -**Manual**: For server deployments -**Purpose**: REST/WebSocket/MCP API server -```typescript -const augmentation = new APIServerAugmentation() -await brain.registerAugmentation(augmentation) -// Exposes full Brainy API over network -``` - -### WebSocketConduitAugmentation -**Location**: `src/augmentations/conduitAugmentations.ts` -**Manual**: For Brainy-to-Brainy sync -**Purpose**: Real-time sync between Brainy instances -```typescript -const conduit = new WebSocketConduitAugmentation() -await conduit.establishConnection('ws://other-brain') -``` - -### ServerSearchConduitAugmentation -**Location**: `src/augmentations/serverSearchAugmentations.ts` -**Manual**: For client-server search -**Purpose**: Search remote Brainy instance, cache locally - -### ServerSearchActivationAugmentation -**Location**: `src/augmentations/serverSearchAugmentations.ts` -**Manual**: Works with ServerSearchConduit -**Purpose**: Triggers and manages server search operations - ---- - -## External Integration (2 total) - -### SynapseAugmentation (base) -**Location**: `src/augmentations/synapseAugmentation.ts` -**Purpose**: Base class for external platform integrations -```typescript -// Example: NotionSynapse, SlackSynapse, etc. -class NotionSynapse extends SynapseAugmentation { - async fetchData() { /* Notion API calls */ } - async pushData() { /* Sync to Notion */ } -} -``` - -### ExampleFileSystemSynapse -**Location**: `src/augmentations/synapseAugmentation.ts` -**Purpose**: Example implementation for file system sync - ---- - -## Augmentation Configuration - -### Auto-Configuration -```typescript -const brain = new Brainy({ - // These auto-register augmentations: - storage: { type: 'auto', rootDirectory: './brainy-data' }, // Storage augmentation - cache: true, // Cache augmentation - index: true, // Index augmentation - metrics: true // Metrics augmentation -}) -``` - -### Manual Registration -```typescript -const brain = new Brainy() - -// Register before init() -const customAug = new MyCustomAugmentation() -await brain.registerAugmentation(customAug) - -await brain.init() -``` - -### Creating Custom Augmentations -```typescript -import { BaseAugmentation } from '@soulcraft/brainy' - -class MyAugmentation extends BaseAugmentation { - readonly name = 'my-augmentation' - readonly timing = 'after' // before | after | both - readonly operations = ['addNoun', 'search'] // Which ops to hook - readonly priority = 10 // Execution order (lower = earlier) - - protected async onInit(): Promise { - // Initialize your augmentation - } - - async execute( - operation: string, - params: any, - context?: AugmentationContext - ): Promise { - // Your augmentation logic - if (operation === 'addNoun') { - console.log('Noun added:', params) - } - } - - protected async onShutdown(): Promise { - // Cleanup - } -} -``` - ---- - -## Augmentation Timing & Priority - -### Timing Options -- **`before`**: Runs before the operation (can modify params) -- **`after`**: Runs after the operation (can see results) -- **`both`**: Runs before AND after - -### Priority (lower = earlier) -1. Storage augmentations (priority: 0) -2. Cache/Index augmentations (priority: 5-10) -3. Monitoring/Metrics (priority: 15-20) -4. Conduits/Synapses (priority: 20-30) - ---- - -## Key Integration Points - -### Where Augmentations Hook In - -**Brainy Constructor**: -- Storage augmentations register based on config -- Cache/Index augmentations auto-register if enabled - -**brain.init()**: -- Two-phase initialization (storage first, then others) -- Augmentations can access brain instance via context - -**Operations** (addNoun, search, etc.): -- Augmentations execute based on timing and operations filter -- Can modify params (before) or see results (after) - -**brain.shutdown()**: -- All augmentations cleaned up in reverse order - ---- - -## Performance Impact - -Most augmentations have minimal overhead: -- **Cache**: ~1ms per search (saves 10-100ms on hits) -- **Index**: ~1ms per operation (saves 100ms+ on queries) -- **Metrics**: <1ms per operation -- **Storage**: Varies by adapter (memory: 0ms, filesystem: 1-10ms) - ---- - -## Best Practices - -1. **Let auto-configuration work**: Most apps need zero manual config -2. **Storage first**: Always configure storage before other augmentations -3. **Use built-in augmentations**: They're optimized and battle-tested -4. **Custom augmentations**: Extend BaseAugmentation for consistency -5. **Respect timing**: Use 'before' to modify, 'after' to observe -6. **Mind priority**: Lower numbers execute first - ---- - -## Troubleshooting - -### Augmentation not working? -```typescript -// Check if registered -brain.listAugmentations() - -// Check if enabled -brain.isAugmentationEnabled('cache') - -// Enable/disable at runtime -brain.enableAugmentation('cache') -brain.disableAugmentation('cache') -``` - -### Performance issues? -```typescript -// Check augmentation overhead -const stats = brain.getStats() -console.log(stats.augmentations) - -// Disable non-critical augmentations -brain.disableAugmentation('monitoring') -``` - ---- - - ---- - -*Augmentations make Brainy infinitely extensible while keeping the core API clean and simple!* \ No newline at end of file diff --git a/docs/augmentations/CONFIGURATION.md b/docs/augmentations/CONFIGURATION.md deleted file mode 100644 index 3a7bd112..00000000 --- a/docs/augmentations/CONFIGURATION.md +++ /dev/null @@ -1,620 +0,0 @@ -# Augmentation Configuration System - -**Version**: 2.0.0 -**Status**: Production Ready - -## Overview - -The Brainy Augmentation Configuration System provides a VSCode-style extension architecture with multiple configuration sources, schema validation, and tool discovery. This system maintains Brainy's zero-config philosophy while enabling sophisticated enterprise configuration management. - -## Table of Contents -- [Quick Start](#quick-start) -- [Configuration Sources](#configuration-sources) -- [Creating Configurable Augmentations](#creating-configurable-augmentations) -- [Configuration Discovery](#configuration-discovery) -- [Runtime Configuration](#runtime-configuration) -- [Environment Variables](#environment-variables) -- [Configuration Files](#configuration-files) -- [CLI Commands](#cli-commands) -- [Tool Integration](#tool-integration) -- [Migration Guide](#migration-guide) - -## Quick Start - -### Using an Augmentation with Configuration - -```typescript -import { Brainy } from '@soulcraft/brainy' - -// Zero-config (uses defaults) -const brain = new Brainy() - -// With custom configuration - immediateWrites: true, - checkpointInterval: 300000 // 5 minutes -})) -``` - -### Configuring via Environment Variables - -```bash -export BRAINY_AUG_CACHE_TTL=600000 -``` - -### Configuring via Files - -Create a `.brainyrc` file in your project root: - -```json -{ - "augmentations": { - "wal": { - "enabled": true, - "immediateWrites": true, - "maxSize": 20971520 - }, - "cache": { - "ttl": 600000, - "maxSize": 2000 - } - } -} -``` - -## Configuration Sources - -Configuration is resolved in the following priority order (highest to lowest): - -1. **Runtime Updates** - Dynamic configuration changes via API -2. **Constructor Parameters** - Code-time configuration -3. **Environment Variables** - `BRAINY_AUG__` -4. **Configuration Files** - `.brainyrc`, `brainy.config.json` -5. **Schema Defaults** - Default values from manifest - -### Resolution Example - -```typescript -// Schema default -{ maxSize: 10485760 } - -// File configuration (.brainyrc) -{ maxSize: 20971520 } - -// Environment variable - -// Constructor parameter - -// Final resolved value: 41943040 (constructor wins) -``` - -## Creating Configurable Augmentations - -### Step 1: Extend ConfigurableAugmentation - -```typescript -import { ConfigurableAugmentation, AugmentationManifest } from '@soulcraft/brainy' - -export class MyAugmentation extends ConfigurableAugmentation { - name = 'my-augmentation' - timing = 'around' as const - metadata = 'none' as const - operations = ['search', 'add'] - priority = 50 - - constructor(config?: MyConfig) { - super(config) // Handles configuration resolution - } - - // Required: Provide manifest for discovery - getManifest(): AugmentationManifest { - return { - id: 'my-augmentation', - name: 'My Augmentation', - version: '1.0.0', - description: 'Does something amazing', - category: 'performance', - configSchema: { - type: 'object', - properties: { - enabled: { - type: 'boolean', - default: true, - description: 'Enable this augmentation' - }, - threshold: { - type: 'number', - default: 100, - minimum: 1, - maximum: 1000, - description: 'Processing threshold' - } - } - } - } - } - - // Optional: Handle runtime configuration changes - protected async onConfigChange(newConfig: MyConfig, oldConfig: MyConfig): Promise { - if (newConfig.threshold !== oldConfig.threshold) { - // React to threshold change - this.updateThreshold(newConfig.threshold) - } - } - - async execute(operation: string, params: any, next: () => Promise): Promise { - if (!this.config.enabled) { - return next() - } - - // Your augmentation logic here - return next() - } -} -``` - -### Step 2: Define Configuration Interface - -```typescript -interface MyConfig { - enabled?: boolean - threshold?: number - mode?: 'fast' | 'balanced' | 'thorough' -} -``` - -### Step 3: Add JSON Schema in Manifest - -```typescript -configSchema: { - type: 'object', - properties: { - enabled: { - type: 'boolean', - default: true, - description: 'Enable augmentation' - }, - threshold: { - type: 'number', - default: 100, - minimum: 1, - maximum: 1000, - description: 'Processing threshold' - }, - mode: { - type: 'string', - default: 'balanced', - enum: ['fast', 'balanced', 'thorough'], - description: 'Processing mode' - } - }, - required: [], - additionalProperties: false -} -``` - -## Configuration Discovery - -The Discovery API allows tools to discover and configure augmentations dynamically: - -```typescript -import { AugmentationDiscovery } from '@soulcraft/brainy' - -const discovery = new AugmentationDiscovery(brain.augmentations) - -// Discover all augmentations with manifests -const listings = await discovery.discover({ - includeConfig: true, - includeSchema: true -}) - -// Get configuration schema -const schema = await discovery.getConfigSchema('wal') - -// Validate configuration -const validation = await discovery.validateConfig('wal', { - enabled: true, - maxSize: 'invalid' // Will fail validation -}) - -// Update configuration at runtime -await discovery.updateConfig('wal', { - checkpointInterval: 120000 -}) -``` - -## Runtime Configuration - -### Update Configuration Dynamically - -```typescript -// Get augmentation -const wal = brain.augmentations.get('wal') - -// Update configuration -await wal.updateConfig({ - checkpointInterval: 300000 -}) - -// Get current configuration -const config = wal.getConfig() -``` - -### React to Configuration Changes - -```typescript -class MyAugmentation extends ConfigurableAugmentation { - protected async onConfigChange(newConfig: any, oldConfig: any): Promise { - // Stop old processes - if (oldConfig.enabled && !newConfig.enabled) { - await this.stop() - } - - // Start new processes - if (!oldConfig.enabled && newConfig.enabled) { - await this.start() - } - - // Update settings - if (newConfig.interval !== oldConfig.interval) { - this.rescheduleTimer(newConfig.interval) - } - } -} -``` - -## Environment Variables - -### Naming Convention - -```bash -BRAINY_AUG__=value -``` - -### Examples - -```bash - -# Cache augmentation -BRAINY_AUG_CACHE_ENABLED=true -BRAINY_AUG_CACHE_MAX_SIZE=2000 -BRAINY_AUG_CACHE_TTL=600000 - -# Complex values (JSON) -BRAINY_AUG_MYAUG_FILTERS='["*.js","*.ts"]' -BRAINY_AUG_MYAUG_OPTIONS='{"deep":true,"follow":false}' -``` - -### Docker Example - -```dockerfile -ENV BRAINY_AUG_CACHE_TTL=600000 -``` - -## Configuration Files - -### File Locations (Priority Order) - -1. `.brainyrc` (current directory) -2. `.brainyrc.json` (current directory) -3. `brainy.config.json` (current directory) -4. `~/.brainy/config.json` (user home) -5. `~/.brainyrc` (user home) - -### File Format - -```json -{ - "augmentations": { - "wal": { - "enabled": true, - "immediateWrites": true, - "maxSize": 20971520, - "checkpointInterval": 300000 - }, - "cache": { - "enabled": true, - "maxSize": 2000, - "ttl": 600000 - }, - "metrics": { - "enabled": false - } - } -} -``` - -### Per-Environment Configuration - -```json -{ - "augmentations": { - "wal": { - "development": { - "enabled": true, - "immediateWrites": true, - "maxSize": 5242880 - }, - "production": { - "enabled": true, - "immediateWrites": false, - "maxSize": 104857600, - "checkpointInterval": 60000 - } - } - } -} -``` - -## CLI Commands - -### List Augmentations with Configuration - -```bash -# Show all augmentations with config status -brainy augment list --detailed - -# Show configuration for specific augmentation -brainy augment config wal - -# Set configuration value -brainy augment config wal --set immediateWrites=true - -# Show environment variable names -brainy augment config wal --env - -# Export configuration schema -brainy augment schema wal > wal-schema.json - -# Validate configuration file -brainy augment validate --file config.json -``` - -### Interactive Configuration - -```bash -# Interactive configuration wizard -brainy augment configure wal - -? Operation mode? - āÆ Performance (immediate writes) - Durability (synchronous writes) - Custom -? Maximum log size? (10MB) 20MB -? Checkpoint interval? (1 minute) 5 minutes - -Configuration saved to .brainyrc -``` - -## Tool Integration - -### Brain-Cloud Explorer UI - -```typescript -// Auto-generate configuration form from schema -const ConfigurationUI = ({ augmentationId }) => { - const [manifest, setManifest] = useState(null) - const [config, setConfig] = useState({}) - - useEffect(() => { - // Fetch manifest with schema - fetch(`/api/augmentations/${augmentationId}/manifest`) - .then(res => res.json()) - .then(setManifest) - - // Get current configuration - discovery.getConfig(augmentationId) - .then(setConfig) - }, [augmentationId]) - - const handleSave = async (newConfig) => { - // Validate configuration - const validation = await fetch(`/api/augmentations/${augmentationId}/validate`, { - method: 'POST', - body: JSON.stringify(newConfig) - }).then(res => res.json()) - - if (validation.valid) { - // Apply configuration - await discovery.updateConfig(augmentationId, newConfig) - } - } - - // Render form based on schema - return -} -``` - -### VS Code Extension - -```json -// package.json contribution points -{ - "contributes": { - "configuration": { - "title": "Brainy Augmentations", - "properties": { - "brainy.augmentations.wal.enabled": { - "type": "boolean", - "default": true, - }, - "brainy.augmentations.wal.maxSize": { - "type": "number", - "default": 10485760, - } - } - } - } -} -``` - -## Migration Guide - -### Migrating from BaseAugmentation - -**Before:** -```typescript -export class MyAugmentation extends BaseAugmentation { - constructor(config: MyConfig = {}) { - super() - this.config = { - enabled: config.enabled ?? true, - threshold: config.threshold ?? 100 - } - } - - // No manifest - // No config discovery - // No runtime updates -} -``` - -**After:** -```typescript -export class MyAugmentation extends ConfigurableAugmentation { - constructor(config?: MyConfig) { - super(config) // Config resolution handled automatically - } - - getManifest(): AugmentationManifest { - return { - id: 'my-augmentation', - name: 'My Augmentation', - version: '1.0.0', - description: 'Does something amazing', - category: 'performance', - configSchema: { - type: 'object', - properties: { - enabled: { type: 'boolean', default: true }, - threshold: { type: 'number', default: 100 } - } - } - } - } - - // Optional: Handle config changes - protected async onConfigChange(newConfig: MyConfig, oldConfig: MyConfig): Promise { - // React to changes - } -} -``` - -### Backwards Compatibility - -The system maintains full backwards compatibility: - -1. **BaseAugmentation still works** - Existing augmentations continue to function -2. **Constructor config still works** - Existing configuration patterns preserved -3. **Zero-config still works** - Defaults are applied automatically -4. **Progressive enhancement** - Add features as needed - -## Best Practices - -### 1. Always Provide Defaults - -```typescript -configSchema: { - properties: { - enabled: { - type: 'boolean', - default: true, // Always provide defaults - description: 'Enable this feature' - } - } -} -``` - -### 2. Use Descriptive Configuration Keys - -```typescript -// Good -checkpointInterval: 60000 - -// Bad -ci: 60000 -``` - -### 3. Validate Configuration - -```typescript -protected async onConfigChange(newConfig: any, oldConfig: any): Promise { - // Validate before applying - if (newConfig.maxSize < 1048576) { - throw new Error('maxSize must be at least 1MB') - } - - // Apply changes - this.maxSize = newConfig.maxSize -} -``` - -### 4. Document Environment Variables - -```typescript -/** - * Environment Variables: - * - BRAINY_AUG_MYAUG_ENABLED: Enable augmentation (boolean) - * - BRAINY_AUG_MYAUG_THRESHOLD: Processing threshold (number) - * - BRAINY_AUG_MYAUG_MODE: Processing mode (fast|balanced|thorough) - */ -``` - -### 5. Provide Configuration Examples - -```typescript -configExamples: [ - { - name: 'Production', - description: 'Optimized for production use', - config: { - enabled: true, - mode: 'thorough', - threshold: 500 - } - }, - { - name: 'Development', - description: 'Lightweight for development', - config: { - enabled: true, - mode: 'fast', - threshold: 10 - } - } -] -``` - -## Troubleshooting - -### Configuration Not Loading - -1. Check file locations and names -2. Verify JSON syntax in config files -3. Check environment variable names (case-sensitive) -4. Use `brainy augment config --debug` to see resolution - -### Validation Errors - -1. Check schema requirements -2. Verify data types match schema -3. Check minimum/maximum constraints -4. Use discovery API to validate before applying - -### Runtime Updates Not Working - -1. Ensure augmentation extends ConfigurableAugmentation -2. Implement onConfigChange if needed -3. Check for validation errors -4. Verify augmentation is initialized - -## API Reference - -See the [Discovery API Documentation](./discovery-api.md) for complete API details. - -## Examples - -See the [examples directory](../../examples/augmentation-config/) for complete working examples. \ No newline at end of file diff --git a/docs/augmentations/DEVELOPER-GUIDE.md b/docs/augmentations/DEVELOPER-GUIDE.md deleted file mode 100644 index 8352422c..00000000 --- a/docs/augmentations/DEVELOPER-GUIDE.md +++ /dev/null @@ -1,532 +0,0 @@ -# šŸ› ļø Brainy Augmentation Developer Guide - -> **How to create, test, and use augmentations in Brainy** -> -> **āš ļø Update**: This guide has been updated with breaking changes for metadata structure and type system improvements. - -## Migration Guide - -### What Changed? - -1. **Metadata Structure**: All metadata now requires type fields (`noun` or `verb`) -2. **Property Rename**: `verb.type` → `verb.verb` for relationships -3. **Two-File Storage**: Vectors and metadata stored separately for performance -4. **Return Types**: Storage methods distinguish between internal (pure) and public (WithMetadata) returns - -### Migration Checklist - -- [ ] Update metadata creation to include required `noun` field -- [ ] Change `verb.type` to `verb.verb` in all relationship code -- [ ] Update storage adapter methods to follow internal/public pattern -- [ ] Ensure metadata access uses correct structure - -### Quick Migration Example - -```typescript -// āŒ v3.x -const verb = { - type: 'relatedTo', - sourceId: 'a', - targetId: 'b' -} -if (verb.type === 'relatedTo') { ... } - -// āœ… Current -const verb = { - verb: 'relatedTo', - sourceId: 'a', - targetId: 'b' -} -const metadata: VerbMetadata = { - verb: 'relatedTo', - sourceId: 'a', - targetId: 'b' -} -if (verb.verb === 'relatedTo') { ... } -``` - -## Quick Start: Your First Augmentation - -```typescript -import { BaseAugmentation, BrainyAugmentation, AugmentationContext } from '@soulcraft/brainy' - -export class MyFirstAugmentation extends BaseAugmentation { - readonly name = 'my-first-augmentation' - readonly timing = 'after' as const // When to run: before | after | both - readonly operations = ['add'] as const // Which operations to hook - readonly priority = 10 // Execution order (lower = first) - - protected async onInit(): Promise { - // Initialize your augmentation - console.log('MyFirstAugmentation initialized!') - } - - async execute( - operation: string, - params: any, - context?: AugmentationContext - ): Promise { - // Your augmentation logic - if (operation === 'add') { - console.log('Noun added:', params.noun) - - // Access metadata correctly - if (params.noun?.metadata) { - console.log('Noun type:', params.noun.metadata.noun) // Required field - } - - // You can access the brain instance - const stats = await context?.brain.getStats() - console.log('Total nouns:', stats.totalNouns) - } - } - - protected async onShutdown(): Promise { - // Cleanup - console.log('MyFirstAugmentation shutting down') - } -} -``` - -## Using Your Augmentation - -```typescript -import { Brainy } from '@soulcraft/brainy' -import { MyFirstAugmentation } from './my-first-augmentation' - -const brain = new Brainy() - -// Register before init() -brain.augmentations.register(new MyFirstAugmentation()) - -await brain.init() - -// Now your augmentation runs automatically! -await brain.add('Hello World') -// Console: "Noun added: { id: '...', vector: [...], metadata: {} }" -``` - ---- - -## Augmentation Lifecycle - -### 1. Registration Phase -```typescript -const aug = new MyAugmentation() -brain.augmentations.register(aug) // Before brain.init()! -``` - -### 2. Initialization Phase -```typescript -await brain.init() // Calls aug.initialize() internally -// Your onInit() method runs here -``` - -### 3. Execution Phase -```typescript -await brain.add('data') // Your execute() method runs -``` - -### 4. Shutdown Phase -```typescript -await brain.shutdown() // Your onShutdown() method runs -``` - ---- - -## Timing Options - -### `before` - Modify Input -```typescript -class ValidationAugmentation extends BaseAugmentation { - readonly timing = 'before' as const - - async execute(operation: string, params: any): Promise { - if (operation === 'add') { - // Validate and/or modify params - if (!params.content) { - throw new Error('Content required') - } - // Return modified params - return { ...params, validated: true } - } - } -} -``` - -### `after` - React to Results -```typescript -class LoggingAugmentation extends BaseAugmentation { - readonly timing = 'after' as const - - async execute(operation: string, params: any): Promise { - if (operation === 'search') { - console.log(`Search for "${params.query}" returned ${params.result.length} results`) - } - // Don't return anything - just observe - } -} -``` - -### `both` - Before AND After -```typescript -class TimingAugmentation extends BaseAugmentation { - readonly timing = 'both' as const - private startTime?: number - - async execute(operation: string, params: any, context?: AugmentationContext): Promise { - if (!this.startTime) { - // Before execution - this.startTime = Date.now() - } else { - // After execution - const duration = Date.now() - this.startTime - console.log(`${operation} took ${duration}ms`) - this.startTime = undefined - } - } -} -``` - ---- - -## Operation Hooks - -### Core Operations You Can Hook -```typescript -readonly operations = [ - 'add', // Adding data - 'update', // Updating data - 'delete', // Deleting data - 'get', // Retrieving data - 'search', // Searching - 'find', // Triple Intelligence queries - 'relate', // Adding relationships - 'unrelate', // Removing relationships - 'clear', // Clearing data - 'all' // Hook ALL operations -] as const -``` - -### Example: Multi-Operation Hook -```typescript -class AuditAugmentation extends BaseAugmentation { - readonly operations = ['add', 'update', 'delete'] as const - - async execute(operation: string, params: any): Promise { - // Log all data modifications - await this.logToAuditTrail(operation, params) - } -} -``` - ---- - -## Accessing Brain Context - -```typescript -class ContextAwareAugmentation extends BaseAugmentation { - async execute( - operation: string, - params: any, - context?: AugmentationContext - ): Promise { - // Access the brain instance - const brain = context?.brain - if (!brain) return - - // Use any brain method - const stats = await brain.getStats() - const size = await brain.size() - const results = await brain.search('query') - - // Access other augmentations - const cache = brain.augmentations.get('cache') - if (cache) { - await cache.clear() - } - } -} -``` - ---- - -## Real-World Examples - -### 1. Backup Augmentation -```typescript -class BackupAugmentation extends BaseAugmentation { - readonly name = 'backup' - readonly timing = 'after' as const - readonly operations = ['add', 'update', 'delete'] as const - readonly priority = 5 - - private changes = 0 - private readonly backupThreshold = 100 - - async execute(operation: string, params: any, context?: AugmentationContext): Promise { - this.changes++ - - if (this.changes >= this.backupThreshold) { - await this.performBackup(context?.brain) - this.changes = 0 - } - } - - private async performBackup(brain?: any): Promise { - if (!brain) return - // Cut an instant hard-link snapshot via the Db API - const snapshotPath = `/backups/auto-${Date.now()}` - const pin = brain.now() - try { - await pin.persist(snapshotPath) - } finally { - await pin.release() - } - console.log(`Automatic snapshot created: ${snapshotPath}`) - } -} -``` - -### 2. Rate Limiting Augmentation -```typescript -class RateLimitAugmentation extends BaseAugmentation { - readonly name = 'rate-limit' - readonly timing = 'before' as const - readonly operations = ['search', 'find'] as const - readonly priority = 100 // High priority - run first - - private requests = new Map() - private readonly limit = 100 // 100 requests - private readonly window = 60000 // per minute - - async execute(operation: string, params: any): Promise { - const now = Date.now() - const key = params.userId || 'anonymous' - - // Get request timestamps - const timestamps = this.requests.get(key) || [] - - // Remove old timestamps - const recent = timestamps.filter(t => now - t < this.window) - - // Check limit - if (recent.length >= this.limit) { - throw new Error('Rate limit exceeded') - } - - // Add current request - recent.push(now) - this.requests.set(key, recent) - } -} -``` - -### 3. Encryption Augmentation -```typescript -class EncryptionAugmentation extends BaseAugmentation { - readonly name = 'encryption' - readonly timing = 'both' as const - readonly operations = ['add', 'get'] as const - readonly priority = 90 // Run early - - async execute(operation: string, params: any): Promise { - if (operation === 'add') { - // Encrypt before storing - if (params.metadata?.sensitive) { - params.content = await this.encrypt(params.content) - params.encrypted = true - } - return params - } - - if (operation === 'get' && params.result?.encrypted) { - // Decrypt after retrieval - params.result.content = await this.decrypt(params.result.content) - delete params.result.encrypted - return params.result - } - } -} -``` - ---- - -## Testing Your Augmentation - -```typescript -import { describe, it, expect } from 'vitest' -import { Brainy } from '@soulcraft/brainy' -import { MyAugmentation } from './my-augmentation' - -describe('MyAugmentation', () => { - it('should hook into addNoun', async () => { - const brain = new Brainy({ storage: 'memory' }) - const aug = new MyAugmentation() - - // Spy on the execute method - const executeSpy = vi.spyOn(aug, 'execute') - - brain.augmentations.register(aug) - await brain.init() - - // Trigger the augmentation - await brain.add('test data') - - // Verify it was called - expect(executeSpy).toHaveBeenCalledWith( - 'add', - expect.objectContaining({ content: 'test data' }), - expect.any(Object) - ) - }) -}) -``` - ---- - -## Best Practices - -### 1. Use Proper Timing -- `before`: Validation, modification, rate limiting -- `after`: Logging, metrics, side effects -- `both`: Timing, tracing, wrapping - -### 2. Set Appropriate Priority -```typescript -// Priority guidelines -100: Critical (auth, rate limiting) -50: Important (validation, transformation) -10: Normal (logging, metrics) -1: Optional (debugging, tracing) -``` - -### 3. Handle Errors Gracefully -```typescript -async execute(operation: string, params: any): Promise { - try { - await this.riskyOperation() - } catch (error) { - // Log but don't break the main operation - console.error(`Augmentation error in ${this.name}:`, error) - // Optionally report to monitoring - this.reportError(error) - } -} -``` - -### 4. Be Performance Conscious -```typescript -class CachedAugmentation extends BaseAugmentation { - private cache = new Map() - - async execute(operation: string, params: any): Promise { - const key = this.getCacheKey(params) - - // Check cache first - if (this.cache.has(key)) { - return this.cache.get(key) - } - - // Expensive operation - const result = await this.expensiveOperation(params) - this.cache.set(key, result) - - return result - } -} -``` - -### 5. Clean Up Resources -```typescript -protected async onShutdown(): Promise { - // Close connections - await this.connection?.close() - - // Clear intervals - clearInterval(this.interval) - - // Flush buffers - await this.flush() - - // Clear caches - this.cache.clear() -} -``` - ---- - -## Publishing Your Augmentation (Future) - -### Package Structure -``` -my-augmentation/ -ā”œā”€ā”€ src/ -│ └── index.ts # Your augmentation -ā”œā”€ā”€ dist/ # Built output -ā”œā”€ā”€ tests/ -│ └── augmentation.test.ts -ā”œā”€ā”€ package.json -ā”œā”€ā”€ tsconfig.json -└── README.md -``` - -### package.json -```json -{ - "name": "@mycompany/brainy-custom-augmentation", - "version": "1.0.0", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "keywords": ["brainy-augmentation"], - "peerDependencies": { - "@soulcraft/brainy": ">=2.0.0" - }, - "brainy": { - "type": "augmentation", - "class": "CustomAugmentation", - "timing": "after", - "operations": ["add"], - "priority": 10 - } -} -``` - -### Future: Brain Cloud Registry -```bash -# Coming in 2.1+ -npm run build -npm test -brainy publish # Publishes to brain-cloud registry -``` - ---- - -## FAQ - -### Q: Can I modify the operation result? -**A**: Yes, if `timing: 'before'`, return modified params. If `timing: 'after'`, you can see but not modify results. - -### Q: Can augmentations communicate? -**A**: Yes, through the context: `context.brain.augmentations.get('other-augmentation')` - -### Q: What if my augmentation fails? -**A**: Handle errors internally. Don't break the main operation unless critical. - -### Q: Can I use async operations? -**A**: Yes, everything is async-friendly. - -### Q: How do I access storage directly? -**A**: Through context: `context.brain.storage` (but prefer using brain methods) - ---- - -## Get Help - -- **GitHub**: [github.com/soulcraft/brainy](https://github.com/soulcraft/brainy) -- **Discord**: [discord.gg/brainy](https://discord.gg/brainy) -- **Examples**: See `/examples/augmentations/` in the repo - ---- - -*Start building your augmentation today! The marketplace is coming in 2.1 šŸš€* \ No newline at end of file diff --git a/docs/augmentations/EXAMPLES.md b/docs/augmentations/EXAMPLES.md deleted file mode 100644 index 142f68fd..00000000 --- a/docs/augmentations/EXAMPLES.md +++ /dev/null @@ -1,669 +0,0 @@ -# Augmentation Examples - Import, Store, Export - -This guide shows two complete workflows: -1. **Simple Handler** - Just import a new file type -2. **Full Augmentation** - Import + Store + Export (premium-ready) - ---- - -## Workflow 1: Simple Handler (Import Only) - -**Use case:** You want to import a new file type (e.g., CAD files) into Brainy's knowledge graph. - -### Step 1: Create the Handler - -```typescript -// src/handlers/CADHandler.ts -import { BaseFormatHandler } from '@soulcraft/brainy/augmentations/intelligentImport' -import type { FormatHandlerOptions, ProcessedData } from '@soulcraft/brainy/augmentations/intelligentImport' -import { parseCAD } from 'cad-parser' // Your parsing library - -export class CADHandler extends BaseFormatHandler { - readonly format = 'cad' - - canHandle(data: Buffer | string | { filename?: string; ext?: string }): boolean { - if (typeof data === 'object' && 'filename' in data) { - const mimeType = this.getMimeType(data) - return this.mimeTypeMatches(mimeType, ['image/vnd.dwg', 'image/vnd.dxf']) - } - return false - } - - async process(data: Buffer | string, options: FormatHandlerOptions): Promise { - const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data) - - // Parse CAD file - const cad = await parseCAD(buffer) - - // Extract entities for knowledge graph - const entities = [] - - // Document entity - entities.push({ - type: 'CADDocument', - filename: options.filename, - units: cad.units, - bounds: cad.bounds, - version: cad.version - }) - - // Layer entities - for (const layer of cad.layers) { - entities.push({ - type: 'CADLayer', - name: layer.name, - color: layer.color, - visible: layer.visible - }) - } - - // Object entities - for (const obj of cad.objects) { - entities.push({ - type: 'CADObject', - objectType: obj.type, - layer: obj.layer, - geometry: obj.geometry - }) - } - - return { - format: 'cad', - data: entities, - metadata: { - rowCount: entities.length, - fields: ['type', 'name', 'geometry'], - processingTime: Date.now() - startTime, - layerCount: cad.layers.length, - objectCount: cad.objects.length - }, - filename: options.filename - } - } -} -``` - -### Step 2: Register the Handler - -```typescript -// src/index.ts -import { globalHandlerRegistry } from '@soulcraft/brainy/augmentations/intelligentImport' -import { CADHandler } from './handlers/CADHandler.js' - -// Register handler globally -globalHandlerRegistry.registerHandler({ - name: 'cad', - mimeTypes: ['image/vnd.dwg', 'image/vnd.dxf'], - extensions: ['.dwg', '.dxf', '.dwf'], - loader: async () => new CADHandler() -}) -``` - -### Step 3: Use It - -```typescript -import { Brainy } from '@soulcraft/brainy' - -const brain = new Brainy() -await brain.init() - -// Import CAD file - automatically routed to CADHandler -const result = await brain.import({ - type: 'file', - data: cadFileBuffer, - filename: 'floor-plan.dwg' -}) - -console.log(`Imported ${result.entities.length} CAD entities`) - -// Query the imported data -const layers = await brain.find({ type: 'CADLayer' }) -const objects = await brain.find({ type: 'CADObject', layer: 'WALLS' }) -``` - -**That's it!** Simple handlers just import data. Brainy handles storage automatically. - ---- - -## Workflow 2: Full Augmentation (Import + Store + Export) - -**Use case:** You want a complete solution that imports project files, stores them with special logic, and exports results (e.g., React project analyzer). - -### Step 1: Create the Augmentation - -```typescript -// @yourcompany/brainy-react-analyzer - -import { BaseAugmentation, type AugmentationContext } from '@soulcraft/brainy' -import { BaseFormatHandler } from '@soulcraft/brainy/augmentations/intelligentImport' -import type { ProcessedData } from '@soulcraft/brainy/augmentations/intelligentImport' -import { parse } from '@babel/parser' -import traverse from '@babel/traverse' -import * as t from '@babel/types' - -/** - * React Project Analyzer Augmentation - * - * Features: - * - Import: Parse React components, extract props, hooks, imports - * - Store: Create relationships between components - * - Export: Generate component diagram, dependency graph - */ -export class ReactAnalyzerAugmentation extends BaseAugmentation { - readonly name = 'react-analyzer' - readonly timing = 'before' as const - readonly operations = ['import', 'export'] as any[] - readonly priority = 75 - - private handler: ReactComponentHandler - - constructor(config = {}) { - super(config) - this.handler = new ReactComponentHandler() - } - - async execute( - operation: string, - params: any, - next: () => Promise - ): Promise { - // IMPORT: Parse React files - if (operation === 'import' && this.isReactFile(params)) { - return this.handleImport(params, next) - } - - // EXPORT: Generate diagrams/reports - if (operation === 'export' && params.format === 'react-diagram') { - return this.handleExport(params, next) - } - - return next() - } - - private isReactFile(params: any): boolean { - const filename = params.filename || '' - return ( - (filename.endsWith('.tsx') || filename.endsWith('.jsx')) && - params.data?.includes('React') - ) - } - - private async handleImport(params: any, next: () => Promise): Promise { - // Parse React component - const processed = await this.handler.process(params.data, params.options) - - // Enrich with relationships - params.data = processed.data - params.metadata = { - ...params.metadata, - reactAnalysis: processed.metadata - } - - // Continue to next augmentation/storage - const result = await next() - - // Post-process: Create component relationships - await this.createComponentRelationships(processed, result) - - return result - } - - private async createComponentRelationships( - processed: ProcessedData, - result: any - ): Promise { - const brain = this.getBrain() - if (!brain) return - - // Find the component entity that was created - const component = processed.data.find(d => d.type === 'ReactComponent') - if (!component) return - - // Create relationships for imports - for (const imp of component.imports || []) { - // Find or create imported component - const imported = await brain.findOne({ - type: 'ReactComponent', - name: imp.name - }) - - if (imported) { - // Create "Imports" relationship - await brain.createRelation({ - source: result.entities[0].id, - verb: 'Imports', - target: imported.id, - metadata: { - importPath: imp.path, - importType: imp.type - } - }) - } - } - - // Create relationships for prop types - for (const prop of component.props || []) { - if (prop.typeRef) { - const typeEntity = await brain.findOne({ - type: 'TypeDefinition', - name: prop.typeRef - }) - - if (typeEntity) { - await brain.createRelation({ - source: result.entities[0].id, - verb: 'UsesPropType', - target: typeEntity.id - }) - } - } - } - } - - private async handleExport(params: any, next: () => Promise): Promise { - const brain = this.getBrain() - if (!brain) return next() - - // Query all React components - const components = await brain.find({ type: 'ReactComponent' }) - - // Build dependency graph - const graph = await this.buildDependencyGraph(components) - - // Generate diagram - const diagram = this.generateMermaidDiagram(graph) - - return { - format: 'react-diagram', - diagram, - components: components.length, - dependencies: graph.edges.length - } as T - } - - private async buildDependencyGraph(components: any[]): Promise { - const brain = this.getBrain() - const nodes = components.map(c => ({ - id: c.id, - name: c.name, - props: c.props - })) - - const edges = [] - for (const component of components) { - const imports = await brain.getRelated(component.id, 'Imports') - for (const imp of imports) { - edges.push({ - from: component.id, - to: imp.id, - type: 'imports' - }) - } - } - - return { nodes, edges } - } - - private generateMermaidDiagram(graph: any): string { - let mermaid = 'graph TD\n' - - for (const node of graph.nodes) { - mermaid += ` ${node.id}[${node.name}]\n` - } - - for (const edge of graph.edges) { - mermaid += ` ${edge.from} --> ${edge.to}\n` - } - - return mermaid - } -} - -/** - * React Component Handler - */ -class ReactComponentHandler extends BaseFormatHandler { - readonly format = 'react' - - canHandle(data: any): boolean { - if (typeof data === 'object' && 'filename' in data) { - return data.filename?.match(/\.(tsx|jsx)$/) !== null - } - return false - } - - async process(data: Buffer | string, options: any): Promise { - const code = Buffer.isBuffer(data) ? data.toString('utf-8') : data - - // Parse with Babel - const ast = parse(code, { - sourceType: 'module', - plugins: ['jsx', 'typescript'] - }) - - // Extract component info - const components: any[] = [] - const imports: any[] = [] - const exports: any[] = [] - - traverse(ast, { - // Detect function components - FunctionDeclaration(path) { - if (this.isReactComponent(path.node)) { - components.push({ - type: 'ReactComponent', - name: path.node.id?.name, - componentType: 'function', - props: this.extractProps(path), - hooks: this.extractHooks(path), - state: this.extractState(path) - }) - } - }, - - // Detect class components - ClassDeclaration(path) { - if (this.isReactClassComponent(path.node)) { - components.push({ - type: 'ReactComponent', - name: path.node.id.name, - componentType: 'class', - props: this.extractClassProps(path), - state: this.extractClassState(path), - lifecycle: this.extractLifecycleMethods(path) - }) - } - }, - - // Extract imports - ImportDeclaration(path) { - imports.push({ - type: 'Import', - from: path.node.source.value, - imports: path.node.specifiers.map(s => ({ - name: s.local.name, - imported: t.isImportSpecifier(s) ? s.imported.name : null - })) - }) - }, - - // Extract exports - ExportNamedDeclaration(path) { - exports.push({ - type: 'Export', - name: path.node.declaration?.id?.name - }) - } - }) - - // Enrich components with import info - for (const component of components) { - component.imports = imports - component.exports = exports.find(e => e.name === component.name) - } - - return { - format: 'react', - data: components, - metadata: { - rowCount: components.length, - fields: ['type', 'name', 'props', 'hooks'], - processingTime: Date.now() - startTime, - componentCount: components.length, - importCount: imports.length, - exportCount: exports.length - }, - filename: options.filename - } - } - - private isReactComponent(node: any): boolean { - // Check if function returns JSX - return node.body?.body?.some(stmt => - t.isReturnStatement(stmt) && this.isJSX(stmt.argument) - ) - } - - private isJSX(node: any): boolean { - return t.isJSXElement(node) || t.isJSXFragment(node) - } - - private extractProps(path: any): any[] { - const params = path.node.params - if (params.length === 0) return [] - - const propsParam = params[0] - if (t.isObjectPattern(propsParam)) { - return propsParam.properties.map(p => ({ - name: p.key.name, - type: p.typeAnnotation?.typeAnnotation?.type - })) - } - - return [] - } - - private extractHooks(path: any): string[] { - const hooks: string[] = [] - - path.traverse({ - CallExpression(hookPath) { - const callee = hookPath.node.callee - if (t.isIdentifier(callee) && callee.name.startsWith('use')) { - hooks.push(callee.name) - } - } - }) - - return hooks - } - - private extractState(path: any): any[] { - const stateVars: any[] = [] - - path.traverse({ - CallExpression(hookPath) { - if ( - t.isIdentifier(hookPath.node.callee) && - hookPath.node.callee.name === 'useState' - ) { - const parent = hookPath.parent - if (t.isVariableDeclarator(parent) && t.isArrayPattern(parent.id)) { - const [stateVar] = parent.id.elements - if (t.isIdentifier(stateVar)) { - stateVars.push({ - name: stateVar.name, - initialValue: hookPath.node.arguments[0] - }) - } - } - } - } - }) - - return stateVars - } -} -``` - -### Step 2: Package as NPM Module - -```json -// package.json -{ - "name": "@yourcompany/brainy-react-analyzer", - "version": "1.0.0", - "description": "React project analyzer for Brainy", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "exports": { - ".": { - "import": "./dist/index.js", - "require": "./dist/index.cjs" - } - }, - "keywords": ["brainy", "react", "analyzer", "augmentation"], - "peerDependencies": { - "@soulcraft/brainy": "^5.2.0" - }, - "dependencies": { - "@babel/parser": "^7.23.0", - "@babel/traverse": "^7.23.0", - "@babel/types": "^7.23.0" - } -} -``` - -### Step 3: Use the Augmentation - -```typescript -// Install -// npm install @yourcompany/brainy-react-analyzer - -import { Brainy } from '@soulcraft/brainy' -import { ReactAnalyzerAugmentation } from '@yourcompany/brainy-react-analyzer' - -const brain = new Brainy() - -// Add augmentation -brain.addAugmentation(new ReactAnalyzerAugmentation()) - -await brain.init() - -// Import React project -await brain.import({ - type: 'directory', - path: '/path/to/react-project/src', - recursive: true -}) - -// Query components -const components = await brain.find({ type: 'ReactComponent' }) -console.log(`Found ${components.length} React components`) - -// Find component dependencies -const appComponent = await brain.findOne({ type: 'ReactComponent', name: 'App' }) -const imports = await brain.getRelated(appComponent.id, 'Imports') -console.log(`App component imports:`, imports.map(c => c.name)) - -// Export diagram -const diagram = await brain.export({ - format: 'react-diagram' -}) -console.log(diagram.diagram) // Mermaid diagram -``` - -### Step 4: Premium Licensing (Optional) - -```typescript -// Add license checking -export class ReactAnalyzerAugmentation extends BaseAugmentation { - private licenseKey?: string - - constructor(config: { licenseKey?: string } = {}) { - super(config) - this.licenseKey = config.licenseKey - } - - async onInitialize(): Promise { - if (!this.licenseKey) { - throw new Error('React Analyzer requires a license key. Get one at https://yourcompany.com/brainy-react') - } - - // Verify license - const valid = await this.verifyLicense(this.licenseKey) - if (!valid) { - throw new Error('Invalid license key') - } - - this.log('React Analyzer initialized successfully') - } - - private async verifyLicense(key: string): Promise { - // Check with your license server - const response = await fetch('https://api.yourcompany.com/verify', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ key, product: 'brainy-react-analyzer' }) - }) - - const data = await response.json() - return data.valid - } -} - -// Usage with license -brain.addAugmentation(new ReactAnalyzerAugmentation({ - licenseKey: 'YOUR-LICENSE-KEY' -})) -``` - ---- - -## Comparison: Handler vs Augmentation - -| Feature | Simple Handler | Full Augmentation | -|---------|---------------|-------------------| -| **Import** | āœ… Yes (automatic) | āœ… Yes (with custom logic) | -| **Storage** | āœ… Automatic (Brainy core) | āœ… Custom logic + relationships | -| **Export** | āŒ No | āœ… Yes (custom formats) | -| **Relationships** | āŒ No | āœ… Yes (create custom relationships) | -| **Premium licensing** | āŒ Difficult | āœ… Easy (augmentation-level) | -| **Custom operations** | āŒ Import only | āœ… Any operation | -| **Complexity** | Low (50-100 lines) | Medium (200-500 lines) | - -### When to use Handler: -- Just need to import a new file type -- Don't need custom export -- Don't need special relationships -- Simple use case - -### When to use Augmentation: -- Need import + export workflow -- Need custom relationship logic -- Want premium licensing capability -- Complex business logic -- Multiple operations (import + export + query) - ---- - -## More Examples - -### Example: Python Project Analyzer - -```typescript -class PythonAnalyzerAugmentation extends BaseAugmentation { - // Import Python files, extract classes/functions - // Create relationships between modules - // Export: Dependency diagram, call graph -} -``` - -### Example: Database Schema Sync - -```typescript -class DatabaseSyncAugmentation extends BaseAugmentation { - // Import: Parse SQL schema - // Store: Tables, columns, relationships - // Export: Generate migration scripts -} -``` - -### Example: API Documentation Generator - -```typescript -class APIDocAugmentation extends BaseAugmentation { - // Import: Parse TypeScript types - // Store: Endpoints, parameters, responses - // Export: OpenAPI spec, Markdown docs -} -``` - ---- - -## See Also - -- [FORMAT_HANDLERS.md](./FORMAT_HANDLERS.md) - Creating format handlers -- [AUGMENTATIONS.md](./AUGMENTATIONS.md) - Augmentation system details -- [ImageHandler source](../../src/augmentations/intelligentImport/handlers/imageHandler.ts) - Handler example -- [IntelligentImportAugmentation source](../../src/augmentations/intelligentImport/IntelligentImportAugmentation.ts) - Augmentation example diff --git a/docs/augmentations/FORMAT_HANDLERS.md b/docs/augmentations/FORMAT_HANDLERS.md deleted file mode 100644 index 684d03f8..00000000 --- a/docs/augmentations/FORMAT_HANDLERS.md +++ /dev/null @@ -1,687 +0,0 @@ -# Creating Custom Format Handlers - -**Version:** 5.2.0+ - -Format handlers enable you to import ANY file type into Brainy as structured knowledge graph data. This guide shows how to create custom format handlers for your specific file formats. - ---- - -## Quick Start - -```typescript -import { BaseFormatHandler, globalHandlerRegistry } from '@soulcraft/brainy/augmentations/intelligentImport' -import type { FormatHandlerOptions, ProcessedData } from '@soulcraft/brainy/augmentations/intelligentImport' - -class MyFormatHandler extends BaseFormatHandler { - readonly format = 'myformat' - - canHandle(data: Buffer | string | { filename?: string; ext?: string }): boolean { - // Option 1: Check by MIME type - if (typeof data === 'object' && 'filename' in data) { - const mimeType = this.getMimeType(data) - return this.mimeTypeMatches(mimeType, ['application/x-myformat']) - } - - // Option 2: Check by magic bytes - if (Buffer.isBuffer(data)) { - return data[0] === 0x4D && data[1] === 0x59 // "MY" magic bytes - } - - return false - } - - async process( - data: Buffer | string, - options: FormatHandlerOptions - ): Promise { - // Convert to Buffer - const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data) - - // Parse your format - const parsed = this.parseMyFormat(buffer) - - // Return structured data - return { - format: 'myformat', - data: [ - { - type: 'MyEntity', - name: parsed.name, - metadata: parsed.metadata - } - ], - metadata: { - rowCount: 1, - fields: ['type', 'name', 'metadata'], - processingTime: Date.now() - startTime - } - } - } - - private parseMyFormat(buffer: Buffer): any { - // Your parsing logic here - return { name: 'example', metadata: {} } - } -} - -// Register globally -globalHandlerRegistry.registerHandler({ - name: 'myformat', - mimeTypes: ['application/x-myformat'], - extensions: ['.myf', '.myfmt'], - loader: async () => new MyFormatHandler() -}) -``` - -Now Brainy automatically handles your format: - -```typescript -await brain.import({ - type: 'file', - data: myFormatBuffer, - filename: 'data.myf' -}) -// Automatically routes to MyFormatHandler! -``` - ---- - -## BaseFormatHandler - -All format handlers should extend `BaseFormatHandler`, which provides: - -### MIME Type Detection - -```typescript -protected getMimeType(data: Buffer | string | { filename?: string }): string -``` - -Detects MIME type from filename or buffer. Uses Brainy's comprehensive MIME detection (2000+ types). - -**Example:** -```typescript -const mimeType = this.getMimeType({ filename: 'data.dwg' }) -// Returns: 'image/vnd.dwg' -``` - -### MIME Type Matching - -```typescript -protected mimeTypeMatches(mimeType: string, patterns: string[]): boolean -``` - -Checks if MIME type matches patterns. Supports wildcards (`image/*`). - -**Example:** -```typescript -if (this.mimeTypeMatches(mimeType, ['image/*', 'video/*'])) { - // Handle all images and videos -} -``` - -### Extension Detection - -```typescript -protected detectExtension(data: string | Buffer | { filename?: string; ext?: string }): string | null -``` - -Extracts file extension for fallback detection. - ---- - -## canHandle() Method - -The `canHandle()` method determines if your handler can process the given data. - -### Strategy 1: MIME Type Detection (Recommended) - -```typescript -canHandle(data: Buffer | string | { filename?: string; ext?: string }): boolean { - if (typeof data === 'object' && 'filename' in data) { - const mimeType = this.getMimeType(data) - return this.mimeTypeMatches(mimeType, [ - 'application/x-myformat', - 'application/myformat' - ]) - } - return false -} -``` - -āœ… **Pros:** Automatic, comprehensive, works with 2000+ types -āŒ **Cons:** Requires filename - -### Strategy 2: Magic Byte Detection - -```typescript -canHandle(data: Buffer | string | { filename?: string; ext?: string }): boolean { - if (Buffer.isBuffer(data)) { - // Check magic bytes - return ( - data[0] === 0x50 && // 'P' - data[1] === 0x4B && // 'K' - data[2] === 0x03 && - data[3] === 0x04 // ZIP signature - ) - } - return false -} -``` - -āœ… **Pros:** Works without filename, robust -āŒ **Cons:** Requires knowledge of format structure - -### Strategy 3: Combined Approach - -```typescript -canHandle(data: Buffer | string | { filename?: string; ext?: string }): boolean { - // Try MIME type first - if (typeof data === 'object' && 'filename' in data) { - const mimeType = this.getMimeType(data) - if (this.mimeTypeMatches(mimeType, ['application/x-myformat'])) { - return true - } - } - - // Fallback to magic bytes - if (Buffer.isBuffer(data)) { - return this.checkMagicBytes(data) - } - - return false -} -``` - -āœ… **Pros:** Robust, works in all scenarios -āŒ **Cons:** More complex - ---- - -## process() Method - -The `process()` method extracts structured data from the file. - -### Return Format - -```typescript -interface ProcessedData { - /** Format identifier */ - format: string - - /** Array of extracted entities */ - data: Array> - - /** Metadata about processing */ - metadata: { - rowCount: number - fields: string[] - processingTime: number - [key: string]: any - } - - /** Original filename (optional) */ - filename?: string -} -``` - -### Example: CAD File Handler - -```typescript -async process(data: Buffer | string, options: FormatHandlerOptions): Promise { - const startTime = Date.now() - const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data) - - // Parse CAD file - const cad = await this.parseCAD(buffer) - - // Extract entities - const entities = [] - - // Main CAD document - entities.push({ - type: 'CADDocument', - filename: options.filename, - units: cad.units, - bounds: cad.bounds - }) - - // Layers - for (const layer of cad.layers) { - entities.push({ - type: 'CADLayer', - name: layer.name, - color: layer.color, - visible: layer.visible, - objectCount: layer.objects.length - }) - } - - // Objects - for (const obj of cad.objects) { - entities.push({ - type: 'CADObject', - objectType: obj.type, - layer: obj.layer, - geometry: obj.geometry, - properties: obj.properties - }) - } - - return { - format: 'cad', - data: entities, - metadata: { - rowCount: entities.length, - fields: ['type', 'name', 'geometry', 'properties'], - processingTime: Date.now() - startTime, - layerCount: cad.layers.length, - objectCount: cad.objects.length, - units: cad.units - }, - filename: options.filename - } -} -``` - -### Best Practices - -1. **Always track processing time:** - ```typescript - const startTime = Date.now() - // ... processing ... - metadata.processingTime = Date.now() - startTime - ``` - -2. **Include rich metadata:** - ```typescript - metadata: { - rowCount: entities.length, - fields: ['type', 'name', ...], - processingTime: 123, - // Format-specific metadata - layerCount: 5, - objectCount: 150, - version: '2.0' - } - ``` - -3. **Handle errors gracefully:** - ```typescript - try { - const parsed = this.parse(buffer) - return { format: 'myformat', data: parsed, ... } - } catch (error) { - throw new Error( - `Failed to parse myformat: ${error instanceof Error ? error.message : String(error)}` - ) - } - ``` - -4. **Support progress reporting (optional):** - ```typescript - if (options.progressHooks?.onCurrentItem) { - options.progressHooks.onCurrentItem(`Processing layer ${i}/${total}`) - } - ``` - ---- - -## FormatHandlerRegistry - -### Global Registry - -Use the global registry for application-wide handlers: - -```typescript -import { globalHandlerRegistry } from '@soulcraft/brainy/augmentations/intelligentImport' - -globalHandlerRegistry.registerHandler({ - name: 'myformat', - mimeTypes: ['application/x-myformat'], - extensions: ['.myf'], - loader: async () => new MyFormatHandler() -}) -``` - -### Local Registry - -Create a local registry for scoped handlers: - -```typescript -import { FormatHandlerRegistry } from '@soulcraft/brainy/augmentations/intelligentImport' - -const registry = new FormatHandlerRegistry() -registry.registerHandler({ ... }) -``` - -### Lazy Loading - -Handlers are lazy-loaded for performance: - -```typescript -globalHandlerRegistry.registerHandler({ - name: 'heavy', - mimeTypes: ['application/x-heavy'], - extensions: ['.heavy'], - loader: async () => { - // Only loaded when first needed - const { HeavyHandler } = await import('./HeavyHandler.js') - return new HeavyHandler() - } -}) -``` - -### Getting Handlers - -```typescript -// By filename (automatic MIME detection) -const handler = await registry.getHandler('data.myf') - -// By MIME type -const handler = await registry.getHandlerByMimeType('application/x-myformat') - -// By extension -const handler = await registry.getHandlerByExtension('.myf') - -// By name -const handler = await registry.getHandlerByName('myformat') -``` - ---- - -## Real-World Examples - -### Example 1: Video Metadata Extractor - -```typescript -import { BaseFormatHandler } from '@soulcraft/brainy/augmentations/intelligentImport' -import ffmpeg from 'fluent-ffmpeg' - -class VideoHandler extends BaseFormatHandler { - readonly format = 'video' - - canHandle(data) { - const mimeType = this.getMimeType(data) - return this.mimeTypeMatches(mimeType, ['video/*']) - } - - async process(data, options) { - const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data) - - // Extract video metadata with ffmpeg - const metadata = await this.extractVideoMetadata(buffer) - - return { - format: 'video', - data: [{ - type: 'Video', - duration: metadata.duration, - codec: metadata.codec, - resolution: metadata.resolution, - frameRate: metadata.frameRate, - bitrate: metadata.bitrate, - audioTracks: metadata.audioTracks, - subtitles: metadata.subtitles - }], - metadata: { - rowCount: 1, - fields: ['type', 'duration', 'codec', 'resolution'], - processingTime: metadata.processingTime - } - } - } - - private async extractVideoMetadata(buffer: Buffer) { - // Use ffmpeg to extract metadata - return new Promise((resolve, reject) => { - ffmpeg(buffer) - .ffprobe((err, data) => { - if (err) reject(err) - else resolve(this.parseFFmpegOutput(data)) - }) - }) - } -} -``` - -### Example 2: Git Repository Parser - -```typescript -import { BaseFormatHandler } from '@soulcraft/brainy/augmentations/intelligentImport' -import { simpleGit } from 'simple-git' - -class GitRepoHandler extends BaseFormatHandler { - readonly format = 'git-repo' - - canHandle(data) { - // Check for .git directory - if (typeof data === 'object' && 'filename' in data) { - return data.filename?.includes('.git') || false - } - return false - } - - async process(data, options) { - const repoPath = options.filename || '' - const git = simpleGit(repoPath) - - // Extract commits - const log = await git.log() - const commits = log.all.map(commit => ({ - type: 'GitCommit', - hash: commit.hash, - message: commit.message, - author: commit.author_name, - date: commit.date - })) - - // Extract branches - const branchSummary = await git.branchLocal() - const branches = Object.keys(branchSummary.branches).map(name => ({ - type: 'GitBranch', - name, - current: branchSummary.current === name - })) - - return { - format: 'git-repo', - data: [...commits, ...branches], - metadata: { - rowCount: commits.length + branches.length, - fields: ['type', 'hash', 'message', 'author'], - processingTime: Date.now() - startTime, - commitCount: commits.length, - branchCount: branches.length - } - } - } -} -``` - -### Example 3: Database Schema Importer - -```typescript -import { BaseFormatHandler } from '@soulcraft/brainy/augmentations/intelligentImport' -import { Client } from 'pg' - -class PostgreSQLSchemaHandler extends BaseFormatHandler { - readonly format = 'postgres-schema' - - canHandle(data) { - if (typeof data === 'object' && 'filename' in data) { - return data.filename?.endsWith('.sql') || false - } - return false - } - - async process(data, options) { - const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data) - const sql = buffer.toString('utf-8') - - // Parse SQL or connect to database - const schema = await this.parseSchema(sql) - - const entities = [] - - // Tables - for (const table of schema.tables) { - entities.push({ - type: 'Table', - name: table.name, - schema: table.schema, - columnCount: table.columns.length - }) - - // Columns - for (const column of table.columns) { - entities.push({ - type: 'Column', - name: column.name, - table: table.name, - dataType: column.dataType, - nullable: column.nullable, - primaryKey: column.primaryKey - }) - } - } - - // Foreign keys - for (const fk of schema.foreignKeys) { - entities.push({ - type: 'ForeignKey', - from: `${fk.fromTable}.${fk.fromColumn}`, - to: `${fk.toTable}.${fk.toColumn}` - }) - } - - return { - format: 'postgres-schema', - data: entities, - metadata: { - rowCount: entities.length, - fields: ['type', 'name', 'table', 'dataType'], - processingTime: Date.now() - startTime, - tableCount: schema.tables.length, - columnCount: schema.tables.reduce((sum, t) => sum + t.columns.length, 0), - foreignKeyCount: schema.foreignKeys.length - } - } - } -} -``` - ---- - -## Creating Premium Augmentations - -Package your handler as a premium augmentation: - -```typescript -// @yourcompany/brainy-cad-importer - -import { BaseAugmentation } from '@soulcraft/brainy' -import { CADHandler } from './CADHandler.js' - -export class CADImportAugmentation extends BaseAugmentation { - readonly name = 'cad-import' - readonly timing = 'before' - readonly operations = ['import', 'importFile'] - - private handler: CADHandler - - constructor(config = {}) { - super(config) - this.handler = new CADHandler() - } - - async execute(operation, params, next) { - // Check if this is a CAD file - if (this.isCADFile(params)) { - const processed = await this.handler.process(params.data, params.options) - params.data = processed.data - params.metadata = { ...params.metadata, ...processed.metadata } - } - - return next() - } - - private isCADFile(params: any): boolean { - return this.handler.canHandle(params.data || params) - } -} - -// Usage: -// npm install @yourcompany/brainy-cad-importer -// brain.addAugmentation(new CADImportAugmentation()) -``` - ---- - -## Testing - -```typescript -import { describe, it, expect } from 'vitest' -import { MyFormatHandler } from './MyFormatHandler.js' - -describe('MyFormatHandler', () => { - let handler: MyFormatHandler - - beforeEach(() => { - handler = new MyFormatHandler() - }) - - describe('canHandle', () => { - it('should handle .myf files', () => { - expect(handler.canHandle({ filename: 'data.myf' })).toBe(true) - }) - - it('should handle by MIME type', () => { - expect(handler.canHandle({ filename: 'data.myformat' })).toBe(true) - }) - - it('should reject non-myformat files', () => { - expect(handler.canHandle({ filename: 'data.txt' })).toBe(false) - }) - }) - - describe('process', () => { - it('should extract structured data', async () => { - const testData = Buffer.from('MY format data') - - const result = await handler.process(testData) - - expect(result.format).toBe('myformat') - expect(result.data).toHaveLength(1) - expect(result.metadata.processingTime).toBeGreaterThan(0) - }) - - it('should handle errors gracefully', async () => { - const invalidData = Buffer.from('invalid') - - await expect(handler.process(invalidData)).rejects.toThrow() - }) - }) -}) -``` - ---- - -## Best Practices - -1. **Always extend BaseFormatHandler** - provides MIME detection and utilities -2. **Use MIME types for routing** - automatic, comprehensive, maintainable -3. **Lazy load heavy dependencies** - better performance -4. **Extract rich metadata** - make data queryable in knowledge graph -5. **Handle errors gracefully** - fail fast with clear error messages -6. **Test thoroughly** - test canHandle() and process() with real data -7. **Document your format** - explain what data is extracted and how -8. **Follow ProcessedData format** - ensures compatibility with Brainy - ---- - -## See Also - -- [ImageHandler source](../../src/augmentations/intelligentImport/handlers/imageHandler.ts) - Reference implementation -- [BaseFormatHandler source](../../src/augmentations/intelligentImport/handlers/base.ts) - Base class -- [FormatHandlerRegistry source](../../src/augmentations/intelligentImport/FormatHandlerRegistry.ts) - Registry implementation -- [Augmentations Guide](./AUGMENTATIONS.md) - Creating augmentations diff --git a/docs/augmentations/README.md b/docs/augmentations/README.md deleted file mode 100644 index ee570668..00000000 --- a/docs/augmentations/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# Brainy Augmentations - -Augmentations are the core extensibility mechanism in Brainy. They allow you to modify, enhance, and extend Brainy's behavior without changing the core code. - -## Core Principle: One Interface, Infinite Possibilities - -Every augmentation implements the same simple `BrainyAugmentation` interface: - -```typescript -interface BrainyAugmentation { - name: string - timing: 'before' | 'after' | 'around' | 'replace' - operations: string[] - priority: number - initialize(context): Promise - execute(operation, params, next): Promise -} -``` - -This single interface can handle EVERYTHING - from adding AI capabilities to exposing APIs to replacing storage backends. - -## Available Augmentations - -### 🧠 Data Processing -Augmentations that enhance how data is processed and stored. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **NeuralImportAugmentation** | AI-powered entity and relationship extraction | `before` | āœ… Production | -| **EntityRegistryAugmentation** | High-performance entity deduplication | `before` | āœ… Production | -| **BatchProcessingAugmentation** | Optimizes bulk operations | `around` | āœ… Production | -| **IntelligentVerbScoringAugmentation** | Learns relationship importance over time | `after` | āœ… Production | - -### šŸ”Œ External Connections (Synapses) -Connect Brainy to external services and data sources. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **NotionSynapse** | Sync with Notion databases | `after` | šŸ“ Example | -| **SalesforceSynapse** | Connect to Salesforce CRM | `after` | šŸ“ Example | -| **SlackSynapse** | Import Slack conversations | `after` | šŸ“ Example | -| **GoogleDriveSynapse** | Sync Google Drive documents | `after` | šŸ“ Example | - -### 🌐 API Exposure -Expose Brainy through various protocols. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **APIServerAugmentation** | REST, WebSocket, and MCP server | `after` | āœ… Production | -| **GraphQLAugmentation** | GraphQL API endpoint | `after` | 🚧 Planned | -| **gRPCAugmentation** | gRPC service | `after` | 🚧 Planned | - -### šŸ’¾ Storage Backends -Replace or enhance the storage layer. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **RedisAugmentation** | Redis caching layer | `around` | šŸ“ Example | -| **PostgresAugmentation** | PostgreSQL persistence | `replace` | šŸ“ Example | - -> Brainy 8.0 ships `filesystem` and `memory` adapters out of the box. For off-site backup of the filesystem artifact, snapshot `rootDirectory` from your scheduler (`gsutil rsync`, `aws s3 sync`, `rclone`, `tar`). - -### šŸ”„ Real-time & Sync -Handle real-time updates and synchronization. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **WebSocketConduitAugmentation** | WebSocket client connections | `after` | āš ļø Legacy | -| **ServerSearchAugmentation** | Connect to remote Brainy servers | `after` | āš ļø Legacy | -| **TeamCoordinationAugmentation** | Multi-agent synchronization | `after` | šŸ“ Example | - -### šŸ›”ļø Infrastructure -Core infrastructure and reliability features. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **RequestDeduplicatorAugmentation** | Prevent duplicate concurrent requests | `before` | āœ… Production | -| **TransactionAugmentation** | ACID transaction support | `around` | 🚧 Planned | -| **CacheAugmentation** | Multi-level caching | `around` | āœ… Production | - -### šŸ“Š Monitoring & Analytics -Track and analyze Brainy's behavior. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **MetricsAugmentation** | Prometheus metrics | `after` | šŸ“ Example | -| **LoggingAugmentation** | Structured logging | `after` | šŸ“ Example | -| **TracingAugmentation** | Distributed tracing | `around` | 🚧 Planned | - -### šŸ¤– AI & Chat -AI-powered interfaces and chat capabilities. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **ChatInterfaceAugmentation** | Natural language interface | `before` | šŸ“ Example | -| **MCPAgentMemoryAugmentation** | AI agent memory via MCP | `after` | šŸ“ Example | -| **LLMQueryAugmentation** | LLM-enhanced queries | `before` | šŸ“ Example | - -### šŸ“ˆ Visualization -Visual representations of data. - -| Augmentation | Description | Timing | Status | -|-------------|-------------|--------|--------| -| **GraphVisualizationAugmentation** | Real-time graph visualization | `after` | šŸ“ Example | -| **DashboardAugmentation** | Web-based dashboard | `after` | 🚧 Planned | - -## Status Legend - -- āœ… **Production**: Fully implemented and tested -- šŸ“ **Example**: Example implementation available -- 🚧 **Planned**: On the roadmap -- āš ļø **Legacy**: Being replaced by newer augmentations - -## Using Augmentations - -### Zero-Config Approach - -```typescript -const brain = new Brainy() - -// Just register augmentations - they work automatically! -brain.augmentations.register(new EntityRegistryAugmentation()) -brain.augmentations.register(new APIServerAugmentation()) - -await brain.init() -``` - -### With Configuration - -```typescript -const brain = new Brainy() - -brain.augmentations.register( - new APIServerAugmentation({ - port: 8080, - auth: { required: true } - }) -) - -await brain.init() -``` - -## Creating Custom Augmentations - -See [Creating Custom Augmentations](./creating-augmentations.md) for a complete guide. - -Quick example: - -```typescript -class MyAugmentation extends BaseAugmentation { - readonly name = 'my-augmentation' - readonly timing = 'after' - readonly operations = ['add', 'search'] - readonly priority = 50 - - async execute(operation: string, params: any, next: () => Promise): Promise { - console.log(`Before ${operation}`) - const result = await next() - console.log(`After ${operation}`) - return result - } -} -``` - -## Augmentation Timing - -### `before` -Executes before the main operation. Used for: -- Input validation -- Data transformation -- Authentication checks - -### `after` -Executes after the main operation. Used for: -- Broadcasting updates -- Syncing to external services -- Logging and metrics - -### `around` -Wraps the main operation. Used for: -- Transactions -- Caching -- Error handling - -### `replace` -Completely replaces the main operation. Used for: -- Alternative storage backends -- Mock implementations -- Proxy operations - -## Priority System - -Higher numbers execute first: -- **100**: Critical system operations -- **50**: Performance optimizations -- **10**: Enhancement features -- **1**: Optional features - -## Related Documentation - -- [API Server Augmentation](./api-server.md) - Complete API server documentation -- [Creating Augmentations](./creating-augmentations.md) - How to build your own -- [Augmentation Examples](../AUGMENTATION-EXAMPLES.md) - Real-world examples -- [Architecture Overview](../COMPLETE-ARCHITECTURE-VISION.md) - System architecture \ No newline at end of file diff --git a/docs/augmentations/api-server.md b/docs/augmentations/api-server.md deleted file mode 100644 index aa7973ca..00000000 --- a/docs/augmentations/api-server.md +++ /dev/null @@ -1,429 +0,0 @@ -# API Server Augmentation - -## Overview - -The `APIServerAugmentation` is a powerful augmentation that exposes your Brainy instance through REST, WebSocket, and MCP (Model Context Protocol) APIs. It transforms Brainy into a full-featured API server with zero configuration required. - -## Features - -### 🌐 REST API -Complete CRUD operations and advanced queries through HTTP endpoints. - -### šŸ”Œ WebSocket Server -Real-time bidirectional communication with automatic operation broadcasting. - -### 🧠 MCP Integration -Built-in Model Context Protocol support for AI agent communication. - -### šŸ“Š Operation Broadcasting -Automatically broadcasts all Brainy operations to subscribed WebSocket clients. - -### šŸ”’ Optional Security -Built-in authentication and rate limiting when needed. - -## Installation - -The APIServerAugmentation is included in Brainy core. No additional installation required. - -**Bun** (recommended): No additional dependencies needed - use `Bun.serve()` directly. - -**Node.js**: Install optional Express dependencies: -```bash -npm install express cors ws -``` - -## Zero-Config Usage - -```typescript -import { Brainy } from 'brainy' -import { APIServerAugmentation } from 'brainy/augmentations' - -const brain = new Brainy() - -// Register the API server augmentation -brain.augmentations.register(new APIServerAugmentation()) - -await brain.init() - -// Server is now running at http://localhost:3000 -console.log('API Server ready!') -console.log('REST: http://localhost:3000/api/*') -console.log('WebSocket: ws://localhost:3000/ws') -console.log('MCP: http://localhost:3000/api/mcp') -``` - -## Configuration Options - -While zero-config works great, you can customize the server: - -```typescript -const apiServer = new APIServerAugmentation({ - enabled: true, // Enable/disable the server - port: 3000, // HTTP port - host: '0.0.0.0', // Bind address - - cors: { - origin: '*', // CORS allowed origins - credentials: true // Allow credentials - }, - - auth: { - required: false, // Require authentication - apiKeys: [], // Valid API keys - bearerTokens: [] // Valid bearer tokens - }, - - rateLimit: { - windowMs: 60000, // Rate limit window (ms) - max: 100 // Max requests per window - } -}) -``` - -## REST API Endpoints - -### Health Check -```http -GET /health -``` -Returns server status and basic metrics. - -### Search -```http -POST /api/search -Content-Type: application/json - -{ - "query": "search text", - "limit": 10, - "options": {} -} -``` - -### Add Data -```http -POST /api/add -Content-Type: application/json - -{ - "content": "data to add", - "metadata": { - "key": "value" - } -} -``` - -### Get by ID -```http -GET /api/get/:id -``` - -### Delete -```http -DELETE /api/delete/:id -``` - -### Create Relationship -```http -POST /api/relate -Content-Type: application/json - -{ - "source": "id1", - "target": "id2", - "verb": "relates_to", - "metadata": {} -} -``` - -### Complex Queries -```http -POST /api/find -Content-Type: application/json - -{ - "where": { "type": "document" }, - "like": "machine learning", - "limit": 10 -} -``` - -### Clustering -```http -POST /api/cluster -Content-Type: application/json - -{ - "algorithm": "kmeans", - "options": { - "k": 5 - } -} -``` - -### Statistics -```http -GET /api/stats -``` - -### Operation History -```http -GET /api/history -``` - -## WebSocket API - -### Connection -```javascript -const ws = new WebSocket('ws://localhost:3000/ws') - -ws.onopen = () => { - console.log('Connected to Brainy WebSocket') -} - -ws.onmessage = (event) => { - const msg = JSON.parse(event.data) - console.log('Received:', msg) -} -``` - -### Subscribe to Operations -```javascript -ws.send(JSON.stringify({ - type: 'subscribe', - operations: ['all'] // or specific: ['add', 'search', 'delete'] -})) -``` - -### Search via WebSocket -```javascript -ws.send(JSON.stringify({ - type: 'search', - query: 'your search', - limit: 10, - requestId: 'unique-id' -})) -``` - -### Add Data via WebSocket -```javascript -ws.send(JSON.stringify({ - type: 'add', - content: 'data to add', - metadata: {}, - requestId: 'unique-id' -})) -``` - -### Operation Broadcasts -When subscribed, you'll receive real-time updates: -```javascript -{ - "type": "operation", - "operation": "add", - "params": { /* sanitized parameters */ }, - "timestamp": 1234567890, - "duration": 15 -} -``` - -## MCP (Model Context Protocol) - -The MCP endpoint allows AI agents to interact with Brainy: - -```http -POST /api/mcp -Content-Type: application/json - -{ - "method": "search", - "params": { - "query": "find documents about AI" - } -} -``` - -## Authentication - -When authentication is enabled: - -### API Key -```http -GET /api/stats -X-API-Key: your-api-key -``` - -### Bearer Token -```http -GET /api/stats -Authorization: Bearer your-token -``` - -## Environment Support - -### Bun āœ… (Recommended) -Native performance with Bun.serve() - no Express required. Works with `bun --compile` for single-binary deployment. - -```typescript -// Simple Bun server with Brainy -import { Brainy } from '@soulcraft/brainy' - -const brain = new Brainy() -await brain.init() - -Bun.serve({ - port: 3000, - async fetch(req) { - const url = new URL(req.url) - if (url.pathname === '/api/search') { - const { query } = await req.json() - const results = await brain.search(query) - return Response.json(results) - } - return new Response('Not Found', { status: 404 }) - } -}) -``` - -### Node.js āœ… -Full support with Express, WebSocket, and all features. - -### Deno 🚧 -Planned support using Deno.serve() or oak framework. - -### Browser/Service Worker 🚧 -Planned support for intercepting fetch() calls locally. - -## How It Works - -The APIServerAugmentation hooks into Brainy's augmentation pipeline: - -1. **Timing**: Executes `after` operations complete -2. **Operations**: Monitors `all` operations -3. **Broadcasting**: Sends operation details to subscribed clients -4. **History**: Maintains operation history (last 1000 operations) - -## Example: Multi-Client Sync - -```typescript -// Server -const brain = new Brainy() -brain.augmentations.register(new APIServerAugmentation()) -await brain.init() - -// Client 1 - WebSocket subscriber -const ws1 = new WebSocket('ws://localhost:3000/ws') -ws1.onopen = () => { - ws1.send(JSON.stringify({ - type: 'subscribe', - operations: ['add', 'delete'] - })) -} -ws1.onmessage = (e) => { - console.log('Client 1 received update:', JSON.parse(e.data)) -} - -// Client 2 - REST API user -fetch('http://localhost:3000/api/add', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - content: 'New data', - metadata: { source: 'client2' } - }) -}) -// Client 1 automatically receives notification! -``` - -## Performance Considerations - -- **Operation History**: Limited to last 1000 operations -- **WebSocket Heartbeat**: Every 30 seconds -- **Client Timeout**: 60 seconds of inactivity -- **Parameter Sanitization**: Sensitive fields removed, large content truncated -- **Rate Limiting**: In-memory tracking (use Redis in production) - -## Security Notes - -1. **Default Configuration**: No auth, open CORS - suitable for development -2. **Production**: Enable auth, configure CORS, use HTTPS -3. **Sensitive Data**: Parameters are sanitized before broadcasting -4. **Rate Limiting**: Basic in-memory implementation included - -## Comparison with Previous Implementations - -The APIServerAugmentation unifies and replaces: -- `BrainyMCPBroadcast` - Node-specific WebSocket/HTTP server -- `WebSocketConduitAugmentation` - WebSocket client functionality -- `ServerSearchAugmentations` - Remote Brainy connections - -Benefits of the unified approach: -- Single augmentation for all API needs -- Consistent interface across protocols -- Automatic operation broadcasting -- Environment-aware implementation -- Zero-configuration philosophy - -## Advanced Usage - -### Custom Operation Filtering - -```typescript -class FilteredAPIServer extends APIServerAugmentation { - shouldExecute(operation: string, params: any): boolean { - // Don't broadcast sensitive operations - if (operation === 'delete' && params.sensitive) { - return false - } - return true - } -} -``` - -### Integration with Other Augmentations - -```typescript -const brain = new Brainy() - -// Stack augmentations for complete system -brain.augmentations.register(new EntityRegistryAugmentation()) // Dedup -brain.augmentations.register(new APIServerAugmentation()) // API - -await brain.init() -// All augmentations work together seamlessly! -``` - -## Troubleshooting - -### Server won't start -- Check if port is already in use -- Verify Node.js dependencies are installed: `npm install express cors ws` -- Check console for error messages - -### WebSocket connections drop -- Ensure heartbeat responses are handled -- Check for proxy/firewall issues -- Verify CORS configuration - -### Authentication not working -- Ensure `auth.required` is set to `true` -- Verify API keys or bearer tokens are correctly configured -- Check request headers are properly formatted - -## Future Enhancements - -- [ ] Deno server implementation -- [ ] Service Worker implementation -- [ ] GraphQL endpoint -- [ ] gRPC support -- [ ] Built-in SSL/TLS -- [ ] Redis-based rate limiting -- [ ] Prometheus metrics endpoint -- [ ] OpenAPI/Swagger documentation - -## Related Documentation - -- [Augmentation System Overview](../AUGMENTATION-SYSTEM.md) -- [BrainyAugmentation Interface](./brainy-augmentation.md) -- [MCP Integration](../mcp/README.md) -- [Zero-Config Philosophy](../ZERO-CONFIG.md) \ No newline at end of file diff --git a/docs/concepts/consistency-model.md b/docs/concepts/consistency-model.md index 2634cc9f..709978f9 100644 --- a/docs/concepts/consistency-model.md +++ b/docs/concepts/consistency-model.md @@ -41,7 +41,7 @@ by a dedicated test in `tests/integration/db-mvcc.test.ts`. A **monotonic generation counter** is the store's logical clock: - It advances **once per committed `transact()` batch** and once per - single-operation write (`add`/`update`/`delete`/`relate`/…). + single-operation write (`add`/`update`/`remove`/`relate`/…). - `brain.generation()` reads it; it is persisted in the data directory and **never reissued** — not across restarts, and not across `restore()` (the counter is floored at its pre-restore value). @@ -175,7 +175,7 @@ identical on both paths. ### History granularity — the honest limit Generation *records* are written per `transact()` batch only. -Single-operation writes (`add`/`update`/`delete`/`relate`/… outside +Single-operation writes (`add`/`update`/`remove`/`relate`/… outside `transact()`) advance the generation counter — so watermarks and CAS stay sound — but do **not** stage before-images: they remain visible through earlier pins and are not reported by `db.since()`. Code that needs pinned @@ -284,7 +284,7 @@ enforce the contract: `update({ metadata: { confidence: 0.9 } })` therefore behaves exactly like `update({ confidence: 0.9 })`. 3. **Read time** — every read path (`get`, `find`, `search`, - `getRelations`, batch reads, and historical `asOf()` materialization) + `related`, batch reads, and historical `asOf()` materialization) surfaces reserved fields **only at top level**: `entity.metadata` and `relation.metadata` contain only your custom fields, always. diff --git a/docs/features/v3-features.md b/docs/features/v3-features.md index f8bc9c96..987ae7c4 100644 --- a/docs/features/v3-features.md +++ b/docs/features/v3-features.md @@ -152,7 +152,7 @@ Optimized bulk processing: // Parallel processing with automatic batching await brain.addMany(items) // <10ms per item await brain.updateMany(updates) -await brain.deleteMany(filters) +await brain.removeMany(filters) ``` ### Request Deduplication āœ… diff --git a/docs/guides/framework-integration.md b/docs/guides/framework-integration.md index 23364178..fbd47608 100644 --- a/docs/guides/framework-integration.md +++ b/docs/guides/framework-integration.md @@ -348,7 +348,7 @@ export default function RootLayout({ children }) { import { Brainy } from '@soulcraft/brainy' const brain = new Brainy({ - storage: { type: 'filesystem', path: './data' } + storage: { type: 'filesystem', rootDirectory: './data' } }) await brain.init() @@ -536,12 +536,12 @@ import { Brainy } from '@soulcraft/brainy' export async function generateStaticProps() { const brain = new Brainy({ - storage: { type: 'filesystem', path: './content' } + storage: { type: 'filesystem', rootDirectory: './content' } }) await brain.init() - // Build search index - const allContent = await brain.export() + // Build search index (paginate with { limit, offset } for larger stores) + const allContent = await brain.find({ limit: 1000 }) return { props: { searchIndex: allContent } diff --git a/docs/guides/import-anything.md b/docs/guides/import-anything.md index ca13cf82..afbe9b35 100644 --- a/docs/guides/import-anything.md +++ b/docs/guides/import-anything.md @@ -49,28 +49,23 @@ await brain.import(csv, { format: 'csv' }) ### šŸ“Š Import Excel - Multi-Sheet Support ```javascript -// Import entire Excel workbook +// Import entire Excel workbook — every sheet is processed automatically await brain.import('sales-report.xlsx') // ✨ Processes all sheets, preserves structure, infers types! -// Or specific sheets only +// Mirror the workbook into the VFS, grouped by sheet await brain.import('data.xlsx', { - excelSheets: ['Customers', 'Orders'] + vfsPath: '/imports/data', + groupBy: 'sheet' }) // ✨ Multi-sheet data becomes interconnected entities! ``` ### šŸ“‘ Import PDF - Text & Tables ```javascript -// Import PDF documents +// Import PDF documents — text and tables are extracted automatically await brain.import('research-paper.pdf') // ✨ Extracts text, detects tables, preserves metadata! - -// With table extraction -await brain.import('report.pdf', { - pdfExtractTables: true -}) -// ✨ Converts PDF tables to structured data automatically! ``` ### šŸ“ Import YAML - File or String diff --git a/docs/guides/import-flow.md b/docs/guides/import-flow.md index 9e8f2d70..549bce23 100644 --- a/docs/guides/import-flow.md +++ b/docs/guides/import-flow.md @@ -1173,21 +1173,22 @@ await this.graphIndex.addEdge( ``` **Benefits**: -- **O(1) relationship lookups**: `getRelations(entityId)` is instant +- **O(1) relationship lookups**: `related(entityId)` is instant - **Bidirectional traversal**: Find incoming and outgoing edges - **Type filtering**: Get only `CreatedBy` relationships - **Global statistics**: Count relationships by type **Query Examples**: ```typescript -// What did Mona Lisa create? -const outgoing = await brain.getRelations('ent_mona_lisa_...', { direction: 'outgoing' }) +// What did Mona Lisa create? (outgoing edges) +const outgoing = await brain.related({ from: 'ent_mona_lisa_...' }) -// What created Mona Lisa? -const incoming = await brain.getRelations('ent_mona_lisa_...', { direction: 'incoming' }) +// What created Mona Lisa? (incoming edges) +const incoming = await brain.related({ to: 'ent_mona_lisa_...' }) // Get only CreatedBy relationships -const createdBy = await brain.getRelations('ent_mona_lisa_...', { +const createdBy = await brain.related({ + from: 'ent_mona_lisa_...', type: VerbType.CreatedBy }) ``` diff --git a/docs/guides/import-quick-reference.md b/docs/guides/import-quick-reference.md index 1b0e3b80..5a850a86 100644 --- a/docs/guides/import-quick-reference.md +++ b/docs/guides/import-quick-reference.md @@ -351,7 +351,7 @@ const result = await brain.import(file) const products = await brain.find({ type: 'Product' }) // Get entity relationships -const relations = await brain.getRelations(products[0].id) +const relations = await brain.related(products[0].id) // Search VFS const vfsFiles = await brain.vfs().find(result.vfs.rootPath + '/**/*.json') diff --git a/docs/guides/inspection.md b/docs/guides/inspection.md index 037d93dd..1a32a1f1 100644 --- a/docs/guides/inspection.md +++ b/docs/guides/inspection.md @@ -134,7 +134,7 @@ console.log(health.overall) await reader.close() ``` -Every mutation method (`add`, `update`, `delete`, `relate`, `transact`, +Every mutation method (`add`, `update`, `remove`, `relate`, `transact`, `restore`, ...) throws on a read-only instance with a clear message. ## Backups diff --git a/docs/guides/installation.md b/docs/guides/installation.md index 4a528a67..637af308 100644 --- a/docs/guides/installation.md +++ b/docs/guides/installation.md @@ -5,10 +5,10 @@ public: true category: getting-started template: guide order: 1 -description: Install Brainy with npm, bun, yarn, or pnpm. Works in Node.js 22+, Bun 1.0+, and browser (OPFS). TypeScript included. +description: Install Brainy with npm, bun, yarn, or pnpm. Works in Node.js 22+ and Bun 1.0+ (server-only since 8.0). TypeScript included. next: - getting-started/quick-start - - concepts/zero-config + - guides/storage-adapters --- # Installation @@ -53,28 +53,18 @@ npm install @soulcraft/cortex ```typescript import { Brainy } from '@soulcraft/brainy' -import { registerCortex } from '@soulcraft/cortex' -registerCortex() // activates native acceleration globally - -const brain = new Brainy() -await brain.init() +const brain = new Brainy({ plugins: ['@soulcraft/cortex'] }) +await brain.init() // native providers registered during init ``` Cortex delivers a **5.2x geometric mean speedup** — see [Brainy vs Cortex](/docs/cortex/comparison) for measured benchmarks. -## Browser (OPFS) +## Server-only since 8.0 -Brainy works in the browser using the Origin Private File System: - -```typescript -import { Brainy } from '@soulcraft/brainy' - -const brain = new Brainy({ storage: 'opfs' }) -await brain.init() -``` - -No server required. Data persists across page refreshes in the browser's private storage. +Brainy 8.0 runs on Node.js 22+ and Bun 1.0+. Browser support (OPFS storage, +Web Workers, in-browser WASM embeddings) was removed in 8.0 — the 7.x line +remains available on npm if you need it. ## TypeScript @@ -96,5 +86,4 @@ const id = await brain.add({ ## Next Steps - [Quick Start](/docs/getting-started/quick-start) — build your first knowledge graph in 60 seconds -- [Zero Configuration](/docs/concepts/zero-config) — understand what Brainy auto-detects - [Storage Adapters](/docs/guides/storage-adapters) — choose the right storage for your deployment diff --git a/docs/guides/migrating-to-v4.md b/docs/guides/migrating-to-v4.md index 60aba7cb..e1b07df5 100644 --- a/docs/guides/migrating-to-v4.md +++ b/docs/guides/migrating-to-v4.md @@ -252,7 +252,7 @@ const result = await brain.import('./glossary.xlsx', { // - "part_of" // - "related_to" -const relations = await brain.getRelations({ limit: 100 }) +const relations = await brain.related({ limit: 100 }) const types = new Set(relations.map(r => r.label)) console.log(types) // Set { 'capital_of', 'guards', 'located_in', 'related_to' } diff --git a/docs/guides/neural-api.md b/docs/guides/neural-api.md index c4b9568d..f407756f 100644 --- a/docs/guides/neural-api.md +++ b/docs/guides/neural-api.md @@ -367,5 +367,5 @@ const brain = new Brainy({ ## Next Steps - Explore [Triple Intelligence](../architecture/triple-intelligence.md) for combined vector + graph + metadata queries -- Learn about [Augmentations](../augmentations/README.md) to extend Neural API +- Learn about [Plugins](../PLUGINS.md) to extend Brainy with native providers - See [API Reference](../api/README.md) for complete method documentation \ No newline at end of file diff --git a/docs/guides/storage-adapters.md b/docs/guides/storage-adapters.md index 84cb3d09..4c1e5067 100644 --- a/docs/guides/storage-adapters.md +++ b/docs/guides/storage-adapters.md @@ -8,7 +8,7 @@ order: 2 description: "Two adapters cover every deployment: in-memory for tests + ephemeral workloads, filesystem for everything that needs to persist. Both share one on-disk contract, including generational history and snapshots. Cloud backup is operator tooling, not a built-in adapter." next: - guides/plugins - - concepts/zero-config + - concepts/consistency-model --- # Storage Adapters diff --git a/docs/guides/subtypes-and-facets.md b/docs/guides/subtypes-and-facets.md index 2ebff6e7..7d98117b 100644 --- a/docs/guides/subtypes-and-facets.md +++ b/docs/guides/subtypes-and-facets.md @@ -301,14 +301,14 @@ await brain.relate({ ```typescript // Direct reports — fast path filter (column-store hit, not metadata fallback) -const direct = await brain.getRelations({ +const direct = await brain.related({ from: ceoId, type: VerbType.ReportsTo, subtype: 'direct' }) // Set membership -const allReports = await brain.getRelations({ +const allReports = await brain.related({ from: ceoId, type: VerbType.ReportsTo, subtype: ['direct', 'dotted-line'] @@ -552,8 +552,8 @@ Brainy 8.0 ships: - `brain.relate({ ..., subtype: 'value' })` — write the field - `brain.updateRelation({ id, subtype, type?, weight?, ... })` — change a relationship -- `brain.getRelations({ subtype })` — filter (fast path) -- `brain.getRelations({ subtype: ['a', 'b'] })` — set membership +- `brain.related({ subtype })` — filter (fast path) +- `brain.related({ subtype: ['a', 'b'] })` — set membership - `brain.find({ connected: { via, subtype, depth } })` — traversal filter - `brain.counts.byRelationshipSubtype(verb, subtype?)` — O(1) counts - `brain.counts.topRelationshipSubtypes(verb, n?)` — top N by count diff --git a/docs/transactions.md b/docs/transactions.md index d515e8b0..3ab1ff66 100644 --- a/docs/transactions.md +++ b/docs/transactions.md @@ -23,7 +23,7 @@ Brainy's transaction system provides **atomic operations** with automatic rollba - **Atomicity**: All operations succeed or all rollback - **Consistency**: Indexes and storage remain consistent -- **Automatic**: Transparently used by all `brain.add()`, `brain.update()`, `brain.delete()`, and `brain.relate()` operations +- **Automatic**: Transparently used by all `brain.add()`, `brain.update()`, `brain.remove()`, and `brain.relate()` operations - **Composable**: `brain.transact()` runs a multi-write batch through the same machinery as exactly one atomic commit ## Architecture @@ -296,7 +296,7 @@ await brain.relate({ }) // Delete person (atomic - deletes entity + relationships) -await brain.delete(personId) +await brain.remove(personId) // If delete fails, both entity and relationships remain ``` @@ -363,7 +363,7 @@ for the history-granularity contract. // āœ… Recommended: Use Brainy's API (transactions automatic) await brain.add({ data, type }) await brain.update({ id, data }) -await brain.delete(id) +await brain.remove(id) // āŒ Avoid: Direct storage access bypasses transactions await brain.storage.saveNoun(noun) // No transaction protection @@ -565,4 +565,4 @@ Brainy's transaction system provides **production-ready atomic operations** with - āœ… **Compatible**: Works with all storage adapters and features - āœ… **Coordinated**: Per-entity `ifRev` and whole-store `ifAtGeneration` CAS reject conflicting batches before anything is staged -Start using transactions today - they're already built into `brain.add()`, `brain.update()`, `brain.delete()`, and `brain.relate()` — and reach for `brain.transact()` whenever several writes must land together. +Start using transactions today - they're already built into `brain.add()`, `brain.update()`, `brain.remove()`, and `brain.relate()` — and reach for `brain.transact()` whenever several writes must land together. diff --git a/docs/vfs/README.md b/docs/vfs/README.md index 3bb9b1e1..d0dac6ca 100644 --- a/docs/vfs/README.md +++ b/docs/vfs/README.md @@ -8,7 +8,7 @@ - **[VFS Core](VFS_CORE.md)** - Complete filesystem architecture and API - **[Semantic VFS](SEMANTIC_VFS.md)** - Multi-dimensional file access (6 semantic dimensions) - **[Neural Extraction](NEURAL_EXTRACTION.md)** - AI-powered concept and entity extraction -- **[Examples & Scenarios](VFS_EXAMPLES_SCENARIOS.md)** - Real-world use cases and code +- **[Common Patterns](COMMON_PATTERNS.md)** - Real-world use cases and code - **[VFS API Guide](VFS_API_GUIDE.md)** - Complete API reference ## What is Brainy VFS? diff --git a/docs/vfs/SEMANTIC_VFS.md b/docs/vfs/SEMANTIC_VFS.md index 797f0078..40807d3c 100644 --- a/docs/vfs/SEMANTIC_VFS.md +++ b/docs/vfs/SEMANTIC_VFS.md @@ -400,9 +400,9 @@ Semantic VFS is built on Brainy's Triple Intelligenceā„¢: ### Real Implementations, Zero Mocks Every component uses **production Brainy APIs**: -- `brain.find()` - Real metadata queries (brainy.ts:580) -- `brain.similar()` - Real HNSW search (brainy.ts:680) -- `brain.getRelations()` - Real graph traversal (brainy.ts:803) +- `brain.find()` - Real metadata queries +- `brain.similar()` - Real HNSW search +- `brain.related()` - Real graph traversal - `MetadataIndexManager` - Real B-tree indexes - `GraphAdjacencyIndex` - Real graph storage - `HNSW Index` - Real vector search diff --git a/docs/vfs/TROUBLESHOOTING.md b/docs/vfs/TROUBLESHOOTING.md index f1bbd120..4408ee9a 100644 --- a/docs/vfs/TROUBLESHOOTING.md +++ b/docs/vfs/TROUBLESHOOTING.md @@ -183,7 +183,7 @@ console.log('VFS type:', entity.metadata.vfsType) ### 3. Check Relationships ```javascript const parentId = await vfs.resolvePath('/directory') -const relations = await brain.getRelations({ +const relations = await brain.related({ from: parentId, type: VerbType.Contains }) @@ -246,7 +246,7 @@ const tree = await vfs.getTreeStructure('/', { If you encounter issues not covered here: 1. Check the [VFS API Guide](./VFS_API_GUIDE.md) -2. Review [VFS Examples](./VFS_EXAMPLES_SCENARIOS.md) +2. Review [Common Patterns](./COMMON_PATTERNS.md) 3. Look at [test files](../../tests/vfs/) for working examples 4. Report issues at [GitHub Issues](https://github.com/soulcraftlabs/brainy/issues) diff --git a/docs/vfs/USER_FUNCTIONS.md b/docs/vfs/USER_FUNCTIONS.md deleted file mode 100644 index 84258813..00000000 --- a/docs/vfs/USER_FUNCTIONS.md +++ /dev/null @@ -1,728 +0,0 @@ -# VFS User Functions - Templates and Examples - -This document provides template functions that you can implement for domain-specific needs. These functions combine VFS primitives to solve common problems. - -## Table of Contents -1. [Code Analysis Functions](#code-analysis-functions) -2. [Export Format Functions](#export-format-functions) -3. [Project Management Functions](#project-management-functions) -4. [Creative Writing Functions](#creative-writing-functions) -5. [Game Development Functions](#game-development-functions) - -## Code Analysis Functions - -### Get Dependency Graph -```javascript -/** - * Build a dependency graph for JavaScript/TypeScript projects - */ -async function getDependencyGraph(vfs, srcPath) { - const files = await vfs.readdir(srcPath, { recursive: true }) - const graph = {} - - for (const file of files) { - const filePath = `${srcPath}/${file}` - - // Only process JS/TS files - if (file.match(/\.(js|ts|jsx|tsx)$/)) { - const content = await vfs.readFile(filePath) - const text = content.toString() - - // Parse imports (basic regex, use proper AST parser for production) - const imports = [] - const importRegex = /import\s+.*?\s+from\s+['"](.+?)['"]/g - const requireRegex = /require\(['"](.+?)['"]\)/g - - let match - while ((match = importRegex.exec(text)) !== null) { - imports.push(match[1]) - } - while ((match = requireRegex.exec(text)) !== null) { - imports.push(match[1]) - } - - graph[filePath] = imports - } - } - - return graph -} - -// Use it -const deps = await getDependencyGraph(vfs, '/src') -``` - -### Find Circular Dependencies -```javascript -/** - * Detect circular dependencies in your code - */ -async function findCircularDependencies(vfs, srcPath) { - const graph = await getDependencyGraph(vfs, srcPath) - const cycles = [] - - function detectCycle(node, visited = new Set(), stack = []) { - if (stack.includes(node)) { - const cycleStart = stack.indexOf(node) - cycles.push(stack.slice(cycleStart)) - return - } - - if (visited.has(node)) return - visited.add(node) - stack.push(node) - - const dependencies = graph[node] || [] - for (const dep of dependencies) { - // Resolve relative imports - const resolvedDep = resolvePath(node, dep) - if (graph[resolvedDep]) { - detectCycle(resolvedDep, visited, [...stack]) - } - } - } - - Object.keys(graph).forEach(node => detectCycle(node)) - return cycles -} -``` - -### Find Untested Code -```javascript -/** - * Find source files without corresponding test files - */ -async function findUntestedCode(vfs, srcPath, testPath = null) { - testPath = testPath || srcPath.replace('/src', '/tests') - - const sourceFiles = await vfs.readdir(srcPath, { recursive: true }) - const testFiles = await vfs.readdir(testPath, { recursive: true }).catch(() => []) - - const untestedFiles = [] - - for (const sourceFile of sourceFiles) { - if (!sourceFile.match(/\.(js|ts|jsx|tsx)$/)) continue - - // Look for corresponding test file - const baseName = sourceFile.replace(/\.(js|ts|jsx|tsx)$/, '') - const hasTest = testFiles.some(testFile => - testFile.includes(baseName) && - testFile.match(/\.(test|spec)\.(js|ts|jsx|tsx)$/) - ) - - if (!hasTest) { - untestedFiles.push(`${srcPath}/${sourceFile}`) - } - } - - return untestedFiles -} -``` - -### Find Similar Code (Duplicate Detection) -```javascript -/** - * Find potentially duplicate code using similarity scoring - */ -async function findSimilarCode(vfs, filePath, options = {}) { - const threshold = options.threshold || 0.8 - const searchPath = options.searchPath || '/' - - // Get the reference file content - const referenceContent = await vfs.readFile(filePath) - const referenceText = referenceContent.toString() - - // Use VFS's semantic search - const similar = await vfs.findSimilar(filePath, { - limit: 10, - threshold - }) - - // Additionally, do structural comparison - const results = [] - for (const match of similar) { - const matchContent = await vfs.readFile(match.path) - const matchText = matchContent.toString() - - // Simple line-based similarity (use better algorithms in production) - const similarity = calculateSimilarity(referenceText, matchText) - - if (similarity > threshold) { - results.push({ - path: match.path, - similarity, - semanticScore: match.score - }) - } - } - - return results.sort((a, b) => b.similarity - a.similarity) -} - -function calculateSimilarity(text1, text2) { - // Simple Jaccard similarity on lines - const lines1 = new Set(text1.split('\n').map(l => l.trim()).filter(l => l)) - const lines2 = new Set(text2.split('\n').map(l => l.trim()).filter(l => l)) - - const intersection = new Set([...lines1].filter(x => lines2.has(x))) - const union = new Set([...lines1, ...lines2]) - - return intersection.size / union.size -} -``` - -## Export Format Functions - -### Export to EPUB (for novels) -```javascript -/** - * Export a directory of markdown files to EPUB format - */ -async function exportToEpub(vfs, path, metadata = {}) { - // First get the markdown export - const markdown = await vfs.exportToMarkdown(path) - - // You'll need an EPUB library like epub-gen - const Epub = require('epub-gen') - - // Convert markdown chapters to EPUB format - const chapters = [] - const files = await vfs.readdir(path, { recursive: true }) - - for (const file of files.sort()) { - if (file.endsWith('.md')) { - const content = await vfs.readFile(`${path}/${file}`) - const title = file.replace('.md', '').replace(/-/g, ' ') - - chapters.push({ - title: title, - data: content.toString() - }) - } - } - - const options = { - title: metadata.title || 'My Book', - author: metadata.author || 'Author', - chapters: chapters - } - - return new Epub(options) -} -``` - -### Export to Static Site -```javascript -/** - * Export VFS content to static HTML site - */ -async function exportToStaticSite(vfs, sourcePath, options = {}) { - const json = await vfs.exportToJSON(sourcePath) - const html = [] - - html.push('') - html.push('') - html.push(`${options.title || 'Documentation'}`) - html.push('') - html.push('') - - function renderNode(node, name, depth = 0) { - const indent = ' '.repeat(depth) - - if (node._meta?.type === 'file') { - html.push(`${indent}
`) - html.push(`${indent} ${name}`) - - if (typeof node._content === 'string') { - // Convert markdown to HTML if needed - html.push(`${indent}
${escapeHtml(node._content)}
`) - } - - html.push(`${indent}
`) - } else if (node._meta?.type === 'directory') { - html.push(`${indent}
`) - html.push(`${indent} ${name}`) - - for (const [childName, childNode] of Object.entries(node)) { - if (!childName.startsWith('_')) { - renderNode(childNode, childName, depth + 1) - } - } - - html.push(`${indent}
`) - } - } - - renderNode(json, options.title || 'Root') - - html.push('') - return html.join('\n') -} -``` - -### Export to GraphQL Schema -```javascript -/** - * Generate GraphQL schema from VFS entities - */ -async function exportToGraphQLSchema(vfs) { - const entities = await vfs.listEntities() - const types = new Map() - - // Group entities by type - for (const entity of entities) { - const type = entity.type || 'Unknown' - if (!types.has(type)) { - types.set(type, []) - } - types.get(type).push(entity) - } - - // Generate schema - let schema = 'type Query {\n' - - for (const [typeName, entities] of types) { - schema += ` get${typeName}(id: ID!): ${typeName}\n` - schema += ` list${typeName}s: [${typeName}!]!\n` - } - - schema += '}\n\n' - - // Generate types - for (const [typeName, entities] of types) { - schema += `type ${typeName} {\n` - schema += ' id: ID!\n' - - // Infer fields from first entity - if (entities.length > 0) { - const sample = entities[0] - for (const [key, value] of Object.entries(sample)) { - if (key !== 'id') { - const fieldType = inferGraphQLType(value) - schema += ` ${key}: ${fieldType}\n` - } - } - } - - schema += '}\n\n' - } - - return schema -} -``` - -## Project Management Functions - -### Get Project Insights -```javascript -/** - * Analyze project for insights and patterns - */ -async function getProjectInsights(vfs, projectPath) { - const stats = await vfs.getProjectStats(projectPath) - const todos = await vfs.getAllTodos(projectPath) - const timeline = await vfs.getTimeline({ limit: 100 }) - - // Analyze activity patterns - const activityByDay = {} - const activityByUser = {} - const activityByFile = {} - - for (const event of timeline) { - const day = event.timestamp.toISOString().split('T')[0] - activityByDay[day] = (activityByDay[day] || 0) + 1 - - const user = event.user || 'system' - activityByUser[user] = (activityByUser[user] || 0) + 1 - - activityByFile[event.path] = (activityByFile[event.path] || 0) + 1 - } - - // Find hotspots (most edited files) - const hotspots = Object.entries(activityByFile) - .sort(([,a], [,b]) => b - a) - .slice(0, 10) - .map(([path, count]) => ({ path, edits: count })) - - // Todo analysis - const todosByPriority = {} - const todosByStatus = {} - - for (const todo of todos) { - todosByPriority[todo.priority] = (todosByPriority[todo.priority] || 0) + 1 - todosByStatus[todo.status] = (todosByStatus[todo.status] || 0) + 1 - } - - return { - stats, - activity: { - byDay: activityByDay, - byUser: activityByUser, - hotspots - }, - todos: { - total: todos.length, - byPriority: todosByPriority, - byStatus: todosByStatus, - highPriority: todos.filter(t => t.priority === 'high' && t.status === 'pending') - }, - recommendations: generateRecommendations(stats, todos, hotspots) - } -} - -function generateRecommendations(stats, todos, hotspots) { - const recommendations = [] - - if (stats.largestFile && stats.largestFile.size > 1024 * 1024) { - recommendations.push({ - type: 'refactor', - message: `Consider splitting ${stats.largestFile.path} (${Math.round(stats.largestFile.size / 1024)}KB)` - }) - } - - if (todos.filter(t => t.priority === 'high' && t.status === 'pending').length > 5) { - recommendations.push({ - type: 'priority', - message: 'You have many high-priority pending todos' - }) - } - - if (hotspots.length > 0 && hotspots[0].edits > 50) { - recommendations.push({ - type: 'stability', - message: `${hotspots[0].path} changes frequently, consider stabilizing` - }) - } - - return recommendations -} -``` - -### Generate Sprint Report -```javascript -/** - * Generate a report for the current sprint - */ -async function generateSprintReport(vfs, sprintStart, sprintEnd = new Date()) { - const timeline = await vfs.getTimeline({ - from: sprintStart, - to: sprintEnd - }) - - const todos = await vfs.getAllTodos() - - // Group work by user - const workByUser = {} - for (const event of timeline) { - const user = event.user || 'system' - if (!workByUser[user]) { - workByUser[user] = { - commits: 0, - filesModified: new Set(), - linesChanged: 0 - } - } - - workByUser[user].commits++ - workByUser[user].filesModified.add(event.path) - } - - // Calculate completion rate - const completedTodos = todos.filter(t => t.status === 'completed').length - const totalTodos = todos.length - const completionRate = totalTodos > 0 ? (completedTodos / totalTodos * 100).toFixed(1) : 0 - - return { - period: { - start: sprintStart, - end: sprintEnd, - days: Math.ceil((sprintEnd - sprintStart) / (1000 * 60 * 60 * 24)) - }, - team: Object.entries(workByUser).map(([user, work]) => ({ - user, - commits: work.commits, - filesModified: work.filesModified.size - })), - todos: { - completed: completedTodos, - total: totalTodos, - completionRate: `${completionRate}%`, - remaining: todos.filter(t => t.status === 'pending') - }, - velocity: { - commitsPerDay: (timeline.length / 7).toFixed(1), - todosPerDay: (completedTodos / 7).toFixed(1) - } - } -} -``` - -## Creative Writing Functions - -### Track Character Arcs -```javascript -/** - * Track how characters evolve throughout a story - */ -async function trackCharacterArc(vfs, characterName, storyPath = '/') { - // Find the character entity - const entities = await vfs.searchEntities({ - type: 'character', - name: characterName - }) - - if (entities.length === 0) { - throw new Error(`Character ${characterName} not found`) - } - - const character = entities[0] - const occurrences = await vfs.findEntityOccurrences(character.id) - - // Analyze each appearance - const arc = [] - - for (const occurrence of occurrences) { - const content = await vfs.readFile(occurrence.path) - const text = content.toString() - - // Find mentions of the character (basic approach) - const mentions = text.split('\n').filter(line => - line.toLowerCase().includes(characterName.toLowerCase()) - ) - - arc.push({ - chapter: occurrence.path, - mentions: mentions.length, - // Analyze emotional tone (simplified) - mood: analyzeMood(mentions), - // Extract key actions - actions: extractActions(mentions, characterName) - }) - } - - return { - character: character.metadata, - arc: arc, - summary: summarizeArc(arc) - } -} - -function analyzeMood(mentions) { - const positiveWords = ['smiled', 'laughed', 'happy', 'joy', 'love', 'success'] - const negativeWords = ['cried', 'angry', 'sad', 'fear', 'fail', 'death'] - - let positive = 0, negative = 0 - - for (const mention of mentions) { - const lower = mention.toLowerCase() - positive += positiveWords.filter(w => lower.includes(w)).length - negative += negativeWords.filter(w => lower.includes(w)).length - } - - if (positive > negative) return 'positive' - if (negative > positive) return 'negative' - return 'neutral' -} -``` - -### Generate Story Bible -```javascript -/** - * Create a comprehensive reference for your story universe - */ -async function generateStoryBible(vfs, storyPath) { - const characters = await vfs.listEntities({ type: 'character' }) - const locations = await vfs.listEntities({ type: 'location' }) - const concepts = await vfs.findConcepts({ domain: 'narrative' }) - - const bible = { - title: 'Story Bible', - generated: new Date(), - characters: {}, - locations: {}, - plotThreads: {}, - timeline: [] - } - - // Document characters - for (const char of characters) { - const occurrences = await vfs.findEntityOccurrences(char.id) - bible.characters[char.metadata.name] = { - ...char.metadata, - appearances: occurrences.map(o => o.path), - relationships: await vfs.getEntityGraph(char.id, { depth: 1 }) - } - } - - // Document locations - for (const loc of locations) { - bible.locations[loc.metadata.name] = { - ...loc.metadata, - scenes: await vfs.findEntityOccurrences(loc.id) - } - } - - // Plot threads from concepts - for (const concept of concepts) { - if (concept.type === 'plot') { - bible.plotThreads[concept.name] = { - description: concept.description, - keywords: concept.keywords, - chapters: await vfs.findByConcept(concept.name) - } - } - } - - // Generate timeline - const events = await vfs.getTimeline({ limit: 1000 }) - bible.timeline = events.map(e => ({ - date: e.timestamp, - event: e.description, - chapter: e.path - })) - - return bible -} -``` - -## Game Development Functions - -### Validate Game Data -```javascript -/** - * Validate game configuration files for consistency - */ -async function validateGameData(vfs, gamePath) { - const errors = [] - const warnings = [] - - // Load all game data - const gameData = await vfs.exportToJSON(gamePath) - - // Check quest references - if (gameData.quests) { - for (const [questName, quest] of Object.entries(gameData.quests)) { - // Check NPC references - if (quest._content?.questGiver) { - const npcPath = `${gamePath}/npcs/${quest._content.questGiver}.json` - const exists = await vfs.exists(npcPath) - if (!exists) { - errors.push(`Quest ${questName} references missing NPC: ${quest._content.questGiver}`) - } - } - - // Check item rewards - if (quest._content?.rewards?.items) { - for (const item of quest._content.rewards.items) { - const itemPath = `${gamePath}/items/${item}.json` - const exists = await vfs.exists(itemPath) - if (!exists) { - warnings.push(`Quest ${questName} rewards missing item: ${item}`) - } - } - } - } - } - - // Check balance - if (gameData.items) { - const itemPowers = [] - for (const [itemName, item] of Object.entries(gameData.items)) { - if (item._content?.stats) { - const totalPower = Object.values(item._content.stats) - .reduce((a, b) => a + b, 0) - itemPowers.push({ name: itemName, power: totalPower }) - } - } - - // Find outliers - const avgPower = itemPowers.reduce((a, b) => a + b.power, 0) / itemPowers.length - const outliers = itemPowers.filter(i => Math.abs(i.power - avgPower) > avgPower * 2) - - for (const outlier of outliers) { - warnings.push(`Item ${outlier.name} may be imbalanced (power: ${outlier.power}, avg: ${avgPower})`) - } - } - - return { errors, warnings, valid: errors.length === 0 } -} -``` - -### Generate Loot Tables -```javascript -/** - * Generate weighted loot tables from item definitions - */ -async function generateLootTables(vfs, itemsPath) { - const items = await vfs.exportToJSON(itemsPath) - const tables = { - common: [], - uncommon: [], - rare: [], - epic: [], - legendary: [] - } - - for (const [itemName, item] of Object.entries(items)) { - if (item._meta?.type === 'file' && item._content?.rarity) { - const entry = { - name: itemName.replace('.json', ''), - weight: getWeight(item._content.rarity), - data: item._content - } - - tables[item._content.rarity.toLowerCase()].push(entry) - } - } - - // Normalize weights - for (const table of Object.values(tables)) { - const totalWeight = table.reduce((a, b) => a + b.weight, 0) - for (const entry of table) { - entry.probability = (entry.weight / totalWeight * 100).toFixed(2) + '%' - } - } - - return tables -} - -function getWeight(rarity) { - const weights = { - common: 100, - uncommon: 50, - rare: 20, - epic: 5, - legendary: 1 - } - return weights[rarity.toLowerCase()] || 10 -} -``` - -## Using These Functions - -All these functions are templates that you can customize for your specific needs. To use them: - -1. Copy the function you need -2. Modify it for your specific requirements -3. Use it with your VFS instance: - -```javascript -import { Brainy } from '@soulcraft/brainy' - -// Initialize VFS -const brain = new Brainy() -await brain.init() -const vfs = brain.vfs() -await vfs.init() - -// Use your custom function -const insights = await getProjectInsights(vfs, '/my-project') -console.log(insights.recommendations) - -// Combine multiple functions -const deps = await getDependencyGraph(vfs, '/src') -const cycles = await findCircularDependencies(vfs, '/src') -const untested = await findUntestedCode(vfs, '/src', '/tests') -``` - -Remember: These are starting points. The power of VFS is that you can combine its primitives to build exactly what you need for your domain! \ No newline at end of file diff --git a/docs/vfs/VFS_EXAMPLES_SCENARIOS.md b/docs/vfs/VFS_EXAMPLES_SCENARIOS.md deleted file mode 100644 index 345b8aca..00000000 --- a/docs/vfs/VFS_EXAMPLES_SCENARIOS.md +++ /dev/null @@ -1,684 +0,0 @@ -# VFS Examples and Scenarios - -> **āš ļø DOCUMENTATION IN PROGRESS**: This document is being updated to reflect recent VFS architecture changes. Many examples below reference deprecated Knowledge Layer methods. Updated examples coming soon. For current VFS capabilities, see [VFS_CORE.md](./VFS_CORE.md) and [SEMANTIC_VFS.md](./SEMANTIC_VFS.md). - -## Real-World Scenarios - -This document demonstrates how VFS enables powerful real-world applications with semantic search, relationships, and AI-powered concept extraction. - -### Legend -- āœ… **Real VFS methods** - Fully implemented and working -- šŸ“ **User functions** - Templates available in [USER_FUNCTIONS.md](./USER_FUNCTIONS.md) -- šŸ”® **Future features** - Not yet available (AI augmentations) - -**Note:** All āœ… marked methods are production-ready. For šŸ“ methods, see USER_FUNCTIONS.md for implementation templates. - -## Scenario 1: Collaborative Novel Writing - -Multiple authors working on a shared universe with recurring characters and locations. - -```javascript -import { Brainy } from '@soulcraft/brainy' - -async function novelWritingProject() { - const brain = new Brainy({ storage: { type: 'file', path: './novel-data' } }) - await brain.init() - - const vfs = brain.vfs() - await vfs.init() - - // Create project structure āœ… - await vfs.mkdir('/novel') - await vfs.mkdir('/novel/chapters') - await vfs.mkdir('/novel/characters') - await vfs.mkdir('/novel/worldbuilding') - - // Define main characters as files with rich metadata āœ… - await vfs.writeFile('/novel/characters/elena-blackwood.md', ` -# Elena Blackwood - -A skilled detective with a mysterious past. - -## Character Profile -- Age: 32 -- Occupation: Private Investigator -- Skills: Deduction, combat, languages -- Personality: Determined, secretive, compassionate -`, { - metadata: { - characterType: 'protagonist', - tags: ['detective', 'mysterious', 'protagonist'] - } - }) - - await vfs.writeFile('/novel/characters/marcus-void.md', ` -# Marcus Void - description: 'A wealthy industrialist with dark secrets', - attributes: { - age: 45, - occupation: 'CEO of Void Industries', - traits: ['ruthless', 'charismatic', 'brilliant'] - } - }) - - // Create location entities - const city = await vfs.createEntity({ - name: 'Neo Tokyo', - type: 'location', - description: 'A sprawling cyberpunk metropolis', - attributes: { - population: '40 million', - districts: ['Shibuya-5', 'Crypto Quarter', 'Old Town'], - atmosphere: 'neon-lit, rain-soaked, vertical' - } - }) - - // Link entities āœ… - await vfs.linkEntities(protagonist.id, city.id, 'lives_in') - await vfs.linkEntities(protagonist.id, antagonist.id, 'investigates') - - // Write chapters with automatic entity tracking - await vfs.writeFile('/novel/chapters/chapter1.md', ` - # Chapter 1: Rain in Neo Tokyo - - Elena Blackwood stood at the edge of Shibuya-5, watching the rain cascade down - the neon-lit towers. The case file on Marcus Void burned in her pocket. - - She had been tracking Void Industries for months, following a trail of - disappeared scientists and mysterious experiments. Tonight, she would finally - infiltrate the Crypto Quarter facility. - `) - - // Multiple authors can work simultaneously āœ… - vfs.setUser('author-alice') - await vfs.writeFile('/novel/chapters/chapter2.md', ` - # Chapter 2: The Void Industries Tower - - Marcus Void gazed down at Neo Tokyo from his penthouse office. Somewhere - in those rain-slicked streets, Elena Blackwood was hunting him... - `) - - vfs.setUser('author-bob') - await vfs.appendFile('/novel/chapters/chapter2.md', ` - - He smiled. Let her come. The trap was already set. - `) - - // Track character appearances across chapters āœ… - const elenaAppearances = await vfs.findEntityOccurrences(protagonist.id) - console.log('Elena appears in:', elenaAppearances.map(f => f.path)) - - // Find all locations mentioned āœ… - const locations = await vfs.listEntities({ type: 'location' }) - - // Generate character relationship graph āœ… - const relationships = await vfs.getEntityGraph(protagonist.id, { depth: 2 }) - - // Track plot threads using concepts āœ… - await vfs.createConcept({ - name: 'The Void Conspiracy', - type: 'plot', - domain: 'narrative', - description: 'The main mystery involving disappeared scientists', - keywords: ['scientists', 'experiments', 'void industries', 'conspiracy'] - }) - - // Find all chapters related to the conspiracy āœ… - const conspiracyChapters = await vfs.findByConcept('The Void Conspiracy') - - // Version control for revisions āœ… - const chapterVersions = await vfs.getVersions('/novel/chapters/chapter1.md') - - // Collaborative editing history āœ… - const history = await vfs.getCollaborationHistory('/novel/chapters/chapter2.md') - console.log('Chapter 2 edited by:', history.map(h => h.user)) - - // Export for publishing āœ… - const manuscript = await vfs.exportToMarkdown('/novel/chapters') - - await vfs.close() - await brain.close() -} -``` - -## Scenario 2: Video Game Development - -Game developers creating a complex RPG with quests, items, and NPCs. - -```javascript -async function gameDevProject() { - const brain = new Brainy({ storage: { type: 's3', bucket: 'game-assets' } }) - await brain.init() - - const vfs = brain.vfs() - await vfs.init() - - // Game project structure - await vfs.mkdir('/game') - await vfs.mkdir('/game/scripts') - await vfs.mkdir('/game/assets') - await vfs.mkdir('/game/quests') - await vfs.mkdir('/game/npcs') - await vfs.mkdir('/game/items') - - // Define game systems as concepts - await vfs.createConcept({ - name: 'Combat System', - type: 'system', - domain: 'gameplay', - keywords: ['damage', 'health', 'attacks', 'defense'] - }) - - await vfs.createConcept({ - name: 'Quest System', - type: 'system', - domain: 'gameplay', - keywords: ['objectives', 'rewards', 'dialogue', 'progression'] - }) - - // Create NPC entities - const questGiver = await vfs.createEntity({ - name: 'Elder Sage', - type: 'npc', - description: 'Wise old man who gives the main quest', - attributes: { - location: 'Village Square', - questsOffered: ['The Ancient Artifact', 'Lost Knowledge'], - dialogue: { - greeting: "Welcome, young adventurer...", - questStart: "I have a task of great importance..." - } - } - }) - - // Create item entities - const artifact = await vfs.createEntity({ - name: 'Crystal of Power', - type: 'item', - description: 'A legendary artifact with immense magical power', - attributes: { - rarity: 'Legendary', - stats: { magic: 100, wisdom: 50 }, - questItem: true, - lore: 'Forged in the age of dragons...' - } - }) - - // Write quest scripts - await vfs.writeFile('/game/quests/main_quest.json', JSON.stringify({ - id: 'main_quest_01', - name: 'The Ancient Artifact', - description: 'Retrieve the Crystal of Power from the Dark Tower', - objectives: [ - { id: 'obj_1', description: 'Speak to the Elder Sage' }, - { id: 'obj_2', description: 'Travel to the Dark Tower' }, - { id: 'obj_3', description: 'Defeat the Guardian' }, - { id: 'obj_4', description: 'Retrieve the Crystal of Power' } - ], - rewards: { - experience: 5000, - gold: 1000, - items: ['Crystal of Power'] - } - }, null, 2)) - - // Link quest elements - await vfs.linkEntities(questGiver.id, 'main_quest_01', 'gives_quest') - await vfs.linkEntities('main_quest_01', artifact.id, 'rewards_item') - - // Combat script with system tracking - await vfs.writeFile('/game/scripts/combat.js', ` - class CombatSystem { - calculateDamage(attacker, defender) { - const baseDamage = attacker.stats.attack - const defense = defender.stats.defense - return Math.max(1, baseDamage - defense) - } - - executeAttack(attacker, defender) { - const damage = this.calculateDamage(attacker, defender) - defender.health -= damage - return { damage, remaining: defender.health } - } - } - - export default CombatSystem - `) - - // Asset management āœ… - await vfs.writeFile('/game/assets/sprites/elder_sage.png', spriteData) - await vfs.setMetadata('/game/assets/sprites/elder_sage.png', { - dimensions: '64x64', - animations: ['idle', 'talking'], - artist: 'Alice', - license: 'CC-BY-4.0' - }) - - // Track dependencies āœ… - await vfs.addRelationship('/game/quests/main_quest.json', '/game/npcs/elder_sage.json', 'uses') - await vfs.addRelationship('/game/scripts/combat.js', '/game/systems/stats.js', 'imports') - - // Find all content related to combat āœ… - const combatFiles = await vfs.findByConcept('Combat System') - - // Get all NPCs in a specific location āœ… - const villageNPCs = await vfs.searchEntities({ - type: 'npc', - where: { 'attributes.location': 'Village Square' } - }) - - // Track game balance changes — read the file as it was a week ago āœ… - const lastWeek = await brain.asOf(new Date(Date.now() - 7 * 86_400_000)) - const oldBalance = await lastWeek.find({ where: { path: '/game/data/balance.json' }, limit: 1 }) - await lastWeek.release() - - // Collaborative development tracking āœ… - await vfs.addTodo('/game/quests/main_quest.json', { - task: 'Add voice dialogue triggers', - priority: 'medium', - status: 'pending', - assignee: 'audio-team' - }) - - // Export for build system āœ… - const gameData = await vfs.exportToJSON('/game') - - await vfs.close() - await brain.close() -} -``` - -## Scenario 3: Software Development Project - -Building a web application with full project management. - -```javascript -async function softwareProject() { - const brain = new Brainy({ storage: { type: 'r2', bucket: 'project-files' } }) - await brain.init() - - const vfs = brain.vfs() - await vfs.init() - - // Import existing git repository āœ… - await vfs.importFromGit('/local/repos/webapp', '/project') - - // Define architectural concepts - await vfs.createConcept({ - name: 'Authentication', - type: 'architecture', - domain: 'backend', - keywords: ['jwt', 'login', 'session', 'oauth'], - relatedConcepts: ['Security', 'User Management'] - }) - - await vfs.createConcept({ - name: 'State Management', - type: 'architecture', - domain: 'frontend', - keywords: ['redux', 'context', 'store', 'actions'] - }) - - // Write source code - await vfs.writeFile('/project/src/auth/login.ts', ` - import { User } from '../models/User' - import { generateJWT } from '../utils/jwt' - - export async function login(email: string, password: string): Promise { - const user = await User.findByEmail(email) - - if (!user || !user.verifyPassword(password)) { - throw new Error('Invalid credentials') - } - - return generateJWT(user.id) - } - `) - - // Track imports and dependencies - await vfs.addRelationship('/project/src/auth/login.ts', '/project/src/models/User.ts', 'imports') - await vfs.addRelationship('/project/src/auth/login.ts', '/project/src/utils/jwt.ts', 'imports') - - // Add inline TODOs - await vfs.addTodo('/project/src/auth/login.ts', { - task: 'Add rate limiting', - priority: 'high', - status: 'pending', - assignee: 'security-team', - due: '2025-02-01' - }) - - await vfs.addTodo('/project/src/auth/login.ts', { - task: 'Implement OAuth providers', - priority: 'medium', - status: 'in_progress', - assignee: 'backend-team' - }) - - // Configuration files - await vfs.writeFile('/project/config/database.json', JSON.stringify({ - development: { - host: 'localhost', - port: 5432, - database: 'webapp_dev' - }, - production: { - host: '${DB_HOST}', - port: 5432, - database: 'webapp_prod' - } - }, null, 2)) - - // Set security metadata - await vfs.setMetadata('/project/config/database.json', { - sensitive: true, - environment: 'all', - lastReviewed: '2025-01-15', - reviewer: 'security-team' - }) - - // Tests with relationship to source - await vfs.writeFile('/project/tests/auth/login.test.ts', ` - import { login } from '../../src/auth/login' - - describe('Authentication', () => { - test('valid login returns JWT', async () => { - const token = await login('user@example.com', 'password') - expect(token).toBeDefined() - }) - }) - `) - - await vfs.addRelationship('/project/tests/auth/login.test.ts', '/project/src/auth/login.ts', 'tests') - - // Documentation - await vfs.writeFile('/project/docs/API.md', ` - # API Documentation - - ## Authentication - - ### POST /api/login - Authenticates a user and returns a JWT token. - - **Request:** - \`\`\`json - { - "email": "user@example.com", - "password": "secret" - } - \`\`\` - `) - - // Find all files needing security review āœ… - const securityFiles = await vfs.search('authentication password jwt oauth', { - path: '/project/src', - type: 'file' - }) - - // Get project insights šŸ“ (see USER_FUNCTIONS.md for getProjectInsights) - const insights = await getProjectInsights(vfs, '/project') // User function - console.log('Most modified files:', insights.hotspots) - console.log('Key concepts:', insights.concepts) - console.log('Team activity:', insights.contributors) - - // Find circular dependencies šŸ“ (see USER_FUNCTIONS.md) - const circularDeps = await findCircularDependencies(vfs, '/project/src') // User function - - // Get test coverage relationships šŸ“ (see USER_FUNCTIONS.md) - const untested = await findUntestedCode(vfs, '/project/src') // User function - - // Track technical debt āœ… - const todos = await vfs.getAllTodos('/project') - const highPriorityDebt = todos.filter(t => t.priority === 'high' && t.status === 'pending') - - // Generate dependency graph šŸ“ (see USER_FUNCTIONS.md) - const depGraph = await getDependencyGraph(vfs, '/project/src') // User function - - // Find similar code (potential refactoring) šŸ“ (see USER_FUNCTIONS.md) - const similarCode = await findSimilarCode(vfs, '/project/src/auth/login.ts', { - threshold: 0.8, - minLines: 10 - }) // User function - - // Export for CI/CD āœ… (Knowledge Layer provides wrapper) - await vfs.exportToGit('/project', '/tmp/build-output') - - // Collaborative features āœ… / šŸ”® - vfs.setUser('developer-alice') // āœ… Real method - // const conflicts = await vfs.detectConflicts('/project/src/auth/login.ts') // šŸ”® Future feature - - await vfs.close() - await brain.close() -} -``` - -## Scenario 4: Multi-Project Knowledge Base - -All projects in one Brainy instance, sharing concepts and cross-referencing. - -```javascript -async function unifiedKnowledgeBase() { - const brain = new Brainy({ - storage: { type: 'file', path: './knowledge-base' } - }) - await brain.init() - - const vfs = brain.vfs() - await vfs.init() - - // Create separate project spaces - await vfs.mkdir('/novel') - await vfs.mkdir('/game') - await vfs.mkdir('/webapp') - - // Shared universe - characters appear in both novel and game - const sharedCharacter = await vfs.createEntity({ - name: 'Elena Blackwood', - type: 'character', - description: 'Protagonist appearing in multiple works' - }) - - // Novel chapter mentioning Elena - await vfs.writeFile('/novel/chapter1.md', ` - Elena Blackwood stood at the edge of the digital void... - `) - - // Game script featuring Elena as NPC - await vfs.writeFile('/game/npcs/elena.json', JSON.stringify({ - name: 'Elena Blackwood', - type: 'ally', - dialogue: ['I\'ve seen this before in my world...'] - })) - - // Web app has Elena as example user - await vfs.writeFile('/webapp/seeds/users.json', JSON.stringify([{ - name: 'Elena Blackwood', - email: 'elena@example.com', - role: 'detective' - }])) - - // Cross-project entity tracking āœ… - const elenaOccurrences = await vfs.findEntityOccurrences(sharedCharacter.id) - console.log('Elena appears across projects:', elenaOccurrences) - - // Shared technical concepts - const authConcept = await vfs.createConcept({ - name: 'Authentication', - type: 'technical', - domain: 'software' - }) - - // Find auth implementations across all projects āœ… - const authImplementations = await vfs.findByConcept('Authentication') - // Returns: /webapp/src/auth.js, /game/scripts/player-auth.js, etc. - - // Cross-project relationships āœ… - await vfs.addRelationship('/novel/chapter1.md', '/game/story/intro.txt', 'inspires') - await vfs.addRelationship('/game/npcs/elena.json', '/novel/characters/elena.md', 'based_on') - - // Universal search across all projects āœ… - const results = await vfs.search('Elena Blackwood authentication', { - path: '/', - recursive: true - }) - - // Project statistics šŸ“ (see USER_FUNCTIONS.md for getProjectStats) - const novelStats = await getProjectStats(vfs, '/novel') // User function - const gameStats = await getProjectStats(vfs, '/game') // User function - const webappStats = await getProjectStats(vfs, '/webapp') // User function - - console.log('Total files:', novelStats.fileCount + gameStats.fileCount + webappStats.fileCount) - console.log('Total size:', novelStats.totalSize + gameStats.totalSize + webappStats.totalSize) - - // Knowledge graph visualization data šŸ”® (future feature) - // const knowledgeGraph = await vfs.getGlobalKnowledgeGraph() // Not yet implemented - // Returns nodes (files, entities, concepts) and edges (relationships) - - // Find connections between projects šŸ”® (future feature) - // const crossProjectLinks = await vfs.findCrossProjectLinks() // Not yet implemented - - // Unified timeline āœ… - const timeline = await vfs.getTimeline({ - from: '2025-01-01', - to: '2025-12-31' - }) - - await vfs.close() - await brain.close() -} -``` - -## Advanced Features - -### Semantic Code Analysis šŸ“ - -These are user functions - see [USER_FUNCTIONS.md](./USER_FUNCTIONS.md) for implementation templates: - -```javascript -// Find security vulnerabilities (user function example) -const vulnerabilities = await findPatterns(vfs, [ - 'eval(', - 'innerHTML =', - 'SQL injection', - 'hardcoded password' -]) - -// Find code smells (user function example) -const codeSmells = await analyzeCodeQuality(vfs, '/src', { - checkDuplication: true, - checkComplexity: true, - checkNaming: true -}) -``` - -### AI-Powered Features šŸ”® - -**Note:** These features require AI integration and are not yet available. - -```javascript -// Future: Generate documentation -// const docs = await vfs.generateDocumentation('/src/auth/login.ts') - -// Future: Suggest refactorings -// const refactorings = await vfs.suggestRefactorings('/src/utils.js') - -// Future: Auto-complete code -// const completion = await vfs.completeCode('/src/api.ts', { line: 42, column: 10 }) -``` - -### Migration and Backup šŸ”® - -**Note:** These features are planned but not yet implemented. - -```javascript -// Future: Backup with full history -// await vfs.createBackup('/backup/2025-01-20.brainy') - -// Future: Migrate between storage backends -// const migration = await vfs.migrate({ -// from: { type: 'file', path: './old-data' }, -// to: { type: 's3', bucket: 'new-bucket' } -// }) - -// Future: Incremental sync -// await vfs.sync('/local/path', '/vfs/path', { -// bidirectional: true, -// conflictStrategy: 'newest' -// }) -``` - -### Performance at Scale - -```javascript -// Handle millions of files āœ… -for (let i = 0; i < 1000000; i++) { - await vfs.writeFile(`/data/file${i}.txt`, `Content ${i}`) - // Uses chunking, compression, and efficient indexing -} - -// Fast parallel operations āœ… -await Promise.all([ - vfs.writeFile('/file1.txt', 'data1'), - vfs.writeFile('/file2.txt', 'data2'), - vfs.writeFile('/file3.txt', 'data3') -]) - -// Bulk write operations āœ… -const files = [ - { path: '/data/file1.txt', content: 'Content 1' }, - { path: '/data/file2.txt', content: 'Content 2' }, - // ... more files -] -await vfs.bulkWrite(files) - -// Bulk imports šŸ”® (future feature) -// await vfs.bulkImport('/massive/dataset', { -// parallel: 10, -// batchSize: 1000, -// progress: (count, total) => console.log(`${count}/${total}`) -// }) -``` - -## Implementation Status - -### āœ… Fully Implemented Features - -All methods marked with āœ… are production-ready: - -1. **Core VFS Operations**: mkdir, writeFile, readFile, appendFile, stat, readdir, etc. -2. **Entity System**: createEntity, linkEntities, findEntityOccurrences, updateEntity, getEntityGraph -3. **Concept System**: createConcept, findByConcept -4. **Knowledge Layer**: Event recording, semantic versioning, collaboration tracking -5. **Search**: Triple Intelligence (vector + field + graph) -6. **Git Integration**: importFromGit, exportToGit -7. **Export Formats**: exportToMarkdown, exportToJSON -8. **Bulk Operations**: bulkWrite for efficient batch processing -9. **Project Management**: todos, metadata, relationships - -### šŸ“ User Functions - -Methods marked with šŸ“ are domain-specific functions that you can implement using VFS primitives. See [USER_FUNCTIONS.md](./USER_FUNCTIONS.md) for ready-to-use templates: - -- **Code Analysis**: getDependencyGraph, findCircularDependencies, findUntestedCode, findSimilarCode -- **Creative Writing**: trackCharacterArc, generateStoryBible -- **Game Development**: validateGameData, generateLootTables -- **Project Management**: getProjectInsights, generateSprintReport -- **Export Formats**: exportToEpub, exportToStaticSite - -### šŸ”® Future Features - -Methods marked with šŸ”® require AI integration or are planned for future releases: - -- **AI-Powered**: generateDocumentation, suggestRefactorings, completeCode -- **Advanced Analysis**: detectConflicts, getGlobalKnowledgeGraph, findCrossProjectLinks -- **Migration Tools**: createBackup, migrate, sync, bulkImport - -## Real Implementation Guarantees - -- **No Mocks**: Every āœ… method is fully functional -- **Real Storage**: Uses Brainy entities with embeddings -- **Real Search**: Triple Intelligence combining vectors, fields, and graphs -- **Real Relationships**: Graph-based connections via brain.relate() -- **Production Ready**: Complete error handling, async/await, resource cleanup - -The VFS + Knowledge Layer combination provides a solid foundation for intelligent applications. Use the āœ… methods directly, implement šŸ“ functions as needed for your domain, and stay tuned for šŸ”® features. \ No newline at end of file diff --git a/docs/vfs/VFS_GRAPH_TYPES.md b/docs/vfs/VFS_GRAPH_TYPES.md index 54270395..fe05bcf3 100644 --- a/docs/vfs/VFS_GRAPH_TYPES.md +++ b/docs/vfs/VFS_GRAPH_TYPES.md @@ -118,13 +118,13 @@ const results = await brain.search('machine learning', { ### 2. Graph Traversal ```javascript // Find all entities contained in a directory -const contained = await brain.getRelations({ +const contained = await brain.related({ from: directoryId, type: VerbType.Contains }) // Find what contains a file (parent directories) -const parents = await brain.getRelations({ +const parents = await brain.related({ to: fileId, type: VerbType.Contains }) diff --git a/models-cache/Xenova/all-MiniLM-L6-v2/config.json b/models-cache/Xenova/all-MiniLM-L6-v2/config.json deleted file mode 100644 index 72147e4f..00000000 --- a/models-cache/Xenova/all-MiniLM-L6-v2/config.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "_name_or_path": "sentence-transformers/all-MiniLM-L6-v2", - "architectures": [ - "BertModel" - ], - "attention_probs_dropout_prob": 0.1, - "classifier_dropout": null, - "gradient_checkpointing": false, - "hidden_act": "gelu", - "hidden_dropout_prob": 0.1, - "hidden_size": 384, - "initializer_range": 0.02, - "intermediate_size": 1536, - "layer_norm_eps": 1e-12, - "max_position_embeddings": 512, - "model_type": "bert", - "num_attention_heads": 12, - "num_hidden_layers": 6, - "pad_token_id": 0, - "position_embedding_type": "absolute", - "transformers_version": "4.29.2", - "type_vocab_size": 2, - "use_cache": true, - "vocab_size": 30522 -} diff --git a/models-cache/Xenova/all-MiniLM-L6-v2/onnx/model.onnx b/models-cache/Xenova/all-MiniLM-L6-v2/onnx/model.onnx deleted file mode 100644 index fa8c34b4..00000000 Binary files a/models-cache/Xenova/all-MiniLM-L6-v2/onnx/model.onnx and /dev/null differ diff --git a/models-cache/Xenova/all-MiniLM-L6-v2/tokenizer.json b/models-cache/Xenova/all-MiniLM-L6-v2/tokenizer.json deleted file mode 100644 index c17ed520..00000000 --- a/models-cache/Xenova/all-MiniLM-L6-v2/tokenizer.json +++ /dev/null @@ -1,30686 +0,0 @@ -{ - "version": "1.0", - "truncation": { - "direction": "Right", - "max_length": 128, - "strategy": "LongestFirst", - "stride": 0 - }, - "padding": { - "strategy": { - "Fixed": 128 - }, - "direction": "Right", - "pad_to_multiple_of": null, - "pad_id": 0, - "pad_type_id": 0, - "pad_token": "[PAD]" - }, - "added_tokens": [ - { - "id": 0, - "content": "[PAD]", - "single_word": false, - "lstrip": false, - "rstrip": false, - "normalized": false, - "special": true - }, - { - "id": 100, - "content": "[UNK]", - "single_word": false, - "lstrip": false, - "rstrip": false, - "normalized": false, - "special": true - }, - { - "id": 101, - "content": "[CLS]", - "single_word": false, - "lstrip": false, - "rstrip": false, - "normalized": false, - "special": true - }, - { - "id": 102, - "content": "[SEP]", - "single_word": false, - "lstrip": false, - "rstrip": false, - "normalized": false, - "special": true - }, - { - "id": 103, - "content": "[MASK]", - "single_word": false, - "lstrip": false, - "rstrip": false, - "normalized": false, - "special": true - } - ], - "normalizer": { - "type": "BertNormalizer", - "clean_text": true, - "handle_chinese_chars": true, - "strip_accents": null, - "lowercase": true - }, - "pre_tokenizer": { - "type": "BertPreTokenizer" - }, - "post_processor": { - "type": "TemplateProcessing", - "single": [ - { - "SpecialToken": { - "id": "[CLS]", - "type_id": 0 - } - }, - { - "Sequence": { - "id": "A", - "type_id": 0 - } - }, - { - "SpecialToken": { - "id": "[SEP]", - "type_id": 0 - } - } - ], - "pair": [ - { - "SpecialToken": { - "id": "[CLS]", - "type_id": 0 - } - }, - { - "Sequence": { - "id": "A", - "type_id": 0 - } - }, - { - "SpecialToken": { - "id": "[SEP]", - "type_id": 0 - } - }, - { - "Sequence": { - "id": "B", - "type_id": 1 - } - }, - { - "SpecialToken": { - "id": "[SEP]", - "type_id": 1 - } - } - ], - "special_tokens": { - "[CLS]": { - "id": "[CLS]", - "ids": [ - 101 - ], - "tokens": [ - "[CLS]" - ] - }, - "[SEP]": { - "id": "[SEP]", - "ids": [ - 102 - ], - "tokens": [ - "[SEP]" - ] - } - } - }, - "decoder": { - "type": "WordPiece", - "prefix": "##", - "cleanup": true - }, - "model": { - "type": "WordPiece", - "unk_token": "[UNK]", - "continuing_subword_prefix": "##", - "max_input_chars_per_word": 100, - "vocab": { - "[PAD]": 0, - "[unused0]": 1, - "[unused1]": 2, - "[unused2]": 3, - "[unused3]": 4, - "[unused4]": 5, - "[unused5]": 6, - "[unused6]": 7, - "[unused7]": 8, - "[unused8]": 9, - "[unused9]": 10, - "[unused10]": 11, - "[unused11]": 12, - "[unused12]": 13, - "[unused13]": 14, - "[unused14]": 15, - "[unused15]": 16, - "[unused16]": 17, - "[unused17]": 18, - "[unused18]": 19, - "[unused19]": 20, - "[unused20]": 21, - "[unused21]": 22, - "[unused22]": 23, - "[unused23]": 24, - "[unused24]": 25, - "[unused25]": 26, - "[unused26]": 27, - "[unused27]": 28, - "[unused28]": 29, - "[unused29]": 30, - "[unused30]": 31, - "[unused31]": 32, - "[unused32]": 33, - "[unused33]": 34, - "[unused34]": 35, - "[unused35]": 36, - "[unused36]": 37, - "[unused37]": 38, - "[unused38]": 39, - "[unused39]": 40, - "[unused40]": 41, - "[unused41]": 42, - "[unused42]": 43, - "[unused43]": 44, - "[unused44]": 45, - "[unused45]": 46, - "[unused46]": 47, - "[unused47]": 48, - "[unused48]": 49, - "[unused49]": 50, - "[unused50]": 51, - "[unused51]": 52, - "[unused52]": 53, - "[unused53]": 54, - "[unused54]": 55, - "[unused55]": 56, - "[unused56]": 57, - "[unused57]": 58, - "[unused58]": 59, - "[unused59]": 60, - "[unused60]": 61, - "[unused61]": 62, - "[unused62]": 63, - "[unused63]": 64, - "[unused64]": 65, - "[unused65]": 66, - "[unused66]": 67, - "[unused67]": 68, - "[unused68]": 69, - "[unused69]": 70, - "[unused70]": 71, - "[unused71]": 72, - "[unused72]": 73, - "[unused73]": 74, - "[unused74]": 75, - "[unused75]": 76, - "[unused76]": 77, - "[unused77]": 78, - "[unused78]": 79, - "[unused79]": 80, - "[unused80]": 81, - "[unused81]": 82, - "[unused82]": 83, - "[unused83]": 84, - "[unused84]": 85, - "[unused85]": 86, - "[unused86]": 87, - "[unused87]": 88, - "[unused88]": 89, - "[unused89]": 90, - "[unused90]": 91, - "[unused91]": 92, - "[unused92]": 93, - "[unused93]": 94, - "[unused94]": 95, - "[unused95]": 96, - "[unused96]": 97, - "[unused97]": 98, - "[unused98]": 99, - "[UNK]": 100, - "[CLS]": 101, - "[SEP]": 102, - "[MASK]": 103, - "[unused99]": 104, - "[unused100]": 105, - "[unused101]": 106, - "[unused102]": 107, - "[unused103]": 108, - "[unused104]": 109, - "[unused105]": 110, - "[unused106]": 111, - "[unused107]": 112, - "[unused108]": 113, - "[unused109]": 114, - "[unused110]": 115, - "[unused111]": 116, - "[unused112]": 117, - "[unused113]": 118, - "[unused114]": 119, - "[unused115]": 120, - "[unused116]": 121, - "[unused117]": 122, - "[unused118]": 123, - "[unused119]": 124, - "[unused120]": 125, - "[unused121]": 126, - "[unused122]": 127, - "[unused123]": 128, - "[unused124]": 129, - "[unused125]": 130, - "[unused126]": 131, - "[unused127]": 132, - "[unused128]": 133, - "[unused129]": 134, - "[unused130]": 135, - "[unused131]": 136, - "[unused132]": 137, - "[unused133]": 138, - "[unused134]": 139, - "[unused135]": 140, - "[unused136]": 141, - "[unused137]": 142, - "[unused138]": 143, - "[unused139]": 144, - "[unused140]": 145, - "[unused141]": 146, - "[unused142]": 147, - "[unused143]": 148, - "[unused144]": 149, - "[unused145]": 150, - "[unused146]": 151, - "[unused147]": 152, - "[unused148]": 153, - "[unused149]": 154, - "[unused150]": 155, - "[unused151]": 156, - "[unused152]": 157, - "[unused153]": 158, - "[unused154]": 159, - "[unused155]": 160, - "[unused156]": 161, - "[unused157]": 162, - "[unused158]": 163, - "[unused159]": 164, - "[unused160]": 165, - "[unused161]": 166, - "[unused162]": 167, - "[unused163]": 168, - "[unused164]": 169, - "[unused165]": 170, - "[unused166]": 171, - "[unused167]": 172, - "[unused168]": 173, - "[unused169]": 174, - "[unused170]": 175, - "[unused171]": 176, - "[unused172]": 177, - "[unused173]": 178, - "[unused174]": 179, - "[unused175]": 180, - "[unused176]": 181, - "[unused177]": 182, - "[unused178]": 183, - "[unused179]": 184, - "[unused180]": 185, - "[unused181]": 186, - "[unused182]": 187, - "[unused183]": 188, - "[unused184]": 189, - "[unused185]": 190, - "[unused186]": 191, - "[unused187]": 192, - "[unused188]": 193, - "[unused189]": 194, - "[unused190]": 195, - "[unused191]": 196, - "[unused192]": 197, - "[unused193]": 198, - "[unused194]": 199, - "[unused195]": 200, - "[unused196]": 201, - "[unused197]": 202, - "[unused198]": 203, - "[unused199]": 204, - "[unused200]": 205, - "[unused201]": 206, - "[unused202]": 207, - "[unused203]": 208, - "[unused204]": 209, - "[unused205]": 210, - "[unused206]": 211, - "[unused207]": 212, - "[unused208]": 213, - "[unused209]": 214, - "[unused210]": 215, - "[unused211]": 216, - "[unused212]": 217, - "[unused213]": 218, - "[unused214]": 219, - "[unused215]": 220, - "[unused216]": 221, - "[unused217]": 222, - "[unused218]": 223, - "[unused219]": 224, - "[unused220]": 225, - "[unused221]": 226, - "[unused222]": 227, - "[unused223]": 228, - "[unused224]": 229, - "[unused225]": 230, - "[unused226]": 231, - "[unused227]": 232, - "[unused228]": 233, - "[unused229]": 234, - "[unused230]": 235, - "[unused231]": 236, - "[unused232]": 237, - "[unused233]": 238, - "[unused234]": 239, - "[unused235]": 240, - "[unused236]": 241, - "[unused237]": 242, - "[unused238]": 243, - "[unused239]": 244, - "[unused240]": 245, - "[unused241]": 246, - "[unused242]": 247, - "[unused243]": 248, - "[unused244]": 249, - "[unused245]": 250, - "[unused246]": 251, - "[unused247]": 252, - "[unused248]": 253, - "[unused249]": 254, - "[unused250]": 255, - "[unused251]": 256, - "[unused252]": 257, - "[unused253]": 258, - "[unused254]": 259, - "[unused255]": 260, - "[unused256]": 261, - "[unused257]": 262, - "[unused258]": 263, - "[unused259]": 264, - "[unused260]": 265, - "[unused261]": 266, - "[unused262]": 267, - "[unused263]": 268, - "[unused264]": 269, - "[unused265]": 270, - "[unused266]": 271, - "[unused267]": 272, - "[unused268]": 273, - "[unused269]": 274, - "[unused270]": 275, - "[unused271]": 276, - "[unused272]": 277, - "[unused273]": 278, - "[unused274]": 279, - "[unused275]": 280, - "[unused276]": 281, - "[unused277]": 282, - "[unused278]": 283, - "[unused279]": 284, - "[unused280]": 285, - "[unused281]": 286, - "[unused282]": 287, - "[unused283]": 288, - "[unused284]": 289, - "[unused285]": 290, - "[unused286]": 291, - "[unused287]": 292, - "[unused288]": 293, - "[unused289]": 294, - "[unused290]": 295, - "[unused291]": 296, - "[unused292]": 297, - "[unused293]": 298, - "[unused294]": 299, - "[unused295]": 300, - "[unused296]": 301, - "[unused297]": 302, - "[unused298]": 303, - "[unused299]": 304, - "[unused300]": 305, - "[unused301]": 306, - "[unused302]": 307, - "[unused303]": 308, - "[unused304]": 309, - "[unused305]": 310, - "[unused306]": 311, - "[unused307]": 312, - "[unused308]": 313, - "[unused309]": 314, - "[unused310]": 315, - "[unused311]": 316, - "[unused312]": 317, - "[unused313]": 318, - "[unused314]": 319, - "[unused315]": 320, - "[unused316]": 321, - "[unused317]": 322, - "[unused318]": 323, - "[unused319]": 324, - "[unused320]": 325, - "[unused321]": 326, - "[unused322]": 327, - "[unused323]": 328, - "[unused324]": 329, - "[unused325]": 330, - "[unused326]": 331, - "[unused327]": 332, - "[unused328]": 333, - "[unused329]": 334, - "[unused330]": 335, - "[unused331]": 336, - "[unused332]": 337, - "[unused333]": 338, - "[unused334]": 339, - "[unused335]": 340, - "[unused336]": 341, - "[unused337]": 342, - "[unused338]": 343, - "[unused339]": 344, - "[unused340]": 345, - "[unused341]": 346, - "[unused342]": 347, - "[unused343]": 348, - "[unused344]": 349, - "[unused345]": 350, - "[unused346]": 351, - "[unused347]": 352, - "[unused348]": 353, - "[unused349]": 354, - "[unused350]": 355, - "[unused351]": 356, - "[unused352]": 357, - "[unused353]": 358, - "[unused354]": 359, - "[unused355]": 360, - "[unused356]": 361, - "[unused357]": 362, - "[unused358]": 363, - "[unused359]": 364, - "[unused360]": 365, - "[unused361]": 366, - "[unused362]": 367, - "[unused363]": 368, - "[unused364]": 369, - "[unused365]": 370, - "[unused366]": 371, - "[unused367]": 372, - "[unused368]": 373, - "[unused369]": 374, - "[unused370]": 375, - "[unused371]": 376, - "[unused372]": 377, - "[unused373]": 378, - "[unused374]": 379, - "[unused375]": 380, - "[unused376]": 381, - "[unused377]": 382, - "[unused378]": 383, - "[unused379]": 384, - "[unused380]": 385, - "[unused381]": 386, - "[unused382]": 387, - "[unused383]": 388, - "[unused384]": 389, - "[unused385]": 390, - "[unused386]": 391, - "[unused387]": 392, - "[unused388]": 393, - "[unused389]": 394, - "[unused390]": 395, - "[unused391]": 396, - "[unused392]": 397, - "[unused393]": 398, - "[unused394]": 399, - "[unused395]": 400, - "[unused396]": 401, - "[unused397]": 402, - "[unused398]": 403, - "[unused399]": 404, - "[unused400]": 405, - "[unused401]": 406, - "[unused402]": 407, - "[unused403]": 408, - "[unused404]": 409, - "[unused405]": 410, - "[unused406]": 411, - "[unused407]": 412, - "[unused408]": 413, - "[unused409]": 414, - "[unused410]": 415, - "[unused411]": 416, - "[unused412]": 417, - "[unused413]": 418, - "[unused414]": 419, - "[unused415]": 420, - "[unused416]": 421, - "[unused417]": 422, - "[unused418]": 423, - "[unused419]": 424, - "[unused420]": 425, - "[unused421]": 426, - "[unused422]": 427, - "[unused423]": 428, - "[unused424]": 429, - "[unused425]": 430, - "[unused426]": 431, - "[unused427]": 432, - "[unused428]": 433, - "[unused429]": 434, - "[unused430]": 435, - "[unused431]": 436, - "[unused432]": 437, - "[unused433]": 438, - "[unused434]": 439, - "[unused435]": 440, - "[unused436]": 441, - "[unused437]": 442, - "[unused438]": 443, - "[unused439]": 444, - "[unused440]": 445, - "[unused441]": 446, - "[unused442]": 447, - "[unused443]": 448, - "[unused444]": 449, - "[unused445]": 450, - "[unused446]": 451, - "[unused447]": 452, - "[unused448]": 453, - "[unused449]": 454, - "[unused450]": 455, - "[unused451]": 456, - "[unused452]": 457, - "[unused453]": 458, - "[unused454]": 459, - "[unused455]": 460, - "[unused456]": 461, - "[unused457]": 462, - "[unused458]": 463, - "[unused459]": 464, - "[unused460]": 465, - "[unused461]": 466, - "[unused462]": 467, - "[unused463]": 468, - "[unused464]": 469, - "[unused465]": 470, - "[unused466]": 471, - "[unused467]": 472, - "[unused468]": 473, - "[unused469]": 474, - "[unused470]": 475, - "[unused471]": 476, - "[unused472]": 477, - "[unused473]": 478, - "[unused474]": 479, - "[unused475]": 480, - "[unused476]": 481, - "[unused477]": 482, - "[unused478]": 483, - "[unused479]": 484, - "[unused480]": 485, - "[unused481]": 486, - "[unused482]": 487, - "[unused483]": 488, - "[unused484]": 489, - "[unused485]": 490, - "[unused486]": 491, - "[unused487]": 492, - "[unused488]": 493, - "[unused489]": 494, - "[unused490]": 495, - "[unused491]": 496, - "[unused492]": 497, - "[unused493]": 498, - "[unused494]": 499, - "[unused495]": 500, - "[unused496]": 501, - "[unused497]": 502, - "[unused498]": 503, - "[unused499]": 504, - "[unused500]": 505, - "[unused501]": 506, - "[unused502]": 507, - "[unused503]": 508, - "[unused504]": 509, - "[unused505]": 510, - "[unused506]": 511, - "[unused507]": 512, - "[unused508]": 513, - "[unused509]": 514, - "[unused510]": 515, - "[unused511]": 516, - "[unused512]": 517, - "[unused513]": 518, - "[unused514]": 519, - "[unused515]": 520, - "[unused516]": 521, - "[unused517]": 522, - "[unused518]": 523, - "[unused519]": 524, - "[unused520]": 525, - "[unused521]": 526, - "[unused522]": 527, - "[unused523]": 528, - "[unused524]": 529, - "[unused525]": 530, - "[unused526]": 531, - "[unused527]": 532, - "[unused528]": 533, - "[unused529]": 534, - "[unused530]": 535, - "[unused531]": 536, - "[unused532]": 537, - "[unused533]": 538, - "[unused534]": 539, - "[unused535]": 540, - "[unused536]": 541, - "[unused537]": 542, - "[unused538]": 543, - "[unused539]": 544, - "[unused540]": 545, - "[unused541]": 546, - "[unused542]": 547, - "[unused543]": 548, - "[unused544]": 549, - "[unused545]": 550, - "[unused546]": 551, - "[unused547]": 552, - "[unused548]": 553, - "[unused549]": 554, - "[unused550]": 555, - "[unused551]": 556, - "[unused552]": 557, - "[unused553]": 558, - "[unused554]": 559, - "[unused555]": 560, - "[unused556]": 561, - "[unused557]": 562, - "[unused558]": 563, - "[unused559]": 564, - "[unused560]": 565, - "[unused561]": 566, - "[unused562]": 567, - "[unused563]": 568, - "[unused564]": 569, - "[unused565]": 570, - "[unused566]": 571, - "[unused567]": 572, - "[unused568]": 573, - "[unused569]": 574, - "[unused570]": 575, - "[unused571]": 576, - "[unused572]": 577, - "[unused573]": 578, - "[unused574]": 579, - "[unused575]": 580, - "[unused576]": 581, - "[unused577]": 582, - "[unused578]": 583, - "[unused579]": 584, - "[unused580]": 585, - "[unused581]": 586, - "[unused582]": 587, - "[unused583]": 588, - "[unused584]": 589, - "[unused585]": 590, - "[unused586]": 591, - "[unused587]": 592, - "[unused588]": 593, - "[unused589]": 594, - "[unused590]": 595, - "[unused591]": 596, - "[unused592]": 597, - "[unused593]": 598, - "[unused594]": 599, - "[unused595]": 600, - "[unused596]": 601, - "[unused597]": 602, - "[unused598]": 603, - "[unused599]": 604, - "[unused600]": 605, - "[unused601]": 606, - "[unused602]": 607, - "[unused603]": 608, - "[unused604]": 609, - "[unused605]": 610, - "[unused606]": 611, - "[unused607]": 612, - "[unused608]": 613, - "[unused609]": 614, - "[unused610]": 615, - "[unused611]": 616, - "[unused612]": 617, - "[unused613]": 618, - "[unused614]": 619, - "[unused615]": 620, - "[unused616]": 621, - "[unused617]": 622, - "[unused618]": 623, - "[unused619]": 624, - "[unused620]": 625, - "[unused621]": 626, - "[unused622]": 627, - "[unused623]": 628, - "[unused624]": 629, - "[unused625]": 630, - "[unused626]": 631, - "[unused627]": 632, - "[unused628]": 633, - "[unused629]": 634, - "[unused630]": 635, - "[unused631]": 636, - "[unused632]": 637, - "[unused633]": 638, - "[unused634]": 639, - "[unused635]": 640, - "[unused636]": 641, - "[unused637]": 642, - "[unused638]": 643, - "[unused639]": 644, - "[unused640]": 645, - "[unused641]": 646, - "[unused642]": 647, - "[unused643]": 648, - "[unused644]": 649, - "[unused645]": 650, - "[unused646]": 651, - "[unused647]": 652, - "[unused648]": 653, - "[unused649]": 654, - "[unused650]": 655, - "[unused651]": 656, - "[unused652]": 657, - "[unused653]": 658, - "[unused654]": 659, - "[unused655]": 660, - "[unused656]": 661, - "[unused657]": 662, - "[unused658]": 663, - "[unused659]": 664, - "[unused660]": 665, - "[unused661]": 666, - "[unused662]": 667, - "[unused663]": 668, - "[unused664]": 669, - "[unused665]": 670, - "[unused666]": 671, - "[unused667]": 672, - "[unused668]": 673, - "[unused669]": 674, - "[unused670]": 675, - "[unused671]": 676, - "[unused672]": 677, - "[unused673]": 678, - "[unused674]": 679, - "[unused675]": 680, - "[unused676]": 681, - "[unused677]": 682, - "[unused678]": 683, - "[unused679]": 684, - "[unused680]": 685, - "[unused681]": 686, - "[unused682]": 687, - "[unused683]": 688, - "[unused684]": 689, - "[unused685]": 690, - "[unused686]": 691, - "[unused687]": 692, - "[unused688]": 693, - "[unused689]": 694, - "[unused690]": 695, - "[unused691]": 696, - "[unused692]": 697, - "[unused693]": 698, - "[unused694]": 699, - "[unused695]": 700, - "[unused696]": 701, - "[unused697]": 702, - "[unused698]": 703, - "[unused699]": 704, - "[unused700]": 705, - "[unused701]": 706, - "[unused702]": 707, - "[unused703]": 708, - "[unused704]": 709, - "[unused705]": 710, - "[unused706]": 711, - "[unused707]": 712, - "[unused708]": 713, - "[unused709]": 714, - "[unused710]": 715, - "[unused711]": 716, - "[unused712]": 717, - "[unused713]": 718, - "[unused714]": 719, - "[unused715]": 720, - "[unused716]": 721, - "[unused717]": 722, - "[unused718]": 723, - "[unused719]": 724, - "[unused720]": 725, - "[unused721]": 726, - "[unused722]": 727, - "[unused723]": 728, - "[unused724]": 729, - "[unused725]": 730, - "[unused726]": 731, - "[unused727]": 732, - "[unused728]": 733, - "[unused729]": 734, - "[unused730]": 735, - "[unused731]": 736, - "[unused732]": 737, - "[unused733]": 738, - "[unused734]": 739, - "[unused735]": 740, - "[unused736]": 741, - "[unused737]": 742, - "[unused738]": 743, - "[unused739]": 744, - "[unused740]": 745, - "[unused741]": 746, - "[unused742]": 747, - "[unused743]": 748, - "[unused744]": 749, - "[unused745]": 750, - "[unused746]": 751, - "[unused747]": 752, - "[unused748]": 753, - "[unused749]": 754, - "[unused750]": 755, - "[unused751]": 756, - "[unused752]": 757, - "[unused753]": 758, - "[unused754]": 759, - "[unused755]": 760, - "[unused756]": 761, - "[unused757]": 762, - "[unused758]": 763, - "[unused759]": 764, - "[unused760]": 765, - "[unused761]": 766, - "[unused762]": 767, - "[unused763]": 768, - "[unused764]": 769, - "[unused765]": 770, - "[unused766]": 771, - "[unused767]": 772, - "[unused768]": 773, - "[unused769]": 774, - "[unused770]": 775, - "[unused771]": 776, - "[unused772]": 777, - "[unused773]": 778, - "[unused774]": 779, - "[unused775]": 780, - "[unused776]": 781, - "[unused777]": 782, - "[unused778]": 783, - "[unused779]": 784, - "[unused780]": 785, - "[unused781]": 786, - "[unused782]": 787, - "[unused783]": 788, - "[unused784]": 789, - "[unused785]": 790, - "[unused786]": 791, - "[unused787]": 792, - "[unused788]": 793, - "[unused789]": 794, - "[unused790]": 795, - "[unused791]": 796, - "[unused792]": 797, - "[unused793]": 798, - "[unused794]": 799, - "[unused795]": 800, - "[unused796]": 801, - "[unused797]": 802, - "[unused798]": 803, - "[unused799]": 804, - "[unused800]": 805, - "[unused801]": 806, - "[unused802]": 807, - "[unused803]": 808, - "[unused804]": 809, - "[unused805]": 810, - "[unused806]": 811, - "[unused807]": 812, - "[unused808]": 813, - "[unused809]": 814, - "[unused810]": 815, - "[unused811]": 816, - "[unused812]": 817, - "[unused813]": 818, - "[unused814]": 819, - "[unused815]": 820, - "[unused816]": 821, - "[unused817]": 822, - "[unused818]": 823, - "[unused819]": 824, - "[unused820]": 825, - "[unused821]": 826, - "[unused822]": 827, - "[unused823]": 828, - "[unused824]": 829, - "[unused825]": 830, - "[unused826]": 831, - "[unused827]": 832, - "[unused828]": 833, - "[unused829]": 834, - "[unused830]": 835, - "[unused831]": 836, - "[unused832]": 837, - "[unused833]": 838, - "[unused834]": 839, - "[unused835]": 840, - "[unused836]": 841, - "[unused837]": 842, - "[unused838]": 843, - "[unused839]": 844, - "[unused840]": 845, - "[unused841]": 846, - "[unused842]": 847, - "[unused843]": 848, - "[unused844]": 849, - "[unused845]": 850, - "[unused846]": 851, - "[unused847]": 852, - "[unused848]": 853, - "[unused849]": 854, - "[unused850]": 855, - "[unused851]": 856, - "[unused852]": 857, - "[unused853]": 858, - "[unused854]": 859, - "[unused855]": 860, - "[unused856]": 861, - "[unused857]": 862, - "[unused858]": 863, - "[unused859]": 864, - "[unused860]": 865, - "[unused861]": 866, - "[unused862]": 867, - "[unused863]": 868, - "[unused864]": 869, - "[unused865]": 870, - "[unused866]": 871, - "[unused867]": 872, - "[unused868]": 873, - "[unused869]": 874, - "[unused870]": 875, - "[unused871]": 876, - "[unused872]": 877, - "[unused873]": 878, - "[unused874]": 879, - "[unused875]": 880, - "[unused876]": 881, - "[unused877]": 882, - "[unused878]": 883, - "[unused879]": 884, - "[unused880]": 885, - "[unused881]": 886, - "[unused882]": 887, - "[unused883]": 888, - "[unused884]": 889, - "[unused885]": 890, - "[unused886]": 891, - "[unused887]": 892, - "[unused888]": 893, - "[unused889]": 894, - "[unused890]": 895, - "[unused891]": 896, - "[unused892]": 897, - "[unused893]": 898, - "[unused894]": 899, - "[unused895]": 900, - "[unused896]": 901, - "[unused897]": 902, - "[unused898]": 903, - "[unused899]": 904, - "[unused900]": 905, - "[unused901]": 906, - "[unused902]": 907, - "[unused903]": 908, - "[unused904]": 909, - "[unused905]": 910, - "[unused906]": 911, - "[unused907]": 912, - "[unused908]": 913, - "[unused909]": 914, - "[unused910]": 915, - "[unused911]": 916, - "[unused912]": 917, - "[unused913]": 918, - "[unused914]": 919, - "[unused915]": 920, - "[unused916]": 921, - "[unused917]": 922, - "[unused918]": 923, - "[unused919]": 924, - "[unused920]": 925, - "[unused921]": 926, - "[unused922]": 927, - "[unused923]": 928, - "[unused924]": 929, - "[unused925]": 930, - "[unused926]": 931, - "[unused927]": 932, - "[unused928]": 933, - "[unused929]": 934, - "[unused930]": 935, - "[unused931]": 936, - "[unused932]": 937, - "[unused933]": 938, - "[unused934]": 939, - "[unused935]": 940, - "[unused936]": 941, - "[unused937]": 942, - "[unused938]": 943, - "[unused939]": 944, - "[unused940]": 945, - "[unused941]": 946, - "[unused942]": 947, - "[unused943]": 948, - "[unused944]": 949, - "[unused945]": 950, - "[unused946]": 951, - "[unused947]": 952, - "[unused948]": 953, - "[unused949]": 954, - "[unused950]": 955, - "[unused951]": 956, - "[unused952]": 957, - "[unused953]": 958, - "[unused954]": 959, - "[unused955]": 960, - "[unused956]": 961, - "[unused957]": 962, - "[unused958]": 963, - "[unused959]": 964, - "[unused960]": 965, - "[unused961]": 966, - "[unused962]": 967, - "[unused963]": 968, - "[unused964]": 969, - "[unused965]": 970, - "[unused966]": 971, - "[unused967]": 972, - "[unused968]": 973, - "[unused969]": 974, - "[unused970]": 975, - "[unused971]": 976, - "[unused972]": 977, - "[unused973]": 978, - "[unused974]": 979, - "[unused975]": 980, - "[unused976]": 981, - "[unused977]": 982, - "[unused978]": 983, - "[unused979]": 984, - "[unused980]": 985, - "[unused981]": 986, - "[unused982]": 987, - "[unused983]": 988, - "[unused984]": 989, - "[unused985]": 990, - "[unused986]": 991, - "[unused987]": 992, - "[unused988]": 993, - "[unused989]": 994, - "[unused990]": 995, - "[unused991]": 996, - "[unused992]": 997, - "[unused993]": 998, - "!": 999, - "\"": 1000, - "#": 1001, - "$": 1002, - "%": 1003, - "&": 1004, - "'": 1005, - "(": 1006, - ")": 1007, - "*": 1008, - "+": 1009, - ",": 1010, - "-": 1011, - ".": 1012, - "/": 1013, - "0": 1014, - "1": 1015, - "2": 1016, - "3": 1017, - "4": 1018, - "5": 1019, - "6": 1020, - "7": 1021, - "8": 1022, - "9": 1023, - ":": 1024, - ";": 1025, - "<": 1026, - "=": 1027, - ">": 1028, - "?": 1029, - "@": 1030, - "[": 1031, - "\\": 1032, - "]": 1033, - "^": 1034, - "_": 1035, - "`": 1036, - "a": 1037, - "b": 1038, - "c": 1039, - "d": 1040, - "e": 1041, - "f": 1042, - "g": 1043, - "h": 1044, - "i": 1045, - "j": 1046, - "k": 1047, - "l": 1048, - "m": 1049, - "n": 1050, - "o": 1051, - "p": 1052, - "q": 1053, - "r": 1054, - "s": 1055, - "t": 1056, - "u": 1057, - "v": 1058, - "w": 1059, - "x": 1060, - "y": 1061, - "z": 1062, - "{": 1063, - "|": 1064, - "}": 1065, - "~": 1066, - "Ā”": 1067, - "Ā¢": 1068, - "Ā£": 1069, - "¤": 1070, - "Ā„": 1071, - "¦": 1072, - "§": 1073, - "ĀØ": 1074, - "Ā©": 1075, - "ĀŖ": 1076, - "Ā«": 1077, - "¬": 1078, - "Ā®": 1079, - "°": 1080, - "±": 1081, - "²": 1082, - "³": 1083, - "Ā“": 1084, - "µ": 1085, - "¶": 1086, - "Ā·": 1087, - "¹": 1088, - "Āŗ": 1089, - "Ā»": 1090, - "¼": 1091, - "½": 1092, - "¾": 1093, - "Āæ": 1094, - "Ɨ": 1095, - "ß": 1096, - "Ʀ": 1097, - "ư": 1098, - "Ć·": 1099, - "Ćø": 1100, - "þ": 1101, - "đ": 1102, - "ħ": 1103, - "ı": 1104, - "ł": 1105, - "ŋ": 1106, - "œ": 1107, - "ʒ": 1108, - "ɐ": 1109, - "ɑ": 1110, - "ɒ": 1111, - "ɔ": 1112, - "ɕ": 1113, - "ə": 1114, - "ɛ": 1115, - "É”": 1116, - "É£": 1117, - "ÉØ": 1118, - "ÉŖ": 1119, - "É«": 1120, - "ɬ": 1121, - "ÉÆ": 1122, - "ɲ": 1123, - "É“": 1124, - "ɹ": 1125, - "ɾ": 1126, - "Ź€": 1127, - "ʁ": 1128, - "Ź‚": 1129, - "ʃ": 1130, - "ʉ": 1131, - "ʊ": 1132, - "Ź‹": 1133, - "ʌ": 1134, - "ŹŽ": 1135, - "ʐ": 1136, - "Ź‘": 1137, - "Ź’": 1138, - "Ź”": 1139, - "ʰ": 1140, - "ʲ": 1141, - "ʳ": 1142, - "Ź·": 1143, - "Źø": 1144, - "Ź»": 1145, - "ʼ": 1146, - "ʾ": 1147, - "Źæ": 1148, - "ˈ": 1149, - "ː": 1150, - "Ė”": 1151, - "Ė¢": 1152, - "Ė£": 1153, - "ˤ": 1154, - "α": 1155, - "β": 1156, - "γ": 1157, - "Ī“": 1158, - "ε": 1159, - "ζ": 1160, - "Ī·": 1161, - "Īø": 1162, - "ι": 1163, - "Īŗ": 1164, - "Ī»": 1165, - "μ": 1166, - "ν": 1167, - "ξ": 1168, - "Īæ": 1169, - "Ļ€": 1170, - "ρ": 1171, - "Ļ‚": 1172, - "σ": 1173, - "Ļ„": 1174, - "Ļ…": 1175, - "φ": 1176, - "χ": 1177, - "ψ": 1178, - "ω": 1179, - "а": 1180, - "б": 1181, - "в": 1182, - "г": 1183, - "Š“": 1184, - "е": 1185, - "ж": 1186, - "Š·": 1187, - "Šø": 1188, - "Šŗ": 1189, - "Š»": 1190, - "м": 1191, - "н": 1192, - "о": 1193, - "Šæ": 1194, - "р": 1195, - "с": 1196, - "т": 1197, - "у": 1198, - "ф": 1199, - "х": 1200, - "ц": 1201, - "ч": 1202, - "ш": 1203, - "щ": 1204, - "ъ": 1205, - "ы": 1206, - "ь": 1207, - "э": 1208, - "ю": 1209, - "я": 1210, - "ђ": 1211, - "є": 1212, - "і": 1213, - "ј": 1214, - "љ": 1215, - "њ": 1216, - "ћ": 1217, - "ӏ": 1218, - "Õ”": 1219, - "Õ¢": 1220, - "Õ£": 1221, - "Õ¤": 1222, - "Õ„": 1223, - "Õ©": 1224, - "Õ«": 1225, - "Õ¬": 1226, - "ÕÆ": 1227, - "Õ°": 1228, - "Õ“": 1229, - "Õµ": 1230, - "Õ¶": 1231, - "Õø": 1232, - "Õŗ": 1233, - "Õ½": 1234, - "Õ¾": 1235, - "Õæ": 1236, - "ր": 1237, - "ւ": 1238, - "ք": 1239, - "Ö¾": 1240, - "א": 1241, - "ב": 1242, - "ג": 1243, - "ד": 1244, - "ה": 1245, - "ו": 1246, - "ז": 1247, - "ח": 1248, - "ט": 1249, - "י": 1250, - "ך": 1251, - "כ": 1252, - "ל": 1253, - "ם": 1254, - "מ": 1255, - "ן": 1256, - "× ": 1257, - "×”": 1258, - "×¢": 1259, - "×£": 1260, - "פ": 1261, - "ׄ": 1262, - "צ": 1263, - "×§": 1264, - "ר": 1265, - "ש": 1266, - "×Ŗ": 1267, - "،": 1268, - "Ų”": 1269, - "Ų§": 1270, - "ŲØ": 1271, - "Ų©": 1272, - "ŲŖ": 1273, - "Ų«": 1274, - "Ų¬": 1275, - "Ų­": 1276, - "Ų®": 1277, - "ŲÆ": 1278, - "Ų°": 1279, - "Ų±": 1280, - "Ų²": 1281, - "Ų³": 1282, - "Ų“": 1283, - "Ųµ": 1284, - "Ų¶": 1285, - "Ų·": 1286, - "Ųø": 1287, - "Ų¹": 1288, - "Ųŗ": 1289, - "Ł€": 1290, - "ف": 1291, - "Ł‚": 1292, - "ك": 1293, - "Ł„": 1294, - "Ł…": 1295, - "ن": 1296, - "ه": 1297, - "و": 1298, - "ى": 1299, - "ي": 1300, - "ٹ": 1301, - "پ": 1302, - "چ": 1303, - "Ś©": 1304, - "ŚÆ": 1305, - "Śŗ": 1306, - "ھ": 1307, - "ہ": 1308, - "ی": 1309, - "Ū’": 1310, - "अ": 1311, - "आ": 1312, - "उ": 1313, - "ą¤": 1314, - "क": 1315, - "ख": 1316, - "ग": 1317, - "च": 1318, - "ज": 1319, - "ट": 1320, - "औ": 1321, - "ण": 1322, - "त": 1323, - "ऄ": 1324, - "द": 1325, - "ध": 1326, - "न": 1327, - "प": 1328, - "ब": 1329, - "भ": 1330, - "म": 1331, - "य": 1332, - "र": 1333, - "ल": 1334, - "व": 1335, - "श": 1336, - "ष": 1337, - "स": 1338, - "ह": 1339, - "ा": 1340, - "ि": 1341, - "ą„€": 1342, - "ą„‹": 1343, - "ą„¤": 1344, - "ą„„": 1345, - "ং": 1346, - "অ": 1347, - "আ": 1348, - "ই": 1349, - "উ": 1350, - "ą¦": 1351, - "ও": 1352, - "ক": 1353, - "খ": 1354, - "গ": 1355, - "চ": 1356, - "ছ": 1357, - "জ": 1358, - "ট": 1359, - "ঔ": 1360, - "ণ": 1361, - "ত": 1362, - "঄": 1363, - "দ": 1364, - "ধ": 1365, - "ন": 1366, - "প": 1367, - "ব": 1368, - "ভ": 1369, - "ম": 1370, - "য": 1371, - "র": 1372, - "ল": 1373, - "শ": 1374, - "ষ": 1375, - "স": 1376, - "হ": 1377, - "া": 1378, - "ি": 1379, - "ą§€": 1380, - "ে": 1381, - "க": 1382, - "ச": 1383, - "ட": 1384, - "த": 1385, - "ந": 1386, - "ன": 1387, - "ப": 1388, - "ą®®": 1389, - "ய": 1390, - "ą®°": 1391, - "ல": 1392, - "ள": 1393, - "வ": 1394, - "ா": 1395, - "ி": 1396, - "ு": 1397, - "ே": 1398, - "ை": 1399, - "ನ": 1400, - "ą²°": 1401, - "ą²¾": 1402, - "ක": 1403, - "ą¶ŗ": 1404, - "ą¶»": 1405, - "ą¶½": 1406, - "ą·€": 1407, - "ą·": 1408, - "ก": 1409, - "ąø‡": 1410, - "ąø•": 1411, - "ąø—": 1412, - "ąø™": 1413, - "ąøž": 1414, - "ąø”": 1415, - "ąø¢": 1416, - "ąø£": 1417, - "ąø„": 1418, - "ąø§": 1419, - "ąøŖ": 1420, - "ąø­": 1421, - "ąø²": 1422, - "ą¹€": 1423, - "་": 1424, - "ą¼": 1425, - "ག": 1426, - "ང": 1427, - "ད": 1428, - "ན": 1429, - "ą½”": 1430, - "ą½–": 1431, - "མ": 1432, - "ą½ ": 1433, - "ą½¢": 1434, - "ą½£": 1435, - "ས": 1436, - "မ": 1437, - "ა": 1438, - "įƒ‘": 1439, - "įƒ’": 1440, - "įƒ“": 1441, - "įƒ”": 1442, - "įƒ•": 1443, - "įƒ—": 1444, - "ი": 1445, - "įƒ™": 1446, - "ლ": 1447, - "įƒ›": 1448, - "ნ": 1449, - "įƒ": 1450, - "რ": 1451, - "ე": 1452, - "ტ": 1453, - "უ": 1454, - "į„€": 1455, - "į„‚": 1456, - "į„ƒ": 1457, - "į„…": 1458, - "ᄆ": 1459, - "ᄇ": 1460, - "ᄉ": 1461, - "į„Š": 1462, - "į„‹": 1463, - "į„Œ": 1464, - "į„Ž": 1465, - "į„": 1466, - "ᄐ": 1467, - "į„‘": 1468, - "į„’": 1469, - "į…”": 1470, - "į…¢": 1471, - "į…„": 1472, - "į…¦": 1473, - "į…§": 1474, - "į…©": 1475, - "į…Ŗ": 1476, - "į…­": 1477, - "į…®": 1478, - "į…Æ": 1479, - "į…²": 1480, - "į…³": 1481, - "į…“": 1482, - "į…µ": 1483, - "ᆨ": 1484, - "ᆫ": 1485, - "ᆯ": 1486, - "ᆷ": 1487, - "ᆸ": 1488, - "ᆼ": 1489, - "ᓬ": 1490, - "į“®": 1491, - "į“°": 1492, - "ᓵ": 1493, - "ᓺ": 1494, - "įµ€": 1495, - "ᵃ": 1496, - "ᵇ": 1497, - "ᵈ": 1498, - "ᵉ": 1499, - "įµ": 1500, - "įµ": 1501, - "ᵐ": 1502, - "įµ’": 1503, - "įµ–": 1504, - "įµ—": 1505, - "ᵘ": 1506, - "įµ¢": 1507, - "įµ£": 1508, - "ᵤ": 1509, - "ᵄ": 1510, - "ᶜ": 1511, - "į¶ ": 1512, - "‐": 1513, - "‑": 1514, - "‒": 1515, - "–": 1516, - "—": 1517, - "―": 1518, - "‖": 1519, - "ā€˜": 1520, - "’": 1521, - "ā€š": 1522, - "ā€œ": 1523, - "ā€": 1524, - "ā€ž": 1525, - "†": 1526, - "—": 1527, - "•": 1528, - "…": 1529, - "‰": 1530, - "′": 1531, - "″": 1532, - "›": 1533, - "‿": 1534, - "⁄": 1535, - "⁰": 1536, - "ⁱ": 1537, - "⁓": 1538, - "⁵": 1539, - "⁶": 1540, - "⁷": 1541, - "⁸": 1542, - "⁹": 1543, - "⁺": 1544, - "⁻": 1545, - "ⁿ": 1546, - "ā‚€": 1547, - "₁": 1548, - "ā‚‚": 1549, - "ā‚ƒ": 1550, - "ā‚„": 1551, - "ā‚…": 1552, - "₆": 1553, - "₇": 1554, - "ā‚ˆ": 1555, - "₉": 1556, - "ā‚Š": 1557, - "ā‚": 1558, - "ā‚Ž": 1559, - "ₐ": 1560, - "ā‚‘": 1561, - "ā‚’": 1562, - "ā‚“": 1563, - "ā‚•": 1564, - "ā‚–": 1565, - "ā‚—": 1566, - "ā‚˜": 1567, - "ā‚™": 1568, - "ā‚š": 1569, - "ā‚›": 1570, - "ā‚œ": 1571, - "₤": 1572, - "ā‚©": 1573, - "€": 1574, - "₱": 1575, - "₹": 1576, - "ā„“": 1577, - "ā„–": 1578, - "ā„": 1579, - "ā„¢": 1580, - "ā…“": 1581, - "ā…”": 1582, - "←": 1583, - "↑": 1584, - "→": 1585, - "↓": 1586, - "↔": 1587, - "↦": 1588, - "⇄": 1589, - "ā‡Œ": 1590, - "⇒": 1591, - "āˆ‚": 1592, - "āˆ…": 1593, - "āˆ†": 1594, - "āˆ‡": 1595, - "∈": 1596, - "āˆ’": 1597, - "āˆ—": 1598, - "∘": 1599, - "√": 1600, - "āˆž": 1601, - "∧": 1602, - "∨": 1603, - "∩": 1604, - "∪": 1605, - "ā‰ˆ": 1606, - "≔": 1607, - "≤": 1608, - "≄": 1609, - "āŠ‚": 1610, - "āŠ†": 1611, - "āŠ•": 1612, - "āŠ—": 1613, - "ā‹…": 1614, - "─": 1615, - "│": 1616, - "ā– ": 1617, - "ā–Ŗ": 1618, - "ā—": 1619, - "ā˜…": 1620, - "ā˜†": 1621, - "ā˜‰": 1622, - "ā™ ": 1623, - "♣": 1624, - "♄": 1625, - "♦": 1626, - "ā™­": 1627, - "♯": 1628, - "⟨": 1629, - "⟩": 1630, - "ā±¼": 1631, - "āŗ©": 1632, - "āŗ¼": 1633, - "⽄": 1634, - "态": 1635, - "怂": 1636, - "怈": 1637, - "怉": 1638, - "怊": 1639, - "怋": 1640, - "怌": 1641, - "怍": 1642, - "怎": 1643, - "怏": 1644, - "怜": 1645, - "恂": 1646, - "恄": 1647, - "恆": 1648, - "恈": 1649, - "お": 1650, - "恋": 1651, - "恍": 1652, - "恏": 1653, - "恑": 1654, - "恓": 1655, - "恕": 1656, - "恗": 1657, - "恙": 1658, - "恛": 1659, - "恝": 1660, - "た": 1661, - "恔": 1662, - "っ": 1663, - "恤": 1664, - "恦": 1665, - "と": 1666, - "な": 1667, - "恫": 1668, - "恬": 1669, - "恭": 1670, - "恮": 1671, - "は": 1672, - "ひ": 1673, - "恵": 1674, - "へ": 1675, - "恻": 1676, - "ま": 1677, - "み": 1678, - "悀": 1679, - "悁": 1680, - "悂": 1681, - "悄": 1682, - "悆": 1683, - "悈": 1684, - "悉": 1685, - "悊": 1686, - "悋": 1687, - "悌": 1688, - "悍": 1689, - "悒": 1690, - "悓": 1691, - "ć‚”": 1692, - "ć‚¢": 1693, - "ć‚£": 1694, - "悤": 1695, - "悦": 1696, - "悧": 1697, - "エ": 1698, - "オ": 1699, - "ć‚«": 1700, - "悭": 1701, - "ク": 1702, - "悱": 1703, - "コ": 1704, - "悵": 1705, - "ć‚·": 1706, - "ス": 1707, - "ć‚»": 1708, - "タ": 1709, - "惁": 1710, - "惃": 1711, - "惄": 1712, - "惆": 1713, - "惈": 1714, - "ナ": 1715, - "惋": 1716, - "惎": 1717, - "惏": 1718, - "惒": 1719, - "惕": 1720, - "惘": 1721, - "惛": 1722, - "惞": 1723, - "ミ": 1724, - "惠": 1725, - "惔": 1726, - "モ": 1727, - "ャ": 1728, - "惄": 1729, - "惧": 1730, - "惩": 1731, - "リ": 1732, - "惫": 1733, - "惬": 1734, - "惭": 1735, - "ワ": 1736, - "ン": 1737, - "惻": 1738, - "ー": 1739, - "äø€": 1740, - "äø‰": 1741, - "上": 1742, - "äø‹": 1743, - "äø": 1744, - "äø–": 1745, - "äø­": 1746, - "äø»": 1747, - "久": 1748, - "之": 1749, - "也": 1750, - "äŗ‹": 1751, - "二": 1752, - "äŗ”": 1753, - "äŗ•": 1754, - "äŗ¬": 1755, - "äŗŗ": 1756, - "äŗ»": 1757, - "仁": 1758, - "介": 1759, - "代": 1760, - "ä»®": 1761, - "伊": 1762, - "会": 1763, - "佐": 1764, - "侍": 1765, - "äæ": 1766, - "äæ”": 1767, - "偄": 1768, - "元": 1769, - "光": 1770, - "八": 1771, - "公": 1772, - "内": 1773, - "出": 1774, - "分": 1775, - "前": 1776, - "劉": 1777, - "力": 1778, - "加": 1779, - "勝": 1780, - "北": 1781, - "区": 1782, - "十": 1783, - "千": 1784, - "南": 1785, - "博": 1786, - "原": 1787, - "口": 1788, - "古": 1789, - "史": 1790, - "åø": 1791, - "合": 1792, - "吉": 1793, - "同": 1794, - "名": 1795, - "和": 1796, - "囗": 1797, - "四": 1798, - "国": 1799, - "國": 1800, - "土": 1801, - "地": 1802, - "坂": 1803, - "城": 1804, - "堂": 1805, - "å “": 1806, - "士": 1807, - "夏": 1808, - "外": 1809, - "大": 1810, - "天": 1811, - "太": 1812, - "夫": 1813, - "儈": 1814, - "儳": 1815, - "子": 1816, - "å­¦": 1817, - "宀": 1818, - "宇": 1819, - "安": 1820, - "宗": 1821, - "定": 1822, - "宣": 1823, - "å®®": 1824, - "å®¶": 1825, - "宿": 1826, - "寺": 1827, - "將": 1828, - "小": 1829, - "尚": 1830, - "å±±": 1831, - "å²”": 1832, - "å³¶": 1833, - "哎": 1834, - "川": 1835, - "州": 1836, - "å·æ": 1837, - "åø": 1838, - "å¹³": 1839, - "幓": 1840, - "å¹ø": 1841, - "广": 1842, - "弘": 1843, - "å¼µ": 1844, - "å½³": 1845, - "後": 1846, - "å¾”": 1847, - "å¾·": 1848, - "心": 1849, - "åæ„": 1850, - "åæ—": 1851, - "åæ ": 1852, - "ꄛ": 1853, - "ꈐ": 1854, - "ꈑ": 1855, - "ꈦ": 1856, - "戸": 1857, - "ꉋ": 1858, - "ꉌ": 1859, - "政": 1860, - "ꖇ": 1861, - "ꖰ": 1862, - "ę–¹": 1863, - "ę—„": 1864, - "꘎": 1865, - "星": 1866, - "ꘄ": 1867, - "꘭": 1868, - "智": 1869, - "曲": 1870, - "書": 1871, - "月": 1872, - "꜉": 1873, - "ꜝ": 1874, - "木": 1875, - "本": 1876, - "Ꝏ": 1877, - "ꝑ": 1878, - "ę±": 1879, - "ę¾": 1880, - "ꞗ": 1881, - "森": 1882, - "愊": 1883, - "樹": 1884, - "ę©‹": 1885, - "歌": 1886, - "ę­¢": 1887, - "ę­£": 1888, - "ę­¦": 1889, - "比": 1890, - "갏": 1891, - "갑": 1892, - "ę°“": 1893, - "ę°µ": 1894, - "ę°·": 1895, - "ę°ø": 1896, - "江": 1897, - "ę²¢": 1898, - "ę²³": 1899, - "ę²»": 1900, - "法": 1901, - "ęµ·": 1902, - "ęø…": 1903, - "ę¼¢": 1904, - "瀬": 1905, - "火": 1906, - "ē‰ˆ": 1907, - "犬": 1908, - "ēŽ‹": 1909, - "ē”Ÿ": 1910, - "ē”°": 1911, - "ē”·": 1912, - "ē–’": 1913, - "発": 1914, - "白": 1915, - "ēš„": 1916, - "ēš‡": 1917, - "ē›®": 1918, - "相": 1919, - "省": 1920, - "真": 1921, - "石": 1922, - "示": 1923, - "社": 1924, - "ē„ž": 1925, - "ē¦": 1926, - "禾": 1927, - "ē§€": 1928, - "ē§‹": 1929, - "空": 1930, - "ē«‹": 1931, - "ē« ": 1932, - "竹": 1933, - "ē³¹": 1934, - "ē¾Ž": 1935, - "義": 1936, - "耳": 1937, - "良": 1938, - "艹": 1939, - "花": 1940, - "英": 1941, - "čÆ": 1942, - "葉": 1943, - "藤": 1944, - "蔌": 1945, - "č”—": 1946, - "脿": 1947, - "見": 1948, - "訁": 1949, - "čŖž": 1950, - "č°·": 1951, - "č²": 1952, - "貓": 1953, - "車": 1954, - "č»": 1955, - "č¾¶": 1956, - "道": 1957, - "郎": 1958, - "郔": 1959, - "部": 1960, - "都": 1961, - "里": 1962, - "野": 1963, - "金": 1964, - "鈓": 1965, - "镇": 1966, - "長": 1967, - "門": 1968, - "間": 1969, - "阝": 1970, - "阿": 1971, - "陳": 1972, - "陽": 1973, - "雄": 1974, - "青": 1975, - "面": 1976, - "風": 1977, - "食": 1978, - "香": 1979, - "馬": 1980, - "高": 1981, - "龍": 1982, - "é¾ø": 1983, - "fi": 1984, - "fl": 1985, - "!": 1986, - "(": 1987, - ")": 1988, - ",": 1989, - "ļ¼": 1990, - "ļ¼Ž": 1991, - "ļ¼": 1992, - ":": 1993, - "?": 1994, - "ļ½ž": 1995, - "the": 1996, - "of": 1997, - "and": 1998, - "in": 1999, - "to": 2000, - "was": 2001, - "he": 2002, - "is": 2003, - "as": 2004, - "for": 2005, - "on": 2006, - "with": 2007, - "that": 2008, - "it": 2009, - "his": 2010, - "by": 2011, - "at": 2012, - "from": 2013, - "her": 2014, - "##s": 2015, - "she": 2016, - "you": 2017, - "had": 2018, - "an": 2019, - "were": 2020, - "but": 2021, - "be": 2022, - "this": 2023, - "are": 2024, - "not": 2025, - "my": 2026, - "they": 2027, - "one": 2028, - "which": 2029, - "or": 2030, - "have": 2031, - "him": 2032, - "me": 2033, - "first": 2034, - "all": 2035, - "also": 2036, - "their": 2037, - "has": 2038, - "up": 2039, - "who": 2040, - "out": 2041, - "been": 2042, - "when": 2043, - "after": 2044, - "there": 2045, - "into": 2046, - "new": 2047, - "two": 2048, - "its": 2049, - "##a": 2050, - "time": 2051, - "would": 2052, - "no": 2053, - "what": 2054, - "about": 2055, - "said": 2056, - "we": 2057, - "over": 2058, - "then": 2059, - "other": 2060, - "so": 2061, - "more": 2062, - "##e": 2063, - "can": 2064, - "if": 2065, - "like": 2066, - "back": 2067, - "them": 2068, - "only": 2069, - "some": 2070, - "could": 2071, - "##i": 2072, - "where": 2073, - "just": 2074, - "##ing": 2075, - "during": 2076, - "before": 2077, - "##n": 2078, - "do": 2079, - "##o": 2080, - "made": 2081, - "school": 2082, - "through": 2083, - "than": 2084, - "now": 2085, - "years": 2086, - "most": 2087, - "world": 2088, - "may": 2089, - "between": 2090, - "down": 2091, - "well": 2092, - "three": 2093, - "##d": 2094, - "year": 2095, - "while": 2096, - "will": 2097, - "##ed": 2098, - "##r": 2099, - "##y": 2100, - "later": 2101, - "##t": 2102, - "city": 2103, - "under": 2104, - "around": 2105, - "did": 2106, - "such": 2107, - "being": 2108, - "used": 2109, - "state": 2110, - "people": 2111, - "part": 2112, - "know": 2113, - "against": 2114, - "your": 2115, - "many": 2116, - "second": 2117, - "university": 2118, - "both": 2119, - "national": 2120, - "##er": 2121, - "these": 2122, - "don": 2123, - "known": 2124, - "off": 2125, - "way": 2126, - "until": 2127, - "re": 2128, - "how": 2129, - "even": 2130, - "get": 2131, - "head": 2132, - "...": 2133, - "didn": 2134, - "##ly": 2135, - "team": 2136, - "american": 2137, - "because": 2138, - "de": 2139, - "##l": 2140, - "born": 2141, - "united": 2142, - "film": 2143, - "since": 2144, - "still": 2145, - "long": 2146, - "work": 2147, - "south": 2148, - "us": 2149, - "became": 2150, - "any": 2151, - "high": 2152, - "again": 2153, - "day": 2154, - "family": 2155, - "see": 2156, - "right": 2157, - "man": 2158, - "eyes": 2159, - "house": 2160, - "season": 2161, - "war": 2162, - "states": 2163, - "including": 2164, - "took": 2165, - "life": 2166, - "north": 2167, - "same": 2168, - "each": 2169, - "called": 2170, - "name": 2171, - "much": 2172, - "place": 2173, - "however": 2174, - "go": 2175, - "four": 2176, - "group": 2177, - "another": 2178, - "found": 2179, - "won": 2180, - "area": 2181, - "here": 2182, - "going": 2183, - "10": 2184, - "away": 2185, - "series": 2186, - "left": 2187, - "home": 2188, - "music": 2189, - "best": 2190, - "make": 2191, - "hand": 2192, - "number": 2193, - "company": 2194, - "several": 2195, - "never": 2196, - "last": 2197, - "john": 2198, - "000": 2199, - "very": 2200, - "album": 2201, - "take": 2202, - "end": 2203, - "good": 2204, - "too": 2205, - "following": 2206, - "released": 2207, - "game": 2208, - "played": 2209, - "little": 2210, - "began": 2211, - "district": 2212, - "##m": 2213, - "old": 2214, - "want": 2215, - "those": 2216, - "side": 2217, - "held": 2218, - "own": 2219, - "early": 2220, - "county": 2221, - "ll": 2222, - "league": 2223, - "use": 2224, - "west": 2225, - "##u": 2226, - "face": 2227, - "think": 2228, - "##es": 2229, - "2010": 2230, - "government": 2231, - "##h": 2232, - "march": 2233, - "came": 2234, - "small": 2235, - "general": 2236, - "town": 2237, - "june": 2238, - "##on": 2239, - "line": 2240, - "based": 2241, - "something": 2242, - "##k": 2243, - "september": 2244, - "thought": 2245, - "looked": 2246, - "along": 2247, - "international": 2248, - "2011": 2249, - "air": 2250, - "july": 2251, - "club": 2252, - "went": 2253, - "january": 2254, - "october": 2255, - "our": 2256, - "august": 2257, - "april": 2258, - "york": 2259, - "12": 2260, - "few": 2261, - "2012": 2262, - "2008": 2263, - "east": 2264, - "show": 2265, - "member": 2266, - "college": 2267, - "2009": 2268, - "father": 2269, - "public": 2270, - "##us": 2271, - "come": 2272, - "men": 2273, - "five": 2274, - "set": 2275, - "station": 2276, - "church": 2277, - "##c": 2278, - "next": 2279, - "former": 2280, - "november": 2281, - "room": 2282, - "party": 2283, - "located": 2284, - "december": 2285, - "2013": 2286, - "age": 2287, - "got": 2288, - "2007": 2289, - "##g": 2290, - "system": 2291, - "let": 2292, - "love": 2293, - "2006": 2294, - "though": 2295, - "every": 2296, - "2014": 2297, - "look": 2298, - "song": 2299, - "water": 2300, - "century": 2301, - "without": 2302, - "body": 2303, - "black": 2304, - "night": 2305, - "within": 2306, - "great": 2307, - "women": 2308, - "single": 2309, - "ve": 2310, - "building": 2311, - "large": 2312, - "population": 2313, - "river": 2314, - "named": 2315, - "band": 2316, - "white": 2317, - "started": 2318, - "##an": 2319, - "once": 2320, - "15": 2321, - "20": 2322, - "should": 2323, - "18": 2324, - "2015": 2325, - "service": 2326, - "top": 2327, - "built": 2328, - "british": 2329, - "open": 2330, - "death": 2331, - "king": 2332, - "moved": 2333, - "local": 2334, - "times": 2335, - "children": 2336, - "february": 2337, - "book": 2338, - "why": 2339, - "11": 2340, - "door": 2341, - "need": 2342, - "president": 2343, - "order": 2344, - "final": 2345, - "road": 2346, - "wasn": 2347, - "although": 2348, - "due": 2349, - "major": 2350, - "died": 2351, - "village": 2352, - "third": 2353, - "knew": 2354, - "2016": 2355, - "asked": 2356, - "turned": 2357, - "st": 2358, - "wanted": 2359, - "say": 2360, - "##p": 2361, - "together": 2362, - "received": 2363, - "main": 2364, - "son": 2365, - "served": 2366, - "different": 2367, - "##en": 2368, - "behind": 2369, - "himself": 2370, - "felt": 2371, - "members": 2372, - "power": 2373, - "football": 2374, - "law": 2375, - "voice": 2376, - "play": 2377, - "##in": 2378, - "near": 2379, - "park": 2380, - "history": 2381, - "30": 2382, - "having": 2383, - "2005": 2384, - "16": 2385, - "##man": 2386, - "saw": 2387, - "mother": 2388, - "##al": 2389, - "army": 2390, - "point": 2391, - "front": 2392, - "help": 2393, - "english": 2394, - "street": 2395, - "art": 2396, - "late": 2397, - "hands": 2398, - "games": 2399, - "award": 2400, - "##ia": 2401, - "young": 2402, - "14": 2403, - "put": 2404, - "published": 2405, - "country": 2406, - "division": 2407, - "across": 2408, - "told": 2409, - "13": 2410, - "often": 2411, - "ever": 2412, - "french": 2413, - "london": 2414, - "center": 2415, - "six": 2416, - "red": 2417, - "2017": 2418, - "led": 2419, - "days": 2420, - "include": 2421, - "light": 2422, - "25": 2423, - "find": 2424, - "tell": 2425, - "among": 2426, - "species": 2427, - "really": 2428, - "according": 2429, - "central": 2430, - "half": 2431, - "2004": 2432, - "form": 2433, - "original": 2434, - "gave": 2435, - "office": 2436, - "making": 2437, - "enough": 2438, - "lost": 2439, - "full": 2440, - "opened": 2441, - "must": 2442, - "included": 2443, - "live": 2444, - "given": 2445, - "german": 2446, - "player": 2447, - "run": 2448, - "business": 2449, - "woman": 2450, - "community": 2451, - "cup": 2452, - "might": 2453, - "million": 2454, - "land": 2455, - "2000": 2456, - "court": 2457, - "development": 2458, - "17": 2459, - "short": 2460, - "round": 2461, - "ii": 2462, - "km": 2463, - "seen": 2464, - "class": 2465, - "story": 2466, - "always": 2467, - "become": 2468, - "sure": 2469, - "research": 2470, - "almost": 2471, - "director": 2472, - "council": 2473, - "la": 2474, - "##2": 2475, - "career": 2476, - "things": 2477, - "using": 2478, - "island": 2479, - "##z": 2480, - "couldn": 2481, - "car": 2482, - "##is": 2483, - "24": 2484, - "close": 2485, - "force": 2486, - "##1": 2487, - "better": 2488, - "free": 2489, - "support": 2490, - "control": 2491, - "field": 2492, - "students": 2493, - "2003": 2494, - "education": 2495, - "married": 2496, - "##b": 2497, - "nothing": 2498, - "worked": 2499, - "others": 2500, - "record": 2501, - "big": 2502, - "inside": 2503, - "level": 2504, - "anything": 2505, - "continued": 2506, - "give": 2507, - "james": 2508, - "##3": 2509, - "military": 2510, - "established": 2511, - "non": 2512, - "returned": 2513, - "feel": 2514, - "does": 2515, - "title": 2516, - "written": 2517, - "thing": 2518, - "feet": 2519, - "william": 2520, - "far": 2521, - "co": 2522, - "association": 2523, - "hard": 2524, - "already": 2525, - "2002": 2526, - "##ra": 2527, - "championship": 2528, - "human": 2529, - "western": 2530, - "100": 2531, - "##na": 2532, - "department": 2533, - "hall": 2534, - "role": 2535, - "various": 2536, - "production": 2537, - "21": 2538, - "19": 2539, - "heart": 2540, - "2001": 2541, - "living": 2542, - "fire": 2543, - "version": 2544, - "##ers": 2545, - "##f": 2546, - "television": 2547, - "royal": 2548, - "##4": 2549, - "produced": 2550, - "working": 2551, - "act": 2552, - "case": 2553, - "society": 2554, - "region": 2555, - "present": 2556, - "radio": 2557, - "period": 2558, - "looking": 2559, - "least": 2560, - "total": 2561, - "keep": 2562, - "england": 2563, - "wife": 2564, - "program": 2565, - "per": 2566, - "brother": 2567, - "mind": 2568, - "special": 2569, - "22": 2570, - "##le": 2571, - "am": 2572, - "works": 2573, - "soon": 2574, - "##6": 2575, - "political": 2576, - "george": 2577, - "services": 2578, - "taken": 2579, - "created": 2580, - "##7": 2581, - "further": 2582, - "able": 2583, - "reached": 2584, - "david": 2585, - "union": 2586, - "joined": 2587, - "upon": 2588, - "done": 2589, - "important": 2590, - "social": 2591, - "information": 2592, - "either": 2593, - "##ic": 2594, - "##x": 2595, - "appeared": 2596, - "position": 2597, - "ground": 2598, - "lead": 2599, - "rock": 2600, - "dark": 2601, - "election": 2602, - "23": 2603, - "board": 2604, - "france": 2605, - "hair": 2606, - "course": 2607, - "arms": 2608, - "site": 2609, - "police": 2610, - "girl": 2611, - "instead": 2612, - "real": 2613, - "sound": 2614, - "##v": 2615, - "words": 2616, - "moment": 2617, - "##te": 2618, - "someone": 2619, - "##8": 2620, - "summer": 2621, - "project": 2622, - "announced": 2623, - "san": 2624, - "less": 2625, - "wrote": 2626, - "past": 2627, - "followed": 2628, - "##5": 2629, - "blue": 2630, - "founded": 2631, - "al": 2632, - "finally": 2633, - "india": 2634, - "taking": 2635, - "records": 2636, - "america": 2637, - "##ne": 2638, - "1999": 2639, - "design": 2640, - "considered": 2641, - "northern": 2642, - "god": 2643, - "stop": 2644, - "battle": 2645, - "toward": 2646, - "european": 2647, - "outside": 2648, - "described": 2649, - "track": 2650, - "today": 2651, - "playing": 2652, - "language": 2653, - "28": 2654, - "call": 2655, - "26": 2656, - "heard": 2657, - "professional": 2658, - "low": 2659, - "australia": 2660, - "miles": 2661, - "california": 2662, - "win": 2663, - "yet": 2664, - "green": 2665, - "##ie": 2666, - "trying": 2667, - "blood": 2668, - "##ton": 2669, - "southern": 2670, - "science": 2671, - "maybe": 2672, - "everything": 2673, - "match": 2674, - "square": 2675, - "27": 2676, - "mouth": 2677, - "video": 2678, - "race": 2679, - "recorded": 2680, - "leave": 2681, - "above": 2682, - "##9": 2683, - "daughter": 2684, - "points": 2685, - "space": 2686, - "1998": 2687, - "museum": 2688, - "change": 2689, - "middle": 2690, - "common": 2691, - "##0": 2692, - "move": 2693, - "tv": 2694, - "post": 2695, - "##ta": 2696, - "lake": 2697, - "seven": 2698, - "tried": 2699, - "elected": 2700, - "closed": 2701, - "ten": 2702, - "paul": 2703, - "minister": 2704, - "##th": 2705, - "months": 2706, - "start": 2707, - "chief": 2708, - "return": 2709, - "canada": 2710, - "person": 2711, - "sea": 2712, - "release": 2713, - "similar": 2714, - "modern": 2715, - "brought": 2716, - "rest": 2717, - "hit": 2718, - "formed": 2719, - "mr": 2720, - "##la": 2721, - "1997": 2722, - "floor": 2723, - "event": 2724, - "doing": 2725, - "thomas": 2726, - "1996": 2727, - "robert": 2728, - "care": 2729, - "killed": 2730, - "training": 2731, - "star": 2732, - "week": 2733, - "needed": 2734, - "turn": 2735, - "finished": 2736, - "railway": 2737, - "rather": 2738, - "news": 2739, - "health": 2740, - "sent": 2741, - "example": 2742, - "ran": 2743, - "term": 2744, - "michael": 2745, - "coming": 2746, - "currently": 2747, - "yes": 2748, - "forces": 2749, - "despite": 2750, - "gold": 2751, - "areas": 2752, - "50": 2753, - "stage": 2754, - "fact": 2755, - "29": 2756, - "dead": 2757, - "says": 2758, - "popular": 2759, - "2018": 2760, - "originally": 2761, - "germany": 2762, - "probably": 2763, - "developed": 2764, - "result": 2765, - "pulled": 2766, - "friend": 2767, - "stood": 2768, - "money": 2769, - "running": 2770, - "mi": 2771, - "signed": 2772, - "word": 2773, - "songs": 2774, - "child": 2775, - "eventually": 2776, - "met": 2777, - "tour": 2778, - "average": 2779, - "teams": 2780, - "minutes": 2781, - "festival": 2782, - "current": 2783, - "deep": 2784, - "kind": 2785, - "1995": 2786, - "decided": 2787, - "usually": 2788, - "eastern": 2789, - "seemed": 2790, - "##ness": 2791, - "episode": 2792, - "bed": 2793, - "added": 2794, - "table": 2795, - "indian": 2796, - "private": 2797, - "charles": 2798, - "route": 2799, - "available": 2800, - "idea": 2801, - "throughout": 2802, - "centre": 2803, - "addition": 2804, - "appointed": 2805, - "style": 2806, - "1994": 2807, - "books": 2808, - "eight": 2809, - "construction": 2810, - "press": 2811, - "mean": 2812, - "wall": 2813, - "friends": 2814, - "remained": 2815, - "schools": 2816, - "study": 2817, - "##ch": 2818, - "##um": 2819, - "institute": 2820, - "oh": 2821, - "chinese": 2822, - "sometimes": 2823, - "events": 2824, - "possible": 2825, - "1992": 2826, - "australian": 2827, - "type": 2828, - "brown": 2829, - "forward": 2830, - "talk": 2831, - "process": 2832, - "food": 2833, - "debut": 2834, - "seat": 2835, - "performance": 2836, - "committee": 2837, - "features": 2838, - "character": 2839, - "arts": 2840, - "herself": 2841, - "else": 2842, - "lot": 2843, - "strong": 2844, - "russian": 2845, - "range": 2846, - "hours": 2847, - "peter": 2848, - "arm": 2849, - "##da": 2850, - "morning": 2851, - "dr": 2852, - "sold": 2853, - "##ry": 2854, - "quickly": 2855, - "directed": 2856, - "1993": 2857, - "guitar": 2858, - "china": 2859, - "##w": 2860, - "31": 2861, - "list": 2862, - "##ma": 2863, - "performed": 2864, - "media": 2865, - "uk": 2866, - "players": 2867, - "smile": 2868, - "##rs": 2869, - "myself": 2870, - "40": 2871, - "placed": 2872, - "coach": 2873, - "province": 2874, - "towards": 2875, - "wouldn": 2876, - "leading": 2877, - "whole": 2878, - "boy": 2879, - "official": 2880, - "designed": 2881, - "grand": 2882, - "census": 2883, - "##el": 2884, - "europe": 2885, - "attack": 2886, - "japanese": 2887, - "henry": 2888, - "1991": 2889, - "##re": 2890, - "##os": 2891, - "cross": 2892, - "getting": 2893, - "alone": 2894, - "action": 2895, - "lower": 2896, - "network": 2897, - "wide": 2898, - "washington": 2899, - "japan": 2900, - "1990": 2901, - "hospital": 2902, - "believe": 2903, - "changed": 2904, - "sister": 2905, - "##ar": 2906, - "hold": 2907, - "gone": 2908, - "sir": 2909, - "hadn": 2910, - "ship": 2911, - "##ka": 2912, - "studies": 2913, - "academy": 2914, - "shot": 2915, - "rights": 2916, - "below": 2917, - "base": 2918, - "bad": 2919, - "involved": 2920, - "kept": 2921, - "largest": 2922, - "##ist": 2923, - "bank": 2924, - "future": 2925, - "especially": 2926, - "beginning": 2927, - "mark": 2928, - "movement": 2929, - "section": 2930, - "female": 2931, - "magazine": 2932, - "plan": 2933, - "professor": 2934, - "lord": 2935, - "longer": 2936, - "##ian": 2937, - "sat": 2938, - "walked": 2939, - "hill": 2940, - "actually": 2941, - "civil": 2942, - "energy": 2943, - "model": 2944, - "families": 2945, - "size": 2946, - "thus": 2947, - "aircraft": 2948, - "completed": 2949, - "includes": 2950, - "data": 2951, - "captain": 2952, - "##or": 2953, - "fight": 2954, - "vocals": 2955, - "featured": 2956, - "richard": 2957, - "bridge": 2958, - "fourth": 2959, - "1989": 2960, - "officer": 2961, - "stone": 2962, - "hear": 2963, - "##ism": 2964, - "means": 2965, - "medical": 2966, - "groups": 2967, - "management": 2968, - "self": 2969, - "lips": 2970, - "competition": 2971, - "entire": 2972, - "lived": 2973, - "technology": 2974, - "leaving": 2975, - "federal": 2976, - "tournament": 2977, - "bit": 2978, - "passed": 2979, - "hot": 2980, - "independent": 2981, - "awards": 2982, - "kingdom": 2983, - "mary": 2984, - "spent": 2985, - "fine": 2986, - "doesn": 2987, - "reported": 2988, - "##ling": 2989, - "jack": 2990, - "fall": 2991, - "raised": 2992, - "itself": 2993, - "stay": 2994, - "true": 2995, - "studio": 2996, - "1988": 2997, - "sports": 2998, - "replaced": 2999, - "paris": 3000, - "systems": 3001, - "saint": 3002, - "leader": 3003, - "theatre": 3004, - "whose": 3005, - "market": 3006, - "capital": 3007, - "parents": 3008, - "spanish": 3009, - "canadian": 3010, - "earth": 3011, - "##ity": 3012, - "cut": 3013, - "degree": 3014, - "writing": 3015, - "bay": 3016, - "christian": 3017, - "awarded": 3018, - "natural": 3019, - "higher": 3020, - "bill": 3021, - "##as": 3022, - "coast": 3023, - "provided": 3024, - "previous": 3025, - "senior": 3026, - "ft": 3027, - "valley": 3028, - "organization": 3029, - "stopped": 3030, - "onto": 3031, - "countries": 3032, - "parts": 3033, - "conference": 3034, - "queen": 3035, - "security": 3036, - "interest": 3037, - "saying": 3038, - "allowed": 3039, - "master": 3040, - "earlier": 3041, - "phone": 3042, - "matter": 3043, - "smith": 3044, - "winning": 3045, - "try": 3046, - "happened": 3047, - "moving": 3048, - "campaign": 3049, - "los": 3050, - "##ley": 3051, - "breath": 3052, - "nearly": 3053, - "mid": 3054, - "1987": 3055, - "certain": 3056, - "girls": 3057, - "date": 3058, - "italian": 3059, - "african": 3060, - "standing": 3061, - "fell": 3062, - "artist": 3063, - "##ted": 3064, - "shows": 3065, - "deal": 3066, - "mine": 3067, - "industry": 3068, - "1986": 3069, - "##ng": 3070, - "everyone": 3071, - "republic": 3072, - "provide": 3073, - "collection": 3074, - "library": 3075, - "student": 3076, - "##ville": 3077, - "primary": 3078, - "owned": 3079, - "older": 3080, - "via": 3081, - "heavy": 3082, - "1st": 3083, - "makes": 3084, - "##able": 3085, - "attention": 3086, - "anyone": 3087, - "africa": 3088, - "##ri": 3089, - "stated": 3090, - "length": 3091, - "ended": 3092, - "fingers": 3093, - "command": 3094, - "staff": 3095, - "skin": 3096, - "foreign": 3097, - "opening": 3098, - "governor": 3099, - "okay": 3100, - "medal": 3101, - "kill": 3102, - "sun": 3103, - "cover": 3104, - "job": 3105, - "1985": 3106, - "introduced": 3107, - "chest": 3108, - "hell": 3109, - "feeling": 3110, - "##ies": 3111, - "success": 3112, - "meet": 3113, - "reason": 3114, - "standard": 3115, - "meeting": 3116, - "novel": 3117, - "1984": 3118, - "trade": 3119, - "source": 3120, - "buildings": 3121, - "##land": 3122, - "rose": 3123, - "guy": 3124, - "goal": 3125, - "##ur": 3126, - "chapter": 3127, - "native": 3128, - "husband": 3129, - "previously": 3130, - "unit": 3131, - "limited": 3132, - "entered": 3133, - "weeks": 3134, - "producer": 3135, - "operations": 3136, - "mountain": 3137, - "takes": 3138, - "covered": 3139, - "forced": 3140, - "related": 3141, - "roman": 3142, - "complete": 3143, - "successful": 3144, - "key": 3145, - "texas": 3146, - "cold": 3147, - "##ya": 3148, - "channel": 3149, - "1980": 3150, - "traditional": 3151, - "films": 3152, - "dance": 3153, - "clear": 3154, - "approximately": 3155, - "500": 3156, - "nine": 3157, - "van": 3158, - "prince": 3159, - "question": 3160, - "active": 3161, - "tracks": 3162, - "ireland": 3163, - "regional": 3164, - "silver": 3165, - "author": 3166, - "personal": 3167, - "sense": 3168, - "operation": 3169, - "##ine": 3170, - "economic": 3171, - "1983": 3172, - "holding": 3173, - "twenty": 3174, - "isbn": 3175, - "additional": 3176, - "speed": 3177, - "hour": 3178, - "edition": 3179, - "regular": 3180, - "historic": 3181, - "places": 3182, - "whom": 3183, - "shook": 3184, - "movie": 3185, - "km²": 3186, - "secretary": 3187, - "prior": 3188, - "report": 3189, - "chicago": 3190, - "read": 3191, - "foundation": 3192, - "view": 3193, - "engine": 3194, - "scored": 3195, - "1982": 3196, - "units": 3197, - "ask": 3198, - "airport": 3199, - "property": 3200, - "ready": 3201, - "immediately": 3202, - "lady": 3203, - "month": 3204, - "listed": 3205, - "contract": 3206, - "##de": 3207, - "manager": 3208, - "themselves": 3209, - "lines": 3210, - "##ki": 3211, - "navy": 3212, - "writer": 3213, - "meant": 3214, - "##ts": 3215, - "runs": 3216, - "##ro": 3217, - "practice": 3218, - "championships": 3219, - "singer": 3220, - "glass": 3221, - "commission": 3222, - "required": 3223, - "forest": 3224, - "starting": 3225, - "culture": 3226, - "generally": 3227, - "giving": 3228, - "access": 3229, - "attended": 3230, - "test": 3231, - "couple": 3232, - "stand": 3233, - "catholic": 3234, - "martin": 3235, - "caught": 3236, - "executive": 3237, - "##less": 3238, - "eye": 3239, - "##ey": 3240, - "thinking": 3241, - "chair": 3242, - "quite": 3243, - "shoulder": 3244, - "1979": 3245, - "hope": 3246, - "decision": 3247, - "plays": 3248, - "defeated": 3249, - "municipality": 3250, - "whether": 3251, - "structure": 3252, - "offered": 3253, - "slowly": 3254, - "pain": 3255, - "ice": 3256, - "direction": 3257, - "##ion": 3258, - "paper": 3259, - "mission": 3260, - "1981": 3261, - "mostly": 3262, - "200": 3263, - "noted": 3264, - "individual": 3265, - "managed": 3266, - "nature": 3267, - "lives": 3268, - "plant": 3269, - "##ha": 3270, - "helped": 3271, - "except": 3272, - "studied": 3273, - "computer": 3274, - "figure": 3275, - "relationship": 3276, - "issue": 3277, - "significant": 3278, - "loss": 3279, - "die": 3280, - "smiled": 3281, - "gun": 3282, - "ago": 3283, - "highest": 3284, - "1972": 3285, - "##am": 3286, - "male": 3287, - "bring": 3288, - "goals": 3289, - "mexico": 3290, - "problem": 3291, - "distance": 3292, - "commercial": 3293, - "completely": 3294, - "location": 3295, - "annual": 3296, - "famous": 3297, - "drive": 3298, - "1976": 3299, - "neck": 3300, - "1978": 3301, - "surface": 3302, - "caused": 3303, - "italy": 3304, - "understand": 3305, - "greek": 3306, - "highway": 3307, - "wrong": 3308, - "hotel": 3309, - "comes": 3310, - "appearance": 3311, - "joseph": 3312, - "double": 3313, - "issues": 3314, - "musical": 3315, - "companies": 3316, - "castle": 3317, - "income": 3318, - "review": 3319, - "assembly": 3320, - "bass": 3321, - "initially": 3322, - "parliament": 3323, - "artists": 3324, - "experience": 3325, - "1974": 3326, - "particular": 3327, - "walk": 3328, - "foot": 3329, - "engineering": 3330, - "talking": 3331, - "window": 3332, - "dropped": 3333, - "##ter": 3334, - "miss": 3335, - "baby": 3336, - "boys": 3337, - "break": 3338, - "1975": 3339, - "stars": 3340, - "edge": 3341, - "remember": 3342, - "policy": 3343, - "carried": 3344, - "train": 3345, - "stadium": 3346, - "bar": 3347, - "sex": 3348, - "angeles": 3349, - "evidence": 3350, - "##ge": 3351, - "becoming": 3352, - "assistant": 3353, - "soviet": 3354, - "1977": 3355, - "upper": 3356, - "step": 3357, - "wing": 3358, - "1970": 3359, - "youth": 3360, - "financial": 3361, - "reach": 3362, - "##ll": 3363, - "actor": 3364, - "numerous": 3365, - "##se": 3366, - "##st": 3367, - "nodded": 3368, - "arrived": 3369, - "##ation": 3370, - "minute": 3371, - "##nt": 3372, - "believed": 3373, - "sorry": 3374, - "complex": 3375, - "beautiful": 3376, - "victory": 3377, - "associated": 3378, - "temple": 3379, - "1968": 3380, - "1973": 3381, - "chance": 3382, - "perhaps": 3383, - "metal": 3384, - "##son": 3385, - "1945": 3386, - "bishop": 3387, - "##et": 3388, - "lee": 3389, - "launched": 3390, - "particularly": 3391, - "tree": 3392, - "le": 3393, - "retired": 3394, - "subject": 3395, - "prize": 3396, - "contains": 3397, - "yeah": 3398, - "theory": 3399, - "empire": 3400, - "##ce": 3401, - "suddenly": 3402, - "waiting": 3403, - "trust": 3404, - "recording": 3405, - "##to": 3406, - "happy": 3407, - "terms": 3408, - "camp": 3409, - "champion": 3410, - "1971": 3411, - "religious": 3412, - "pass": 3413, - "zealand": 3414, - "names": 3415, - "2nd": 3416, - "port": 3417, - "ancient": 3418, - "tom": 3419, - "corner": 3420, - "represented": 3421, - "watch": 3422, - "legal": 3423, - "anti": 3424, - "justice": 3425, - "cause": 3426, - "watched": 3427, - "brothers": 3428, - "45": 3429, - "material": 3430, - "changes": 3431, - "simply": 3432, - "response": 3433, - "louis": 3434, - "fast": 3435, - "##ting": 3436, - "answer": 3437, - "60": 3438, - "historical": 3439, - "1969": 3440, - "stories": 3441, - "straight": 3442, - "create": 3443, - "feature": 3444, - "increased": 3445, - "rate": 3446, - "administration": 3447, - "virginia": 3448, - "el": 3449, - "activities": 3450, - "cultural": 3451, - "overall": 3452, - "winner": 3453, - "programs": 3454, - "basketball": 3455, - "legs": 3456, - "guard": 3457, - "beyond": 3458, - "cast": 3459, - "doctor": 3460, - "mm": 3461, - "flight": 3462, - "results": 3463, - "remains": 3464, - "cost": 3465, - "effect": 3466, - "winter": 3467, - "##ble": 3468, - "larger": 3469, - "islands": 3470, - "problems": 3471, - "chairman": 3472, - "grew": 3473, - "commander": 3474, - "isn": 3475, - "1967": 3476, - "pay": 3477, - "failed": 3478, - "selected": 3479, - "hurt": 3480, - "fort": 3481, - "box": 3482, - "regiment": 3483, - "majority": 3484, - "journal": 3485, - "35": 3486, - "edward": 3487, - "plans": 3488, - "##ke": 3489, - "##ni": 3490, - "shown": 3491, - "pretty": 3492, - "irish": 3493, - "characters": 3494, - "directly": 3495, - "scene": 3496, - "likely": 3497, - "operated": 3498, - "allow": 3499, - "spring": 3500, - "##j": 3501, - "junior": 3502, - "matches": 3503, - "looks": 3504, - "mike": 3505, - "houses": 3506, - "fellow": 3507, - "##tion": 3508, - "beach": 3509, - "marriage": 3510, - "##ham": 3511, - "##ive": 3512, - "rules": 3513, - "oil": 3514, - "65": 3515, - "florida": 3516, - "expected": 3517, - "nearby": 3518, - "congress": 3519, - "sam": 3520, - "peace": 3521, - "recent": 3522, - "iii": 3523, - "wait": 3524, - "subsequently": 3525, - "cell": 3526, - "##do": 3527, - "variety": 3528, - "serving": 3529, - "agreed": 3530, - "please": 3531, - "poor": 3532, - "joe": 3533, - "pacific": 3534, - "attempt": 3535, - "wood": 3536, - "democratic": 3537, - "piece": 3538, - "prime": 3539, - "##ca": 3540, - "rural": 3541, - "mile": 3542, - "touch": 3543, - "appears": 3544, - "township": 3545, - "1964": 3546, - "1966": 3547, - "soldiers": 3548, - "##men": 3549, - "##ized": 3550, - "1965": 3551, - "pennsylvania": 3552, - "closer": 3553, - "fighting": 3554, - "claimed": 3555, - "score": 3556, - "jones": 3557, - "physical": 3558, - "editor": 3559, - "##ous": 3560, - "filled": 3561, - "genus": 3562, - "specific": 3563, - "sitting": 3564, - "super": 3565, - "mom": 3566, - "##va": 3567, - "therefore": 3568, - "supported": 3569, - "status": 3570, - "fear": 3571, - "cases": 3572, - "store": 3573, - "meaning": 3574, - "wales": 3575, - "minor": 3576, - "spain": 3577, - "tower": 3578, - "focus": 3579, - "vice": 3580, - "frank": 3581, - "follow": 3582, - "parish": 3583, - "separate": 3584, - "golden": 3585, - "horse": 3586, - "fifth": 3587, - "remaining": 3588, - "branch": 3589, - "32": 3590, - "presented": 3591, - "stared": 3592, - "##id": 3593, - "uses": 3594, - "secret": 3595, - "forms": 3596, - "##co": 3597, - "baseball": 3598, - "exactly": 3599, - "##ck": 3600, - "choice": 3601, - "note": 3602, - "discovered": 3603, - "travel": 3604, - "composed": 3605, - "truth": 3606, - "russia": 3607, - "ball": 3608, - "color": 3609, - "kiss": 3610, - "dad": 3611, - "wind": 3612, - "continue": 3613, - "ring": 3614, - "referred": 3615, - "numbers": 3616, - "digital": 3617, - "greater": 3618, - "##ns": 3619, - "metres": 3620, - "slightly": 3621, - "direct": 3622, - "increase": 3623, - "1960": 3624, - "responsible": 3625, - "crew": 3626, - "rule": 3627, - "trees": 3628, - "troops": 3629, - "##no": 3630, - "broke": 3631, - "goes": 3632, - "individuals": 3633, - "hundred": 3634, - "weight": 3635, - "creek": 3636, - "sleep": 3637, - "memory": 3638, - "defense": 3639, - "provides": 3640, - "ordered": 3641, - "code": 3642, - "value": 3643, - "jewish": 3644, - "windows": 3645, - "1944": 3646, - "safe": 3647, - "judge": 3648, - "whatever": 3649, - "corps": 3650, - "realized": 3651, - "growing": 3652, - "pre": 3653, - "##ga": 3654, - "cities": 3655, - "alexander": 3656, - "gaze": 3657, - "lies": 3658, - "spread": 3659, - "scott": 3660, - "letter": 3661, - "showed": 3662, - "situation": 3663, - "mayor": 3664, - "transport": 3665, - "watching": 3666, - "workers": 3667, - "extended": 3668, - "##li": 3669, - "expression": 3670, - "normal": 3671, - "##ment": 3672, - "chart": 3673, - "multiple": 3674, - "border": 3675, - "##ba": 3676, - "host": 3677, - "##ner": 3678, - "daily": 3679, - "mrs": 3680, - "walls": 3681, - "piano": 3682, - "##ko": 3683, - "heat": 3684, - "cannot": 3685, - "##ate": 3686, - "earned": 3687, - "products": 3688, - "drama": 3689, - "era": 3690, - "authority": 3691, - "seasons": 3692, - "join": 3693, - "grade": 3694, - "##io": 3695, - "sign": 3696, - "difficult": 3697, - "machine": 3698, - "1963": 3699, - "territory": 3700, - "mainly": 3701, - "##wood": 3702, - "stations": 3703, - "squadron": 3704, - "1962": 3705, - "stepped": 3706, - "iron": 3707, - "19th": 3708, - "##led": 3709, - "serve": 3710, - "appear": 3711, - "sky": 3712, - "speak": 3713, - "broken": 3714, - "charge": 3715, - "knowledge": 3716, - "kilometres": 3717, - "removed": 3718, - "ships": 3719, - "article": 3720, - "campus": 3721, - "simple": 3722, - "##ty": 3723, - "pushed": 3724, - "britain": 3725, - "##ve": 3726, - "leaves": 3727, - "recently": 3728, - "cd": 3729, - "soft": 3730, - "boston": 3731, - "latter": 3732, - "easy": 3733, - "acquired": 3734, - "poland": 3735, - "##sa": 3736, - "quality": 3737, - "officers": 3738, - "presence": 3739, - "planned": 3740, - "nations": 3741, - "mass": 3742, - "broadcast": 3743, - "jean": 3744, - "share": 3745, - "image": 3746, - "influence": 3747, - "wild": 3748, - "offer": 3749, - "emperor": 3750, - "electric": 3751, - "reading": 3752, - "headed": 3753, - "ability": 3754, - "promoted": 3755, - "yellow": 3756, - "ministry": 3757, - "1942": 3758, - "throat": 3759, - "smaller": 3760, - "politician": 3761, - "##by": 3762, - "latin": 3763, - "spoke": 3764, - "cars": 3765, - "williams": 3766, - "males": 3767, - "lack": 3768, - "pop": 3769, - "80": 3770, - "##ier": 3771, - "acting": 3772, - "seeing": 3773, - "consists": 3774, - "##ti": 3775, - "estate": 3776, - "1961": 3777, - "pressure": 3778, - "johnson": 3779, - "newspaper": 3780, - "jr": 3781, - "chris": 3782, - "olympics": 3783, - "online": 3784, - "conditions": 3785, - "beat": 3786, - "elements": 3787, - "walking": 3788, - "vote": 3789, - "##field": 3790, - "needs": 3791, - "carolina": 3792, - "text": 3793, - "featuring": 3794, - "global": 3795, - "block": 3796, - "shirt": 3797, - "levels": 3798, - "francisco": 3799, - "purpose": 3800, - "females": 3801, - "et": 3802, - "dutch": 3803, - "duke": 3804, - "ahead": 3805, - "gas": 3806, - "twice": 3807, - "safety": 3808, - "serious": 3809, - "turning": 3810, - "highly": 3811, - "lieutenant": 3812, - "firm": 3813, - "maria": 3814, - "amount": 3815, - "mixed": 3816, - "daniel": 3817, - "proposed": 3818, - "perfect": 3819, - "agreement": 3820, - "affairs": 3821, - "3rd": 3822, - "seconds": 3823, - "contemporary": 3824, - "paid": 3825, - "1943": 3826, - "prison": 3827, - "save": 3828, - "kitchen": 3829, - "label": 3830, - "administrative": 3831, - "intended": 3832, - "constructed": 3833, - "academic": 3834, - "nice": 3835, - "teacher": 3836, - "races": 3837, - "1956": 3838, - "formerly": 3839, - "corporation": 3840, - "ben": 3841, - "nation": 3842, - "issued": 3843, - "shut": 3844, - "1958": 3845, - "drums": 3846, - "housing": 3847, - "victoria": 3848, - "seems": 3849, - "opera": 3850, - "1959": 3851, - "graduated": 3852, - "function": 3853, - "von": 3854, - "mentioned": 3855, - "picked": 3856, - "build": 3857, - "recognized": 3858, - "shortly": 3859, - "protection": 3860, - "picture": 3861, - "notable": 3862, - "exchange": 3863, - "elections": 3864, - "1980s": 3865, - "loved": 3866, - "percent": 3867, - "racing": 3868, - "fish": 3869, - "elizabeth": 3870, - "garden": 3871, - "volume": 3872, - "hockey": 3873, - "1941": 3874, - "beside": 3875, - "settled": 3876, - "##ford": 3877, - "1940": 3878, - "competed": 3879, - "replied": 3880, - "drew": 3881, - "1948": 3882, - "actress": 3883, - "marine": 3884, - "scotland": 3885, - "steel": 3886, - "glanced": 3887, - "farm": 3888, - "steve": 3889, - "1957": 3890, - "risk": 3891, - "tonight": 3892, - "positive": 3893, - "magic": 3894, - "singles": 3895, - "effects": 3896, - "gray": 3897, - "screen": 3898, - "dog": 3899, - "##ja": 3900, - "residents": 3901, - "bus": 3902, - "sides": 3903, - "none": 3904, - "secondary": 3905, - "literature": 3906, - "polish": 3907, - "destroyed": 3908, - "flying": 3909, - "founder": 3910, - "households": 3911, - "1939": 3912, - "lay": 3913, - "reserve": 3914, - "usa": 3915, - "gallery": 3916, - "##ler": 3917, - "1946": 3918, - "industrial": 3919, - "younger": 3920, - "approach": 3921, - "appearances": 3922, - "urban": 3923, - "ones": 3924, - "1950": 3925, - "finish": 3926, - "avenue": 3927, - "powerful": 3928, - "fully": 3929, - "growth": 3930, - "page": 3931, - "honor": 3932, - "jersey": 3933, - "projects": 3934, - "advanced": 3935, - "revealed": 3936, - "basic": 3937, - "90": 3938, - "infantry": 3939, - "pair": 3940, - "equipment": 3941, - "visit": 3942, - "33": 3943, - "evening": 3944, - "search": 3945, - "grant": 3946, - "effort": 3947, - "solo": 3948, - "treatment": 3949, - "buried": 3950, - "republican": 3951, - "primarily": 3952, - "bottom": 3953, - "owner": 3954, - "1970s": 3955, - "israel": 3956, - "gives": 3957, - "jim": 3958, - "dream": 3959, - "bob": 3960, - "remain": 3961, - "spot": 3962, - "70": 3963, - "notes": 3964, - "produce": 3965, - "champions": 3966, - "contact": 3967, - "ed": 3968, - "soul": 3969, - "accepted": 3970, - "ways": 3971, - "del": 3972, - "##ally": 3973, - "losing": 3974, - "split": 3975, - "price": 3976, - "capacity": 3977, - "basis": 3978, - "trial": 3979, - "questions": 3980, - "##ina": 3981, - "1955": 3982, - "20th": 3983, - "guess": 3984, - "officially": 3985, - "memorial": 3986, - "naval": 3987, - "initial": 3988, - "##ization": 3989, - "whispered": 3990, - "median": 3991, - "engineer": 3992, - "##ful": 3993, - "sydney": 3994, - "##go": 3995, - "columbia": 3996, - "strength": 3997, - "300": 3998, - "1952": 3999, - "tears": 4000, - "senate": 4001, - "00": 4002, - "card": 4003, - "asian": 4004, - "agent": 4005, - "1947": 4006, - "software": 4007, - "44": 4008, - "draw": 4009, - "warm": 4010, - "supposed": 4011, - "com": 4012, - "pro": 4013, - "##il": 4014, - "transferred": 4015, - "leaned": 4016, - "##at": 4017, - "candidate": 4018, - "escape": 4019, - "mountains": 4020, - "asia": 4021, - "potential": 4022, - "activity": 4023, - "entertainment": 4024, - "seem": 4025, - "traffic": 4026, - "jackson": 4027, - "murder": 4028, - "36": 4029, - "slow": 4030, - "product": 4031, - "orchestra": 4032, - "haven": 4033, - "agency": 4034, - "bbc": 4035, - "taught": 4036, - "website": 4037, - "comedy": 4038, - "unable": 4039, - "storm": 4040, - "planning": 4041, - "albums": 4042, - "rugby": 4043, - "environment": 4044, - "scientific": 4045, - "grabbed": 4046, - "protect": 4047, - "##hi": 4048, - "boat": 4049, - "typically": 4050, - "1954": 4051, - "1953": 4052, - "damage": 4053, - "principal": 4054, - "divided": 4055, - "dedicated": 4056, - "mount": 4057, - "ohio": 4058, - "##berg": 4059, - "pick": 4060, - "fought": 4061, - "driver": 4062, - "##der": 4063, - "empty": 4064, - "shoulders": 4065, - "sort": 4066, - "thank": 4067, - "berlin": 4068, - "prominent": 4069, - "account": 4070, - "freedom": 4071, - "necessary": 4072, - "efforts": 4073, - "alex": 4074, - "headquarters": 4075, - "follows": 4076, - "alongside": 4077, - "des": 4078, - "simon": 4079, - "andrew": 4080, - "suggested": 4081, - "operating": 4082, - "learning": 4083, - "steps": 4084, - "1949": 4085, - "sweet": 4086, - "technical": 4087, - "begin": 4088, - "easily": 4089, - "34": 4090, - "teeth": 4091, - "speaking": 4092, - "settlement": 4093, - "scale": 4094, - "##sh": 4095, - "renamed": 4096, - "ray": 4097, - "max": 4098, - "enemy": 4099, - "semi": 4100, - "joint": 4101, - "compared": 4102, - "##rd": 4103, - "scottish": 4104, - "leadership": 4105, - "analysis": 4106, - "offers": 4107, - "georgia": 4108, - "pieces": 4109, - "captured": 4110, - "animal": 4111, - "deputy": 4112, - "guest": 4113, - "organized": 4114, - "##lin": 4115, - "tony": 4116, - "combined": 4117, - "method": 4118, - "challenge": 4119, - "1960s": 4120, - "huge": 4121, - "wants": 4122, - "battalion": 4123, - "sons": 4124, - "rise": 4125, - "crime": 4126, - "types": 4127, - "facilities": 4128, - "telling": 4129, - "path": 4130, - "1951": 4131, - "platform": 4132, - "sit": 4133, - "1990s": 4134, - "##lo": 4135, - "tells": 4136, - "assigned": 4137, - "rich": 4138, - "pull": 4139, - "##ot": 4140, - "commonly": 4141, - "alive": 4142, - "##za": 4143, - "letters": 4144, - "concept": 4145, - "conducted": 4146, - "wearing": 4147, - "happen": 4148, - "bought": 4149, - "becomes": 4150, - "holy": 4151, - "gets": 4152, - "ocean": 4153, - "defeat": 4154, - "languages": 4155, - "purchased": 4156, - "coffee": 4157, - "occurred": 4158, - "titled": 4159, - "##q": 4160, - "declared": 4161, - "applied": 4162, - "sciences": 4163, - "concert": 4164, - "sounds": 4165, - "jazz": 4166, - "brain": 4167, - "##me": 4168, - "painting": 4169, - "fleet": 4170, - "tax": 4171, - "nick": 4172, - "##ius": 4173, - "michigan": 4174, - "count": 4175, - "animals": 4176, - "leaders": 4177, - "episodes": 4178, - "##line": 4179, - "content": 4180, - "##den": 4181, - "birth": 4182, - "##it": 4183, - "clubs": 4184, - "64": 4185, - "palace": 4186, - "critical": 4187, - "refused": 4188, - "fair": 4189, - "leg": 4190, - "laughed": 4191, - "returning": 4192, - "surrounding": 4193, - "participated": 4194, - "formation": 4195, - "lifted": 4196, - "pointed": 4197, - "connected": 4198, - "rome": 4199, - "medicine": 4200, - "laid": 4201, - "taylor": 4202, - "santa": 4203, - "powers": 4204, - "adam": 4205, - "tall": 4206, - "shared": 4207, - "focused": 4208, - "knowing": 4209, - "yards": 4210, - "entrance": 4211, - "falls": 4212, - "##wa": 4213, - "calling": 4214, - "##ad": 4215, - "sources": 4216, - "chosen": 4217, - "beneath": 4218, - "resources": 4219, - "yard": 4220, - "##ite": 4221, - "nominated": 4222, - "silence": 4223, - "zone": 4224, - "defined": 4225, - "##que": 4226, - "gained": 4227, - "thirty": 4228, - "38": 4229, - "bodies": 4230, - "moon": 4231, - "##ard": 4232, - "adopted": 4233, - "christmas": 4234, - "widely": 4235, - "register": 4236, - "apart": 4237, - "iran": 4238, - "premier": 4239, - "serves": 4240, - "du": 4241, - "unknown": 4242, - "parties": 4243, - "##les": 4244, - "generation": 4245, - "##ff": 4246, - "continues": 4247, - "quick": 4248, - "fields": 4249, - "brigade": 4250, - "quiet": 4251, - "teaching": 4252, - "clothes": 4253, - "impact": 4254, - "weapons": 4255, - "partner": 4256, - "flat": 4257, - "theater": 4258, - "supreme": 4259, - "1938": 4260, - "37": 4261, - "relations": 4262, - "##tor": 4263, - "plants": 4264, - "suffered": 4265, - "1936": 4266, - "wilson": 4267, - "kids": 4268, - "begins": 4269, - "##age": 4270, - "1918": 4271, - "seats": 4272, - "armed": 4273, - "internet": 4274, - "models": 4275, - "worth": 4276, - "laws": 4277, - "400": 4278, - "communities": 4279, - "classes": 4280, - "background": 4281, - "knows": 4282, - "thanks": 4283, - "quarter": 4284, - "reaching": 4285, - "humans": 4286, - "carry": 4287, - "killing": 4288, - "format": 4289, - "kong": 4290, - "hong": 4291, - "setting": 4292, - "75": 4293, - "architecture": 4294, - "disease": 4295, - "railroad": 4296, - "inc": 4297, - "possibly": 4298, - "wish": 4299, - "arthur": 4300, - "thoughts": 4301, - "harry": 4302, - "doors": 4303, - "density": 4304, - "##di": 4305, - "crowd": 4306, - "illinois": 4307, - "stomach": 4308, - "tone": 4309, - "unique": 4310, - "reports": 4311, - "anyway": 4312, - "##ir": 4313, - "liberal": 4314, - "der": 4315, - "vehicle": 4316, - "thick": 4317, - "dry": 4318, - "drug": 4319, - "faced": 4320, - "largely": 4321, - "facility": 4322, - "theme": 4323, - "holds": 4324, - "creation": 4325, - "strange": 4326, - "colonel": 4327, - "##mi": 4328, - "revolution": 4329, - "bell": 4330, - "politics": 4331, - "turns": 4332, - "silent": 4333, - "rail": 4334, - "relief": 4335, - "independence": 4336, - "combat": 4337, - "shape": 4338, - "write": 4339, - "determined": 4340, - "sales": 4341, - "learned": 4342, - "4th": 4343, - "finger": 4344, - "oxford": 4345, - "providing": 4346, - "1937": 4347, - "heritage": 4348, - "fiction": 4349, - "situated": 4350, - "designated": 4351, - "allowing": 4352, - "distribution": 4353, - "hosted": 4354, - "##est": 4355, - "sight": 4356, - "interview": 4357, - "estimated": 4358, - "reduced": 4359, - "##ria": 4360, - "toronto": 4361, - "footballer": 4362, - "keeping": 4363, - "guys": 4364, - "damn": 4365, - "claim": 4366, - "motion": 4367, - "sport": 4368, - "sixth": 4369, - "stayed": 4370, - "##ze": 4371, - "en": 4372, - "rear": 4373, - "receive": 4374, - "handed": 4375, - "twelve": 4376, - "dress": 4377, - "audience": 4378, - "granted": 4379, - "brazil": 4380, - "##well": 4381, - "spirit": 4382, - "##ated": 4383, - "noticed": 4384, - "etc": 4385, - "olympic": 4386, - "representative": 4387, - "eric": 4388, - "tight": 4389, - "trouble": 4390, - "reviews": 4391, - "drink": 4392, - "vampire": 4393, - "missing": 4394, - "roles": 4395, - "ranked": 4396, - "newly": 4397, - "household": 4398, - "finals": 4399, - "wave": 4400, - "critics": 4401, - "##ee": 4402, - "phase": 4403, - "massachusetts": 4404, - "pilot": 4405, - "unlike": 4406, - "philadelphia": 4407, - "bright": 4408, - "guns": 4409, - "crown": 4410, - "organizations": 4411, - "roof": 4412, - "42": 4413, - "respectively": 4414, - "clearly": 4415, - "tongue": 4416, - "marked": 4417, - "circle": 4418, - "fox": 4419, - "korea": 4420, - "bronze": 4421, - "brian": 4422, - "expanded": 4423, - "sexual": 4424, - "supply": 4425, - "yourself": 4426, - "inspired": 4427, - "labour": 4428, - "fc": 4429, - "##ah": 4430, - "reference": 4431, - "vision": 4432, - "draft": 4433, - "connection": 4434, - "brand": 4435, - "reasons": 4436, - "1935": 4437, - "classic": 4438, - "driving": 4439, - "trip": 4440, - "jesus": 4441, - "cells": 4442, - "entry": 4443, - "1920": 4444, - "neither": 4445, - "trail": 4446, - "claims": 4447, - "atlantic": 4448, - "orders": 4449, - "labor": 4450, - "nose": 4451, - "afraid": 4452, - "identified": 4453, - "intelligence": 4454, - "calls": 4455, - "cancer": 4456, - "attacked": 4457, - "passing": 4458, - "stephen": 4459, - "positions": 4460, - "imperial": 4461, - "grey": 4462, - "jason": 4463, - "39": 4464, - "sunday": 4465, - "48": 4466, - "swedish": 4467, - "avoid": 4468, - "extra": 4469, - "uncle": 4470, - "message": 4471, - "covers": 4472, - "allows": 4473, - "surprise": 4474, - "materials": 4475, - "fame": 4476, - "hunter": 4477, - "##ji": 4478, - "1930": 4479, - "citizens": 4480, - "figures": 4481, - "davis": 4482, - "environmental": 4483, - "confirmed": 4484, - "shit": 4485, - "titles": 4486, - "di": 4487, - "performing": 4488, - "difference": 4489, - "acts": 4490, - "attacks": 4491, - "##ov": 4492, - "existing": 4493, - "votes": 4494, - "opportunity": 4495, - "nor": 4496, - "shop": 4497, - "entirely": 4498, - "trains": 4499, - "opposite": 4500, - "pakistan": 4501, - "##pa": 4502, - "develop": 4503, - "resulted": 4504, - "representatives": 4505, - "actions": 4506, - "reality": 4507, - "pressed": 4508, - "##ish": 4509, - "barely": 4510, - "wine": 4511, - "conversation": 4512, - "faculty": 4513, - "northwest": 4514, - "ends": 4515, - "documentary": 4516, - "nuclear": 4517, - "stock": 4518, - "grace": 4519, - "sets": 4520, - "eat": 4521, - "alternative": 4522, - "##ps": 4523, - "bag": 4524, - "resulting": 4525, - "creating": 4526, - "surprised": 4527, - "cemetery": 4528, - "1919": 4529, - "drop": 4530, - "finding": 4531, - "sarah": 4532, - "cricket": 4533, - "streets": 4534, - "tradition": 4535, - "ride": 4536, - "1933": 4537, - "exhibition": 4538, - "target": 4539, - "ear": 4540, - "explained": 4541, - "rain": 4542, - "composer": 4543, - "injury": 4544, - "apartment": 4545, - "municipal": 4546, - "educational": 4547, - "occupied": 4548, - "netherlands": 4549, - "clean": 4550, - "billion": 4551, - "constitution": 4552, - "learn": 4553, - "1914": 4554, - "maximum": 4555, - "classical": 4556, - "francis": 4557, - "lose": 4558, - "opposition": 4559, - "jose": 4560, - "ontario": 4561, - "bear": 4562, - "core": 4563, - "hills": 4564, - "rolled": 4565, - "ending": 4566, - "drawn": 4567, - "permanent": 4568, - "fun": 4569, - "##tes": 4570, - "##lla": 4571, - "lewis": 4572, - "sites": 4573, - "chamber": 4574, - "ryan": 4575, - "##way": 4576, - "scoring": 4577, - "height": 4578, - "1934": 4579, - "##house": 4580, - "lyrics": 4581, - "staring": 4582, - "55": 4583, - "officials": 4584, - "1917": 4585, - "snow": 4586, - "oldest": 4587, - "##tic": 4588, - "orange": 4589, - "##ger": 4590, - "qualified": 4591, - "interior": 4592, - "apparently": 4593, - "succeeded": 4594, - "thousand": 4595, - "dinner": 4596, - "lights": 4597, - "existence": 4598, - "fans": 4599, - "heavily": 4600, - "41": 4601, - "greatest": 4602, - "conservative": 4603, - "send": 4604, - "bowl": 4605, - "plus": 4606, - "enter": 4607, - "catch": 4608, - "##un": 4609, - "economy": 4610, - "duty": 4611, - "1929": 4612, - "speech": 4613, - "authorities": 4614, - "princess": 4615, - "performances": 4616, - "versions": 4617, - "shall": 4618, - "graduate": 4619, - "pictures": 4620, - "effective": 4621, - "remembered": 4622, - "poetry": 4623, - "desk": 4624, - "crossed": 4625, - "starring": 4626, - "starts": 4627, - "passenger": 4628, - "sharp": 4629, - "##ant": 4630, - "acres": 4631, - "ass": 4632, - "weather": 4633, - "falling": 4634, - "rank": 4635, - "fund": 4636, - "supporting": 4637, - "check": 4638, - "adult": 4639, - "publishing": 4640, - "heads": 4641, - "cm": 4642, - "southeast": 4643, - "lane": 4644, - "##burg": 4645, - "application": 4646, - "bc": 4647, - "##ura": 4648, - "les": 4649, - "condition": 4650, - "transfer": 4651, - "prevent": 4652, - "display": 4653, - "ex": 4654, - "regions": 4655, - "earl": 4656, - "federation": 4657, - "cool": 4658, - "relatively": 4659, - "answered": 4660, - "besides": 4661, - "1928": 4662, - "obtained": 4663, - "portion": 4664, - "##town": 4665, - "mix": 4666, - "##ding": 4667, - "reaction": 4668, - "liked": 4669, - "dean": 4670, - "express": 4671, - "peak": 4672, - "1932": 4673, - "##tte": 4674, - "counter": 4675, - "religion": 4676, - "chain": 4677, - "rare": 4678, - "miller": 4679, - "convention": 4680, - "aid": 4681, - "lie": 4682, - "vehicles": 4683, - "mobile": 4684, - "perform": 4685, - "squad": 4686, - "wonder": 4687, - "lying": 4688, - "crazy": 4689, - "sword": 4690, - "##ping": 4691, - "attempted": 4692, - "centuries": 4693, - "weren": 4694, - "philosophy": 4695, - "category": 4696, - "##ize": 4697, - "anna": 4698, - "interested": 4699, - "47": 4700, - "sweden": 4701, - "wolf": 4702, - "frequently": 4703, - "abandoned": 4704, - "kg": 4705, - "literary": 4706, - "alliance": 4707, - "task": 4708, - "entitled": 4709, - "##ay": 4710, - "threw": 4711, - "promotion": 4712, - "factory": 4713, - "tiny": 4714, - "soccer": 4715, - "visited": 4716, - "matt": 4717, - "fm": 4718, - "achieved": 4719, - "52": 4720, - "defence": 4721, - "internal": 4722, - "persian": 4723, - "43": 4724, - "methods": 4725, - "##ging": 4726, - "arrested": 4727, - "otherwise": 4728, - "cambridge": 4729, - "programming": 4730, - "villages": 4731, - "elementary": 4732, - "districts": 4733, - "rooms": 4734, - "criminal": 4735, - "conflict": 4736, - "worry": 4737, - "trained": 4738, - "1931": 4739, - "attempts": 4740, - "waited": 4741, - "signal": 4742, - "bird": 4743, - "truck": 4744, - "subsequent": 4745, - "programme": 4746, - "##ol": 4747, - "ad": 4748, - "49": 4749, - "communist": 4750, - "details": 4751, - "faith": 4752, - "sector": 4753, - "patrick": 4754, - "carrying": 4755, - "laugh": 4756, - "##ss": 4757, - "controlled": 4758, - "korean": 4759, - "showing": 4760, - "origin": 4761, - "fuel": 4762, - "evil": 4763, - "1927": 4764, - "##ent": 4765, - "brief": 4766, - "identity": 4767, - "darkness": 4768, - "address": 4769, - "pool": 4770, - "missed": 4771, - "publication": 4772, - "web": 4773, - "planet": 4774, - "ian": 4775, - "anne": 4776, - "wings": 4777, - "invited": 4778, - "##tt": 4779, - "briefly": 4780, - "standards": 4781, - "kissed": 4782, - "##be": 4783, - "ideas": 4784, - "climate": 4785, - "causing": 4786, - "walter": 4787, - "worse": 4788, - "albert": 4789, - "articles": 4790, - "winners": 4791, - "desire": 4792, - "aged": 4793, - "northeast": 4794, - "dangerous": 4795, - "gate": 4796, - "doubt": 4797, - "1922": 4798, - "wooden": 4799, - "multi": 4800, - "##ky": 4801, - "poet": 4802, - "rising": 4803, - "funding": 4804, - "46": 4805, - "communications": 4806, - "communication": 4807, - "violence": 4808, - "copies": 4809, - "prepared": 4810, - "ford": 4811, - "investigation": 4812, - "skills": 4813, - "1924": 4814, - "pulling": 4815, - "electronic": 4816, - "##ak": 4817, - "##ial": 4818, - "##han": 4819, - "containing": 4820, - "ultimately": 4821, - "offices": 4822, - "singing": 4823, - "understanding": 4824, - "restaurant": 4825, - "tomorrow": 4826, - "fashion": 4827, - "christ": 4828, - "ward": 4829, - "da": 4830, - "pope": 4831, - "stands": 4832, - "5th": 4833, - "flow": 4834, - "studios": 4835, - "aired": 4836, - "commissioned": 4837, - "contained": 4838, - "exist": 4839, - "fresh": 4840, - "americans": 4841, - "##per": 4842, - "wrestling": 4843, - "approved": 4844, - "kid": 4845, - "employed": 4846, - "respect": 4847, - "suit": 4848, - "1925": 4849, - "angel": 4850, - "asking": 4851, - "increasing": 4852, - "frame": 4853, - "angry": 4854, - "selling": 4855, - "1950s": 4856, - "thin": 4857, - "finds": 4858, - "##nd": 4859, - "temperature": 4860, - "statement": 4861, - "ali": 4862, - "explain": 4863, - "inhabitants": 4864, - "towns": 4865, - "extensive": 4866, - "narrow": 4867, - "51": 4868, - "jane": 4869, - "flowers": 4870, - "images": 4871, - "promise": 4872, - "somewhere": 4873, - "object": 4874, - "fly": 4875, - "closely": 4876, - "##ls": 4877, - "1912": 4878, - "bureau": 4879, - "cape": 4880, - "1926": 4881, - "weekly": 4882, - "presidential": 4883, - "legislative": 4884, - "1921": 4885, - "##ai": 4886, - "##au": 4887, - "launch": 4888, - "founding": 4889, - "##ny": 4890, - "978": 4891, - "##ring": 4892, - "artillery": 4893, - "strike": 4894, - "un": 4895, - "institutions": 4896, - "roll": 4897, - "writers": 4898, - "landing": 4899, - "chose": 4900, - "kevin": 4901, - "anymore": 4902, - "pp": 4903, - "##ut": 4904, - "attorney": 4905, - "fit": 4906, - "dan": 4907, - "billboard": 4908, - "receiving": 4909, - "agricultural": 4910, - "breaking": 4911, - "sought": 4912, - "dave": 4913, - "admitted": 4914, - "lands": 4915, - "mexican": 4916, - "##bury": 4917, - "charlie": 4918, - "specifically": 4919, - "hole": 4920, - "iv": 4921, - "howard": 4922, - "credit": 4923, - "moscow": 4924, - "roads": 4925, - "accident": 4926, - "1923": 4927, - "proved": 4928, - "wear": 4929, - "struck": 4930, - "hey": 4931, - "guards": 4932, - "stuff": 4933, - "slid": 4934, - "expansion": 4935, - "1915": 4936, - "cat": 4937, - "anthony": 4938, - "##kin": 4939, - "melbourne": 4940, - "opposed": 4941, - "sub": 4942, - "southwest": 4943, - "architect": 4944, - "failure": 4945, - "plane": 4946, - "1916": 4947, - "##ron": 4948, - "map": 4949, - "camera": 4950, - "tank": 4951, - "listen": 4952, - "regarding": 4953, - "wet": 4954, - "introduction": 4955, - "metropolitan": 4956, - "link": 4957, - "ep": 4958, - "fighter": 4959, - "inch": 4960, - "grown": 4961, - "gene": 4962, - "anger": 4963, - "fixed": 4964, - "buy": 4965, - "dvd": 4966, - "khan": 4967, - "domestic": 4968, - "worldwide": 4969, - "chapel": 4970, - "mill": 4971, - "functions": 4972, - "examples": 4973, - "##head": 4974, - "developing": 4975, - "1910": 4976, - "turkey": 4977, - "hits": 4978, - "pocket": 4979, - "antonio": 4980, - "papers": 4981, - "grow": 4982, - "unless": 4983, - "circuit": 4984, - "18th": 4985, - "concerned": 4986, - "attached": 4987, - "journalist": 4988, - "selection": 4989, - "journey": 4990, - "converted": 4991, - "provincial": 4992, - "painted": 4993, - "hearing": 4994, - "aren": 4995, - "bands": 4996, - "negative": 4997, - "aside": 4998, - "wondered": 4999, - "knight": 5000, - "lap": 5001, - "survey": 5002, - "ma": 5003, - "##ow": 5004, - "noise": 5005, - "billy": 5006, - "##ium": 5007, - "shooting": 5008, - "guide": 5009, - "bedroom": 5010, - "priest": 5011, - "resistance": 5012, - "motor": 5013, - "homes": 5014, - "sounded": 5015, - "giant": 5016, - "##mer": 5017, - "150": 5018, - "scenes": 5019, - "equal": 5020, - "comic": 5021, - "patients": 5022, - "hidden": 5023, - "solid": 5024, - "actual": 5025, - "bringing": 5026, - "afternoon": 5027, - "touched": 5028, - "funds": 5029, - "wedding": 5030, - "consisted": 5031, - "marie": 5032, - "canal": 5033, - "sr": 5034, - "kim": 5035, - "treaty": 5036, - "turkish": 5037, - "recognition": 5038, - "residence": 5039, - "cathedral": 5040, - "broad": 5041, - "knees": 5042, - "incident": 5043, - "shaped": 5044, - "fired": 5045, - "norwegian": 5046, - "handle": 5047, - "cheek": 5048, - "contest": 5049, - "represent": 5050, - "##pe": 5051, - "representing": 5052, - "beauty": 5053, - "##sen": 5054, - "birds": 5055, - "advantage": 5056, - "emergency": 5057, - "wrapped": 5058, - "drawing": 5059, - "notice": 5060, - "pink": 5061, - "broadcasting": 5062, - "##ong": 5063, - "somehow": 5064, - "bachelor": 5065, - "seventh": 5066, - "collected": 5067, - "registered": 5068, - "establishment": 5069, - "alan": 5070, - "assumed": 5071, - "chemical": 5072, - "personnel": 5073, - "roger": 5074, - "retirement": 5075, - "jeff": 5076, - "portuguese": 5077, - "wore": 5078, - "tied": 5079, - "device": 5080, - "threat": 5081, - "progress": 5082, - "advance": 5083, - "##ised": 5084, - "banks": 5085, - "hired": 5086, - "manchester": 5087, - "nfl": 5088, - "teachers": 5089, - "structures": 5090, - "forever": 5091, - "##bo": 5092, - "tennis": 5093, - "helping": 5094, - "saturday": 5095, - "sale": 5096, - "applications": 5097, - "junction": 5098, - "hip": 5099, - "incorporated": 5100, - "neighborhood": 5101, - "dressed": 5102, - "ceremony": 5103, - "##ds": 5104, - "influenced": 5105, - "hers": 5106, - "visual": 5107, - "stairs": 5108, - "decades": 5109, - "inner": 5110, - "kansas": 5111, - "hung": 5112, - "hoped": 5113, - "gain": 5114, - "scheduled": 5115, - "downtown": 5116, - "engaged": 5117, - "austria": 5118, - "clock": 5119, - "norway": 5120, - "certainly": 5121, - "pale": 5122, - "protected": 5123, - "1913": 5124, - "victor": 5125, - "employees": 5126, - "plate": 5127, - "putting": 5128, - "surrounded": 5129, - "##ists": 5130, - "finishing": 5131, - "blues": 5132, - "tropical": 5133, - "##ries": 5134, - "minnesota": 5135, - "consider": 5136, - "philippines": 5137, - "accept": 5138, - "54": 5139, - "retrieved": 5140, - "1900": 5141, - "concern": 5142, - "anderson": 5143, - "properties": 5144, - "institution": 5145, - "gordon": 5146, - "successfully": 5147, - "vietnam": 5148, - "##dy": 5149, - "backing": 5150, - "outstanding": 5151, - "muslim": 5152, - "crossing": 5153, - "folk": 5154, - "producing": 5155, - "usual": 5156, - "demand": 5157, - "occurs": 5158, - "observed": 5159, - "lawyer": 5160, - "educated": 5161, - "##ana": 5162, - "kelly": 5163, - "string": 5164, - "pleasure": 5165, - "budget": 5166, - "items": 5167, - "quietly": 5168, - "colorado": 5169, - "philip": 5170, - "typical": 5171, - "##worth": 5172, - "derived": 5173, - "600": 5174, - "survived": 5175, - "asks": 5176, - "mental": 5177, - "##ide": 5178, - "56": 5179, - "jake": 5180, - "jews": 5181, - "distinguished": 5182, - "ltd": 5183, - "1911": 5184, - "sri": 5185, - "extremely": 5186, - "53": 5187, - "athletic": 5188, - "loud": 5189, - "thousands": 5190, - "worried": 5191, - "shadow": 5192, - "transportation": 5193, - "horses": 5194, - "weapon": 5195, - "arena": 5196, - "importance": 5197, - "users": 5198, - "tim": 5199, - "objects": 5200, - "contributed": 5201, - "dragon": 5202, - "douglas": 5203, - "aware": 5204, - "senator": 5205, - "johnny": 5206, - "jordan": 5207, - "sisters": 5208, - "engines": 5209, - "flag": 5210, - "investment": 5211, - "samuel": 5212, - "shock": 5213, - "capable": 5214, - "clark": 5215, - "row": 5216, - "wheel": 5217, - "refers": 5218, - "session": 5219, - "familiar": 5220, - "biggest": 5221, - "wins": 5222, - "hate": 5223, - "maintained": 5224, - "drove": 5225, - "hamilton": 5226, - "request": 5227, - "expressed": 5228, - "injured": 5229, - "underground": 5230, - "churches": 5231, - "walker": 5232, - "wars": 5233, - "tunnel": 5234, - "passes": 5235, - "stupid": 5236, - "agriculture": 5237, - "softly": 5238, - "cabinet": 5239, - "regarded": 5240, - "joining": 5241, - "indiana": 5242, - "##ea": 5243, - "##ms": 5244, - "push": 5245, - "dates": 5246, - "spend": 5247, - "behavior": 5248, - "woods": 5249, - "protein": 5250, - "gently": 5251, - "chase": 5252, - "morgan": 5253, - "mention": 5254, - "burning": 5255, - "wake": 5256, - "combination": 5257, - "occur": 5258, - "mirror": 5259, - "leads": 5260, - "jimmy": 5261, - "indeed": 5262, - "impossible": 5263, - "singapore": 5264, - "paintings": 5265, - "covering": 5266, - "##nes": 5267, - "soldier": 5268, - "locations": 5269, - "attendance": 5270, - "sell": 5271, - "historian": 5272, - "wisconsin": 5273, - "invasion": 5274, - "argued": 5275, - "painter": 5276, - "diego": 5277, - "changing": 5278, - "egypt": 5279, - "##don": 5280, - "experienced": 5281, - "inches": 5282, - "##ku": 5283, - "missouri": 5284, - "vol": 5285, - "grounds": 5286, - "spoken": 5287, - "switzerland": 5288, - "##gan": 5289, - "reform": 5290, - "rolling": 5291, - "ha": 5292, - "forget": 5293, - "massive": 5294, - "resigned": 5295, - "burned": 5296, - "allen": 5297, - "tennessee": 5298, - "locked": 5299, - "values": 5300, - "improved": 5301, - "##mo": 5302, - "wounded": 5303, - "universe": 5304, - "sick": 5305, - "dating": 5306, - "facing": 5307, - "pack": 5308, - "purchase": 5309, - "user": 5310, - "##pur": 5311, - "moments": 5312, - "##ul": 5313, - "merged": 5314, - "anniversary": 5315, - "1908": 5316, - "coal": 5317, - "brick": 5318, - "understood": 5319, - "causes": 5320, - "dynasty": 5321, - "queensland": 5322, - "establish": 5323, - "stores": 5324, - "crisis": 5325, - "promote": 5326, - "hoping": 5327, - "views": 5328, - "cards": 5329, - "referee": 5330, - "extension": 5331, - "##si": 5332, - "raise": 5333, - "arizona": 5334, - "improve": 5335, - "colonial": 5336, - "formal": 5337, - "charged": 5338, - "##rt": 5339, - "palm": 5340, - "lucky": 5341, - "hide": 5342, - "rescue": 5343, - "faces": 5344, - "95": 5345, - "feelings": 5346, - "candidates": 5347, - "juan": 5348, - "##ell": 5349, - "goods": 5350, - "6th": 5351, - "courses": 5352, - "weekend": 5353, - "59": 5354, - "luke": 5355, - "cash": 5356, - "fallen": 5357, - "##om": 5358, - "delivered": 5359, - "affected": 5360, - "installed": 5361, - "carefully": 5362, - "tries": 5363, - "swiss": 5364, - "hollywood": 5365, - "costs": 5366, - "lincoln": 5367, - "responsibility": 5368, - "##he": 5369, - "shore": 5370, - "file": 5371, - "proper": 5372, - "normally": 5373, - "maryland": 5374, - "assistance": 5375, - "jump": 5376, - "constant": 5377, - "offering": 5378, - "friendly": 5379, - "waters": 5380, - "persons": 5381, - "realize": 5382, - "contain": 5383, - "trophy": 5384, - "800": 5385, - "partnership": 5386, - "factor": 5387, - "58": 5388, - "musicians": 5389, - "cry": 5390, - "bound": 5391, - "oregon": 5392, - "indicated": 5393, - "hero": 5394, - "houston": 5395, - "medium": 5396, - "##ure": 5397, - "consisting": 5398, - "somewhat": 5399, - "##ara": 5400, - "57": 5401, - "cycle": 5402, - "##che": 5403, - "beer": 5404, - "moore": 5405, - "frederick": 5406, - "gotten": 5407, - "eleven": 5408, - "worst": 5409, - "weak": 5410, - "approached": 5411, - "arranged": 5412, - "chin": 5413, - "loan": 5414, - "universal": 5415, - "bond": 5416, - "fifteen": 5417, - "pattern": 5418, - "disappeared": 5419, - "##ney": 5420, - "translated": 5421, - "##zed": 5422, - "lip": 5423, - "arab": 5424, - "capture": 5425, - "interests": 5426, - "insurance": 5427, - "##chi": 5428, - "shifted": 5429, - "cave": 5430, - "prix": 5431, - "warning": 5432, - "sections": 5433, - "courts": 5434, - "coat": 5435, - "plot": 5436, - "smell": 5437, - "feed": 5438, - "golf": 5439, - "favorite": 5440, - "maintain": 5441, - "knife": 5442, - "vs": 5443, - "voted": 5444, - "degrees": 5445, - "finance": 5446, - "quebec": 5447, - "opinion": 5448, - "translation": 5449, - "manner": 5450, - "ruled": 5451, - "operate": 5452, - "productions": 5453, - "choose": 5454, - "musician": 5455, - "discovery": 5456, - "confused": 5457, - "tired": 5458, - "separated": 5459, - "stream": 5460, - "techniques": 5461, - "committed": 5462, - "attend": 5463, - "ranking": 5464, - "kings": 5465, - "throw": 5466, - "passengers": 5467, - "measure": 5468, - "horror": 5469, - "fan": 5470, - "mining": 5471, - "sand": 5472, - "danger": 5473, - "salt": 5474, - "calm": 5475, - "decade": 5476, - "dam": 5477, - "require": 5478, - "runner": 5479, - "##ik": 5480, - "rush": 5481, - "associate": 5482, - "greece": 5483, - "##ker": 5484, - "rivers": 5485, - "consecutive": 5486, - "matthew": 5487, - "##ski": 5488, - "sighed": 5489, - "sq": 5490, - "documents": 5491, - "steam": 5492, - "edited": 5493, - "closing": 5494, - "tie": 5495, - "accused": 5496, - "1905": 5497, - "##ini": 5498, - "islamic": 5499, - "distributed": 5500, - "directors": 5501, - "organisation": 5502, - "bruce": 5503, - "7th": 5504, - "breathing": 5505, - "mad": 5506, - "lit": 5507, - "arrival": 5508, - "concrete": 5509, - "taste": 5510, - "08": 5511, - "composition": 5512, - "shaking": 5513, - "faster": 5514, - "amateur": 5515, - "adjacent": 5516, - "stating": 5517, - "1906": 5518, - "twin": 5519, - "flew": 5520, - "##ran": 5521, - "tokyo": 5522, - "publications": 5523, - "##tone": 5524, - "obviously": 5525, - "ridge": 5526, - "storage": 5527, - "1907": 5528, - "carl": 5529, - "pages": 5530, - "concluded": 5531, - "desert": 5532, - "driven": 5533, - "universities": 5534, - "ages": 5535, - "terminal": 5536, - "sequence": 5537, - "borough": 5538, - "250": 5539, - "constituency": 5540, - "creative": 5541, - "cousin": 5542, - "economics": 5543, - "dreams": 5544, - "margaret": 5545, - "notably": 5546, - "reduce": 5547, - "montreal": 5548, - "mode": 5549, - "17th": 5550, - "ears": 5551, - "saved": 5552, - "jan": 5553, - "vocal": 5554, - "##ica": 5555, - "1909": 5556, - "andy": 5557, - "##jo": 5558, - "riding": 5559, - "roughly": 5560, - "threatened": 5561, - "##ise": 5562, - "meters": 5563, - "meanwhile": 5564, - "landed": 5565, - "compete": 5566, - "repeated": 5567, - "grass": 5568, - "czech": 5569, - "regularly": 5570, - "charges": 5571, - "tea": 5572, - "sudden": 5573, - "appeal": 5574, - "##ung": 5575, - "solution": 5576, - "describes": 5577, - "pierre": 5578, - "classification": 5579, - "glad": 5580, - "parking": 5581, - "##ning": 5582, - "belt": 5583, - "physics": 5584, - "99": 5585, - "rachel": 5586, - "add": 5587, - "hungarian": 5588, - "participate": 5589, - "expedition": 5590, - "damaged": 5591, - "gift": 5592, - "childhood": 5593, - "85": 5594, - "fifty": 5595, - "##red": 5596, - "mathematics": 5597, - "jumped": 5598, - "letting": 5599, - "defensive": 5600, - "mph": 5601, - "##ux": 5602, - "##gh": 5603, - "testing": 5604, - "##hip": 5605, - "hundreds": 5606, - "shoot": 5607, - "owners": 5608, - "matters": 5609, - "smoke": 5610, - "israeli": 5611, - "kentucky": 5612, - "dancing": 5613, - "mounted": 5614, - "grandfather": 5615, - "emma": 5616, - "designs": 5617, - "profit": 5618, - "argentina": 5619, - "##gs": 5620, - "truly": 5621, - "li": 5622, - "lawrence": 5623, - "cole": 5624, - "begun": 5625, - "detroit": 5626, - "willing": 5627, - "branches": 5628, - "smiling": 5629, - "decide": 5630, - "miami": 5631, - "enjoyed": 5632, - "recordings": 5633, - "##dale": 5634, - "poverty": 5635, - "ethnic": 5636, - "gay": 5637, - "##bi": 5638, - "gary": 5639, - "arabic": 5640, - "09": 5641, - "accompanied": 5642, - "##one": 5643, - "##ons": 5644, - "fishing": 5645, - "determine": 5646, - "residential": 5647, - "acid": 5648, - "##ary": 5649, - "alice": 5650, - "returns": 5651, - "starred": 5652, - "mail": 5653, - "##ang": 5654, - "jonathan": 5655, - "strategy": 5656, - "##ue": 5657, - "net": 5658, - "forty": 5659, - "cook": 5660, - "businesses": 5661, - "equivalent": 5662, - "commonwealth": 5663, - "distinct": 5664, - "ill": 5665, - "##cy": 5666, - "seriously": 5667, - "##ors": 5668, - "##ped": 5669, - "shift": 5670, - "harris": 5671, - "replace": 5672, - "rio": 5673, - "imagine": 5674, - "formula": 5675, - "ensure": 5676, - "##ber": 5677, - "additionally": 5678, - "scheme": 5679, - "conservation": 5680, - "occasionally": 5681, - "purposes": 5682, - "feels": 5683, - "favor": 5684, - "##and": 5685, - "##ore": 5686, - "1930s": 5687, - "contrast": 5688, - "hanging": 5689, - "hunt": 5690, - "movies": 5691, - "1904": 5692, - "instruments": 5693, - "victims": 5694, - "danish": 5695, - "christopher": 5696, - "busy": 5697, - "demon": 5698, - "sugar": 5699, - "earliest": 5700, - "colony": 5701, - "studying": 5702, - "balance": 5703, - "duties": 5704, - "##ks": 5705, - "belgium": 5706, - "slipped": 5707, - "carter": 5708, - "05": 5709, - "visible": 5710, - "stages": 5711, - "iraq": 5712, - "fifa": 5713, - "##im": 5714, - "commune": 5715, - "forming": 5716, - "zero": 5717, - "07": 5718, - "continuing": 5719, - "talked": 5720, - "counties": 5721, - "legend": 5722, - "bathroom": 5723, - "option": 5724, - "tail": 5725, - "clay": 5726, - "daughters": 5727, - "afterwards": 5728, - "severe": 5729, - "jaw": 5730, - "visitors": 5731, - "##ded": 5732, - "devices": 5733, - "aviation": 5734, - "russell": 5735, - "kate": 5736, - "##vi": 5737, - "entering": 5738, - "subjects": 5739, - "##ino": 5740, - "temporary": 5741, - "swimming": 5742, - "forth": 5743, - "smooth": 5744, - "ghost": 5745, - "audio": 5746, - "bush": 5747, - "operates": 5748, - "rocks": 5749, - "movements": 5750, - "signs": 5751, - "eddie": 5752, - "##tz": 5753, - "ann": 5754, - "voices": 5755, - "honorary": 5756, - "06": 5757, - "memories": 5758, - "dallas": 5759, - "pure": 5760, - "measures": 5761, - "racial": 5762, - "promised": 5763, - "66": 5764, - "harvard": 5765, - "ceo": 5766, - "16th": 5767, - "parliamentary": 5768, - "indicate": 5769, - "benefit": 5770, - "flesh": 5771, - "dublin": 5772, - "louisiana": 5773, - "1902": 5774, - "1901": 5775, - "patient": 5776, - "sleeping": 5777, - "1903": 5778, - "membership": 5779, - "coastal": 5780, - "medieval": 5781, - "wanting": 5782, - "element": 5783, - "scholars": 5784, - "rice": 5785, - "62": 5786, - "limit": 5787, - "survive": 5788, - "makeup": 5789, - "rating": 5790, - "definitely": 5791, - "collaboration": 5792, - "obvious": 5793, - "##tan": 5794, - "boss": 5795, - "ms": 5796, - "baron": 5797, - "birthday": 5798, - "linked": 5799, - "soil": 5800, - "diocese": 5801, - "##lan": 5802, - "ncaa": 5803, - "##mann": 5804, - "offensive": 5805, - "shell": 5806, - "shouldn": 5807, - "waist": 5808, - "##tus": 5809, - "plain": 5810, - "ross": 5811, - "organ": 5812, - "resolution": 5813, - "manufacturing": 5814, - "adding": 5815, - "relative": 5816, - "kennedy": 5817, - "98": 5818, - "whilst": 5819, - "moth": 5820, - "marketing": 5821, - "gardens": 5822, - "crash": 5823, - "72": 5824, - "heading": 5825, - "partners": 5826, - "credited": 5827, - "carlos": 5828, - "moves": 5829, - "cable": 5830, - "##zi": 5831, - "marshall": 5832, - "##out": 5833, - "depending": 5834, - "bottle": 5835, - "represents": 5836, - "rejected": 5837, - "responded": 5838, - "existed": 5839, - "04": 5840, - "jobs": 5841, - "denmark": 5842, - "lock": 5843, - "##ating": 5844, - "treated": 5845, - "graham": 5846, - "routes": 5847, - "talent": 5848, - "commissioner": 5849, - "drugs": 5850, - "secure": 5851, - "tests": 5852, - "reign": 5853, - "restored": 5854, - "photography": 5855, - "##gi": 5856, - "contributions": 5857, - "oklahoma": 5858, - "designer": 5859, - "disc": 5860, - "grin": 5861, - "seattle": 5862, - "robin": 5863, - "paused": 5864, - "atlanta": 5865, - "unusual": 5866, - "##gate": 5867, - "praised": 5868, - "las": 5869, - "laughing": 5870, - "satellite": 5871, - "hungary": 5872, - "visiting": 5873, - "##sky": 5874, - "interesting": 5875, - "factors": 5876, - "deck": 5877, - "poems": 5878, - "norman": 5879, - "##water": 5880, - "stuck": 5881, - "speaker": 5882, - "rifle": 5883, - "domain": 5884, - "premiered": 5885, - "##her": 5886, - "dc": 5887, - "comics": 5888, - "actors": 5889, - "01": 5890, - "reputation": 5891, - "eliminated": 5892, - "8th": 5893, - "ceiling": 5894, - "prisoners": 5895, - "script": 5896, - "##nce": 5897, - "leather": 5898, - "austin": 5899, - "mississippi": 5900, - "rapidly": 5901, - "admiral": 5902, - "parallel": 5903, - "charlotte": 5904, - "guilty": 5905, - "tools": 5906, - "gender": 5907, - "divisions": 5908, - "fruit": 5909, - "##bs": 5910, - "laboratory": 5911, - "nelson": 5912, - "fantasy": 5913, - "marry": 5914, - "rapid": 5915, - "aunt": 5916, - "tribe": 5917, - "requirements": 5918, - "aspects": 5919, - "suicide": 5920, - "amongst": 5921, - "adams": 5922, - "bone": 5923, - "ukraine": 5924, - "abc": 5925, - "kick": 5926, - "sees": 5927, - "edinburgh": 5928, - "clothing": 5929, - "column": 5930, - "rough": 5931, - "gods": 5932, - "hunting": 5933, - "broadway": 5934, - "gathered": 5935, - "concerns": 5936, - "##ek": 5937, - "spending": 5938, - "ty": 5939, - "12th": 5940, - "snapped": 5941, - "requires": 5942, - "solar": 5943, - "bones": 5944, - "cavalry": 5945, - "##tta": 5946, - "iowa": 5947, - "drinking": 5948, - "waste": 5949, - "index": 5950, - "franklin": 5951, - "charity": 5952, - "thompson": 5953, - "stewart": 5954, - "tip": 5955, - "flash": 5956, - "landscape": 5957, - "friday": 5958, - "enjoy": 5959, - "singh": 5960, - "poem": 5961, - "listening": 5962, - "##back": 5963, - "eighth": 5964, - "fred": 5965, - "differences": 5966, - "adapted": 5967, - "bomb": 5968, - "ukrainian": 5969, - "surgery": 5970, - "corporate": 5971, - "masters": 5972, - "anywhere": 5973, - "##more": 5974, - "waves": 5975, - "odd": 5976, - "sean": 5977, - "portugal": 5978, - "orleans": 5979, - "dick": 5980, - "debate": 5981, - "kent": 5982, - "eating": 5983, - "puerto": 5984, - "cleared": 5985, - "96": 5986, - "expect": 5987, - "cinema": 5988, - "97": 5989, - "guitarist": 5990, - "blocks": 5991, - "electrical": 5992, - "agree": 5993, - "involving": 5994, - "depth": 5995, - "dying": 5996, - "panel": 5997, - "struggle": 5998, - "##ged": 5999, - "peninsula": 6000, - "adults": 6001, - "novels": 6002, - "emerged": 6003, - "vienna": 6004, - "metro": 6005, - "debuted": 6006, - "shoes": 6007, - "tamil": 6008, - "songwriter": 6009, - "meets": 6010, - "prove": 6011, - "beating": 6012, - "instance": 6013, - "heaven": 6014, - "scared": 6015, - "sending": 6016, - "marks": 6017, - "artistic": 6018, - "passage": 6019, - "superior": 6020, - "03": 6021, - "significantly": 6022, - "shopping": 6023, - "##tive": 6024, - "retained": 6025, - "##izing": 6026, - "malaysia": 6027, - "technique": 6028, - "cheeks": 6029, - "##ola": 6030, - "warren": 6031, - "maintenance": 6032, - "destroy": 6033, - "extreme": 6034, - "allied": 6035, - "120": 6036, - "appearing": 6037, - "##yn": 6038, - "fill": 6039, - "advice": 6040, - "alabama": 6041, - "qualifying": 6042, - "policies": 6043, - "cleveland": 6044, - "hat": 6045, - "battery": 6046, - "smart": 6047, - "authors": 6048, - "10th": 6049, - "soundtrack": 6050, - "acted": 6051, - "dated": 6052, - "lb": 6053, - "glance": 6054, - "equipped": 6055, - "coalition": 6056, - "funny": 6057, - "outer": 6058, - "ambassador": 6059, - "roy": 6060, - "possibility": 6061, - "couples": 6062, - "campbell": 6063, - "dna": 6064, - "loose": 6065, - "ethan": 6066, - "supplies": 6067, - "1898": 6068, - "gonna": 6069, - "88": 6070, - "monster": 6071, - "##res": 6072, - "shake": 6073, - "agents": 6074, - "frequency": 6075, - "springs": 6076, - "dogs": 6077, - "practices": 6078, - "61": 6079, - "gang": 6080, - "plastic": 6081, - "easier": 6082, - "suggests": 6083, - "gulf": 6084, - "blade": 6085, - "exposed": 6086, - "colors": 6087, - "industries": 6088, - "markets": 6089, - "pan": 6090, - "nervous": 6091, - "electoral": 6092, - "charts": 6093, - "legislation": 6094, - "ownership": 6095, - "##idae": 6096, - "mac": 6097, - "appointment": 6098, - "shield": 6099, - "copy": 6100, - "assault": 6101, - "socialist": 6102, - "abbey": 6103, - "monument": 6104, - "license": 6105, - "throne": 6106, - "employment": 6107, - "jay": 6108, - "93": 6109, - "replacement": 6110, - "charter": 6111, - "cloud": 6112, - "powered": 6113, - "suffering": 6114, - "accounts": 6115, - "oak": 6116, - "connecticut": 6117, - "strongly": 6118, - "wright": 6119, - "colour": 6120, - "crystal": 6121, - "13th": 6122, - "context": 6123, - "welsh": 6124, - "networks": 6125, - "voiced": 6126, - "gabriel": 6127, - "jerry": 6128, - "##cing": 6129, - "forehead": 6130, - "mp": 6131, - "##ens": 6132, - "manage": 6133, - "schedule": 6134, - "totally": 6135, - "remix": 6136, - "##ii": 6137, - "forests": 6138, - "occupation": 6139, - "print": 6140, - "nicholas": 6141, - "brazilian": 6142, - "strategic": 6143, - "vampires": 6144, - "engineers": 6145, - "76": 6146, - "roots": 6147, - "seek": 6148, - "correct": 6149, - "instrumental": 6150, - "und": 6151, - "alfred": 6152, - "backed": 6153, - "hop": 6154, - "##des": 6155, - "stanley": 6156, - "robinson": 6157, - "traveled": 6158, - "wayne": 6159, - "welcome": 6160, - "austrian": 6161, - "achieve": 6162, - "67": 6163, - "exit": 6164, - "rates": 6165, - "1899": 6166, - "strip": 6167, - "whereas": 6168, - "##cs": 6169, - "sing": 6170, - "deeply": 6171, - "adventure": 6172, - "bobby": 6173, - "rick": 6174, - "jamie": 6175, - "careful": 6176, - "components": 6177, - "cap": 6178, - "useful": 6179, - "personality": 6180, - "knee": 6181, - "##shi": 6182, - "pushing": 6183, - "hosts": 6184, - "02": 6185, - "protest": 6186, - "ca": 6187, - "ottoman": 6188, - "symphony": 6189, - "##sis": 6190, - "63": 6191, - "boundary": 6192, - "1890": 6193, - "processes": 6194, - "considering": 6195, - "considerable": 6196, - "tons": 6197, - "##work": 6198, - "##ft": 6199, - "##nia": 6200, - "cooper": 6201, - "trading": 6202, - "dear": 6203, - "conduct": 6204, - "91": 6205, - "illegal": 6206, - "apple": 6207, - "revolutionary": 6208, - "holiday": 6209, - "definition": 6210, - "harder": 6211, - "##van": 6212, - "jacob": 6213, - "circumstances": 6214, - "destruction": 6215, - "##lle": 6216, - "popularity": 6217, - "grip": 6218, - "classified": 6219, - "liverpool": 6220, - "donald": 6221, - "baltimore": 6222, - "flows": 6223, - "seeking": 6224, - "honour": 6225, - "approval": 6226, - "92": 6227, - "mechanical": 6228, - "till": 6229, - "happening": 6230, - "statue": 6231, - "critic": 6232, - "increasingly": 6233, - "immediate": 6234, - "describe": 6235, - "commerce": 6236, - "stare": 6237, - "##ster": 6238, - "indonesia": 6239, - "meat": 6240, - "rounds": 6241, - "boats": 6242, - "baker": 6243, - "orthodox": 6244, - "depression": 6245, - "formally": 6246, - "worn": 6247, - "naked": 6248, - "claire": 6249, - "muttered": 6250, - "sentence": 6251, - "11th": 6252, - "emily": 6253, - "document": 6254, - "77": 6255, - "criticism": 6256, - "wished": 6257, - "vessel": 6258, - "spiritual": 6259, - "bent": 6260, - "virgin": 6261, - "parker": 6262, - "minimum": 6263, - "murray": 6264, - "lunch": 6265, - "danny": 6266, - "printed": 6267, - "compilation": 6268, - "keyboards": 6269, - "false": 6270, - "blow": 6271, - "belonged": 6272, - "68": 6273, - "raising": 6274, - "78": 6275, - "cutting": 6276, - "##board": 6277, - "pittsburgh": 6278, - "##up": 6279, - "9th": 6280, - "shadows": 6281, - "81": 6282, - "hated": 6283, - "indigenous": 6284, - "jon": 6285, - "15th": 6286, - "barry": 6287, - "scholar": 6288, - "ah": 6289, - "##zer": 6290, - "oliver": 6291, - "##gy": 6292, - "stick": 6293, - "susan": 6294, - "meetings": 6295, - "attracted": 6296, - "spell": 6297, - "romantic": 6298, - "##ver": 6299, - "ye": 6300, - "1895": 6301, - "photo": 6302, - "demanded": 6303, - "customers": 6304, - "##ac": 6305, - "1896": 6306, - "logan": 6307, - "revival": 6308, - "keys": 6309, - "modified": 6310, - "commanded": 6311, - "jeans": 6312, - "##ious": 6313, - "upset": 6314, - "raw": 6315, - "phil": 6316, - "detective": 6317, - "hiding": 6318, - "resident": 6319, - "vincent": 6320, - "##bly": 6321, - "experiences": 6322, - "diamond": 6323, - "defeating": 6324, - "coverage": 6325, - "lucas": 6326, - "external": 6327, - "parks": 6328, - "franchise": 6329, - "helen": 6330, - "bible": 6331, - "successor": 6332, - "percussion": 6333, - "celebrated": 6334, - "il": 6335, - "lift": 6336, - "profile": 6337, - "clan": 6338, - "romania": 6339, - "##ied": 6340, - "mills": 6341, - "##su": 6342, - "nobody": 6343, - "achievement": 6344, - "shrugged": 6345, - "fault": 6346, - "1897": 6347, - "rhythm": 6348, - "initiative": 6349, - "breakfast": 6350, - "carbon": 6351, - "700": 6352, - "69": 6353, - "lasted": 6354, - "violent": 6355, - "74": 6356, - "wound": 6357, - "ken": 6358, - "killer": 6359, - "gradually": 6360, - "filmed": 6361, - "°c": 6362, - "dollars": 6363, - "processing": 6364, - "94": 6365, - "remove": 6366, - "criticized": 6367, - "guests": 6368, - "sang": 6369, - "chemistry": 6370, - "##vin": 6371, - "legislature": 6372, - "disney": 6373, - "##bridge": 6374, - "uniform": 6375, - "escaped": 6376, - "integrated": 6377, - "proposal": 6378, - "purple": 6379, - "denied": 6380, - "liquid": 6381, - "karl": 6382, - "influential": 6383, - "morris": 6384, - "nights": 6385, - "stones": 6386, - "intense": 6387, - "experimental": 6388, - "twisted": 6389, - "71": 6390, - "84": 6391, - "##ld": 6392, - "pace": 6393, - "nazi": 6394, - "mitchell": 6395, - "ny": 6396, - "blind": 6397, - "reporter": 6398, - "newspapers": 6399, - "14th": 6400, - "centers": 6401, - "burn": 6402, - "basin": 6403, - "forgotten": 6404, - "surviving": 6405, - "filed": 6406, - "collections": 6407, - "monastery": 6408, - "losses": 6409, - "manual": 6410, - "couch": 6411, - "description": 6412, - "appropriate": 6413, - "merely": 6414, - "tag": 6415, - "missions": 6416, - "sebastian": 6417, - "restoration": 6418, - "replacing": 6419, - "triple": 6420, - "73": 6421, - "elder": 6422, - "julia": 6423, - "warriors": 6424, - "benjamin": 6425, - "julian": 6426, - "convinced": 6427, - "stronger": 6428, - "amazing": 6429, - "declined": 6430, - "versus": 6431, - "merchant": 6432, - "happens": 6433, - "output": 6434, - "finland": 6435, - "bare": 6436, - "barbara": 6437, - "absence": 6438, - "ignored": 6439, - "dawn": 6440, - "injuries": 6441, - "##port": 6442, - "producers": 6443, - "##ram": 6444, - "82": 6445, - "luis": 6446, - "##ities": 6447, - "kw": 6448, - "admit": 6449, - "expensive": 6450, - "electricity": 6451, - "nba": 6452, - "exception": 6453, - "symbol": 6454, - "##ving": 6455, - "ladies": 6456, - "shower": 6457, - "sheriff": 6458, - "characteristics": 6459, - "##je": 6460, - "aimed": 6461, - "button": 6462, - "ratio": 6463, - "effectively": 6464, - "summit": 6465, - "angle": 6466, - "jury": 6467, - "bears": 6468, - "foster": 6469, - "vessels": 6470, - "pants": 6471, - "executed": 6472, - "evans": 6473, - "dozen": 6474, - "advertising": 6475, - "kicked": 6476, - "patrol": 6477, - "1889": 6478, - "competitions": 6479, - "lifetime": 6480, - "principles": 6481, - "athletics": 6482, - "##logy": 6483, - "birmingham": 6484, - "sponsored": 6485, - "89": 6486, - "rob": 6487, - "nomination": 6488, - "1893": 6489, - "acoustic": 6490, - "##sm": 6491, - "creature": 6492, - "longest": 6493, - "##tra": 6494, - "credits": 6495, - "harbor": 6496, - "dust": 6497, - "josh": 6498, - "##so": 6499, - "territories": 6500, - "milk": 6501, - "infrastructure": 6502, - "completion": 6503, - "thailand": 6504, - "indians": 6505, - "leon": 6506, - "archbishop": 6507, - "##sy": 6508, - "assist": 6509, - "pitch": 6510, - "blake": 6511, - "arrangement": 6512, - "girlfriend": 6513, - "serbian": 6514, - "operational": 6515, - "hence": 6516, - "sad": 6517, - "scent": 6518, - "fur": 6519, - "dj": 6520, - "sessions": 6521, - "hp": 6522, - "refer": 6523, - "rarely": 6524, - "##ora": 6525, - "exists": 6526, - "1892": 6527, - "##ten": 6528, - "scientists": 6529, - "dirty": 6530, - "penalty": 6531, - "burst": 6532, - "portrait": 6533, - "seed": 6534, - "79": 6535, - "pole": 6536, - "limits": 6537, - "rival": 6538, - "1894": 6539, - "stable": 6540, - "alpha": 6541, - "grave": 6542, - "constitutional": 6543, - "alcohol": 6544, - "arrest": 6545, - "flower": 6546, - "mystery": 6547, - "devil": 6548, - "architectural": 6549, - "relationships": 6550, - "greatly": 6551, - "habitat": 6552, - "##istic": 6553, - "larry": 6554, - "progressive": 6555, - "remote": 6556, - "cotton": 6557, - "##ics": 6558, - "##ok": 6559, - "preserved": 6560, - "reaches": 6561, - "##ming": 6562, - "cited": 6563, - "86": 6564, - "vast": 6565, - "scholarship": 6566, - "decisions": 6567, - "cbs": 6568, - "joy": 6569, - "teach": 6570, - "1885": 6571, - "editions": 6572, - "knocked": 6573, - "eve": 6574, - "searching": 6575, - "partly": 6576, - "participation": 6577, - "gap": 6578, - "animated": 6579, - "fate": 6580, - "excellent": 6581, - "##ett": 6582, - "na": 6583, - "87": 6584, - "alternate": 6585, - "saints": 6586, - "youngest": 6587, - "##ily": 6588, - "climbed": 6589, - "##ita": 6590, - "##tors": 6591, - "suggest": 6592, - "##ct": 6593, - "discussion": 6594, - "staying": 6595, - "choir": 6596, - "lakes": 6597, - "jacket": 6598, - "revenue": 6599, - "nevertheless": 6600, - "peaked": 6601, - "instrument": 6602, - "wondering": 6603, - "annually": 6604, - "managing": 6605, - "neil": 6606, - "1891": 6607, - "signing": 6608, - "terry": 6609, - "##ice": 6610, - "apply": 6611, - "clinical": 6612, - "brooklyn": 6613, - "aim": 6614, - "catherine": 6615, - "fuck": 6616, - "farmers": 6617, - "figured": 6618, - "ninth": 6619, - "pride": 6620, - "hugh": 6621, - "evolution": 6622, - "ordinary": 6623, - "involvement": 6624, - "comfortable": 6625, - "shouted": 6626, - "tech": 6627, - "encouraged": 6628, - "taiwan": 6629, - "representation": 6630, - "sharing": 6631, - "##lia": 6632, - "##em": 6633, - "panic": 6634, - "exact": 6635, - "cargo": 6636, - "competing": 6637, - "fat": 6638, - "cried": 6639, - "83": 6640, - "1920s": 6641, - "occasions": 6642, - "pa": 6643, - "cabin": 6644, - "borders": 6645, - "utah": 6646, - "marcus": 6647, - "##isation": 6648, - "badly": 6649, - "muscles": 6650, - "##ance": 6651, - "victorian": 6652, - "transition": 6653, - "warner": 6654, - "bet": 6655, - "permission": 6656, - "##rin": 6657, - "slave": 6658, - "terrible": 6659, - "similarly": 6660, - "shares": 6661, - "seth": 6662, - "uefa": 6663, - "possession": 6664, - "medals": 6665, - "benefits": 6666, - "colleges": 6667, - "lowered": 6668, - "perfectly": 6669, - "mall": 6670, - "transit": 6671, - "##ye": 6672, - "##kar": 6673, - "publisher": 6674, - "##ened": 6675, - "harrison": 6676, - "deaths": 6677, - "elevation": 6678, - "##ae": 6679, - "asleep": 6680, - "machines": 6681, - "sigh": 6682, - "ash": 6683, - "hardly": 6684, - "argument": 6685, - "occasion": 6686, - "parent": 6687, - "leo": 6688, - "decline": 6689, - "1888": 6690, - "contribution": 6691, - "##ua": 6692, - "concentration": 6693, - "1000": 6694, - "opportunities": 6695, - "hispanic": 6696, - "guardian": 6697, - "extent": 6698, - "emotions": 6699, - "hips": 6700, - "mason": 6701, - "volumes": 6702, - "bloody": 6703, - "controversy": 6704, - "diameter": 6705, - "steady": 6706, - "mistake": 6707, - "phoenix": 6708, - "identify": 6709, - "violin": 6710, - "##sk": 6711, - "departure": 6712, - "richmond": 6713, - "spin": 6714, - "funeral": 6715, - "enemies": 6716, - "1864": 6717, - "gear": 6718, - "literally": 6719, - "connor": 6720, - "random": 6721, - "sergeant": 6722, - "grab": 6723, - "confusion": 6724, - "1865": 6725, - "transmission": 6726, - "informed": 6727, - "op": 6728, - "leaning": 6729, - "sacred": 6730, - "suspended": 6731, - "thinks": 6732, - "gates": 6733, - "portland": 6734, - "luck": 6735, - "agencies": 6736, - "yours": 6737, - "hull": 6738, - "expert": 6739, - "muscle": 6740, - "layer": 6741, - "practical": 6742, - "sculpture": 6743, - "jerusalem": 6744, - "latest": 6745, - "lloyd": 6746, - "statistics": 6747, - "deeper": 6748, - "recommended": 6749, - "warrior": 6750, - "arkansas": 6751, - "mess": 6752, - "supports": 6753, - "greg": 6754, - "eagle": 6755, - "1880": 6756, - "recovered": 6757, - "rated": 6758, - "concerts": 6759, - "rushed": 6760, - "##ano": 6761, - "stops": 6762, - "eggs": 6763, - "files": 6764, - "premiere": 6765, - "keith": 6766, - "##vo": 6767, - "delhi": 6768, - "turner": 6769, - "pit": 6770, - "affair": 6771, - "belief": 6772, - "paint": 6773, - "##zing": 6774, - "mate": 6775, - "##ach": 6776, - "##ev": 6777, - "victim": 6778, - "##ology": 6779, - "withdrew": 6780, - "bonus": 6781, - "styles": 6782, - "fled": 6783, - "##ud": 6784, - "glasgow": 6785, - "technologies": 6786, - "funded": 6787, - "nbc": 6788, - "adaptation": 6789, - "##ata": 6790, - "portrayed": 6791, - "cooperation": 6792, - "supporters": 6793, - "judges": 6794, - "bernard": 6795, - "justin": 6796, - "hallway": 6797, - "ralph": 6798, - "##ick": 6799, - "graduating": 6800, - "controversial": 6801, - "distant": 6802, - "continental": 6803, - "spider": 6804, - "bite": 6805, - "##ho": 6806, - "recognize": 6807, - "intention": 6808, - "mixing": 6809, - "##ese": 6810, - "egyptian": 6811, - "bow": 6812, - "tourism": 6813, - "suppose": 6814, - "claiming": 6815, - "tiger": 6816, - "dominated": 6817, - "participants": 6818, - "vi": 6819, - "##ru": 6820, - "nurse": 6821, - "partially": 6822, - "tape": 6823, - "##rum": 6824, - "psychology": 6825, - "##rn": 6826, - "essential": 6827, - "touring": 6828, - "duo": 6829, - "voting": 6830, - "civilian": 6831, - "emotional": 6832, - "channels": 6833, - "##king": 6834, - "apparent": 6835, - "hebrew": 6836, - "1887": 6837, - "tommy": 6838, - "carrier": 6839, - "intersection": 6840, - "beast": 6841, - "hudson": 6842, - "##gar": 6843, - "##zo": 6844, - "lab": 6845, - "nova": 6846, - "bench": 6847, - "discuss": 6848, - "costa": 6849, - "##ered": 6850, - "detailed": 6851, - "behalf": 6852, - "drivers": 6853, - "unfortunately": 6854, - "obtain": 6855, - "##lis": 6856, - "rocky": 6857, - "##dae": 6858, - "siege": 6859, - "friendship": 6860, - "honey": 6861, - "##rian": 6862, - "1861": 6863, - "amy": 6864, - "hang": 6865, - "posted": 6866, - "governments": 6867, - "collins": 6868, - "respond": 6869, - "wildlife": 6870, - "preferred": 6871, - "operator": 6872, - "##po": 6873, - "laura": 6874, - "pregnant": 6875, - "videos": 6876, - "dennis": 6877, - "suspected": 6878, - "boots": 6879, - "instantly": 6880, - "weird": 6881, - "automatic": 6882, - "businessman": 6883, - "alleged": 6884, - "placing": 6885, - "throwing": 6886, - "ph": 6887, - "mood": 6888, - "1862": 6889, - "perry": 6890, - "venue": 6891, - "jet": 6892, - "remainder": 6893, - "##lli": 6894, - "##ci": 6895, - "passion": 6896, - "biological": 6897, - "boyfriend": 6898, - "1863": 6899, - "dirt": 6900, - "buffalo": 6901, - "ron": 6902, - "segment": 6903, - "fa": 6904, - "abuse": 6905, - "##era": 6906, - "genre": 6907, - "thrown": 6908, - "stroke": 6909, - "colored": 6910, - "stress": 6911, - "exercise": 6912, - "displayed": 6913, - "##gen": 6914, - "struggled": 6915, - "##tti": 6916, - "abroad": 6917, - "dramatic": 6918, - "wonderful": 6919, - "thereafter": 6920, - "madrid": 6921, - "component": 6922, - "widespread": 6923, - "##sed": 6924, - "tale": 6925, - "citizen": 6926, - "todd": 6927, - "monday": 6928, - "1886": 6929, - "vancouver": 6930, - "overseas": 6931, - "forcing": 6932, - "crying": 6933, - "descent": 6934, - "##ris": 6935, - "discussed": 6936, - "substantial": 6937, - "ranks": 6938, - "regime": 6939, - "1870": 6940, - "provinces": 6941, - "switch": 6942, - "drum": 6943, - "zane": 6944, - "ted": 6945, - "tribes": 6946, - "proof": 6947, - "lp": 6948, - "cream": 6949, - "researchers": 6950, - "volunteer": 6951, - "manor": 6952, - "silk": 6953, - "milan": 6954, - "donated": 6955, - "allies": 6956, - "venture": 6957, - "principle": 6958, - "delivery": 6959, - "enterprise": 6960, - "##ves": 6961, - "##ans": 6962, - "bars": 6963, - "traditionally": 6964, - "witch": 6965, - "reminded": 6966, - "copper": 6967, - "##uk": 6968, - "pete": 6969, - "inter": 6970, - "links": 6971, - "colin": 6972, - "grinned": 6973, - "elsewhere": 6974, - "competitive": 6975, - "frequent": 6976, - "##oy": 6977, - "scream": 6978, - "##hu": 6979, - "tension": 6980, - "texts": 6981, - "submarine": 6982, - "finnish": 6983, - "defending": 6984, - "defend": 6985, - "pat": 6986, - "detail": 6987, - "1884": 6988, - "affiliated": 6989, - "stuart": 6990, - "themes": 6991, - "villa": 6992, - "periods": 6993, - "tool": 6994, - "belgian": 6995, - "ruling": 6996, - "crimes": 6997, - "answers": 6998, - "folded": 6999, - "licensed": 7000, - "resort": 7001, - "demolished": 7002, - "hans": 7003, - "lucy": 7004, - "1881": 7005, - "lion": 7006, - "traded": 7007, - "photographs": 7008, - "writes": 7009, - "craig": 7010, - "##fa": 7011, - "trials": 7012, - "generated": 7013, - "beth": 7014, - "noble": 7015, - "debt": 7016, - "percentage": 7017, - "yorkshire": 7018, - "erected": 7019, - "ss": 7020, - "viewed": 7021, - "grades": 7022, - "confidence": 7023, - "ceased": 7024, - "islam": 7025, - "telephone": 7026, - "retail": 7027, - "##ible": 7028, - "chile": 7029, - "m²": 7030, - "roberts": 7031, - "sixteen": 7032, - "##ich": 7033, - "commented": 7034, - "hampshire": 7035, - "innocent": 7036, - "dual": 7037, - "pounds": 7038, - "checked": 7039, - "regulations": 7040, - "afghanistan": 7041, - "sung": 7042, - "rico": 7043, - "liberty": 7044, - "assets": 7045, - "bigger": 7046, - "options": 7047, - "angels": 7048, - "relegated": 7049, - "tribute": 7050, - "wells": 7051, - "attending": 7052, - "leaf": 7053, - "##yan": 7054, - "butler": 7055, - "romanian": 7056, - "forum": 7057, - "monthly": 7058, - "lisa": 7059, - "patterns": 7060, - "gmina": 7061, - "##tory": 7062, - "madison": 7063, - "hurricane": 7064, - "rev": 7065, - "##ians": 7066, - "bristol": 7067, - "##ula": 7068, - "elite": 7069, - "valuable": 7070, - "disaster": 7071, - "democracy": 7072, - "awareness": 7073, - "germans": 7074, - "freyja": 7075, - "##ins": 7076, - "loop": 7077, - "absolutely": 7078, - "paying": 7079, - "populations": 7080, - "maine": 7081, - "sole": 7082, - "prayer": 7083, - "spencer": 7084, - "releases": 7085, - "doorway": 7086, - "bull": 7087, - "##ani": 7088, - "lover": 7089, - "midnight": 7090, - "conclusion": 7091, - "##sson": 7092, - "thirteen": 7093, - "lily": 7094, - "mediterranean": 7095, - "##lt": 7096, - "nhl": 7097, - "proud": 7098, - "sample": 7099, - "##hill": 7100, - "drummer": 7101, - "guinea": 7102, - "##ova": 7103, - "murphy": 7104, - "climb": 7105, - "##ston": 7106, - "instant": 7107, - "attributed": 7108, - "horn": 7109, - "ain": 7110, - "railways": 7111, - "steven": 7112, - "##ao": 7113, - "autumn": 7114, - "ferry": 7115, - "opponent": 7116, - "root": 7117, - "traveling": 7118, - "secured": 7119, - "corridor": 7120, - "stretched": 7121, - "tales": 7122, - "sheet": 7123, - "trinity": 7124, - "cattle": 7125, - "helps": 7126, - "indicates": 7127, - "manhattan": 7128, - "murdered": 7129, - "fitted": 7130, - "1882": 7131, - "gentle": 7132, - "grandmother": 7133, - "mines": 7134, - "shocked": 7135, - "vegas": 7136, - "produces": 7137, - "##light": 7138, - "caribbean": 7139, - "##ou": 7140, - "belong": 7141, - "continuous": 7142, - "desperate": 7143, - "drunk": 7144, - "historically": 7145, - "trio": 7146, - "waved": 7147, - "raf": 7148, - "dealing": 7149, - "nathan": 7150, - "bat": 7151, - "murmured": 7152, - "interrupted": 7153, - "residing": 7154, - "scientist": 7155, - "pioneer": 7156, - "harold": 7157, - "aaron": 7158, - "##net": 7159, - "delta": 7160, - "attempting": 7161, - "minority": 7162, - "mini": 7163, - "believes": 7164, - "chorus": 7165, - "tend": 7166, - "lots": 7167, - "eyed": 7168, - "indoor": 7169, - "load": 7170, - "shots": 7171, - "updated": 7172, - "jail": 7173, - "##llo": 7174, - "concerning": 7175, - "connecting": 7176, - "wealth": 7177, - "##ved": 7178, - "slaves": 7179, - "arrive": 7180, - "rangers": 7181, - "sufficient": 7182, - "rebuilt": 7183, - "##wick": 7184, - "cardinal": 7185, - "flood": 7186, - "muhammad": 7187, - "whenever": 7188, - "relation": 7189, - "runners": 7190, - "moral": 7191, - "repair": 7192, - "viewers": 7193, - "arriving": 7194, - "revenge": 7195, - "punk": 7196, - "assisted": 7197, - "bath": 7198, - "fairly": 7199, - "breathe": 7200, - "lists": 7201, - "innings": 7202, - "illustrated": 7203, - "whisper": 7204, - "nearest": 7205, - "voters": 7206, - "clinton": 7207, - "ties": 7208, - "ultimate": 7209, - "screamed": 7210, - "beijing": 7211, - "lions": 7212, - "andre": 7213, - "fictional": 7214, - "gathering": 7215, - "comfort": 7216, - "radar": 7217, - "suitable": 7218, - "dismissed": 7219, - "hms": 7220, - "ban": 7221, - "pine": 7222, - "wrist": 7223, - "atmosphere": 7224, - "voivodeship": 7225, - "bid": 7226, - "timber": 7227, - "##ned": 7228, - "##nan": 7229, - "giants": 7230, - "##ane": 7231, - "cameron": 7232, - "recovery": 7233, - "uss": 7234, - "identical": 7235, - "categories": 7236, - "switched": 7237, - "serbia": 7238, - "laughter": 7239, - "noah": 7240, - "ensemble": 7241, - "therapy": 7242, - "peoples": 7243, - "touching": 7244, - "##off": 7245, - "locally": 7246, - "pearl": 7247, - "platforms": 7248, - "everywhere": 7249, - "ballet": 7250, - "tables": 7251, - "lanka": 7252, - "herbert": 7253, - "outdoor": 7254, - "toured": 7255, - "derek": 7256, - "1883": 7257, - "spaces": 7258, - "contested": 7259, - "swept": 7260, - "1878": 7261, - "exclusive": 7262, - "slight": 7263, - "connections": 7264, - "##dra": 7265, - "winds": 7266, - "prisoner": 7267, - "collective": 7268, - "bangladesh": 7269, - "tube": 7270, - "publicly": 7271, - "wealthy": 7272, - "thai": 7273, - "##ys": 7274, - "isolated": 7275, - "select": 7276, - "##ric": 7277, - "insisted": 7278, - "pen": 7279, - "fortune": 7280, - "ticket": 7281, - "spotted": 7282, - "reportedly": 7283, - "animation": 7284, - "enforcement": 7285, - "tanks": 7286, - "110": 7287, - "decides": 7288, - "wider": 7289, - "lowest": 7290, - "owen": 7291, - "##time": 7292, - "nod": 7293, - "hitting": 7294, - "##hn": 7295, - "gregory": 7296, - "furthermore": 7297, - "magazines": 7298, - "fighters": 7299, - "solutions": 7300, - "##ery": 7301, - "pointing": 7302, - "requested": 7303, - "peru": 7304, - "reed": 7305, - "chancellor": 7306, - "knights": 7307, - "mask": 7308, - "worker": 7309, - "eldest": 7310, - "flames": 7311, - "reduction": 7312, - "1860": 7313, - "volunteers": 7314, - "##tis": 7315, - "reporting": 7316, - "##hl": 7317, - "wire": 7318, - "advisory": 7319, - "endemic": 7320, - "origins": 7321, - "settlers": 7322, - "pursue": 7323, - "knock": 7324, - "consumer": 7325, - "1876": 7326, - "eu": 7327, - "compound": 7328, - "creatures": 7329, - "mansion": 7330, - "sentenced": 7331, - "ivan": 7332, - "deployed": 7333, - "guitars": 7334, - "frowned": 7335, - "involves": 7336, - "mechanism": 7337, - "kilometers": 7338, - "perspective": 7339, - "shops": 7340, - "maps": 7341, - "terminus": 7342, - "duncan": 7343, - "alien": 7344, - "fist": 7345, - "bridges": 7346, - "##pers": 7347, - "heroes": 7348, - "fed": 7349, - "derby": 7350, - "swallowed": 7351, - "##ros": 7352, - "patent": 7353, - "sara": 7354, - "illness": 7355, - "characterized": 7356, - "adventures": 7357, - "slide": 7358, - "hawaii": 7359, - "jurisdiction": 7360, - "##op": 7361, - "organised": 7362, - "##side": 7363, - "adelaide": 7364, - "walks": 7365, - "biology": 7366, - "se": 7367, - "##ties": 7368, - "rogers": 7369, - "swing": 7370, - "tightly": 7371, - "boundaries": 7372, - "##rie": 7373, - "prepare": 7374, - "implementation": 7375, - "stolen": 7376, - "##sha": 7377, - "certified": 7378, - "colombia": 7379, - "edwards": 7380, - "garage": 7381, - "##mm": 7382, - "recalled": 7383, - "##ball": 7384, - "rage": 7385, - "harm": 7386, - "nigeria": 7387, - "breast": 7388, - "##ren": 7389, - "furniture": 7390, - "pupils": 7391, - "settle": 7392, - "##lus": 7393, - "cuba": 7394, - "balls": 7395, - "client": 7396, - "alaska": 7397, - "21st": 7398, - "linear": 7399, - "thrust": 7400, - "celebration": 7401, - "latino": 7402, - "genetic": 7403, - "terror": 7404, - "##cia": 7405, - "##ening": 7406, - "lightning": 7407, - "fee": 7408, - "witness": 7409, - "lodge": 7410, - "establishing": 7411, - "skull": 7412, - "##ique": 7413, - "earning": 7414, - "hood": 7415, - "##ei": 7416, - "rebellion": 7417, - "wang": 7418, - "sporting": 7419, - "warned": 7420, - "missile": 7421, - "devoted": 7422, - "activist": 7423, - "porch": 7424, - "worship": 7425, - "fourteen": 7426, - "package": 7427, - "1871": 7428, - "decorated": 7429, - "##shire": 7430, - "housed": 7431, - "##ock": 7432, - "chess": 7433, - "sailed": 7434, - "doctors": 7435, - "oscar": 7436, - "joan": 7437, - "treat": 7438, - "garcia": 7439, - "harbour": 7440, - "jeremy": 7441, - "##ire": 7442, - "traditions": 7443, - "dominant": 7444, - "jacques": 7445, - "##gon": 7446, - "##wan": 7447, - "relocated": 7448, - "1879": 7449, - "amendment": 7450, - "sized": 7451, - "companion": 7452, - "simultaneously": 7453, - "volleyball": 7454, - "spun": 7455, - "acre": 7456, - "increases": 7457, - "stopping": 7458, - "loves": 7459, - "belongs": 7460, - "affect": 7461, - "drafted": 7462, - "tossed": 7463, - "scout": 7464, - "battles": 7465, - "1875": 7466, - "filming": 7467, - "shoved": 7468, - "munich": 7469, - "tenure": 7470, - "vertical": 7471, - "romance": 7472, - "pc": 7473, - "##cher": 7474, - "argue": 7475, - "##ical": 7476, - "craft": 7477, - "ranging": 7478, - "www": 7479, - "opens": 7480, - "honest": 7481, - "tyler": 7482, - "yesterday": 7483, - "virtual": 7484, - "##let": 7485, - "muslims": 7486, - "reveal": 7487, - "snake": 7488, - "immigrants": 7489, - "radical": 7490, - "screaming": 7491, - "speakers": 7492, - "firing": 7493, - "saving": 7494, - "belonging": 7495, - "ease": 7496, - "lighting": 7497, - "prefecture": 7498, - "blame": 7499, - "farmer": 7500, - "hungry": 7501, - "grows": 7502, - "rubbed": 7503, - "beam": 7504, - "sur": 7505, - "subsidiary": 7506, - "##cha": 7507, - "armenian": 7508, - "sao": 7509, - "dropping": 7510, - "conventional": 7511, - "##fer": 7512, - "microsoft": 7513, - "reply": 7514, - "qualify": 7515, - "spots": 7516, - "1867": 7517, - "sweat": 7518, - "festivals": 7519, - "##ken": 7520, - "immigration": 7521, - "physician": 7522, - "discover": 7523, - "exposure": 7524, - "sandy": 7525, - "explanation": 7526, - "isaac": 7527, - "implemented": 7528, - "##fish": 7529, - "hart": 7530, - "initiated": 7531, - "connect": 7532, - "stakes": 7533, - "presents": 7534, - "heights": 7535, - "householder": 7536, - "pleased": 7537, - "tourist": 7538, - "regardless": 7539, - "slip": 7540, - "closest": 7541, - "##ction": 7542, - "surely": 7543, - "sultan": 7544, - "brings": 7545, - "riley": 7546, - "preparation": 7547, - "aboard": 7548, - "slammed": 7549, - "baptist": 7550, - "experiment": 7551, - "ongoing": 7552, - "interstate": 7553, - "organic": 7554, - "playoffs": 7555, - "##ika": 7556, - "1877": 7557, - "130": 7558, - "##tar": 7559, - "hindu": 7560, - "error": 7561, - "tours": 7562, - "tier": 7563, - "plenty": 7564, - "arrangements": 7565, - "talks": 7566, - "trapped": 7567, - "excited": 7568, - "sank": 7569, - "ho": 7570, - "athens": 7571, - "1872": 7572, - "denver": 7573, - "welfare": 7574, - "suburb": 7575, - "athletes": 7576, - "trick": 7577, - "diverse": 7578, - "belly": 7579, - "exclusively": 7580, - "yelled": 7581, - "1868": 7582, - "##med": 7583, - "conversion": 7584, - "##ette": 7585, - "1874": 7586, - "internationally": 7587, - "computers": 7588, - "conductor": 7589, - "abilities": 7590, - "sensitive": 7591, - "hello": 7592, - "dispute": 7593, - "measured": 7594, - "globe": 7595, - "rocket": 7596, - "prices": 7597, - "amsterdam": 7598, - "flights": 7599, - "tigers": 7600, - "inn": 7601, - "municipalities": 7602, - "emotion": 7603, - "references": 7604, - "3d": 7605, - "##mus": 7606, - "explains": 7607, - "airlines": 7608, - "manufactured": 7609, - "pm": 7610, - "archaeological": 7611, - "1873": 7612, - "interpretation": 7613, - "devon": 7614, - "comment": 7615, - "##ites": 7616, - "settlements": 7617, - "kissing": 7618, - "absolute": 7619, - "improvement": 7620, - "suite": 7621, - "impressed": 7622, - "barcelona": 7623, - "sullivan": 7624, - "jefferson": 7625, - "towers": 7626, - "jesse": 7627, - "julie": 7628, - "##tin": 7629, - "##lu": 7630, - "grandson": 7631, - "hi": 7632, - "gauge": 7633, - "regard": 7634, - "rings": 7635, - "interviews": 7636, - "trace": 7637, - "raymond": 7638, - "thumb": 7639, - "departments": 7640, - "burns": 7641, - "serial": 7642, - "bulgarian": 7643, - "scores": 7644, - "demonstrated": 7645, - "##ix": 7646, - "1866": 7647, - "kyle": 7648, - "alberta": 7649, - "underneath": 7650, - "romanized": 7651, - "##ward": 7652, - "relieved": 7653, - "acquisition": 7654, - "phrase": 7655, - "cliff": 7656, - "reveals": 7657, - "han": 7658, - "cuts": 7659, - "merger": 7660, - "custom": 7661, - "##dar": 7662, - "nee": 7663, - "gilbert": 7664, - "graduation": 7665, - "##nts": 7666, - "assessment": 7667, - "cafe": 7668, - "difficulty": 7669, - "demands": 7670, - "swung": 7671, - "democrat": 7672, - "jennifer": 7673, - "commons": 7674, - "1940s": 7675, - "grove": 7676, - "##yo": 7677, - "completing": 7678, - "focuses": 7679, - "sum": 7680, - "substitute": 7681, - "bearing": 7682, - "stretch": 7683, - "reception": 7684, - "##py": 7685, - "reflected": 7686, - "essentially": 7687, - "destination": 7688, - "pairs": 7689, - "##ched": 7690, - "survival": 7691, - "resource": 7692, - "##bach": 7693, - "promoting": 7694, - "doubles": 7695, - "messages": 7696, - "tear": 7697, - "##down": 7698, - "##fully": 7699, - "parade": 7700, - "florence": 7701, - "harvey": 7702, - "incumbent": 7703, - "partial": 7704, - "framework": 7705, - "900": 7706, - "pedro": 7707, - "frozen": 7708, - "procedure": 7709, - "olivia": 7710, - "controls": 7711, - "##mic": 7712, - "shelter": 7713, - "personally": 7714, - "temperatures": 7715, - "##od": 7716, - "brisbane": 7717, - "tested": 7718, - "sits": 7719, - "marble": 7720, - "comprehensive": 7721, - "oxygen": 7722, - "leonard": 7723, - "##kov": 7724, - "inaugural": 7725, - "iranian": 7726, - "referring": 7727, - "quarters": 7728, - "attitude": 7729, - "##ivity": 7730, - "mainstream": 7731, - "lined": 7732, - "mars": 7733, - "dakota": 7734, - "norfolk": 7735, - "unsuccessful": 7736, - "##°": 7737, - "explosion": 7738, - "helicopter": 7739, - "congressional": 7740, - "##sing": 7741, - "inspector": 7742, - "bitch": 7743, - "seal": 7744, - "departed": 7745, - "divine": 7746, - "##ters": 7747, - "coaching": 7748, - "examination": 7749, - "punishment": 7750, - "manufacturer": 7751, - "sink": 7752, - "columns": 7753, - "unincorporated": 7754, - "signals": 7755, - "nevada": 7756, - "squeezed": 7757, - "dylan": 7758, - "dining": 7759, - "photos": 7760, - "martial": 7761, - "manuel": 7762, - "eighteen": 7763, - "elevator": 7764, - "brushed": 7765, - "plates": 7766, - "ministers": 7767, - "ivy": 7768, - "congregation": 7769, - "##len": 7770, - "slept": 7771, - "specialized": 7772, - "taxes": 7773, - "curve": 7774, - "restricted": 7775, - "negotiations": 7776, - "likes": 7777, - "statistical": 7778, - "arnold": 7779, - "inspiration": 7780, - "execution": 7781, - "bold": 7782, - "intermediate": 7783, - "significance": 7784, - "margin": 7785, - "ruler": 7786, - "wheels": 7787, - "gothic": 7788, - "intellectual": 7789, - "dependent": 7790, - "listened": 7791, - "eligible": 7792, - "buses": 7793, - "widow": 7794, - "syria": 7795, - "earn": 7796, - "cincinnati": 7797, - "collapsed": 7798, - "recipient": 7799, - "secrets": 7800, - "accessible": 7801, - "philippine": 7802, - "maritime": 7803, - "goddess": 7804, - "clerk": 7805, - "surrender": 7806, - "breaks": 7807, - "playoff": 7808, - "database": 7809, - "##ified": 7810, - "##lon": 7811, - "ideal": 7812, - "beetle": 7813, - "aspect": 7814, - "soap": 7815, - "regulation": 7816, - "strings": 7817, - "expand": 7818, - "anglo": 7819, - "shorter": 7820, - "crosses": 7821, - "retreat": 7822, - "tough": 7823, - "coins": 7824, - "wallace": 7825, - "directions": 7826, - "pressing": 7827, - "##oon": 7828, - "shipping": 7829, - "locomotives": 7830, - "comparison": 7831, - "topics": 7832, - "nephew": 7833, - "##mes": 7834, - "distinction": 7835, - "honors": 7836, - "travelled": 7837, - "sierra": 7838, - "ibn": 7839, - "##over": 7840, - "fortress": 7841, - "sa": 7842, - "recognised": 7843, - "carved": 7844, - "1869": 7845, - "clients": 7846, - "##dan": 7847, - "intent": 7848, - "##mar": 7849, - "coaches": 7850, - "describing": 7851, - "bread": 7852, - "##ington": 7853, - "beaten": 7854, - "northwestern": 7855, - "##ona": 7856, - "merit": 7857, - "youtube": 7858, - "collapse": 7859, - "challenges": 7860, - "em": 7861, - "historians": 7862, - "objective": 7863, - "submitted": 7864, - "virus": 7865, - "attacking": 7866, - "drake": 7867, - "assume": 7868, - "##ere": 7869, - "diseases": 7870, - "marc": 7871, - "stem": 7872, - "leeds": 7873, - "##cus": 7874, - "##ab": 7875, - "farming": 7876, - "glasses": 7877, - "##lock": 7878, - "visits": 7879, - "nowhere": 7880, - "fellowship": 7881, - "relevant": 7882, - "carries": 7883, - "restaurants": 7884, - "experiments": 7885, - "101": 7886, - "constantly": 7887, - "bases": 7888, - "targets": 7889, - "shah": 7890, - "tenth": 7891, - "opponents": 7892, - "verse": 7893, - "territorial": 7894, - "##ira": 7895, - "writings": 7896, - "corruption": 7897, - "##hs": 7898, - "instruction": 7899, - "inherited": 7900, - "reverse": 7901, - "emphasis": 7902, - "##vic": 7903, - "employee": 7904, - "arch": 7905, - "keeps": 7906, - "rabbi": 7907, - "watson": 7908, - "payment": 7909, - "uh": 7910, - "##ala": 7911, - "nancy": 7912, - "##tre": 7913, - "venice": 7914, - "fastest": 7915, - "sexy": 7916, - "banned": 7917, - "adrian": 7918, - "properly": 7919, - "ruth": 7920, - "touchdown": 7921, - "dollar": 7922, - "boards": 7923, - "metre": 7924, - "circles": 7925, - "edges": 7926, - "favour": 7927, - "comments": 7928, - "ok": 7929, - "travels": 7930, - "liberation": 7931, - "scattered": 7932, - "firmly": 7933, - "##ular": 7934, - "holland": 7935, - "permitted": 7936, - "diesel": 7937, - "kenya": 7938, - "den": 7939, - "originated": 7940, - "##ral": 7941, - "demons": 7942, - "resumed": 7943, - "dragged": 7944, - "rider": 7945, - "##rus": 7946, - "servant": 7947, - "blinked": 7948, - "extend": 7949, - "torn": 7950, - "##ias": 7951, - "##sey": 7952, - "input": 7953, - "meal": 7954, - "everybody": 7955, - "cylinder": 7956, - "kinds": 7957, - "camps": 7958, - "##fe": 7959, - "bullet": 7960, - "logic": 7961, - "##wn": 7962, - "croatian": 7963, - "evolved": 7964, - "healthy": 7965, - "fool": 7966, - "chocolate": 7967, - "wise": 7968, - "preserve": 7969, - "pradesh": 7970, - "##ess": 7971, - "respective": 7972, - "1850": 7973, - "##ew": 7974, - "chicken": 7975, - "artificial": 7976, - "gross": 7977, - "corresponding": 7978, - "convicted": 7979, - "cage": 7980, - "caroline": 7981, - "dialogue": 7982, - "##dor": 7983, - "narrative": 7984, - "stranger": 7985, - "mario": 7986, - "br": 7987, - "christianity": 7988, - "failing": 7989, - "trent": 7990, - "commanding": 7991, - "buddhist": 7992, - "1848": 7993, - "maurice": 7994, - "focusing": 7995, - "yale": 7996, - "bike": 7997, - "altitude": 7998, - "##ering": 7999, - "mouse": 8000, - "revised": 8001, - "##sley": 8002, - "veteran": 8003, - "##ig": 8004, - "pulls": 8005, - "theology": 8006, - "crashed": 8007, - "campaigns": 8008, - "legion": 8009, - "##ability": 8010, - "drag": 8011, - "excellence": 8012, - "customer": 8013, - "cancelled": 8014, - "intensity": 8015, - "excuse": 8016, - "##lar": 8017, - "liga": 8018, - "participating": 8019, - "contributing": 8020, - "printing": 8021, - "##burn": 8022, - "variable": 8023, - "##rk": 8024, - "curious": 8025, - "bin": 8026, - "legacy": 8027, - "renaissance": 8028, - "##my": 8029, - "symptoms": 8030, - "binding": 8031, - "vocalist": 8032, - "dancer": 8033, - "##nie": 8034, - "grammar": 8035, - "gospel": 8036, - "democrats": 8037, - "ya": 8038, - "enters": 8039, - "sc": 8040, - "diplomatic": 8041, - "hitler": 8042, - "##ser": 8043, - "clouds": 8044, - "mathematical": 8045, - "quit": 8046, - "defended": 8047, - "oriented": 8048, - "##heim": 8049, - "fundamental": 8050, - "hardware": 8051, - "impressive": 8052, - "equally": 8053, - "convince": 8054, - "confederate": 8055, - "guilt": 8056, - "chuck": 8057, - "sliding": 8058, - "##ware": 8059, - "magnetic": 8060, - "narrowed": 8061, - "petersburg": 8062, - "bulgaria": 8063, - "otto": 8064, - "phd": 8065, - "skill": 8066, - "##ama": 8067, - "reader": 8068, - "hopes": 8069, - "pitcher": 8070, - "reservoir": 8071, - "hearts": 8072, - "automatically": 8073, - "expecting": 8074, - "mysterious": 8075, - "bennett": 8076, - "extensively": 8077, - "imagined": 8078, - "seeds": 8079, - "monitor": 8080, - "fix": 8081, - "##ative": 8082, - "journalism": 8083, - "struggling": 8084, - "signature": 8085, - "ranch": 8086, - "encounter": 8087, - "photographer": 8088, - "observation": 8089, - "protests": 8090, - "##pin": 8091, - "influences": 8092, - "##hr": 8093, - "calendar": 8094, - "##all": 8095, - "cruz": 8096, - "croatia": 8097, - "locomotive": 8098, - "hughes": 8099, - "naturally": 8100, - "shakespeare": 8101, - "basement": 8102, - "hook": 8103, - "uncredited": 8104, - "faded": 8105, - "theories": 8106, - "approaches": 8107, - "dare": 8108, - "phillips": 8109, - "filling": 8110, - "fury": 8111, - "obama": 8112, - "##ain": 8113, - "efficient": 8114, - "arc": 8115, - "deliver": 8116, - "min": 8117, - "raid": 8118, - "breeding": 8119, - "inducted": 8120, - "leagues": 8121, - "efficiency": 8122, - "axis": 8123, - "montana": 8124, - "eagles": 8125, - "##ked": 8126, - "supplied": 8127, - "instructions": 8128, - "karen": 8129, - "picking": 8130, - "indicating": 8131, - "trap": 8132, - "anchor": 8133, - "practically": 8134, - "christians": 8135, - "tomb": 8136, - "vary": 8137, - "occasional": 8138, - "electronics": 8139, - "lords": 8140, - "readers": 8141, - "newcastle": 8142, - "faint": 8143, - "innovation": 8144, - "collect": 8145, - "situations": 8146, - "engagement": 8147, - "160": 8148, - "claude": 8149, - "mixture": 8150, - "##feld": 8151, - "peer": 8152, - "tissue": 8153, - "logo": 8154, - "lean": 8155, - "##ration": 8156, - "°f": 8157, - "floors": 8158, - "##ven": 8159, - "architects": 8160, - "reducing": 8161, - "##our": 8162, - "##ments": 8163, - "rope": 8164, - "1859": 8165, - "ottawa": 8166, - "##har": 8167, - "samples": 8168, - "banking": 8169, - "declaration": 8170, - "proteins": 8171, - "resignation": 8172, - "francois": 8173, - "saudi": 8174, - "advocate": 8175, - "exhibited": 8176, - "armor": 8177, - "twins": 8178, - "divorce": 8179, - "##ras": 8180, - "abraham": 8181, - "reviewed": 8182, - "jo": 8183, - "temporarily": 8184, - "matrix": 8185, - "physically": 8186, - "pulse": 8187, - "curled": 8188, - "##ena": 8189, - "difficulties": 8190, - "bengal": 8191, - "usage": 8192, - "##ban": 8193, - "annie": 8194, - "riders": 8195, - "certificate": 8196, - "##pi": 8197, - "holes": 8198, - "warsaw": 8199, - "distinctive": 8200, - "jessica": 8201, - "##mon": 8202, - "mutual": 8203, - "1857": 8204, - "customs": 8205, - "circular": 8206, - "eugene": 8207, - "removal": 8208, - "loaded": 8209, - "mere": 8210, - "vulnerable": 8211, - "depicted": 8212, - "generations": 8213, - "dame": 8214, - "heir": 8215, - "enormous": 8216, - "lightly": 8217, - "climbing": 8218, - "pitched": 8219, - "lessons": 8220, - "pilots": 8221, - "nepal": 8222, - "ram": 8223, - "google": 8224, - "preparing": 8225, - "brad": 8226, - "louise": 8227, - "renowned": 8228, - "##ā‚‚": 8229, - "liam": 8230, - "##ably": 8231, - "plaza": 8232, - "shaw": 8233, - "sophie": 8234, - "brilliant": 8235, - "bills": 8236, - "##bar": 8237, - "##nik": 8238, - "fucking": 8239, - "mainland": 8240, - "server": 8241, - "pleasant": 8242, - "seized": 8243, - "veterans": 8244, - "jerked": 8245, - "fail": 8246, - "beta": 8247, - "brush": 8248, - "radiation": 8249, - "stored": 8250, - "warmth": 8251, - "southeastern": 8252, - "nate": 8253, - "sin": 8254, - "raced": 8255, - "berkeley": 8256, - "joke": 8257, - "athlete": 8258, - "designation": 8259, - "trunk": 8260, - "##low": 8261, - "roland": 8262, - "qualification": 8263, - "archives": 8264, - "heels": 8265, - "artwork": 8266, - "receives": 8267, - "judicial": 8268, - "reserves": 8269, - "##bed": 8270, - "woke": 8271, - "installation": 8272, - "abu": 8273, - "floating": 8274, - "fake": 8275, - "lesser": 8276, - "excitement": 8277, - "interface": 8278, - "concentrated": 8279, - "addressed": 8280, - "characteristic": 8281, - "amanda": 8282, - "saxophone": 8283, - "monk": 8284, - "auto": 8285, - "##bus": 8286, - "releasing": 8287, - "egg": 8288, - "dies": 8289, - "interaction": 8290, - "defender": 8291, - "ce": 8292, - "outbreak": 8293, - "glory": 8294, - "loving": 8295, - "##bert": 8296, - "sequel": 8297, - "consciousness": 8298, - "http": 8299, - "awake": 8300, - "ski": 8301, - "enrolled": 8302, - "##ress": 8303, - "handling": 8304, - "rookie": 8305, - "brow": 8306, - "somebody": 8307, - "biography": 8308, - "warfare": 8309, - "amounts": 8310, - "contracts": 8311, - "presentation": 8312, - "fabric": 8313, - "dissolved": 8314, - "challenged": 8315, - "meter": 8316, - "psychological": 8317, - "lt": 8318, - "elevated": 8319, - "rally": 8320, - "accurate": 8321, - "##tha": 8322, - "hospitals": 8323, - "undergraduate": 8324, - "specialist": 8325, - "venezuela": 8326, - "exhibit": 8327, - "shed": 8328, - "nursing": 8329, - "protestant": 8330, - "fluid": 8331, - "structural": 8332, - "footage": 8333, - "jared": 8334, - "consistent": 8335, - "prey": 8336, - "##ska": 8337, - "succession": 8338, - "reflect": 8339, - "exile": 8340, - "lebanon": 8341, - "wiped": 8342, - "suspect": 8343, - "shanghai": 8344, - "resting": 8345, - "integration": 8346, - "preservation": 8347, - "marvel": 8348, - "variant": 8349, - "pirates": 8350, - "sheep": 8351, - "rounded": 8352, - "capita": 8353, - "sailing": 8354, - "colonies": 8355, - "manuscript": 8356, - "deemed": 8357, - "variations": 8358, - "clarke": 8359, - "functional": 8360, - "emerging": 8361, - "boxing": 8362, - "relaxed": 8363, - "curse": 8364, - "azerbaijan": 8365, - "heavyweight": 8366, - "nickname": 8367, - "editorial": 8368, - "rang": 8369, - "grid": 8370, - "tightened": 8371, - "earthquake": 8372, - "flashed": 8373, - "miguel": 8374, - "rushing": 8375, - "##ches": 8376, - "improvements": 8377, - "boxes": 8378, - "brooks": 8379, - "180": 8380, - "consumption": 8381, - "molecular": 8382, - "felix": 8383, - "societies": 8384, - "repeatedly": 8385, - "variation": 8386, - "aids": 8387, - "civic": 8388, - "graphics": 8389, - "professionals": 8390, - "realm": 8391, - "autonomous": 8392, - "receiver": 8393, - "delayed": 8394, - "workshop": 8395, - "militia": 8396, - "chairs": 8397, - "trump": 8398, - "canyon": 8399, - "##point": 8400, - "harsh": 8401, - "extending": 8402, - "lovely": 8403, - "happiness": 8404, - "##jan": 8405, - "stake": 8406, - "eyebrows": 8407, - "embassy": 8408, - "wellington": 8409, - "hannah": 8410, - "##ella": 8411, - "sony": 8412, - "corners": 8413, - "bishops": 8414, - "swear": 8415, - "cloth": 8416, - "contents": 8417, - "xi": 8418, - "namely": 8419, - "commenced": 8420, - "1854": 8421, - "stanford": 8422, - "nashville": 8423, - "courage": 8424, - "graphic": 8425, - "commitment": 8426, - "garrison": 8427, - "##bin": 8428, - "hamlet": 8429, - "clearing": 8430, - "rebels": 8431, - "attraction": 8432, - "literacy": 8433, - "cooking": 8434, - "ruins": 8435, - "temples": 8436, - "jenny": 8437, - "humanity": 8438, - "celebrate": 8439, - "hasn": 8440, - "freight": 8441, - "sixty": 8442, - "rebel": 8443, - "bastard": 8444, - "##art": 8445, - "newton": 8446, - "##ada": 8447, - "deer": 8448, - "##ges": 8449, - "##ching": 8450, - "smiles": 8451, - "delaware": 8452, - "singers": 8453, - "##ets": 8454, - "approaching": 8455, - "assists": 8456, - "flame": 8457, - "##ph": 8458, - "boulevard": 8459, - "barrel": 8460, - "planted": 8461, - "##ome": 8462, - "pursuit": 8463, - "##sia": 8464, - "consequences": 8465, - "posts": 8466, - "shallow": 8467, - "invitation": 8468, - "rode": 8469, - "depot": 8470, - "ernest": 8471, - "kane": 8472, - "rod": 8473, - "concepts": 8474, - "preston": 8475, - "topic": 8476, - "chambers": 8477, - "striking": 8478, - "blast": 8479, - "arrives": 8480, - "descendants": 8481, - "montgomery": 8482, - "ranges": 8483, - "worlds": 8484, - "##lay": 8485, - "##ari": 8486, - "span": 8487, - "chaos": 8488, - "praise": 8489, - "##ag": 8490, - "fewer": 8491, - "1855": 8492, - "sanctuary": 8493, - "mud": 8494, - "fbi": 8495, - "##ions": 8496, - "programmes": 8497, - "maintaining": 8498, - "unity": 8499, - "harper": 8500, - "bore": 8501, - "handsome": 8502, - "closure": 8503, - "tournaments": 8504, - "thunder": 8505, - "nebraska": 8506, - "linda": 8507, - "facade": 8508, - "puts": 8509, - "satisfied": 8510, - "argentine": 8511, - "dale": 8512, - "cork": 8513, - "dome": 8514, - "panama": 8515, - "##yl": 8516, - "1858": 8517, - "tasks": 8518, - "experts": 8519, - "##ates": 8520, - "feeding": 8521, - "equation": 8522, - "##las": 8523, - "##ida": 8524, - "##tu": 8525, - "engage": 8526, - "bryan": 8527, - "##ax": 8528, - "um": 8529, - "quartet": 8530, - "melody": 8531, - "disbanded": 8532, - "sheffield": 8533, - "blocked": 8534, - "gasped": 8535, - "delay": 8536, - "kisses": 8537, - "maggie": 8538, - "connects": 8539, - "##non": 8540, - "sts": 8541, - "poured": 8542, - "creator": 8543, - "publishers": 8544, - "##we": 8545, - "guided": 8546, - "ellis": 8547, - "extinct": 8548, - "hug": 8549, - "gaining": 8550, - "##ord": 8551, - "complicated": 8552, - "##bility": 8553, - "poll": 8554, - "clenched": 8555, - "investigate": 8556, - "##use": 8557, - "thereby": 8558, - "quantum": 8559, - "spine": 8560, - "cdp": 8561, - "humor": 8562, - "kills": 8563, - "administered": 8564, - "semifinals": 8565, - "##du": 8566, - "encountered": 8567, - "ignore": 8568, - "##bu": 8569, - "commentary": 8570, - "##maker": 8571, - "bother": 8572, - "roosevelt": 8573, - "140": 8574, - "plains": 8575, - "halfway": 8576, - "flowing": 8577, - "cultures": 8578, - "crack": 8579, - "imprisoned": 8580, - "neighboring": 8581, - "airline": 8582, - "##ses": 8583, - "##view": 8584, - "##mate": 8585, - "##ec": 8586, - "gather": 8587, - "wolves": 8588, - "marathon": 8589, - "transformed": 8590, - "##ill": 8591, - "cruise": 8592, - "organisations": 8593, - "carol": 8594, - "punch": 8595, - "exhibitions": 8596, - "numbered": 8597, - "alarm": 8598, - "ratings": 8599, - "daddy": 8600, - "silently": 8601, - "##stein": 8602, - "queens": 8603, - "colours": 8604, - "impression": 8605, - "guidance": 8606, - "liu": 8607, - "tactical": 8608, - "##rat": 8609, - "marshal": 8610, - "della": 8611, - "arrow": 8612, - "##ings": 8613, - "rested": 8614, - "feared": 8615, - "tender": 8616, - "owns": 8617, - "bitter": 8618, - "advisor": 8619, - "escort": 8620, - "##ides": 8621, - "spare": 8622, - "farms": 8623, - "grants": 8624, - "##ene": 8625, - "dragons": 8626, - "encourage": 8627, - "colleagues": 8628, - "cameras": 8629, - "##und": 8630, - "sucked": 8631, - "pile": 8632, - "spirits": 8633, - "prague": 8634, - "statements": 8635, - "suspension": 8636, - "landmark": 8637, - "fence": 8638, - "torture": 8639, - "recreation": 8640, - "bags": 8641, - "permanently": 8642, - "survivors": 8643, - "pond": 8644, - "spy": 8645, - "predecessor": 8646, - "bombing": 8647, - "coup": 8648, - "##og": 8649, - "protecting": 8650, - "transformation": 8651, - "glow": 8652, - "##lands": 8653, - "##book": 8654, - "dug": 8655, - "priests": 8656, - "andrea": 8657, - "feat": 8658, - "barn": 8659, - "jumping": 8660, - "##chen": 8661, - "##ologist": 8662, - "##con": 8663, - "casualties": 8664, - "stern": 8665, - "auckland": 8666, - "pipe": 8667, - "serie": 8668, - "revealing": 8669, - "ba": 8670, - "##bel": 8671, - "trevor": 8672, - "mercy": 8673, - "spectrum": 8674, - "yang": 8675, - "consist": 8676, - "governing": 8677, - "collaborated": 8678, - "possessed": 8679, - "epic": 8680, - "comprises": 8681, - "blew": 8682, - "shane": 8683, - "##ack": 8684, - "lopez": 8685, - "honored": 8686, - "magical": 8687, - "sacrifice": 8688, - "judgment": 8689, - "perceived": 8690, - "hammer": 8691, - "mtv": 8692, - "baronet": 8693, - "tune": 8694, - "das": 8695, - "missionary": 8696, - "sheets": 8697, - "350": 8698, - "neutral": 8699, - "oral": 8700, - "threatening": 8701, - "attractive": 8702, - "shade": 8703, - "aims": 8704, - "seminary": 8705, - "##master": 8706, - "estates": 8707, - "1856": 8708, - "michel": 8709, - "wounds": 8710, - "refugees": 8711, - "manufacturers": 8712, - "##nic": 8713, - "mercury": 8714, - "syndrome": 8715, - "porter": 8716, - "##iya": 8717, - "##din": 8718, - "hamburg": 8719, - "identification": 8720, - "upstairs": 8721, - "purse": 8722, - "widened": 8723, - "pause": 8724, - "cared": 8725, - "breathed": 8726, - "affiliate": 8727, - "santiago": 8728, - "prevented": 8729, - "celtic": 8730, - "fisher": 8731, - "125": 8732, - "recruited": 8733, - "byzantine": 8734, - "reconstruction": 8735, - "farther": 8736, - "##mp": 8737, - "diet": 8738, - "sake": 8739, - "au": 8740, - "spite": 8741, - "sensation": 8742, - "##ert": 8743, - "blank": 8744, - "separation": 8745, - "105": 8746, - "##hon": 8747, - "vladimir": 8748, - "armies": 8749, - "anime": 8750, - "##lie": 8751, - "accommodate": 8752, - "orbit": 8753, - "cult": 8754, - "sofia": 8755, - "archive": 8756, - "##ify": 8757, - "##box": 8758, - "founders": 8759, - "sustained": 8760, - "disorder": 8761, - "honours": 8762, - "northeastern": 8763, - "mia": 8764, - "crops": 8765, - "violet": 8766, - "threats": 8767, - "blanket": 8768, - "fires": 8769, - "canton": 8770, - "followers": 8771, - "southwestern": 8772, - "prototype": 8773, - "voyage": 8774, - "assignment": 8775, - "altered": 8776, - "moderate": 8777, - "protocol": 8778, - "pistol": 8779, - "##eo": 8780, - "questioned": 8781, - "brass": 8782, - "lifting": 8783, - "1852": 8784, - "math": 8785, - "authored": 8786, - "##ual": 8787, - "doug": 8788, - "dimensional": 8789, - "dynamic": 8790, - "##san": 8791, - "1851": 8792, - "pronounced": 8793, - "grateful": 8794, - "quest": 8795, - "uncomfortable": 8796, - "boom": 8797, - "presidency": 8798, - "stevens": 8799, - "relating": 8800, - "politicians": 8801, - "chen": 8802, - "barrier": 8803, - "quinn": 8804, - "diana": 8805, - "mosque": 8806, - "tribal": 8807, - "cheese": 8808, - "palmer": 8809, - "portions": 8810, - "sometime": 8811, - "chester": 8812, - "treasure": 8813, - "wu": 8814, - "bend": 8815, - "download": 8816, - "millions": 8817, - "reforms": 8818, - "registration": 8819, - "##osa": 8820, - "consequently": 8821, - "monitoring": 8822, - "ate": 8823, - "preliminary": 8824, - "brandon": 8825, - "invented": 8826, - "ps": 8827, - "eaten": 8828, - "exterior": 8829, - "intervention": 8830, - "ports": 8831, - "documented": 8832, - "log": 8833, - "displays": 8834, - "lecture": 8835, - "sally": 8836, - "favourite": 8837, - "##itz": 8838, - "vermont": 8839, - "lo": 8840, - "invisible": 8841, - "isle": 8842, - "breed": 8843, - "##ator": 8844, - "journalists": 8845, - "relay": 8846, - "speaks": 8847, - "backward": 8848, - "explore": 8849, - "midfielder": 8850, - "actively": 8851, - "stefan": 8852, - "procedures": 8853, - "cannon": 8854, - "blond": 8855, - "kenneth": 8856, - "centered": 8857, - "servants": 8858, - "chains": 8859, - "libraries": 8860, - "malcolm": 8861, - "essex": 8862, - "henri": 8863, - "slavery": 8864, - "##hal": 8865, - "facts": 8866, - "fairy": 8867, - "coached": 8868, - "cassie": 8869, - "cats": 8870, - "washed": 8871, - "cop": 8872, - "##fi": 8873, - "announcement": 8874, - "item": 8875, - "2000s": 8876, - "vinyl": 8877, - "activated": 8878, - "marco": 8879, - "frontier": 8880, - "growled": 8881, - "curriculum": 8882, - "##das": 8883, - "loyal": 8884, - "accomplished": 8885, - "leslie": 8886, - "ritual": 8887, - "kenny": 8888, - "##00": 8889, - "vii": 8890, - "napoleon": 8891, - "hollow": 8892, - "hybrid": 8893, - "jungle": 8894, - "stationed": 8895, - "friedrich": 8896, - "counted": 8897, - "##ulated": 8898, - "platinum": 8899, - "theatrical": 8900, - "seated": 8901, - "col": 8902, - "rubber": 8903, - "glen": 8904, - "1840": 8905, - "diversity": 8906, - "healing": 8907, - "extends": 8908, - "id": 8909, - "provisions": 8910, - "administrator": 8911, - "columbus": 8912, - "##oe": 8913, - "tributary": 8914, - "te": 8915, - "assured": 8916, - "org": 8917, - "##uous": 8918, - "prestigious": 8919, - "examined": 8920, - "lectures": 8921, - "grammy": 8922, - "ronald": 8923, - "associations": 8924, - "bailey": 8925, - "allan": 8926, - "essays": 8927, - "flute": 8928, - "believing": 8929, - "consultant": 8930, - "proceedings": 8931, - "travelling": 8932, - "1853": 8933, - "kit": 8934, - "kerala": 8935, - "yugoslavia": 8936, - "buddy": 8937, - "methodist": 8938, - "##ith": 8939, - "burial": 8940, - "centres": 8941, - "batman": 8942, - "##nda": 8943, - "discontinued": 8944, - "bo": 8945, - "dock": 8946, - "stockholm": 8947, - "lungs": 8948, - "severely": 8949, - "##nk": 8950, - "citing": 8951, - "manga": 8952, - "##ugh": 8953, - "steal": 8954, - "mumbai": 8955, - "iraqi": 8956, - "robot": 8957, - "celebrity": 8958, - "bride": 8959, - "broadcasts": 8960, - "abolished": 8961, - "pot": 8962, - "joel": 8963, - "overhead": 8964, - "franz": 8965, - "packed": 8966, - "reconnaissance": 8967, - "johann": 8968, - "acknowledged": 8969, - "introduce": 8970, - "handled": 8971, - "doctorate": 8972, - "developments": 8973, - "drinks": 8974, - "alley": 8975, - "palestine": 8976, - "##nis": 8977, - "##aki": 8978, - "proceeded": 8979, - "recover": 8980, - "bradley": 8981, - "grain": 8982, - "patch": 8983, - "afford": 8984, - "infection": 8985, - "nationalist": 8986, - "legendary": 8987, - "##ath": 8988, - "interchange": 8989, - "virtually": 8990, - "gen": 8991, - "gravity": 8992, - "exploration": 8993, - "amber": 8994, - "vital": 8995, - "wishes": 8996, - "powell": 8997, - "doctrine": 8998, - "elbow": 8999, - "screenplay": 9000, - "##bird": 9001, - "contribute": 9002, - "indonesian": 9003, - "pet": 9004, - "creates": 9005, - "##com": 9006, - "enzyme": 9007, - "kylie": 9008, - "discipline": 9009, - "drops": 9010, - "manila": 9011, - "hunger": 9012, - "##ien": 9013, - "layers": 9014, - "suffer": 9015, - "fever": 9016, - "bits": 9017, - "monica": 9018, - "keyboard": 9019, - "manages": 9020, - "##hood": 9021, - "searched": 9022, - "appeals": 9023, - "##bad": 9024, - "testament": 9025, - "grande": 9026, - "reid": 9027, - "##war": 9028, - "beliefs": 9029, - "congo": 9030, - "##ification": 9031, - "##dia": 9032, - "si": 9033, - "requiring": 9034, - "##via": 9035, - "casey": 9036, - "1849": 9037, - "regret": 9038, - "streak": 9039, - "rape": 9040, - "depends": 9041, - "syrian": 9042, - "sprint": 9043, - "pound": 9044, - "tourists": 9045, - "upcoming": 9046, - "pub": 9047, - "##xi": 9048, - "tense": 9049, - "##els": 9050, - "practiced": 9051, - "echo": 9052, - "nationwide": 9053, - "guild": 9054, - "motorcycle": 9055, - "liz": 9056, - "##zar": 9057, - "chiefs": 9058, - "desired": 9059, - "elena": 9060, - "bye": 9061, - "precious": 9062, - "absorbed": 9063, - "relatives": 9064, - "booth": 9065, - "pianist": 9066, - "##mal": 9067, - "citizenship": 9068, - "exhausted": 9069, - "wilhelm": 9070, - "##ceae": 9071, - "##hed": 9072, - "noting": 9073, - "quarterback": 9074, - "urge": 9075, - "hectares": 9076, - "##gue": 9077, - "ace": 9078, - "holly": 9079, - "##tal": 9080, - "blonde": 9081, - "davies": 9082, - "parked": 9083, - "sustainable": 9084, - "stepping": 9085, - "twentieth": 9086, - "airfield": 9087, - "galaxy": 9088, - "nest": 9089, - "chip": 9090, - "##nell": 9091, - "tan": 9092, - "shaft": 9093, - "paulo": 9094, - "requirement": 9095, - "##zy": 9096, - "paradise": 9097, - "tobacco": 9098, - "trans": 9099, - "renewed": 9100, - "vietnamese": 9101, - "##cker": 9102, - "##ju": 9103, - "suggesting": 9104, - "catching": 9105, - "holmes": 9106, - "enjoying": 9107, - "md": 9108, - "trips": 9109, - "colt": 9110, - "holder": 9111, - "butterfly": 9112, - "nerve": 9113, - "reformed": 9114, - "cherry": 9115, - "bowling": 9116, - "trailer": 9117, - "carriage": 9118, - "goodbye": 9119, - "appreciate": 9120, - "toy": 9121, - "joshua": 9122, - "interactive": 9123, - "enabled": 9124, - "involve": 9125, - "##kan": 9126, - "collar": 9127, - "determination": 9128, - "bunch": 9129, - "facebook": 9130, - "recall": 9131, - "shorts": 9132, - "superintendent": 9133, - "episcopal": 9134, - "frustration": 9135, - "giovanni": 9136, - "nineteenth": 9137, - "laser": 9138, - "privately": 9139, - "array": 9140, - "circulation": 9141, - "##ovic": 9142, - "armstrong": 9143, - "deals": 9144, - "painful": 9145, - "permit": 9146, - "discrimination": 9147, - "##wi": 9148, - "aires": 9149, - "retiring": 9150, - "cottage": 9151, - "ni": 9152, - "##sta": 9153, - "horizon": 9154, - "ellen": 9155, - "jamaica": 9156, - "ripped": 9157, - "fernando": 9158, - "chapters": 9159, - "playstation": 9160, - "patron": 9161, - "lecturer": 9162, - "navigation": 9163, - "behaviour": 9164, - "genes": 9165, - "georgian": 9166, - "export": 9167, - "solomon": 9168, - "rivals": 9169, - "swift": 9170, - "seventeen": 9171, - "rodriguez": 9172, - "princeton": 9173, - "independently": 9174, - "sox": 9175, - "1847": 9176, - "arguing": 9177, - "entity": 9178, - "casting": 9179, - "hank": 9180, - "criteria": 9181, - "oakland": 9182, - "geographic": 9183, - "milwaukee": 9184, - "reflection": 9185, - "expanding": 9186, - "conquest": 9187, - "dubbed": 9188, - "##tv": 9189, - "halt": 9190, - "brave": 9191, - "brunswick": 9192, - "doi": 9193, - "arched": 9194, - "curtis": 9195, - "divorced": 9196, - "predominantly": 9197, - "somerset": 9198, - "streams": 9199, - "ugly": 9200, - "zoo": 9201, - "horrible": 9202, - "curved": 9203, - "buenos": 9204, - "fierce": 9205, - "dictionary": 9206, - "vector": 9207, - "theological": 9208, - "unions": 9209, - "handful": 9210, - "stability": 9211, - "chan": 9212, - "punjab": 9213, - "segments": 9214, - "##lly": 9215, - "altar": 9216, - "ignoring": 9217, - "gesture": 9218, - "monsters": 9219, - "pastor": 9220, - "##stone": 9221, - "thighs": 9222, - "unexpected": 9223, - "operators": 9224, - "abruptly": 9225, - "coin": 9226, - "compiled": 9227, - "associates": 9228, - "improving": 9229, - "migration": 9230, - "pin": 9231, - "##ose": 9232, - "compact": 9233, - "collegiate": 9234, - "reserved": 9235, - "##urs": 9236, - "quarterfinals": 9237, - "roster": 9238, - "restore": 9239, - "assembled": 9240, - "hurry": 9241, - "oval": 9242, - "##cies": 9243, - "1846": 9244, - "flags": 9245, - "martha": 9246, - "##del": 9247, - "victories": 9248, - "sharply": 9249, - "##rated": 9250, - "argues": 9251, - "deadly": 9252, - "neo": 9253, - "drawings": 9254, - "symbols": 9255, - "performer": 9256, - "##iel": 9257, - "griffin": 9258, - "restrictions": 9259, - "editing": 9260, - "andrews": 9261, - "java": 9262, - "journals": 9263, - "arabia": 9264, - "compositions": 9265, - "dee": 9266, - "pierce": 9267, - "removing": 9268, - "hindi": 9269, - "casino": 9270, - "runway": 9271, - "civilians": 9272, - "minds": 9273, - "nasa": 9274, - "hotels": 9275, - "##zation": 9276, - "refuge": 9277, - "rent": 9278, - "retain": 9279, - "potentially": 9280, - "conferences": 9281, - "suburban": 9282, - "conducting": 9283, - "##tto": 9284, - "##tions": 9285, - "##tle": 9286, - "descended": 9287, - "massacre": 9288, - "##cal": 9289, - "ammunition": 9290, - "terrain": 9291, - "fork": 9292, - "souls": 9293, - "counts": 9294, - "chelsea": 9295, - "durham": 9296, - "drives": 9297, - "cab": 9298, - "##bank": 9299, - "perth": 9300, - "realizing": 9301, - "palestinian": 9302, - "finn": 9303, - "simpson": 9304, - "##dal": 9305, - "betty": 9306, - "##ule": 9307, - "moreover": 9308, - "particles": 9309, - "cardinals": 9310, - "tent": 9311, - "evaluation": 9312, - "extraordinary": 9313, - "##oid": 9314, - "inscription": 9315, - "##works": 9316, - "wednesday": 9317, - "chloe": 9318, - "maintains": 9319, - "panels": 9320, - "ashley": 9321, - "trucks": 9322, - "##nation": 9323, - "cluster": 9324, - "sunlight": 9325, - "strikes": 9326, - "zhang": 9327, - "##wing": 9328, - "dialect": 9329, - "canon": 9330, - "##ap": 9331, - "tucked": 9332, - "##ws": 9333, - "collecting": 9334, - "##mas": 9335, - "##can": 9336, - "##sville": 9337, - "maker": 9338, - "quoted": 9339, - "evan": 9340, - "franco": 9341, - "aria": 9342, - "buying": 9343, - "cleaning": 9344, - "eva": 9345, - "closet": 9346, - "provision": 9347, - "apollo": 9348, - "clinic": 9349, - "rat": 9350, - "##ez": 9351, - "necessarily": 9352, - "ac": 9353, - "##gle": 9354, - "##ising": 9355, - "venues": 9356, - "flipped": 9357, - "cent": 9358, - "spreading": 9359, - "trustees": 9360, - "checking": 9361, - "authorized": 9362, - "##sco": 9363, - "disappointed": 9364, - "##ado": 9365, - "notion": 9366, - "duration": 9367, - "trumpet": 9368, - "hesitated": 9369, - "topped": 9370, - "brussels": 9371, - "rolls": 9372, - "theoretical": 9373, - "hint": 9374, - "define": 9375, - "aggressive": 9376, - "repeat": 9377, - "wash": 9378, - "peaceful": 9379, - "optical": 9380, - "width": 9381, - "allegedly": 9382, - "mcdonald": 9383, - "strict": 9384, - "copyright": 9385, - "##illa": 9386, - "investors": 9387, - "mar": 9388, - "jam": 9389, - "witnesses": 9390, - "sounding": 9391, - "miranda": 9392, - "michelle": 9393, - "privacy": 9394, - "hugo": 9395, - "harmony": 9396, - "##pp": 9397, - "valid": 9398, - "lynn": 9399, - "glared": 9400, - "nina": 9401, - "102": 9402, - "headquartered": 9403, - "diving": 9404, - "boarding": 9405, - "gibson": 9406, - "##ncy": 9407, - "albanian": 9408, - "marsh": 9409, - "routine": 9410, - "dealt": 9411, - "enhanced": 9412, - "er": 9413, - "intelligent": 9414, - "substance": 9415, - "targeted": 9416, - "enlisted": 9417, - "discovers": 9418, - "spinning": 9419, - "observations": 9420, - "pissed": 9421, - "smoking": 9422, - "rebecca": 9423, - "capitol": 9424, - "visa": 9425, - "varied": 9426, - "costume": 9427, - "seemingly": 9428, - "indies": 9429, - "compensation": 9430, - "surgeon": 9431, - "thursday": 9432, - "arsenal": 9433, - "westminster": 9434, - "suburbs": 9435, - "rid": 9436, - "anglican": 9437, - "##ridge": 9438, - "knots": 9439, - "foods": 9440, - "alumni": 9441, - "lighter": 9442, - "fraser": 9443, - "whoever": 9444, - "portal": 9445, - "scandal": 9446, - "##ray": 9447, - "gavin": 9448, - "advised": 9449, - "instructor": 9450, - "flooding": 9451, - "terrorist": 9452, - "##ale": 9453, - "teenage": 9454, - "interim": 9455, - "senses": 9456, - "duck": 9457, - "teen": 9458, - "thesis": 9459, - "abby": 9460, - "eager": 9461, - "overcome": 9462, - "##ile": 9463, - "newport": 9464, - "glenn": 9465, - "rises": 9466, - "shame": 9467, - "##cc": 9468, - "prompted": 9469, - "priority": 9470, - "forgot": 9471, - "bomber": 9472, - "nicolas": 9473, - "protective": 9474, - "360": 9475, - "cartoon": 9476, - "katherine": 9477, - "breeze": 9478, - "lonely": 9479, - "trusted": 9480, - "henderson": 9481, - "richardson": 9482, - "relax": 9483, - "banner": 9484, - "candy": 9485, - "palms": 9486, - "remarkable": 9487, - "##rio": 9488, - "legends": 9489, - "cricketer": 9490, - "essay": 9491, - "ordained": 9492, - "edmund": 9493, - "rifles": 9494, - "trigger": 9495, - "##uri": 9496, - "##away": 9497, - "sail": 9498, - "alert": 9499, - "1830": 9500, - "audiences": 9501, - "penn": 9502, - "sussex": 9503, - "siblings": 9504, - "pursued": 9505, - "indianapolis": 9506, - "resist": 9507, - "rosa": 9508, - "consequence": 9509, - "succeed": 9510, - "avoided": 9511, - "1845": 9512, - "##ulation": 9513, - "inland": 9514, - "##tie": 9515, - "##nna": 9516, - "counsel": 9517, - "profession": 9518, - "chronicle": 9519, - "hurried": 9520, - "##una": 9521, - "eyebrow": 9522, - "eventual": 9523, - "bleeding": 9524, - "innovative": 9525, - "cure": 9526, - "##dom": 9527, - "committees": 9528, - "accounting": 9529, - "con": 9530, - "scope": 9531, - "hardy": 9532, - "heather": 9533, - "tenor": 9534, - "gut": 9535, - "herald": 9536, - "codes": 9537, - "tore": 9538, - "scales": 9539, - "wagon": 9540, - "##oo": 9541, - "luxury": 9542, - "tin": 9543, - "prefer": 9544, - "fountain": 9545, - "triangle": 9546, - "bonds": 9547, - "darling": 9548, - "convoy": 9549, - "dried": 9550, - "traced": 9551, - "beings": 9552, - "troy": 9553, - "accidentally": 9554, - "slam": 9555, - "findings": 9556, - "smelled": 9557, - "joey": 9558, - "lawyers": 9559, - "outcome": 9560, - "steep": 9561, - "bosnia": 9562, - "configuration": 9563, - "shifting": 9564, - "toll": 9565, - "brook": 9566, - "performers": 9567, - "lobby": 9568, - "philosophical": 9569, - "construct": 9570, - "shrine": 9571, - "aggregate": 9572, - "boot": 9573, - "cox": 9574, - "phenomenon": 9575, - "savage": 9576, - "insane": 9577, - "solely": 9578, - "reynolds": 9579, - "lifestyle": 9580, - "##ima": 9581, - "nationally": 9582, - "holdings": 9583, - "consideration": 9584, - "enable": 9585, - "edgar": 9586, - "mo": 9587, - "mama": 9588, - "##tein": 9589, - "fights": 9590, - "relegation": 9591, - "chances": 9592, - "atomic": 9593, - "hub": 9594, - "conjunction": 9595, - "awkward": 9596, - "reactions": 9597, - "currency": 9598, - "finale": 9599, - "kumar": 9600, - "underwent": 9601, - "steering": 9602, - "elaborate": 9603, - "gifts": 9604, - "comprising": 9605, - "melissa": 9606, - "veins": 9607, - "reasonable": 9608, - "sunshine": 9609, - "chi": 9610, - "solve": 9611, - "trails": 9612, - "inhabited": 9613, - "elimination": 9614, - "ethics": 9615, - "huh": 9616, - "ana": 9617, - "molly": 9618, - "consent": 9619, - "apartments": 9620, - "layout": 9621, - "marines": 9622, - "##ces": 9623, - "hunters": 9624, - "bulk": 9625, - "##oma": 9626, - "hometown": 9627, - "##wall": 9628, - "##mont": 9629, - "cracked": 9630, - "reads": 9631, - "neighbouring": 9632, - "withdrawn": 9633, - "admission": 9634, - "wingspan": 9635, - "damned": 9636, - "anthology": 9637, - "lancashire": 9638, - "brands": 9639, - "batting": 9640, - "forgive": 9641, - "cuban": 9642, - "awful": 9643, - "##lyn": 9644, - "104": 9645, - "dimensions": 9646, - "imagination": 9647, - "##ade": 9648, - "dante": 9649, - "##ship": 9650, - "tracking": 9651, - "desperately": 9652, - "goalkeeper": 9653, - "##yne": 9654, - "groaned": 9655, - "workshops": 9656, - "confident": 9657, - "burton": 9658, - "gerald": 9659, - "milton": 9660, - "circus": 9661, - "uncertain": 9662, - "slope": 9663, - "copenhagen": 9664, - "sophia": 9665, - "fog": 9666, - "philosopher": 9667, - "portraits": 9668, - "accent": 9669, - "cycling": 9670, - "varying": 9671, - "gripped": 9672, - "larvae": 9673, - "garrett": 9674, - "specified": 9675, - "scotia": 9676, - "mature": 9677, - "luther": 9678, - "kurt": 9679, - "rap": 9680, - "##kes": 9681, - "aerial": 9682, - "750": 9683, - "ferdinand": 9684, - "heated": 9685, - "es": 9686, - "transported": 9687, - "##shan": 9688, - "safely": 9689, - "nonetheless": 9690, - "##orn": 9691, - "##gal": 9692, - "motors": 9693, - "demanding": 9694, - "##sburg": 9695, - "startled": 9696, - "##brook": 9697, - "ally": 9698, - "generate": 9699, - "caps": 9700, - "ghana": 9701, - "stained": 9702, - "demo": 9703, - "mentions": 9704, - "beds": 9705, - "ap": 9706, - "afterward": 9707, - "diary": 9708, - "##bling": 9709, - "utility": 9710, - "##iro": 9711, - "richards": 9712, - "1837": 9713, - "conspiracy": 9714, - "conscious": 9715, - "shining": 9716, - "footsteps": 9717, - "observer": 9718, - "cyprus": 9719, - "urged": 9720, - "loyalty": 9721, - "developer": 9722, - "probability": 9723, - "olive": 9724, - "upgraded": 9725, - "gym": 9726, - "miracle": 9727, - "insects": 9728, - "graves": 9729, - "1844": 9730, - "ourselves": 9731, - "hydrogen": 9732, - "amazon": 9733, - "katie": 9734, - "tickets": 9735, - "poets": 9736, - "##pm": 9737, - "planes": 9738, - "##pan": 9739, - "prevention": 9740, - "witnessed": 9741, - "dense": 9742, - "jin": 9743, - "randy": 9744, - "tang": 9745, - "warehouse": 9746, - "monroe": 9747, - "bang": 9748, - "archived": 9749, - "elderly": 9750, - "investigations": 9751, - "alec": 9752, - "granite": 9753, - "mineral": 9754, - "conflicts": 9755, - "controlling": 9756, - "aboriginal": 9757, - "carlo": 9758, - "##zu": 9759, - "mechanics": 9760, - "stan": 9761, - "stark": 9762, - "rhode": 9763, - "skirt": 9764, - "est": 9765, - "##berry": 9766, - "bombs": 9767, - "respected": 9768, - "##horn": 9769, - "imposed": 9770, - "limestone": 9771, - "deny": 9772, - "nominee": 9773, - "memphis": 9774, - "grabbing": 9775, - "disabled": 9776, - "##als": 9777, - "amusement": 9778, - "aa": 9779, - "frankfurt": 9780, - "corn": 9781, - "referendum": 9782, - "varies": 9783, - "slowed": 9784, - "disk": 9785, - "firms": 9786, - "unconscious": 9787, - "incredible": 9788, - "clue": 9789, - "sue": 9790, - "##zhou": 9791, - "twist": 9792, - "##cio": 9793, - "joins": 9794, - "idaho": 9795, - "chad": 9796, - "developers": 9797, - "computing": 9798, - "destroyer": 9799, - "103": 9800, - "mortal": 9801, - "tucker": 9802, - "kingston": 9803, - "choices": 9804, - "yu": 9805, - "carson": 9806, - "1800": 9807, - "os": 9808, - "whitney": 9809, - "geneva": 9810, - "pretend": 9811, - "dimension": 9812, - "staged": 9813, - "plateau": 9814, - "maya": 9815, - "##une": 9816, - "freestyle": 9817, - "##bc": 9818, - "rovers": 9819, - "hiv": 9820, - "##ids": 9821, - "tristan": 9822, - "classroom": 9823, - "prospect": 9824, - "##hus": 9825, - "honestly": 9826, - "diploma": 9827, - "lied": 9828, - "thermal": 9829, - "auxiliary": 9830, - "feast": 9831, - "unlikely": 9832, - "iata": 9833, - "##tel": 9834, - "morocco": 9835, - "pounding": 9836, - "treasury": 9837, - "lithuania": 9838, - "considerably": 9839, - "1841": 9840, - "dish": 9841, - "1812": 9842, - "geological": 9843, - "matching": 9844, - "stumbled": 9845, - "destroying": 9846, - "marched": 9847, - "brien": 9848, - "advances": 9849, - "cake": 9850, - "nicole": 9851, - "belle": 9852, - "settling": 9853, - "measuring": 9854, - "directing": 9855, - "##mie": 9856, - "tuesday": 9857, - "bassist": 9858, - "capabilities": 9859, - "stunned": 9860, - "fraud": 9861, - "torpedo": 9862, - "##list": 9863, - "##phone": 9864, - "anton": 9865, - "wisdom": 9866, - "surveillance": 9867, - "ruined": 9868, - "##ulate": 9869, - "lawsuit": 9870, - "healthcare": 9871, - "theorem": 9872, - "halls": 9873, - "trend": 9874, - "aka": 9875, - "horizontal": 9876, - "dozens": 9877, - "acquire": 9878, - "lasting": 9879, - "swim": 9880, - "hawk": 9881, - "gorgeous": 9882, - "fees": 9883, - "vicinity": 9884, - "decrease": 9885, - "adoption": 9886, - "tactics": 9887, - "##ography": 9888, - "pakistani": 9889, - "##ole": 9890, - "draws": 9891, - "##hall": 9892, - "willie": 9893, - "burke": 9894, - "heath": 9895, - "algorithm": 9896, - "integral": 9897, - "powder": 9898, - "elliott": 9899, - "brigadier": 9900, - "jackie": 9901, - "tate": 9902, - "varieties": 9903, - "darker": 9904, - "##cho": 9905, - "lately": 9906, - "cigarette": 9907, - "specimens": 9908, - "adds": 9909, - "##ree": 9910, - "##ensis": 9911, - "##inger": 9912, - "exploded": 9913, - "finalist": 9914, - "cia": 9915, - "murders": 9916, - "wilderness": 9917, - "arguments": 9918, - "nicknamed": 9919, - "acceptance": 9920, - "onwards": 9921, - "manufacture": 9922, - "robertson": 9923, - "jets": 9924, - "tampa": 9925, - "enterprises": 9926, - "blog": 9927, - "loudly": 9928, - "composers": 9929, - "nominations": 9930, - "1838": 9931, - "ai": 9932, - "malta": 9933, - "inquiry": 9934, - "automobile": 9935, - "hosting": 9936, - "viii": 9937, - "rays": 9938, - "tilted": 9939, - "grief": 9940, - "museums": 9941, - "strategies": 9942, - "furious": 9943, - "euro": 9944, - "equality": 9945, - "cohen": 9946, - "poison": 9947, - "surrey": 9948, - "wireless": 9949, - "governed": 9950, - "ridiculous": 9951, - "moses": 9952, - "##esh": 9953, - "##room": 9954, - "vanished": 9955, - "##ito": 9956, - "barnes": 9957, - "attract": 9958, - "morrison": 9959, - "istanbul": 9960, - "##iness": 9961, - "absent": 9962, - "rotation": 9963, - "petition": 9964, - "janet": 9965, - "##logical": 9966, - "satisfaction": 9967, - "custody": 9968, - "deliberately": 9969, - "observatory": 9970, - "comedian": 9971, - "surfaces": 9972, - "pinyin": 9973, - "novelist": 9974, - "strictly": 9975, - "canterbury": 9976, - "oslo": 9977, - "monks": 9978, - "embrace": 9979, - "ibm": 9980, - "jealous": 9981, - "photograph": 9982, - "continent": 9983, - "dorothy": 9984, - "marina": 9985, - "doc": 9986, - "excess": 9987, - "holden": 9988, - "allegations": 9989, - "explaining": 9990, - "stack": 9991, - "avoiding": 9992, - "lance": 9993, - "storyline": 9994, - "majesty": 9995, - "poorly": 9996, - "spike": 9997, - "dos": 9998, - "bradford": 9999, - "raven": 10000, - "travis": 10001, - "classics": 10002, - "proven": 10003, - "voltage": 10004, - "pillow": 10005, - "fists": 10006, - "butt": 10007, - "1842": 10008, - "interpreted": 10009, - "##car": 10010, - "1839": 10011, - "gage": 10012, - "telegraph": 10013, - "lens": 10014, - "promising": 10015, - "expelled": 10016, - "casual": 10017, - "collector": 10018, - "zones": 10019, - "##min": 10020, - "silly": 10021, - "nintendo": 10022, - "##kh": 10023, - "##bra": 10024, - "downstairs": 10025, - "chef": 10026, - "suspicious": 10027, - "afl": 10028, - "flies": 10029, - "vacant": 10030, - "uganda": 10031, - "pregnancy": 10032, - "condemned": 10033, - "lutheran": 10034, - "estimates": 10035, - "cheap": 10036, - "decree": 10037, - "saxon": 10038, - "proximity": 10039, - "stripped": 10040, - "idiot": 10041, - "deposits": 10042, - "contrary": 10043, - "presenter": 10044, - "magnus": 10045, - "glacier": 10046, - "im": 10047, - "offense": 10048, - "edwin": 10049, - "##ori": 10050, - "upright": 10051, - "##long": 10052, - "bolt": 10053, - "##ois": 10054, - "toss": 10055, - "geographical": 10056, - "##izes": 10057, - "environments": 10058, - "delicate": 10059, - "marking": 10060, - "abstract": 10061, - "xavier": 10062, - "nails": 10063, - "windsor": 10064, - "plantation": 10065, - "occurring": 10066, - "equity": 10067, - "saskatchewan": 10068, - "fears": 10069, - "drifted": 10070, - "sequences": 10071, - "vegetation": 10072, - "revolt": 10073, - "##stic": 10074, - "1843": 10075, - "sooner": 10076, - "fusion": 10077, - "opposing": 10078, - "nato": 10079, - "skating": 10080, - "1836": 10081, - "secretly": 10082, - "ruin": 10083, - "lease": 10084, - "##oc": 10085, - "edit": 10086, - "##nne": 10087, - "flora": 10088, - "anxiety": 10089, - "ruby": 10090, - "##ological": 10091, - "##mia": 10092, - "tel": 10093, - "bout": 10094, - "taxi": 10095, - "emmy": 10096, - "frost": 10097, - "rainbow": 10098, - "compounds": 10099, - "foundations": 10100, - "rainfall": 10101, - "assassination": 10102, - "nightmare": 10103, - "dominican": 10104, - "##win": 10105, - "achievements": 10106, - "deserve": 10107, - "orlando": 10108, - "intact": 10109, - "armenia": 10110, - "##nte": 10111, - "calgary": 10112, - "valentine": 10113, - "106": 10114, - "marion": 10115, - "proclaimed": 10116, - "theodore": 10117, - "bells": 10118, - "courtyard": 10119, - "thigh": 10120, - "gonzalez": 10121, - "console": 10122, - "troop": 10123, - "minimal": 10124, - "monte": 10125, - "everyday": 10126, - "##ence": 10127, - "##if": 10128, - "supporter": 10129, - "terrorism": 10130, - "buck": 10131, - "openly": 10132, - "presbyterian": 10133, - "activists": 10134, - "carpet": 10135, - "##iers": 10136, - "rubbing": 10137, - "uprising": 10138, - "##yi": 10139, - "cute": 10140, - "conceived": 10141, - "legally": 10142, - "##cht": 10143, - "millennium": 10144, - "cello": 10145, - "velocity": 10146, - "ji": 10147, - "rescued": 10148, - "cardiff": 10149, - "1835": 10150, - "rex": 10151, - "concentrate": 10152, - "senators": 10153, - "beard": 10154, - "rendered": 10155, - "glowing": 10156, - "battalions": 10157, - "scouts": 10158, - "competitors": 10159, - "sculptor": 10160, - "catalogue": 10161, - "arctic": 10162, - "ion": 10163, - "raja": 10164, - "bicycle": 10165, - "wow": 10166, - "glancing": 10167, - "lawn": 10168, - "##woman": 10169, - "gentleman": 10170, - "lighthouse": 10171, - "publish": 10172, - "predicted": 10173, - "calculated": 10174, - "##val": 10175, - "variants": 10176, - "##gne": 10177, - "strain": 10178, - "##ui": 10179, - "winston": 10180, - "deceased": 10181, - "##nus": 10182, - "touchdowns": 10183, - "brady": 10184, - "caleb": 10185, - "sinking": 10186, - "echoed": 10187, - "crush": 10188, - "hon": 10189, - "blessed": 10190, - "protagonist": 10191, - "hayes": 10192, - "endangered": 10193, - "magnitude": 10194, - "editors": 10195, - "##tine": 10196, - "estimate": 10197, - "responsibilities": 10198, - "##mel": 10199, - "backup": 10200, - "laying": 10201, - "consumed": 10202, - "sealed": 10203, - "zurich": 10204, - "lovers": 10205, - "frustrated": 10206, - "##eau": 10207, - "ahmed": 10208, - "kicking": 10209, - "mit": 10210, - "treasurer": 10211, - "1832": 10212, - "biblical": 10213, - "refuse": 10214, - "terrified": 10215, - "pump": 10216, - "agrees": 10217, - "genuine": 10218, - "imprisonment": 10219, - "refuses": 10220, - "plymouth": 10221, - "##hen": 10222, - "lou": 10223, - "##nen": 10224, - "tara": 10225, - "trembling": 10226, - "antarctic": 10227, - "ton": 10228, - "learns": 10229, - "##tas": 10230, - "crap": 10231, - "crucial": 10232, - "faction": 10233, - "atop": 10234, - "##borough": 10235, - "wrap": 10236, - "lancaster": 10237, - "odds": 10238, - "hopkins": 10239, - "erik": 10240, - "lyon": 10241, - "##eon": 10242, - "bros": 10243, - "##ode": 10244, - "snap": 10245, - "locality": 10246, - "tips": 10247, - "empress": 10248, - "crowned": 10249, - "cal": 10250, - "acclaimed": 10251, - "chuckled": 10252, - "##ory": 10253, - "clara": 10254, - "sends": 10255, - "mild": 10256, - "towel": 10257, - "##fl": 10258, - "##day": 10259, - "##а": 10260, - "wishing": 10261, - "assuming": 10262, - "interviewed": 10263, - "##bal": 10264, - "##die": 10265, - "interactions": 10266, - "eden": 10267, - "cups": 10268, - "helena": 10269, - "##lf": 10270, - "indie": 10271, - "beck": 10272, - "##fire": 10273, - "batteries": 10274, - "filipino": 10275, - "wizard": 10276, - "parted": 10277, - "##lam": 10278, - "traces": 10279, - "##born": 10280, - "rows": 10281, - "idol": 10282, - "albany": 10283, - "delegates": 10284, - "##ees": 10285, - "##sar": 10286, - "discussions": 10287, - "##ex": 10288, - "notre": 10289, - "instructed": 10290, - "belgrade": 10291, - "highways": 10292, - "suggestion": 10293, - "lauren": 10294, - "possess": 10295, - "orientation": 10296, - "alexandria": 10297, - "abdul": 10298, - "beats": 10299, - "salary": 10300, - "reunion": 10301, - "ludwig": 10302, - "alright": 10303, - "wagner": 10304, - "intimate": 10305, - "pockets": 10306, - "slovenia": 10307, - "hugged": 10308, - "brighton": 10309, - "merchants": 10310, - "cruel": 10311, - "stole": 10312, - "trek": 10313, - "slopes": 10314, - "repairs": 10315, - "enrollment": 10316, - "politically": 10317, - "underlying": 10318, - "promotional": 10319, - "counting": 10320, - "boeing": 10321, - "##bb": 10322, - "isabella": 10323, - "naming": 10324, - "##Šø": 10325, - "keen": 10326, - "bacteria": 10327, - "listing": 10328, - "separately": 10329, - "belfast": 10330, - "ussr": 10331, - "450": 10332, - "lithuanian": 10333, - "anybody": 10334, - "ribs": 10335, - "sphere": 10336, - "martinez": 10337, - "cock": 10338, - "embarrassed": 10339, - "proposals": 10340, - "fragments": 10341, - "nationals": 10342, - "##fs": 10343, - "##wski": 10344, - "premises": 10345, - "fin": 10346, - "1500": 10347, - "alpine": 10348, - "matched": 10349, - "freely": 10350, - "bounded": 10351, - "jace": 10352, - "sleeve": 10353, - "##af": 10354, - "gaming": 10355, - "pier": 10356, - "populated": 10357, - "evident": 10358, - "##like": 10359, - "frances": 10360, - "flooded": 10361, - "##dle": 10362, - "frightened": 10363, - "pour": 10364, - "trainer": 10365, - "framed": 10366, - "visitor": 10367, - "challenging": 10368, - "pig": 10369, - "wickets": 10370, - "##fold": 10371, - "infected": 10372, - "email": 10373, - "##pes": 10374, - "arose": 10375, - "##aw": 10376, - "reward": 10377, - "ecuador": 10378, - "oblast": 10379, - "vale": 10380, - "ch": 10381, - "shuttle": 10382, - "##usa": 10383, - "bach": 10384, - "rankings": 10385, - "forbidden": 10386, - "cornwall": 10387, - "accordance": 10388, - "salem": 10389, - "consumers": 10390, - "bruno": 10391, - "fantastic": 10392, - "toes": 10393, - "machinery": 10394, - "resolved": 10395, - "julius": 10396, - "remembering": 10397, - "propaganda": 10398, - "iceland": 10399, - "bombardment": 10400, - "tide": 10401, - "contacts": 10402, - "wives": 10403, - "##rah": 10404, - "concerto": 10405, - "macdonald": 10406, - "albania": 10407, - "implement": 10408, - "daisy": 10409, - "tapped": 10410, - "sudan": 10411, - "helmet": 10412, - "angela": 10413, - "mistress": 10414, - "##lic": 10415, - "crop": 10416, - "sunk": 10417, - "finest": 10418, - "##craft": 10419, - "hostile": 10420, - "##ute": 10421, - "##tsu": 10422, - "boxer": 10423, - "fr": 10424, - "paths": 10425, - "adjusted": 10426, - "habit": 10427, - "ballot": 10428, - "supervision": 10429, - "soprano": 10430, - "##zen": 10431, - "bullets": 10432, - "wicked": 10433, - "sunset": 10434, - "regiments": 10435, - "disappear": 10436, - "lamp": 10437, - "performs": 10438, - "app": 10439, - "##gia": 10440, - "##oa": 10441, - "rabbit": 10442, - "digging": 10443, - "incidents": 10444, - "entries": 10445, - "##cion": 10446, - "dishes": 10447, - "##oi": 10448, - "introducing": 10449, - "##ati": 10450, - "##fied": 10451, - "freshman": 10452, - "slot": 10453, - "jill": 10454, - "tackles": 10455, - "baroque": 10456, - "backs": 10457, - "##iest": 10458, - "lone": 10459, - "sponsor": 10460, - "destiny": 10461, - "altogether": 10462, - "convert": 10463, - "##aro": 10464, - "consensus": 10465, - "shapes": 10466, - "demonstration": 10467, - "basically": 10468, - "feminist": 10469, - "auction": 10470, - "artifacts": 10471, - "##bing": 10472, - "strongest": 10473, - "twitter": 10474, - "halifax": 10475, - "2019": 10476, - "allmusic": 10477, - "mighty": 10478, - "smallest": 10479, - "precise": 10480, - "alexandra": 10481, - "viola": 10482, - "##los": 10483, - "##ille": 10484, - "manuscripts": 10485, - "##illo": 10486, - "dancers": 10487, - "ari": 10488, - "managers": 10489, - "monuments": 10490, - "blades": 10491, - "barracks": 10492, - "springfield": 10493, - "maiden": 10494, - "consolidated": 10495, - "electron": 10496, - "##end": 10497, - "berry": 10498, - "airing": 10499, - "wheat": 10500, - "nobel": 10501, - "inclusion": 10502, - "blair": 10503, - "payments": 10504, - "geography": 10505, - "bee": 10506, - "cc": 10507, - "eleanor": 10508, - "react": 10509, - "##hurst": 10510, - "afc": 10511, - "manitoba": 10512, - "##yu": 10513, - "su": 10514, - "lineup": 10515, - "fitness": 10516, - "recreational": 10517, - "investments": 10518, - "airborne": 10519, - "disappointment": 10520, - "##dis": 10521, - "edmonton": 10522, - "viewing": 10523, - "##row": 10524, - "renovation": 10525, - "##cast": 10526, - "infant": 10527, - "bankruptcy": 10528, - "roses": 10529, - "aftermath": 10530, - "pavilion": 10531, - "##yer": 10532, - "carpenter": 10533, - "withdrawal": 10534, - "ladder": 10535, - "##hy": 10536, - "discussing": 10537, - "popped": 10538, - "reliable": 10539, - "agreements": 10540, - "rochester": 10541, - "##abad": 10542, - "curves": 10543, - "bombers": 10544, - "220": 10545, - "rao": 10546, - "reverend": 10547, - "decreased": 10548, - "choosing": 10549, - "107": 10550, - "stiff": 10551, - "consulting": 10552, - "naples": 10553, - "crawford": 10554, - "tracy": 10555, - "ka": 10556, - "ribbon": 10557, - "cops": 10558, - "##lee": 10559, - "crushed": 10560, - "deciding": 10561, - "unified": 10562, - "teenager": 10563, - "accepting": 10564, - "flagship": 10565, - "explorer": 10566, - "poles": 10567, - "sanchez": 10568, - "inspection": 10569, - "revived": 10570, - "skilled": 10571, - "induced": 10572, - "exchanged": 10573, - "flee": 10574, - "locals": 10575, - "tragedy": 10576, - "swallow": 10577, - "loading": 10578, - "hanna": 10579, - "demonstrate": 10580, - "##ela": 10581, - "salvador": 10582, - "flown": 10583, - "contestants": 10584, - "civilization": 10585, - "##ines": 10586, - "wanna": 10587, - "rhodes": 10588, - "fletcher": 10589, - "hector": 10590, - "knocking": 10591, - "considers": 10592, - "##ough": 10593, - "nash": 10594, - "mechanisms": 10595, - "sensed": 10596, - "mentally": 10597, - "walt": 10598, - "unclear": 10599, - "##eus": 10600, - "renovated": 10601, - "madame": 10602, - "##cks": 10603, - "crews": 10604, - "governmental": 10605, - "##hin": 10606, - "undertaken": 10607, - "monkey": 10608, - "##ben": 10609, - "##ato": 10610, - "fatal": 10611, - "armored": 10612, - "copa": 10613, - "caves": 10614, - "governance": 10615, - "grasp": 10616, - "perception": 10617, - "certification": 10618, - "froze": 10619, - "damp": 10620, - "tugged": 10621, - "wyoming": 10622, - "##rg": 10623, - "##ero": 10624, - "newman": 10625, - "##lor": 10626, - "nerves": 10627, - "curiosity": 10628, - "graph": 10629, - "115": 10630, - "##ami": 10631, - "withdraw": 10632, - "tunnels": 10633, - "dull": 10634, - "meredith": 10635, - "moss": 10636, - "exhibits": 10637, - "neighbors": 10638, - "communicate": 10639, - "accuracy": 10640, - "explored": 10641, - "raiders": 10642, - "republicans": 10643, - "secular": 10644, - "kat": 10645, - "superman": 10646, - "penny": 10647, - "criticised": 10648, - "##tch": 10649, - "freed": 10650, - "update": 10651, - "conviction": 10652, - "wade": 10653, - "ham": 10654, - "likewise": 10655, - "delegation": 10656, - "gotta": 10657, - "doll": 10658, - "promises": 10659, - "technological": 10660, - "myth": 10661, - "nationality": 10662, - "resolve": 10663, - "convent": 10664, - "##mark": 10665, - "sharon": 10666, - "dig": 10667, - "sip": 10668, - "coordinator": 10669, - "entrepreneur": 10670, - "fold": 10671, - "##dine": 10672, - "capability": 10673, - "councillor": 10674, - "synonym": 10675, - "blown": 10676, - "swan": 10677, - "cursed": 10678, - "1815": 10679, - "jonas": 10680, - "haired": 10681, - "sofa": 10682, - "canvas": 10683, - "keeper": 10684, - "rivalry": 10685, - "##hart": 10686, - "rapper": 10687, - "speedway": 10688, - "swords": 10689, - "postal": 10690, - "maxwell": 10691, - "estonia": 10692, - "potter": 10693, - "recurring": 10694, - "##nn": 10695, - "##ave": 10696, - "errors": 10697, - "##oni": 10698, - "cognitive": 10699, - "1834": 10700, - "##²": 10701, - "claws": 10702, - "nadu": 10703, - "roberto": 10704, - "bce": 10705, - "wrestler": 10706, - "ellie": 10707, - "##ations": 10708, - "infinite": 10709, - "ink": 10710, - "##tia": 10711, - "presumably": 10712, - "finite": 10713, - "staircase": 10714, - "108": 10715, - "noel": 10716, - "patricia": 10717, - "nacional": 10718, - "##cation": 10719, - "chill": 10720, - "eternal": 10721, - "tu": 10722, - "preventing": 10723, - "prussia": 10724, - "fossil": 10725, - "limbs": 10726, - "##logist": 10727, - "ernst": 10728, - "frog": 10729, - "perez": 10730, - "rene": 10731, - "##ace": 10732, - "pizza": 10733, - "prussian": 10734, - "##ios": 10735, - "##vy": 10736, - "molecules": 10737, - "regulatory": 10738, - "answering": 10739, - "opinions": 10740, - "sworn": 10741, - "lengths": 10742, - "supposedly": 10743, - "hypothesis": 10744, - "upward": 10745, - "habitats": 10746, - "seating": 10747, - "ancestors": 10748, - "drank": 10749, - "yield": 10750, - "hd": 10751, - "synthesis": 10752, - "researcher": 10753, - "modest": 10754, - "##var": 10755, - "mothers": 10756, - "peered": 10757, - "voluntary": 10758, - "homeland": 10759, - "##the": 10760, - "acclaim": 10761, - "##igan": 10762, - "static": 10763, - "valve": 10764, - "luxembourg": 10765, - "alto": 10766, - "carroll": 10767, - "fe": 10768, - "receptor": 10769, - "norton": 10770, - "ambulance": 10771, - "##tian": 10772, - "johnston": 10773, - "catholics": 10774, - "depicting": 10775, - "jointly": 10776, - "elephant": 10777, - "gloria": 10778, - "mentor": 10779, - "badge": 10780, - "ahmad": 10781, - "distinguish": 10782, - "remarked": 10783, - "councils": 10784, - "precisely": 10785, - "allison": 10786, - "advancing": 10787, - "detection": 10788, - "crowded": 10789, - "##10": 10790, - "cooperative": 10791, - "ankle": 10792, - "mercedes": 10793, - "dagger": 10794, - "surrendered": 10795, - "pollution": 10796, - "commit": 10797, - "subway": 10798, - "jeffrey": 10799, - "lesson": 10800, - "sculptures": 10801, - "provider": 10802, - "##fication": 10803, - "membrane": 10804, - "timothy": 10805, - "rectangular": 10806, - "fiscal": 10807, - "heating": 10808, - "teammate": 10809, - "basket": 10810, - "particle": 10811, - "anonymous": 10812, - "deployment": 10813, - "##ple": 10814, - "missiles": 10815, - "courthouse": 10816, - "proportion": 10817, - "shoe": 10818, - "sec": 10819, - "##ller": 10820, - "complaints": 10821, - "forbes": 10822, - "blacks": 10823, - "abandon": 10824, - "remind": 10825, - "sizes": 10826, - "overwhelming": 10827, - "autobiography": 10828, - "natalie": 10829, - "##awa": 10830, - "risks": 10831, - "contestant": 10832, - "countryside": 10833, - "babies": 10834, - "scorer": 10835, - "invaded": 10836, - "enclosed": 10837, - "proceed": 10838, - "hurling": 10839, - "disorders": 10840, - "##cu": 10841, - "reflecting": 10842, - "continuously": 10843, - "cruiser": 10844, - "graduates": 10845, - "freeway": 10846, - "investigated": 10847, - "ore": 10848, - "deserved": 10849, - "maid": 10850, - "blocking": 10851, - "phillip": 10852, - "jorge": 10853, - "shakes": 10854, - "dove": 10855, - "mann": 10856, - "variables": 10857, - "lacked": 10858, - "burden": 10859, - "accompanying": 10860, - "que": 10861, - "consistently": 10862, - "organizing": 10863, - "provisional": 10864, - "complained": 10865, - "endless": 10866, - "##rm": 10867, - "tubes": 10868, - "juice": 10869, - "georges": 10870, - "krishna": 10871, - "mick": 10872, - "labels": 10873, - "thriller": 10874, - "##uch": 10875, - "laps": 10876, - "arcade": 10877, - "sage": 10878, - "snail": 10879, - "##table": 10880, - "shannon": 10881, - "fi": 10882, - "laurence": 10883, - "seoul": 10884, - "vacation": 10885, - "presenting": 10886, - "hire": 10887, - "churchill": 10888, - "surprisingly": 10889, - "prohibited": 10890, - "savannah": 10891, - "technically": 10892, - "##oli": 10893, - "170": 10894, - "##lessly": 10895, - "testimony": 10896, - "suited": 10897, - "speeds": 10898, - "toys": 10899, - "romans": 10900, - "mlb": 10901, - "flowering": 10902, - "measurement": 10903, - "talented": 10904, - "kay": 10905, - "settings": 10906, - "charleston": 10907, - "expectations": 10908, - "shattered": 10909, - "achieving": 10910, - "triumph": 10911, - "ceremonies": 10912, - "portsmouth": 10913, - "lanes": 10914, - "mandatory": 10915, - "loser": 10916, - "stretching": 10917, - "cologne": 10918, - "realizes": 10919, - "seventy": 10920, - "cornell": 10921, - "careers": 10922, - "webb": 10923, - "##ulating": 10924, - "americas": 10925, - "budapest": 10926, - "ava": 10927, - "suspicion": 10928, - "##ison": 10929, - "yo": 10930, - "conrad": 10931, - "##hai": 10932, - "sterling": 10933, - "jessie": 10934, - "rector": 10935, - "##az": 10936, - "1831": 10937, - "transform": 10938, - "organize": 10939, - "loans": 10940, - "christine": 10941, - "volcanic": 10942, - "warrant": 10943, - "slender": 10944, - "summers": 10945, - "subfamily": 10946, - "newer": 10947, - "danced": 10948, - "dynamics": 10949, - "rhine": 10950, - "proceeds": 10951, - "heinrich": 10952, - "gastropod": 10953, - "commands": 10954, - "sings": 10955, - "facilitate": 10956, - "easter": 10957, - "ra": 10958, - "positioned": 10959, - "responses": 10960, - "expense": 10961, - "fruits": 10962, - "yanked": 10963, - "imported": 10964, - "25th": 10965, - "velvet": 10966, - "vic": 10967, - "primitive": 10968, - "tribune": 10969, - "baldwin": 10970, - "neighbourhood": 10971, - "donna": 10972, - "rip": 10973, - "hay": 10974, - "pr": 10975, - "##uro": 10976, - "1814": 10977, - "espn": 10978, - "welcomed": 10979, - "##aria": 10980, - "qualifier": 10981, - "glare": 10982, - "highland": 10983, - "timing": 10984, - "##cted": 10985, - "shells": 10986, - "eased": 10987, - "geometry": 10988, - "louder": 10989, - "exciting": 10990, - "slovakia": 10991, - "##sion": 10992, - "##iz": 10993, - "##lot": 10994, - "savings": 10995, - "prairie": 10996, - "##ques": 10997, - "marching": 10998, - "rafael": 10999, - "tonnes": 11000, - "##lled": 11001, - "curtain": 11002, - "preceding": 11003, - "shy": 11004, - "heal": 11005, - "greene": 11006, - "worthy": 11007, - "##pot": 11008, - "detachment": 11009, - "bury": 11010, - "sherman": 11011, - "##eck": 11012, - "reinforced": 11013, - "seeks": 11014, - "bottles": 11015, - "contracted": 11016, - "duchess": 11017, - "outfit": 11018, - "walsh": 11019, - "##sc": 11020, - "mickey": 11021, - "##ase": 11022, - "geoffrey": 11023, - "archer": 11024, - "squeeze": 11025, - "dawson": 11026, - "eliminate": 11027, - "invention": 11028, - "##enberg": 11029, - "neal": 11030, - "##eth": 11031, - "stance": 11032, - "dealer": 11033, - "coral": 11034, - "maple": 11035, - "retire": 11036, - "polo": 11037, - "simplified": 11038, - "##ht": 11039, - "1833": 11040, - "hid": 11041, - "watts": 11042, - "backwards": 11043, - "jules": 11044, - "##oke": 11045, - "genesis": 11046, - "mt": 11047, - "frames": 11048, - "rebounds": 11049, - "burma": 11050, - "woodland": 11051, - "moist": 11052, - "santos": 11053, - "whispers": 11054, - "drained": 11055, - "subspecies": 11056, - "##aa": 11057, - "streaming": 11058, - "ulster": 11059, - "burnt": 11060, - "correspondence": 11061, - "maternal": 11062, - "gerard": 11063, - "denis": 11064, - "stealing": 11065, - "##load": 11066, - "genius": 11067, - "duchy": 11068, - "##oria": 11069, - "inaugurated": 11070, - "momentum": 11071, - "suits": 11072, - "placement": 11073, - "sovereign": 11074, - "clause": 11075, - "thames": 11076, - "##hara": 11077, - "confederation": 11078, - "reservation": 11079, - "sketch": 11080, - "yankees": 11081, - "lets": 11082, - "rotten": 11083, - "charm": 11084, - "hal": 11085, - "verses": 11086, - "ultra": 11087, - "commercially": 11088, - "dot": 11089, - "salon": 11090, - "citation": 11091, - "adopt": 11092, - "winnipeg": 11093, - "mist": 11094, - "allocated": 11095, - "cairo": 11096, - "##boy": 11097, - "jenkins": 11098, - "interference": 11099, - "objectives": 11100, - "##wind": 11101, - "1820": 11102, - "portfolio": 11103, - "armoured": 11104, - "sectors": 11105, - "##eh": 11106, - "initiatives": 11107, - "##world": 11108, - "integrity": 11109, - "exercises": 11110, - "robe": 11111, - "tap": 11112, - "ab": 11113, - "gazed": 11114, - "##tones": 11115, - "distracted": 11116, - "rulers": 11117, - "111": 11118, - "favorable": 11119, - "jerome": 11120, - "tended": 11121, - "cart": 11122, - "factories": 11123, - "##eri": 11124, - "diplomat": 11125, - "valued": 11126, - "gravel": 11127, - "charitable": 11128, - "##try": 11129, - "calvin": 11130, - "exploring": 11131, - "chang": 11132, - "shepherd": 11133, - "terrace": 11134, - "pdf": 11135, - "pupil": 11136, - "##ural": 11137, - "reflects": 11138, - "ups": 11139, - "##rch": 11140, - "governors": 11141, - "shelf": 11142, - "depths": 11143, - "##nberg": 11144, - "trailed": 11145, - "crest": 11146, - "tackle": 11147, - "##nian": 11148, - "##ats": 11149, - "hatred": 11150, - "##kai": 11151, - "clare": 11152, - "makers": 11153, - "ethiopia": 11154, - "longtime": 11155, - "detected": 11156, - "embedded": 11157, - "lacking": 11158, - "slapped": 11159, - "rely": 11160, - "thomson": 11161, - "anticipation": 11162, - "iso": 11163, - "morton": 11164, - "successive": 11165, - "agnes": 11166, - "screenwriter": 11167, - "straightened": 11168, - "philippe": 11169, - "playwright": 11170, - "haunted": 11171, - "licence": 11172, - "iris": 11173, - "intentions": 11174, - "sutton": 11175, - "112": 11176, - "logical": 11177, - "correctly": 11178, - "##weight": 11179, - "branded": 11180, - "licked": 11181, - "tipped": 11182, - "silva": 11183, - "ricky": 11184, - "narrator": 11185, - "requests": 11186, - "##ents": 11187, - "greeted": 11188, - "supernatural": 11189, - "cow": 11190, - "##wald": 11191, - "lung": 11192, - "refusing": 11193, - "employer": 11194, - "strait": 11195, - "gaelic": 11196, - "liner": 11197, - "##piece": 11198, - "zoe": 11199, - "sabha": 11200, - "##mba": 11201, - "driveway": 11202, - "harvest": 11203, - "prints": 11204, - "bates": 11205, - "reluctantly": 11206, - "threshold": 11207, - "algebra": 11208, - "ira": 11209, - "wherever": 11210, - "coupled": 11211, - "240": 11212, - "assumption": 11213, - "picks": 11214, - "##air": 11215, - "designers": 11216, - "raids": 11217, - "gentlemen": 11218, - "##ean": 11219, - "roller": 11220, - "blowing": 11221, - "leipzig": 11222, - "locks": 11223, - "screw": 11224, - "dressing": 11225, - "strand": 11226, - "##lings": 11227, - "scar": 11228, - "dwarf": 11229, - "depicts": 11230, - "##nu": 11231, - "nods": 11232, - "##mine": 11233, - "differ": 11234, - "boris": 11235, - "##eur": 11236, - "yuan": 11237, - "flip": 11238, - "##gie": 11239, - "mob": 11240, - "invested": 11241, - "questioning": 11242, - "applying": 11243, - "##ture": 11244, - "shout": 11245, - "##sel": 11246, - "gameplay": 11247, - "blamed": 11248, - "illustrations": 11249, - "bothered": 11250, - "weakness": 11251, - "rehabilitation": 11252, - "##of": 11253, - "##zes": 11254, - "envelope": 11255, - "rumors": 11256, - "miners": 11257, - "leicester": 11258, - "subtle": 11259, - "kerry": 11260, - "##ico": 11261, - "ferguson": 11262, - "##fu": 11263, - "premiership": 11264, - "ne": 11265, - "##cat": 11266, - "bengali": 11267, - "prof": 11268, - "catches": 11269, - "remnants": 11270, - "dana": 11271, - "##rily": 11272, - "shouting": 11273, - "presidents": 11274, - "baltic": 11275, - "ought": 11276, - "ghosts": 11277, - "dances": 11278, - "sailors": 11279, - "shirley": 11280, - "fancy": 11281, - "dominic": 11282, - "##bie": 11283, - "madonna": 11284, - "##rick": 11285, - "bark": 11286, - "buttons": 11287, - "gymnasium": 11288, - "ashes": 11289, - "liver": 11290, - "toby": 11291, - "oath": 11292, - "providence": 11293, - "doyle": 11294, - "evangelical": 11295, - "nixon": 11296, - "cement": 11297, - "carnegie": 11298, - "embarked": 11299, - "hatch": 11300, - "surroundings": 11301, - "guarantee": 11302, - "needing": 11303, - "pirate": 11304, - "essence": 11305, - "##bee": 11306, - "filter": 11307, - "crane": 11308, - "hammond": 11309, - "projected": 11310, - "immune": 11311, - "percy": 11312, - "twelfth": 11313, - "##ult": 11314, - "regent": 11315, - "doctoral": 11316, - "damon": 11317, - "mikhail": 11318, - "##ichi": 11319, - "lu": 11320, - "critically": 11321, - "elect": 11322, - "realised": 11323, - "abortion": 11324, - "acute": 11325, - "screening": 11326, - "mythology": 11327, - "steadily": 11328, - "##fc": 11329, - "frown": 11330, - "nottingham": 11331, - "kirk": 11332, - "wa": 11333, - "minneapolis": 11334, - "##rra": 11335, - "module": 11336, - "algeria": 11337, - "mc": 11338, - "nautical": 11339, - "encounters": 11340, - "surprising": 11341, - "statues": 11342, - "availability": 11343, - "shirts": 11344, - "pie": 11345, - "alma": 11346, - "brows": 11347, - "munster": 11348, - "mack": 11349, - "soup": 11350, - "crater": 11351, - "tornado": 11352, - "sanskrit": 11353, - "cedar": 11354, - "explosive": 11355, - "bordered": 11356, - "dixon": 11357, - "planets": 11358, - "stamp": 11359, - "exam": 11360, - "happily": 11361, - "##bble": 11362, - "carriers": 11363, - "kidnapped": 11364, - "##vis": 11365, - "accommodation": 11366, - "emigrated": 11367, - "##met": 11368, - "knockout": 11369, - "correspondent": 11370, - "violation": 11371, - "profits": 11372, - "peaks": 11373, - "lang": 11374, - "specimen": 11375, - "agenda": 11376, - "ancestry": 11377, - "pottery": 11378, - "spelling": 11379, - "equations": 11380, - "obtaining": 11381, - "ki": 11382, - "linking": 11383, - "1825": 11384, - "debris": 11385, - "asylum": 11386, - "##20": 11387, - "buddhism": 11388, - "teddy": 11389, - "##ants": 11390, - "gazette": 11391, - "##nger": 11392, - "##sse": 11393, - "dental": 11394, - "eligibility": 11395, - "utc": 11396, - "fathers": 11397, - "averaged": 11398, - "zimbabwe": 11399, - "francesco": 11400, - "coloured": 11401, - "hissed": 11402, - "translator": 11403, - "lynch": 11404, - "mandate": 11405, - "humanities": 11406, - "mackenzie": 11407, - "uniforms": 11408, - "lin": 11409, - "##iana": 11410, - "##gio": 11411, - "asset": 11412, - "mhz": 11413, - "fitting": 11414, - "samantha": 11415, - "genera": 11416, - "wei": 11417, - "rim": 11418, - "beloved": 11419, - "shark": 11420, - "riot": 11421, - "entities": 11422, - "expressions": 11423, - "indo": 11424, - "carmen": 11425, - "slipping": 11426, - "owing": 11427, - "abbot": 11428, - "neighbor": 11429, - "sidney": 11430, - "##av": 11431, - "rats": 11432, - "recommendations": 11433, - "encouraging": 11434, - "squadrons": 11435, - "anticipated": 11436, - "commanders": 11437, - "conquered": 11438, - "##oto": 11439, - "donations": 11440, - "diagnosed": 11441, - "##mond": 11442, - "divide": 11443, - "##iva": 11444, - "guessed": 11445, - "decoration": 11446, - "vernon": 11447, - "auditorium": 11448, - "revelation": 11449, - "conversations": 11450, - "##kers": 11451, - "##power": 11452, - "herzegovina": 11453, - "dash": 11454, - "alike": 11455, - "protested": 11456, - "lateral": 11457, - "herman": 11458, - "accredited": 11459, - "mg": 11460, - "##gent": 11461, - "freeman": 11462, - "mel": 11463, - "fiji": 11464, - "crow": 11465, - "crimson": 11466, - "##rine": 11467, - "livestock": 11468, - "##pped": 11469, - "humanitarian": 11470, - "bored": 11471, - "oz": 11472, - "whip": 11473, - "##lene": 11474, - "##ali": 11475, - "legitimate": 11476, - "alter": 11477, - "grinning": 11478, - "spelled": 11479, - "anxious": 11480, - "oriental": 11481, - "wesley": 11482, - "##nin": 11483, - "##hole": 11484, - "carnival": 11485, - "controller": 11486, - "detect": 11487, - "##ssa": 11488, - "bowed": 11489, - "educator": 11490, - "kosovo": 11491, - "macedonia": 11492, - "##sin": 11493, - "occupy": 11494, - "mastering": 11495, - "stephanie": 11496, - "janeiro": 11497, - "para": 11498, - "unaware": 11499, - "nurses": 11500, - "noon": 11501, - "135": 11502, - "cam": 11503, - "hopefully": 11504, - "ranger": 11505, - "combine": 11506, - "sociology": 11507, - "polar": 11508, - "rica": 11509, - "##eer": 11510, - "neill": 11511, - "##sman": 11512, - "holocaust": 11513, - "##ip": 11514, - "doubled": 11515, - "lust": 11516, - "1828": 11517, - "109": 11518, - "decent": 11519, - "cooling": 11520, - "unveiled": 11521, - "##card": 11522, - "1829": 11523, - "nsw": 11524, - "homer": 11525, - "chapman": 11526, - "meyer": 11527, - "##gin": 11528, - "dive": 11529, - "mae": 11530, - "reagan": 11531, - "expertise": 11532, - "##gled": 11533, - "darwin": 11534, - "brooke": 11535, - "sided": 11536, - "prosecution": 11537, - "investigating": 11538, - "comprised": 11539, - "petroleum": 11540, - "genres": 11541, - "reluctant": 11542, - "differently": 11543, - "trilogy": 11544, - "johns": 11545, - "vegetables": 11546, - "corpse": 11547, - "highlighted": 11548, - "lounge": 11549, - "pension": 11550, - "unsuccessfully": 11551, - "elegant": 11552, - "aided": 11553, - "ivory": 11554, - "beatles": 11555, - "amelia": 11556, - "cain": 11557, - "dubai": 11558, - "sunny": 11559, - "immigrant": 11560, - "babe": 11561, - "click": 11562, - "##nder": 11563, - "underwater": 11564, - "pepper": 11565, - "combining": 11566, - "mumbled": 11567, - "atlas": 11568, - "horns": 11569, - "accessed": 11570, - "ballad": 11571, - "physicians": 11572, - "homeless": 11573, - "gestured": 11574, - "rpm": 11575, - "freak": 11576, - "louisville": 11577, - "corporations": 11578, - "patriots": 11579, - "prizes": 11580, - "rational": 11581, - "warn": 11582, - "modes": 11583, - "decorative": 11584, - "overnight": 11585, - "din": 11586, - "troubled": 11587, - "phantom": 11588, - "##ort": 11589, - "monarch": 11590, - "sheer": 11591, - "##dorf": 11592, - "generals": 11593, - "guidelines": 11594, - "organs": 11595, - "addresses": 11596, - "##zon": 11597, - "enhance": 11598, - "curling": 11599, - "parishes": 11600, - "cord": 11601, - "##kie": 11602, - "linux": 11603, - "caesar": 11604, - "deutsche": 11605, - "bavaria": 11606, - "##bia": 11607, - "coleman": 11608, - "cyclone": 11609, - "##eria": 11610, - "bacon": 11611, - "petty": 11612, - "##yama": 11613, - "##old": 11614, - "hampton": 11615, - "diagnosis": 11616, - "1824": 11617, - "throws": 11618, - "complexity": 11619, - "rita": 11620, - "disputed": 11621, - "##ā‚ƒ": 11622, - "pablo": 11623, - "##sch": 11624, - "marketed": 11625, - "trafficking": 11626, - "##ulus": 11627, - "examine": 11628, - "plague": 11629, - "formats": 11630, - "##oh": 11631, - "vault": 11632, - "faithful": 11633, - "##bourne": 11634, - "webster": 11635, - "##ox": 11636, - "highlights": 11637, - "##ient": 11638, - "##ann": 11639, - "phones": 11640, - "vacuum": 11641, - "sandwich": 11642, - "modeling": 11643, - "##gated": 11644, - "bolivia": 11645, - "clergy": 11646, - "qualities": 11647, - "isabel": 11648, - "##nas": 11649, - "##ars": 11650, - "wears": 11651, - "screams": 11652, - "reunited": 11653, - "annoyed": 11654, - "bra": 11655, - "##ancy": 11656, - "##rate": 11657, - "differential": 11658, - "transmitter": 11659, - "tattoo": 11660, - "container": 11661, - "poker": 11662, - "##och": 11663, - "excessive": 11664, - "resides": 11665, - "cowboys": 11666, - "##tum": 11667, - "augustus": 11668, - "trash": 11669, - "providers": 11670, - "statute": 11671, - "retreated": 11672, - "balcony": 11673, - "reversed": 11674, - "void": 11675, - "storey": 11676, - "preceded": 11677, - "masses": 11678, - "leap": 11679, - "laughs": 11680, - "neighborhoods": 11681, - "wards": 11682, - "schemes": 11683, - "falcon": 11684, - "santo": 11685, - "battlefield": 11686, - "pad": 11687, - "ronnie": 11688, - "thread": 11689, - "lesbian": 11690, - "venus": 11691, - "##dian": 11692, - "beg": 11693, - "sandstone": 11694, - "daylight": 11695, - "punched": 11696, - "gwen": 11697, - "analog": 11698, - "stroked": 11699, - "wwe": 11700, - "acceptable": 11701, - "measurements": 11702, - "dec": 11703, - "toxic": 11704, - "##kel": 11705, - "adequate": 11706, - "surgical": 11707, - "economist": 11708, - "parameters": 11709, - "varsity": 11710, - "##sberg": 11711, - "quantity": 11712, - "ella": 11713, - "##chy": 11714, - "##rton": 11715, - "countess": 11716, - "generating": 11717, - "precision": 11718, - "diamonds": 11719, - "expressway": 11720, - "ga": 11721, - "##ı": 11722, - "1821": 11723, - "uruguay": 11724, - "talents": 11725, - "galleries": 11726, - "expenses": 11727, - "scanned": 11728, - "colleague": 11729, - "outlets": 11730, - "ryder": 11731, - "lucien": 11732, - "##ila": 11733, - "paramount": 11734, - "##bon": 11735, - "syracuse": 11736, - "dim": 11737, - "fangs": 11738, - "gown": 11739, - "sweep": 11740, - "##sie": 11741, - "toyota": 11742, - "missionaries": 11743, - "websites": 11744, - "##nsis": 11745, - "sentences": 11746, - "adviser": 11747, - "val": 11748, - "trademark": 11749, - "spells": 11750, - "##plane": 11751, - "patience": 11752, - "starter": 11753, - "slim": 11754, - "##borg": 11755, - "toe": 11756, - "incredibly": 11757, - "shoots": 11758, - "elliot": 11759, - "nobility": 11760, - "##wyn": 11761, - "cowboy": 11762, - "endorsed": 11763, - "gardner": 11764, - "tendency": 11765, - "persuaded": 11766, - "organisms": 11767, - "emissions": 11768, - "kazakhstan": 11769, - "amused": 11770, - "boring": 11771, - "chips": 11772, - "themed": 11773, - "##hand": 11774, - "llc": 11775, - "constantinople": 11776, - "chasing": 11777, - "systematic": 11778, - "guatemala": 11779, - "borrowed": 11780, - "erin": 11781, - "carey": 11782, - "##hard": 11783, - "highlands": 11784, - "struggles": 11785, - "1810": 11786, - "##ifying": 11787, - "##ced": 11788, - "wong": 11789, - "exceptions": 11790, - "develops": 11791, - "enlarged": 11792, - "kindergarten": 11793, - "castro": 11794, - "##ern": 11795, - "##rina": 11796, - "leigh": 11797, - "zombie": 11798, - "juvenile": 11799, - "##most": 11800, - "consul": 11801, - "##nar": 11802, - "sailor": 11803, - "hyde": 11804, - "clarence": 11805, - "intensive": 11806, - "pinned": 11807, - "nasty": 11808, - "useless": 11809, - "jung": 11810, - "clayton": 11811, - "stuffed": 11812, - "exceptional": 11813, - "ix": 11814, - "apostolic": 11815, - "230": 11816, - "transactions": 11817, - "##dge": 11818, - "exempt": 11819, - "swinging": 11820, - "cove": 11821, - "religions": 11822, - "##ash": 11823, - "shields": 11824, - "dairy": 11825, - "bypass": 11826, - "190": 11827, - "pursuing": 11828, - "bug": 11829, - "joyce": 11830, - "bombay": 11831, - "chassis": 11832, - "southampton": 11833, - "chat": 11834, - "interact": 11835, - "redesignated": 11836, - "##pen": 11837, - "nascar": 11838, - "pray": 11839, - "salmon": 11840, - "rigid": 11841, - "regained": 11842, - "malaysian": 11843, - "grim": 11844, - "publicity": 11845, - "constituted": 11846, - "capturing": 11847, - "toilet": 11848, - "delegate": 11849, - "purely": 11850, - "tray": 11851, - "drift": 11852, - "loosely": 11853, - "striker": 11854, - "weakened": 11855, - "trinidad": 11856, - "mitch": 11857, - "itv": 11858, - "defines": 11859, - "transmitted": 11860, - "ming": 11861, - "scarlet": 11862, - "nodding": 11863, - "fitzgerald": 11864, - "fu": 11865, - "narrowly": 11866, - "sp": 11867, - "tooth": 11868, - "standings": 11869, - "virtue": 11870, - "##₁": 11871, - "##wara": 11872, - "##cting": 11873, - "chateau": 11874, - "gloves": 11875, - "lid": 11876, - "##nel": 11877, - "hurting": 11878, - "conservatory": 11879, - "##pel": 11880, - "sinclair": 11881, - "reopened": 11882, - "sympathy": 11883, - "nigerian": 11884, - "strode": 11885, - "advocated": 11886, - "optional": 11887, - "chronic": 11888, - "discharge": 11889, - "##rc": 11890, - "suck": 11891, - "compatible": 11892, - "laurel": 11893, - "stella": 11894, - "shi": 11895, - "fails": 11896, - "wage": 11897, - "dodge": 11898, - "128": 11899, - "informal": 11900, - "sorts": 11901, - "levi": 11902, - "buddha": 11903, - "villagers": 11904, - "##aka": 11905, - "chronicles": 11906, - "heavier": 11907, - "summoned": 11908, - "gateway": 11909, - "3000": 11910, - "eleventh": 11911, - "jewelry": 11912, - "translations": 11913, - "accordingly": 11914, - "seas": 11915, - "##ency": 11916, - "fiber": 11917, - "pyramid": 11918, - "cubic": 11919, - "dragging": 11920, - "##ista": 11921, - "caring": 11922, - "##ops": 11923, - "android": 11924, - "contacted": 11925, - "lunar": 11926, - "##dt": 11927, - "kai": 11928, - "lisbon": 11929, - "patted": 11930, - "1826": 11931, - "sacramento": 11932, - "theft": 11933, - "madagascar": 11934, - "subtropical": 11935, - "disputes": 11936, - "ta": 11937, - "holidays": 11938, - "piper": 11939, - "willow": 11940, - "mare": 11941, - "cane": 11942, - "itunes": 11943, - "newfoundland": 11944, - "benny": 11945, - "companions": 11946, - "dong": 11947, - "raj": 11948, - "observe": 11949, - "roar": 11950, - "charming": 11951, - "plaque": 11952, - "tibetan": 11953, - "fossils": 11954, - "enacted": 11955, - "manning": 11956, - "bubble": 11957, - "tina": 11958, - "tanzania": 11959, - "##eda": 11960, - "##hir": 11961, - "funk": 11962, - "swamp": 11963, - "deputies": 11964, - "cloak": 11965, - "ufc": 11966, - "scenario": 11967, - "par": 11968, - "scratch": 11969, - "metals": 11970, - "anthem": 11971, - "guru": 11972, - "engaging": 11973, - "specially": 11974, - "##boat": 11975, - "dialects": 11976, - "nineteen": 11977, - "cecil": 11978, - "duet": 11979, - "disability": 11980, - "messenger": 11981, - "unofficial": 11982, - "##lies": 11983, - "defunct": 11984, - "eds": 11985, - "moonlight": 11986, - "drainage": 11987, - "surname": 11988, - "puzzle": 11989, - "honda": 11990, - "switching": 11991, - "conservatives": 11992, - "mammals": 11993, - "knox": 11994, - "broadcaster": 11995, - "sidewalk": 11996, - "cope": 11997, - "##ried": 11998, - "benson": 11999, - "princes": 12000, - "peterson": 12001, - "##sal": 12002, - "bedford": 12003, - "sharks": 12004, - "eli": 12005, - "wreck": 12006, - "alberto": 12007, - "gasp": 12008, - "archaeology": 12009, - "lgbt": 12010, - "teaches": 12011, - "securities": 12012, - "madness": 12013, - "compromise": 12014, - "waving": 12015, - "coordination": 12016, - "davidson": 12017, - "visions": 12018, - "leased": 12019, - "possibilities": 12020, - "eighty": 12021, - "jun": 12022, - "fernandez": 12023, - "enthusiasm": 12024, - "assassin": 12025, - "sponsorship": 12026, - "reviewer": 12027, - "kingdoms": 12028, - "estonian": 12029, - "laboratories": 12030, - "##fy": 12031, - "##nal": 12032, - "applies": 12033, - "verb": 12034, - "celebrations": 12035, - "##zzo": 12036, - "rowing": 12037, - "lightweight": 12038, - "sadness": 12039, - "submit": 12040, - "mvp": 12041, - "balanced": 12042, - "dude": 12043, - "##vas": 12044, - "explicitly": 12045, - "metric": 12046, - "magnificent": 12047, - "mound": 12048, - "brett": 12049, - "mohammad": 12050, - "mistakes": 12051, - "irregular": 12052, - "##hing": 12053, - "##ass": 12054, - "sanders": 12055, - "betrayed": 12056, - "shipped": 12057, - "surge": 12058, - "##enburg": 12059, - "reporters": 12060, - "termed": 12061, - "georg": 12062, - "pity": 12063, - "verbal": 12064, - "bulls": 12065, - "abbreviated": 12066, - "enabling": 12067, - "appealed": 12068, - "##are": 12069, - "##atic": 12070, - "sicily": 12071, - "sting": 12072, - "heel": 12073, - "sweetheart": 12074, - "bart": 12075, - "spacecraft": 12076, - "brutal": 12077, - "monarchy": 12078, - "##tter": 12079, - "aberdeen": 12080, - "cameo": 12081, - "diane": 12082, - "##ub": 12083, - "survivor": 12084, - "clyde": 12085, - "##aries": 12086, - "complaint": 12087, - "##makers": 12088, - "clarinet": 12089, - "delicious": 12090, - "chilean": 12091, - "karnataka": 12092, - "coordinates": 12093, - "1818": 12094, - "panties": 12095, - "##rst": 12096, - "pretending": 12097, - "ar": 12098, - "dramatically": 12099, - "kiev": 12100, - "bella": 12101, - "tends": 12102, - "distances": 12103, - "113": 12104, - "catalog": 12105, - "launching": 12106, - "instances": 12107, - "telecommunications": 12108, - "portable": 12109, - "lindsay": 12110, - "vatican": 12111, - "##eim": 12112, - "angles": 12113, - "aliens": 12114, - "marker": 12115, - "stint": 12116, - "screens": 12117, - "bolton": 12118, - "##rne": 12119, - "judy": 12120, - "wool": 12121, - "benedict": 12122, - "plasma": 12123, - "europa": 12124, - "spark": 12125, - "imaging": 12126, - "filmmaker": 12127, - "swiftly": 12128, - "##een": 12129, - "contributor": 12130, - "##nor": 12131, - "opted": 12132, - "stamps": 12133, - "apologize": 12134, - "financing": 12135, - "butter": 12136, - "gideon": 12137, - "sophisticated": 12138, - "alignment": 12139, - "avery": 12140, - "chemicals": 12141, - "yearly": 12142, - "speculation": 12143, - "prominence": 12144, - "professionally": 12145, - "##ils": 12146, - "immortal": 12147, - "institutional": 12148, - "inception": 12149, - "wrists": 12150, - "identifying": 12151, - "tribunal": 12152, - "derives": 12153, - "gains": 12154, - "##wo": 12155, - "papal": 12156, - "preference": 12157, - "linguistic": 12158, - "vince": 12159, - "operative": 12160, - "brewery": 12161, - "##ont": 12162, - "unemployment": 12163, - "boyd": 12164, - "##ured": 12165, - "##outs": 12166, - "albeit": 12167, - "prophet": 12168, - "1813": 12169, - "bi": 12170, - "##rr": 12171, - "##face": 12172, - "##rad": 12173, - "quarterly": 12174, - "asteroid": 12175, - "cleaned": 12176, - "radius": 12177, - "temper": 12178, - "##llen": 12179, - "telugu": 12180, - "jerk": 12181, - "viscount": 12182, - "menu": 12183, - "##ote": 12184, - "glimpse": 12185, - "##aya": 12186, - "yacht": 12187, - "hawaiian": 12188, - "baden": 12189, - "##rl": 12190, - "laptop": 12191, - "readily": 12192, - "##gu": 12193, - "monetary": 12194, - "offshore": 12195, - "scots": 12196, - "watches": 12197, - "##yang": 12198, - "##arian": 12199, - "upgrade": 12200, - "needle": 12201, - "xbox": 12202, - "lea": 12203, - "encyclopedia": 12204, - "flank": 12205, - "fingertips": 12206, - "##pus": 12207, - "delight": 12208, - "teachings": 12209, - "confirm": 12210, - "roth": 12211, - "beaches": 12212, - "midway": 12213, - "winters": 12214, - "##iah": 12215, - "teasing": 12216, - "daytime": 12217, - "beverly": 12218, - "gambling": 12219, - "bonnie": 12220, - "##backs": 12221, - "regulated": 12222, - "clement": 12223, - "hermann": 12224, - "tricks": 12225, - "knot": 12226, - "##shing": 12227, - "##uring": 12228, - "##vre": 12229, - "detached": 12230, - "ecological": 12231, - "owed": 12232, - "specialty": 12233, - "byron": 12234, - "inventor": 12235, - "bats": 12236, - "stays": 12237, - "screened": 12238, - "unesco": 12239, - "midland": 12240, - "trim": 12241, - "affection": 12242, - "##ander": 12243, - "##rry": 12244, - "jess": 12245, - "thoroughly": 12246, - "feedback": 12247, - "##uma": 12248, - "chennai": 12249, - "strained": 12250, - "heartbeat": 12251, - "wrapping": 12252, - "overtime": 12253, - "pleaded": 12254, - "##sworth": 12255, - "mon": 12256, - "leisure": 12257, - "oclc": 12258, - "##tate": 12259, - "##ele": 12260, - "feathers": 12261, - "angelo": 12262, - "thirds": 12263, - "nuts": 12264, - "surveys": 12265, - "clever": 12266, - "gill": 12267, - "commentator": 12268, - "##dos": 12269, - "darren": 12270, - "rides": 12271, - "gibraltar": 12272, - "##nc": 12273, - "##mu": 12274, - "dissolution": 12275, - "dedication": 12276, - "shin": 12277, - "meals": 12278, - "saddle": 12279, - "elvis": 12280, - "reds": 12281, - "chaired": 12282, - "taller": 12283, - "appreciation": 12284, - "functioning": 12285, - "niece": 12286, - "favored": 12287, - "advocacy": 12288, - "robbie": 12289, - "criminals": 12290, - "suffolk": 12291, - "yugoslav": 12292, - "passport": 12293, - "constable": 12294, - "congressman": 12295, - "hastings": 12296, - "vera": 12297, - "##rov": 12298, - "consecrated": 12299, - "sparks": 12300, - "ecclesiastical": 12301, - "confined": 12302, - "##ovich": 12303, - "muller": 12304, - "floyd": 12305, - "nora": 12306, - "1822": 12307, - "paved": 12308, - "1827": 12309, - "cumberland": 12310, - "ned": 12311, - "saga": 12312, - "spiral": 12313, - "##flow": 12314, - "appreciated": 12315, - "yi": 12316, - "collaborative": 12317, - "treating": 12318, - "similarities": 12319, - "feminine": 12320, - "finishes": 12321, - "##ib": 12322, - "jade": 12323, - "import": 12324, - "##nse": 12325, - "##hot": 12326, - "champagne": 12327, - "mice": 12328, - "securing": 12329, - "celebrities": 12330, - "helsinki": 12331, - "attributes": 12332, - "##gos": 12333, - "cousins": 12334, - "phases": 12335, - "ache": 12336, - "lucia": 12337, - "gandhi": 12338, - "submission": 12339, - "vicar": 12340, - "spear": 12341, - "shine": 12342, - "tasmania": 12343, - "biting": 12344, - "detention": 12345, - "constitute": 12346, - "tighter": 12347, - "seasonal": 12348, - "##gus": 12349, - "terrestrial": 12350, - "matthews": 12351, - "##oka": 12352, - "effectiveness": 12353, - "parody": 12354, - "philharmonic": 12355, - "##onic": 12356, - "1816": 12357, - "strangers": 12358, - "encoded": 12359, - "consortium": 12360, - "guaranteed": 12361, - "regards": 12362, - "shifts": 12363, - "tortured": 12364, - "collision": 12365, - "supervisor": 12366, - "inform": 12367, - "broader": 12368, - "insight": 12369, - "theaters": 12370, - "armour": 12371, - "emeritus": 12372, - "blink": 12373, - "incorporates": 12374, - "mapping": 12375, - "##50": 12376, - "##ein": 12377, - "handball": 12378, - "flexible": 12379, - "##nta": 12380, - "substantially": 12381, - "generous": 12382, - "thief": 12383, - "##own": 12384, - "carr": 12385, - "loses": 12386, - "1793": 12387, - "prose": 12388, - "ucla": 12389, - "romeo": 12390, - "generic": 12391, - "metallic": 12392, - "realization": 12393, - "damages": 12394, - "mk": 12395, - "commissioners": 12396, - "zach": 12397, - "default": 12398, - "##ther": 12399, - "helicopters": 12400, - "lengthy": 12401, - "stems": 12402, - "spa": 12403, - "partnered": 12404, - "spectators": 12405, - "rogue": 12406, - "indication": 12407, - "penalties": 12408, - "teresa": 12409, - "1801": 12410, - "sen": 12411, - "##tric": 12412, - "dalton": 12413, - "##wich": 12414, - "irving": 12415, - "photographic": 12416, - "##vey": 12417, - "dell": 12418, - "deaf": 12419, - "peters": 12420, - "excluded": 12421, - "unsure": 12422, - "##vable": 12423, - "patterson": 12424, - "crawled": 12425, - "##zio": 12426, - "resided": 12427, - "whipped": 12428, - "latvia": 12429, - "slower": 12430, - "ecole": 12431, - "pipes": 12432, - "employers": 12433, - "maharashtra": 12434, - "comparable": 12435, - "va": 12436, - "textile": 12437, - "pageant": 12438, - "##gel": 12439, - "alphabet": 12440, - "binary": 12441, - "irrigation": 12442, - "chartered": 12443, - "choked": 12444, - "antoine": 12445, - "offs": 12446, - "waking": 12447, - "supplement": 12448, - "##wen": 12449, - "quantities": 12450, - "demolition": 12451, - "regain": 12452, - "locate": 12453, - "urdu": 12454, - "folks": 12455, - "alt": 12456, - "114": 12457, - "##mc": 12458, - "scary": 12459, - "andreas": 12460, - "whites": 12461, - "##ava": 12462, - "classrooms": 12463, - "mw": 12464, - "aesthetic": 12465, - "publishes": 12466, - "valleys": 12467, - "guides": 12468, - "cubs": 12469, - "johannes": 12470, - "bryant": 12471, - "conventions": 12472, - "affecting": 12473, - "##itt": 12474, - "drain": 12475, - "awesome": 12476, - "isolation": 12477, - "prosecutor": 12478, - "ambitious": 12479, - "apology": 12480, - "captive": 12481, - "downs": 12482, - "atmospheric": 12483, - "lorenzo": 12484, - "aisle": 12485, - "beef": 12486, - "foul": 12487, - "##onia": 12488, - "kidding": 12489, - "composite": 12490, - "disturbed": 12491, - "illusion": 12492, - "natives": 12493, - "##ffer": 12494, - "emi": 12495, - "rockets": 12496, - "riverside": 12497, - "wartime": 12498, - "painters": 12499, - "adolf": 12500, - "melted": 12501, - "##ail": 12502, - "uncertainty": 12503, - "simulation": 12504, - "hawks": 12505, - "progressed": 12506, - "meantime": 12507, - "builder": 12508, - "spray": 12509, - "breach": 12510, - "unhappy": 12511, - "regina": 12512, - "russians": 12513, - "##urg": 12514, - "determining": 12515, - "##tation": 12516, - "tram": 12517, - "1806": 12518, - "##quin": 12519, - "aging": 12520, - "##12": 12521, - "1823": 12522, - "garion": 12523, - "rented": 12524, - "mister": 12525, - "diaz": 12526, - "terminated": 12527, - "clip": 12528, - "1817": 12529, - "depend": 12530, - "nervously": 12531, - "disco": 12532, - "owe": 12533, - "defenders": 12534, - "shiva": 12535, - "notorious": 12536, - "disbelief": 12537, - "shiny": 12538, - "worcester": 12539, - "##gation": 12540, - "##yr": 12541, - "trailing": 12542, - "undertook": 12543, - "islander": 12544, - "belarus": 12545, - "limitations": 12546, - "watershed": 12547, - "fuller": 12548, - "overlooking": 12549, - "utilized": 12550, - "raphael": 12551, - "1819": 12552, - "synthetic": 12553, - "breakdown": 12554, - "klein": 12555, - "##nate": 12556, - "moaned": 12557, - "memoir": 12558, - "lamb": 12559, - "practicing": 12560, - "##erly": 12561, - "cellular": 12562, - "arrows": 12563, - "exotic": 12564, - "##graphy": 12565, - "witches": 12566, - "117": 12567, - "charted": 12568, - "rey": 12569, - "hut": 12570, - "hierarchy": 12571, - "subdivision": 12572, - "freshwater": 12573, - "giuseppe": 12574, - "aloud": 12575, - "reyes": 12576, - "qatar": 12577, - "marty": 12578, - "sideways": 12579, - "utterly": 12580, - "sexually": 12581, - "jude": 12582, - "prayers": 12583, - "mccarthy": 12584, - "softball": 12585, - "blend": 12586, - "damien": 12587, - "##gging": 12588, - "##metric": 12589, - "wholly": 12590, - "erupted": 12591, - "lebanese": 12592, - "negro": 12593, - "revenues": 12594, - "tasted": 12595, - "comparative": 12596, - "teamed": 12597, - "transaction": 12598, - "labeled": 12599, - "maori": 12600, - "sovereignty": 12601, - "parkway": 12602, - "trauma": 12603, - "gran": 12604, - "malay": 12605, - "121": 12606, - "advancement": 12607, - "descendant": 12608, - "2020": 12609, - "buzz": 12610, - "salvation": 12611, - "inventory": 12612, - "symbolic": 12613, - "##making": 12614, - "antarctica": 12615, - "mps": 12616, - "##gas": 12617, - "##bro": 12618, - "mohammed": 12619, - "myanmar": 12620, - "holt": 12621, - "submarines": 12622, - "tones": 12623, - "##lman": 12624, - "locker": 12625, - "patriarch": 12626, - "bangkok": 12627, - "emerson": 12628, - "remarks": 12629, - "predators": 12630, - "kin": 12631, - "afghan": 12632, - "confession": 12633, - "norwich": 12634, - "rental": 12635, - "emerge": 12636, - "advantages": 12637, - "##zel": 12638, - "rca": 12639, - "##hold": 12640, - "shortened": 12641, - "storms": 12642, - "aidan": 12643, - "##matic": 12644, - "autonomy": 12645, - "compliance": 12646, - "##quet": 12647, - "dudley": 12648, - "atp": 12649, - "##osis": 12650, - "1803": 12651, - "motto": 12652, - "documentation": 12653, - "summary": 12654, - "professors": 12655, - "spectacular": 12656, - "christina": 12657, - "archdiocese": 12658, - "flashing": 12659, - "innocence": 12660, - "remake": 12661, - "##dell": 12662, - "psychic": 12663, - "reef": 12664, - "scare": 12665, - "employ": 12666, - "rs": 12667, - "sticks": 12668, - "meg": 12669, - "gus": 12670, - "leans": 12671, - "##ude": 12672, - "accompany": 12673, - "bergen": 12674, - "tomas": 12675, - "##iko": 12676, - "doom": 12677, - "wages": 12678, - "pools": 12679, - "##nch": 12680, - "##bes": 12681, - "breasts": 12682, - "scholarly": 12683, - "alison": 12684, - "outline": 12685, - "brittany": 12686, - "breakthrough": 12687, - "willis": 12688, - "realistic": 12689, - "##cut": 12690, - "##boro": 12691, - "competitor": 12692, - "##stan": 12693, - "pike": 12694, - "picnic": 12695, - "icon": 12696, - "designing": 12697, - "commercials": 12698, - "washing": 12699, - "villain": 12700, - "skiing": 12701, - "micro": 12702, - "costumes": 12703, - "auburn": 12704, - "halted": 12705, - "executives": 12706, - "##hat": 12707, - "logistics": 12708, - "cycles": 12709, - "vowel": 12710, - "applicable": 12711, - "barrett": 12712, - "exclaimed": 12713, - "eurovision": 12714, - "eternity": 12715, - "ramon": 12716, - "##umi": 12717, - "##lls": 12718, - "modifications": 12719, - "sweeping": 12720, - "disgust": 12721, - "##uck": 12722, - "torch": 12723, - "aviv": 12724, - "ensuring": 12725, - "rude": 12726, - "dusty": 12727, - "sonic": 12728, - "donovan": 12729, - "outskirts": 12730, - "cu": 12731, - "pathway": 12732, - "##band": 12733, - "##gun": 12734, - "##lines": 12735, - "disciplines": 12736, - "acids": 12737, - "cadet": 12738, - "paired": 12739, - "##40": 12740, - "sketches": 12741, - "##sive": 12742, - "marriages": 12743, - "##⁺": 12744, - "folding": 12745, - "peers": 12746, - "slovak": 12747, - "implies": 12748, - "admired": 12749, - "##beck": 12750, - "1880s": 12751, - "leopold": 12752, - "instinct": 12753, - "attained": 12754, - "weston": 12755, - "megan": 12756, - "horace": 12757, - "##ination": 12758, - "dorsal": 12759, - "ingredients": 12760, - "evolutionary": 12761, - "##its": 12762, - "complications": 12763, - "deity": 12764, - "lethal": 12765, - "brushing": 12766, - "levy": 12767, - "deserted": 12768, - "institutes": 12769, - "posthumously": 12770, - "delivering": 12771, - "telescope": 12772, - "coronation": 12773, - "motivated": 12774, - "rapids": 12775, - "luc": 12776, - "flicked": 12777, - "pays": 12778, - "volcano": 12779, - "tanner": 12780, - "weighed": 12781, - "##nica": 12782, - "crowds": 12783, - "frankie": 12784, - "gifted": 12785, - "addressing": 12786, - "granddaughter": 12787, - "winding": 12788, - "##rna": 12789, - "constantine": 12790, - "gomez": 12791, - "##front": 12792, - "landscapes": 12793, - "rudolf": 12794, - "anthropology": 12795, - "slate": 12796, - "werewolf": 12797, - "##lio": 12798, - "astronomy": 12799, - "circa": 12800, - "rouge": 12801, - "dreaming": 12802, - "sack": 12803, - "knelt": 12804, - "drowned": 12805, - "naomi": 12806, - "prolific": 12807, - "tracked": 12808, - "freezing": 12809, - "herb": 12810, - "##dium": 12811, - "agony": 12812, - "randall": 12813, - "twisting": 12814, - "wendy": 12815, - "deposit": 12816, - "touches": 12817, - "vein": 12818, - "wheeler": 12819, - "##bbled": 12820, - "##bor": 12821, - "batted": 12822, - "retaining": 12823, - "tire": 12824, - "presently": 12825, - "compare": 12826, - "specification": 12827, - "daemon": 12828, - "nigel": 12829, - "##grave": 12830, - "merry": 12831, - "recommendation": 12832, - "czechoslovakia": 12833, - "sandra": 12834, - "ng": 12835, - "roma": 12836, - "##sts": 12837, - "lambert": 12838, - "inheritance": 12839, - "sheikh": 12840, - "winchester": 12841, - "cries": 12842, - "examining": 12843, - "##yle": 12844, - "comeback": 12845, - "cuisine": 12846, - "nave": 12847, - "##iv": 12848, - "ko": 12849, - "retrieve": 12850, - "tomatoes": 12851, - "barker": 12852, - "polished": 12853, - "defining": 12854, - "irene": 12855, - "lantern": 12856, - "personalities": 12857, - "begging": 12858, - "tract": 12859, - "swore": 12860, - "1809": 12861, - "175": 12862, - "##gic": 12863, - "omaha": 12864, - "brotherhood": 12865, - "##rley": 12866, - "haiti": 12867, - "##ots": 12868, - "exeter": 12869, - "##ete": 12870, - "##zia": 12871, - "steele": 12872, - "dumb": 12873, - "pearson": 12874, - "210": 12875, - "surveyed": 12876, - "elisabeth": 12877, - "trends": 12878, - "##ef": 12879, - "fritz": 12880, - "##rf": 12881, - "premium": 12882, - "bugs": 12883, - "fraction": 12884, - "calmly": 12885, - "viking": 12886, - "##birds": 12887, - "tug": 12888, - "inserted": 12889, - "unusually": 12890, - "##ield": 12891, - "confronted": 12892, - "distress": 12893, - "crashing": 12894, - "brent": 12895, - "turks": 12896, - "resign": 12897, - "##olo": 12898, - "cambodia": 12899, - "gabe": 12900, - "sauce": 12901, - "##kal": 12902, - "evelyn": 12903, - "116": 12904, - "extant": 12905, - "clusters": 12906, - "quarry": 12907, - "teenagers": 12908, - "luna": 12909, - "##lers": 12910, - "##ister": 12911, - "affiliation": 12912, - "drill": 12913, - "##ashi": 12914, - "panthers": 12915, - "scenic": 12916, - "libya": 12917, - "anita": 12918, - "strengthen": 12919, - "inscriptions": 12920, - "##cated": 12921, - "lace": 12922, - "sued": 12923, - "judith": 12924, - "riots": 12925, - "##uted": 12926, - "mint": 12927, - "##eta": 12928, - "preparations": 12929, - "midst": 12930, - "dub": 12931, - "challenger": 12932, - "##vich": 12933, - "mock": 12934, - "cf": 12935, - "displaced": 12936, - "wicket": 12937, - "breaths": 12938, - "enables": 12939, - "schmidt": 12940, - "analyst": 12941, - "##lum": 12942, - "ag": 12943, - "highlight": 12944, - "automotive": 12945, - "axe": 12946, - "josef": 12947, - "newark": 12948, - "sufficiently": 12949, - "resembles": 12950, - "50th": 12951, - "##pal": 12952, - "flushed": 12953, - "mum": 12954, - "traits": 12955, - "##ante": 12956, - "commodore": 12957, - "incomplete": 12958, - "warming": 12959, - "titular": 12960, - "ceremonial": 12961, - "ethical": 12962, - "118": 12963, - "celebrating": 12964, - "eighteenth": 12965, - "cao": 12966, - "lima": 12967, - "medalist": 12968, - "mobility": 12969, - "strips": 12970, - "snakes": 12971, - "##city": 12972, - "miniature": 12973, - "zagreb": 12974, - "barton": 12975, - "escapes": 12976, - "umbrella": 12977, - "automated": 12978, - "doubted": 12979, - "differs": 12980, - "cooled": 12981, - "georgetown": 12982, - "dresden": 12983, - "cooked": 12984, - "fade": 12985, - "wyatt": 12986, - "rna": 12987, - "jacobs": 12988, - "carlton": 12989, - "abundant": 12990, - "stereo": 12991, - "boost": 12992, - "madras": 12993, - "inning": 12994, - "##hia": 12995, - "spur": 12996, - "ip": 12997, - "malayalam": 12998, - "begged": 12999, - "osaka": 13000, - "groan": 13001, - "escaping": 13002, - "charging": 13003, - "dose": 13004, - "vista": 13005, - "##aj": 13006, - "bud": 13007, - "papa": 13008, - "communists": 13009, - "advocates": 13010, - "edged": 13011, - "tri": 13012, - "##cent": 13013, - "resemble": 13014, - "peaking": 13015, - "necklace": 13016, - "fried": 13017, - "montenegro": 13018, - "saxony": 13019, - "goose": 13020, - "glances": 13021, - "stuttgart": 13022, - "curator": 13023, - "recruit": 13024, - "grocery": 13025, - "sympathetic": 13026, - "##tting": 13027, - "##fort": 13028, - "127": 13029, - "lotus": 13030, - "randolph": 13031, - "ancestor": 13032, - "##rand": 13033, - "succeeding": 13034, - "jupiter": 13035, - "1798": 13036, - "macedonian": 13037, - "##heads": 13038, - "hiking": 13039, - "1808": 13040, - "handing": 13041, - "fischer": 13042, - "##itive": 13043, - "garbage": 13044, - "node": 13045, - "##pies": 13046, - "prone": 13047, - "singular": 13048, - "papua": 13049, - "inclined": 13050, - "attractions": 13051, - "italia": 13052, - "pouring": 13053, - "motioned": 13054, - "grandma": 13055, - "garnered": 13056, - "jacksonville": 13057, - "corp": 13058, - "ego": 13059, - "ringing": 13060, - "aluminum": 13061, - "##hausen": 13062, - "ordering": 13063, - "##foot": 13064, - "drawer": 13065, - "traders": 13066, - "synagogue": 13067, - "##play": 13068, - "##kawa": 13069, - "resistant": 13070, - "wandering": 13071, - "fragile": 13072, - "fiona": 13073, - "teased": 13074, - "var": 13075, - "hardcore": 13076, - "soaked": 13077, - "jubilee": 13078, - "decisive": 13079, - "exposition": 13080, - "mercer": 13081, - "poster": 13082, - "valencia": 13083, - "hale": 13084, - "kuwait": 13085, - "1811": 13086, - "##ises": 13087, - "##wr": 13088, - "##eed": 13089, - "tavern": 13090, - "gamma": 13091, - "122": 13092, - "johan": 13093, - "##uer": 13094, - "airways": 13095, - "amino": 13096, - "gil": 13097, - "##ury": 13098, - "vocational": 13099, - "domains": 13100, - "torres": 13101, - "##sp": 13102, - "generator": 13103, - "folklore": 13104, - "outcomes": 13105, - "##keeper": 13106, - "canberra": 13107, - "shooter": 13108, - "fl": 13109, - "beams": 13110, - "confrontation": 13111, - "##lling": 13112, - "##gram": 13113, - "feb": 13114, - "aligned": 13115, - "forestry": 13116, - "pipeline": 13117, - "jax": 13118, - "motorway": 13119, - "conception": 13120, - "decay": 13121, - "##tos": 13122, - "coffin": 13123, - "##cott": 13124, - "stalin": 13125, - "1805": 13126, - "escorted": 13127, - "minded": 13128, - "##nam": 13129, - "sitcom": 13130, - "purchasing": 13131, - "twilight": 13132, - "veronica": 13133, - "additions": 13134, - "passive": 13135, - "tensions": 13136, - "straw": 13137, - "123": 13138, - "frequencies": 13139, - "1804": 13140, - "refugee": 13141, - "cultivation": 13142, - "##iate": 13143, - "christie": 13144, - "clary": 13145, - "bulletin": 13146, - "crept": 13147, - "disposal": 13148, - "##rich": 13149, - "##zong": 13150, - "processor": 13151, - "crescent": 13152, - "##rol": 13153, - "bmw": 13154, - "emphasized": 13155, - "whale": 13156, - "nazis": 13157, - "aurora": 13158, - "##eng": 13159, - "dwelling": 13160, - "hauled": 13161, - "sponsors": 13162, - "toledo": 13163, - "mega": 13164, - "ideology": 13165, - "theatres": 13166, - "tessa": 13167, - "cerambycidae": 13168, - "saves": 13169, - "turtle": 13170, - "cone": 13171, - "suspects": 13172, - "kara": 13173, - "rusty": 13174, - "yelling": 13175, - "greeks": 13176, - "mozart": 13177, - "shades": 13178, - "cocked": 13179, - "participant": 13180, - "##tro": 13181, - "shire": 13182, - "spit": 13183, - "freeze": 13184, - "necessity": 13185, - "##cos": 13186, - "inmates": 13187, - "nielsen": 13188, - "councillors": 13189, - "loaned": 13190, - "uncommon": 13191, - "omar": 13192, - "peasants": 13193, - "botanical": 13194, - "offspring": 13195, - "daniels": 13196, - "formations": 13197, - "jokes": 13198, - "1794": 13199, - "pioneers": 13200, - "sigma": 13201, - "licensing": 13202, - "##sus": 13203, - "wheelchair": 13204, - "polite": 13205, - "1807": 13206, - "liquor": 13207, - "pratt": 13208, - "trustee": 13209, - "##uta": 13210, - "forewings": 13211, - "balloon": 13212, - "##zz": 13213, - "kilometre": 13214, - "camping": 13215, - "explicit": 13216, - "casually": 13217, - "shawn": 13218, - "foolish": 13219, - "teammates": 13220, - "nm": 13221, - "hassan": 13222, - "carrie": 13223, - "judged": 13224, - "satisfy": 13225, - "vanessa": 13226, - "knives": 13227, - "selective": 13228, - "cnn": 13229, - "flowed": 13230, - "##lice": 13231, - "eclipse": 13232, - "stressed": 13233, - "eliza": 13234, - "mathematician": 13235, - "cease": 13236, - "cultivated": 13237, - "##roy": 13238, - "commissions": 13239, - "browns": 13240, - "##ania": 13241, - "destroyers": 13242, - "sheridan": 13243, - "meadow": 13244, - "##rius": 13245, - "minerals": 13246, - "##cial": 13247, - "downstream": 13248, - "clash": 13249, - "gram": 13250, - "memoirs": 13251, - "ventures": 13252, - "baha": 13253, - "seymour": 13254, - "archie": 13255, - "midlands": 13256, - "edith": 13257, - "fare": 13258, - "flynn": 13259, - "invite": 13260, - "canceled": 13261, - "tiles": 13262, - "stabbed": 13263, - "boulder": 13264, - "incorporate": 13265, - "amended": 13266, - "camden": 13267, - "facial": 13268, - "mollusk": 13269, - "unreleased": 13270, - "descriptions": 13271, - "yoga": 13272, - "grabs": 13273, - "550": 13274, - "raises": 13275, - "ramp": 13276, - "shiver": 13277, - "##rose": 13278, - "coined": 13279, - "pioneering": 13280, - "tunes": 13281, - "qing": 13282, - "warwick": 13283, - "tops": 13284, - "119": 13285, - "melanie": 13286, - "giles": 13287, - "##rous": 13288, - "wandered": 13289, - "##inal": 13290, - "annexed": 13291, - "nov": 13292, - "30th": 13293, - "unnamed": 13294, - "##ished": 13295, - "organizational": 13296, - "airplane": 13297, - "normandy": 13298, - "stoke": 13299, - "whistle": 13300, - "blessing": 13301, - "violations": 13302, - "chased": 13303, - "holders": 13304, - "shotgun": 13305, - "##ctic": 13306, - "outlet": 13307, - "reactor": 13308, - "##vik": 13309, - "tires": 13310, - "tearing": 13311, - "shores": 13312, - "fortified": 13313, - "mascot": 13314, - "constituencies": 13315, - "nc": 13316, - "columnist": 13317, - "productive": 13318, - "tibet": 13319, - "##rta": 13320, - "lineage": 13321, - "hooked": 13322, - "oct": 13323, - "tapes": 13324, - "judging": 13325, - "cody": 13326, - "##gger": 13327, - "hansen": 13328, - "kashmir": 13329, - "triggered": 13330, - "##eva": 13331, - "solved": 13332, - "cliffs": 13333, - "##tree": 13334, - "resisted": 13335, - "anatomy": 13336, - "protesters": 13337, - "transparent": 13338, - "implied": 13339, - "##iga": 13340, - "injection": 13341, - "mattress": 13342, - "excluding": 13343, - "##mbo": 13344, - "defenses": 13345, - "helpless": 13346, - "devotion": 13347, - "##elli": 13348, - "growl": 13349, - "liberals": 13350, - "weber": 13351, - "phenomena": 13352, - "atoms": 13353, - "plug": 13354, - "##iff": 13355, - "mortality": 13356, - "apprentice": 13357, - "howe": 13358, - "convincing": 13359, - "aaa": 13360, - "swimmer": 13361, - "barber": 13362, - "leone": 13363, - "promptly": 13364, - "sodium": 13365, - "def": 13366, - "nowadays": 13367, - "arise": 13368, - "##oning": 13369, - "gloucester": 13370, - "corrected": 13371, - "dignity": 13372, - "norm": 13373, - "erie": 13374, - "##ders": 13375, - "elders": 13376, - "evacuated": 13377, - "sylvia": 13378, - "compression": 13379, - "##yar": 13380, - "hartford": 13381, - "pose": 13382, - "backpack": 13383, - "reasoning": 13384, - "accepts": 13385, - "24th": 13386, - "wipe": 13387, - "millimetres": 13388, - "marcel": 13389, - "##oda": 13390, - "dodgers": 13391, - "albion": 13392, - "1790": 13393, - "overwhelmed": 13394, - "aerospace": 13395, - "oaks": 13396, - "1795": 13397, - "showcase": 13398, - "acknowledge": 13399, - "recovering": 13400, - "nolan": 13401, - "ashe": 13402, - "hurts": 13403, - "geology": 13404, - "fashioned": 13405, - "disappearance": 13406, - "farewell": 13407, - "swollen": 13408, - "shrug": 13409, - "marquis": 13410, - "wimbledon": 13411, - "124": 13412, - "rue": 13413, - "1792": 13414, - "commemorate": 13415, - "reduces": 13416, - "experiencing": 13417, - "inevitable": 13418, - "calcutta": 13419, - "intel": 13420, - "##court": 13421, - "murderer": 13422, - "sticking": 13423, - "fisheries": 13424, - "imagery": 13425, - "bloom": 13426, - "280": 13427, - "brake": 13428, - "##inus": 13429, - "gustav": 13430, - "hesitation": 13431, - "memorable": 13432, - "po": 13433, - "viral": 13434, - "beans": 13435, - "accidents": 13436, - "tunisia": 13437, - "antenna": 13438, - "spilled": 13439, - "consort": 13440, - "treatments": 13441, - "aye": 13442, - "perimeter": 13443, - "##gard": 13444, - "donation": 13445, - "hostage": 13446, - "migrated": 13447, - "banker": 13448, - "addiction": 13449, - "apex": 13450, - "lil": 13451, - "trout": 13452, - "##ously": 13453, - "conscience": 13454, - "##nova": 13455, - "rams": 13456, - "sands": 13457, - "genome": 13458, - "passionate": 13459, - "troubles": 13460, - "##lets": 13461, - "##set": 13462, - "amid": 13463, - "##ibility": 13464, - "##ret": 13465, - "higgins": 13466, - "exceed": 13467, - "vikings": 13468, - "##vie": 13469, - "payne": 13470, - "##zan": 13471, - "muscular": 13472, - "##ste": 13473, - "defendant": 13474, - "sucking": 13475, - "##wal": 13476, - "ibrahim": 13477, - "fuselage": 13478, - "claudia": 13479, - "vfl": 13480, - "europeans": 13481, - "snails": 13482, - "interval": 13483, - "##garh": 13484, - "preparatory": 13485, - "statewide": 13486, - "tasked": 13487, - "lacrosse": 13488, - "viktor": 13489, - "##lation": 13490, - "angola": 13491, - "##hra": 13492, - "flint": 13493, - "implications": 13494, - "employs": 13495, - "teens": 13496, - "patrons": 13497, - "stall": 13498, - "weekends": 13499, - "barriers": 13500, - "scrambled": 13501, - "nucleus": 13502, - "tehran": 13503, - "jenna": 13504, - "parsons": 13505, - "lifelong": 13506, - "robots": 13507, - "displacement": 13508, - "5000": 13509, - "##bles": 13510, - "precipitation": 13511, - "##gt": 13512, - "knuckles": 13513, - "clutched": 13514, - "1802": 13515, - "marrying": 13516, - "ecology": 13517, - "marx": 13518, - "accusations": 13519, - "declare": 13520, - "scars": 13521, - "kolkata": 13522, - "mat": 13523, - "meadows": 13524, - "bermuda": 13525, - "skeleton": 13526, - "finalists": 13527, - "vintage": 13528, - "crawl": 13529, - "coordinate": 13530, - "affects": 13531, - "subjected": 13532, - "orchestral": 13533, - "mistaken": 13534, - "##tc": 13535, - "mirrors": 13536, - "dipped": 13537, - "relied": 13538, - "260": 13539, - "arches": 13540, - "candle": 13541, - "##nick": 13542, - "incorporating": 13543, - "wildly": 13544, - "fond": 13545, - "basilica": 13546, - "owl": 13547, - "fringe": 13548, - "rituals": 13549, - "whispering": 13550, - "stirred": 13551, - "feud": 13552, - "tertiary": 13553, - "slick": 13554, - "goat": 13555, - "honorable": 13556, - "whereby": 13557, - "skip": 13558, - "ricardo": 13559, - "stripes": 13560, - "parachute": 13561, - "adjoining": 13562, - "submerged": 13563, - "synthesizer": 13564, - "##gren": 13565, - "intend": 13566, - "positively": 13567, - "ninety": 13568, - "phi": 13569, - "beaver": 13570, - "partition": 13571, - "fellows": 13572, - "alexis": 13573, - "prohibition": 13574, - "carlisle": 13575, - "bizarre": 13576, - "fraternity": 13577, - "##bre": 13578, - "doubts": 13579, - "icy": 13580, - "cbc": 13581, - "aquatic": 13582, - "sneak": 13583, - "sonny": 13584, - "combines": 13585, - "airports": 13586, - "crude": 13587, - "supervised": 13588, - "spatial": 13589, - "merge": 13590, - "alfonso": 13591, - "##bic": 13592, - "corrupt": 13593, - "scan": 13594, - "undergo": 13595, - "##ams": 13596, - "disabilities": 13597, - "colombian": 13598, - "comparing": 13599, - "dolphins": 13600, - "perkins": 13601, - "##lish": 13602, - "reprinted": 13603, - "unanimous": 13604, - "bounced": 13605, - "hairs": 13606, - "underworld": 13607, - "midwest": 13608, - "semester": 13609, - "bucket": 13610, - "paperback": 13611, - "miniseries": 13612, - "coventry": 13613, - "demise": 13614, - "##leigh": 13615, - "demonstrations": 13616, - "sensor": 13617, - "rotating": 13618, - "yan": 13619, - "##hler": 13620, - "arrange": 13621, - "soils": 13622, - "##idge": 13623, - "hyderabad": 13624, - "labs": 13625, - "##dr": 13626, - "brakes": 13627, - "grandchildren": 13628, - "##nde": 13629, - "negotiated": 13630, - "rover": 13631, - "ferrari": 13632, - "continuation": 13633, - "directorate": 13634, - "augusta": 13635, - "stevenson": 13636, - "counterpart": 13637, - "gore": 13638, - "##rda": 13639, - "nursery": 13640, - "rican": 13641, - "ave": 13642, - "collectively": 13643, - "broadly": 13644, - "pastoral": 13645, - "repertoire": 13646, - "asserted": 13647, - "discovering": 13648, - "nordic": 13649, - "styled": 13650, - "fiba": 13651, - "cunningham": 13652, - "harley": 13653, - "middlesex": 13654, - "survives": 13655, - "tumor": 13656, - "tempo": 13657, - "zack": 13658, - "aiming": 13659, - "lok": 13660, - "urgent": 13661, - "##rade": 13662, - "##nto": 13663, - "devils": 13664, - "##ement": 13665, - "contractor": 13666, - "turin": 13667, - "##wl": 13668, - "##ool": 13669, - "bliss": 13670, - "repaired": 13671, - "simmons": 13672, - "moan": 13673, - "astronomical": 13674, - "cr": 13675, - "negotiate": 13676, - "lyric": 13677, - "1890s": 13678, - "lara": 13679, - "bred": 13680, - "clad": 13681, - "angus": 13682, - "pbs": 13683, - "##ience": 13684, - "engineered": 13685, - "posed": 13686, - "##lk": 13687, - "hernandez": 13688, - "possessions": 13689, - "elbows": 13690, - "psychiatric": 13691, - "strokes": 13692, - "confluence": 13693, - "electorate": 13694, - "lifts": 13695, - "campuses": 13696, - "lava": 13697, - "alps": 13698, - "##ep": 13699, - "##ution": 13700, - "##date": 13701, - "physicist": 13702, - "woody": 13703, - "##page": 13704, - "##ographic": 13705, - "##itis": 13706, - "juliet": 13707, - "reformation": 13708, - "sparhawk": 13709, - "320": 13710, - "complement": 13711, - "suppressed": 13712, - "jewel": 13713, - "##½": 13714, - "floated": 13715, - "##kas": 13716, - "continuity": 13717, - "sadly": 13718, - "##ische": 13719, - "inability": 13720, - "melting": 13721, - "scanning": 13722, - "paula": 13723, - "flour": 13724, - "judaism": 13725, - "safer": 13726, - "vague": 13727, - "##lm": 13728, - "solving": 13729, - "curb": 13730, - "##stown": 13731, - "financially": 13732, - "gable": 13733, - "bees": 13734, - "expired": 13735, - "miserable": 13736, - "cassidy": 13737, - "dominion": 13738, - "1789": 13739, - "cupped": 13740, - "145": 13741, - "robbery": 13742, - "facto": 13743, - "amos": 13744, - "warden": 13745, - "resume": 13746, - "tallest": 13747, - "marvin": 13748, - "ing": 13749, - "pounded": 13750, - "usd": 13751, - "declaring": 13752, - "gasoline": 13753, - "##aux": 13754, - "darkened": 13755, - "270": 13756, - "650": 13757, - "sophomore": 13758, - "##mere": 13759, - "erection": 13760, - "gossip": 13761, - "televised": 13762, - "risen": 13763, - "dial": 13764, - "##eu": 13765, - "pillars": 13766, - "##link": 13767, - "passages": 13768, - "profound": 13769, - "##tina": 13770, - "arabian": 13771, - "ashton": 13772, - "silicon": 13773, - "nail": 13774, - "##ead": 13775, - "##lated": 13776, - "##wer": 13777, - "##hardt": 13778, - "fleming": 13779, - "firearms": 13780, - "ducked": 13781, - "circuits": 13782, - "blows": 13783, - "waterloo": 13784, - "titans": 13785, - "##lina": 13786, - "atom": 13787, - "fireplace": 13788, - "cheshire": 13789, - "financed": 13790, - "activation": 13791, - "algorithms": 13792, - "##zzi": 13793, - "constituent": 13794, - "catcher": 13795, - "cherokee": 13796, - "partnerships": 13797, - "sexuality": 13798, - "platoon": 13799, - "tragic": 13800, - "vivian": 13801, - "guarded": 13802, - "whiskey": 13803, - "meditation": 13804, - "poetic": 13805, - "##late": 13806, - "##nga": 13807, - "##ake": 13808, - "porto": 13809, - "listeners": 13810, - "dominance": 13811, - "kendra": 13812, - "mona": 13813, - "chandler": 13814, - "factions": 13815, - "22nd": 13816, - "salisbury": 13817, - "attitudes": 13818, - "derivative": 13819, - "##ido": 13820, - "##haus": 13821, - "intake": 13822, - "paced": 13823, - "javier": 13824, - "illustrator": 13825, - "barrels": 13826, - "bias": 13827, - "cockpit": 13828, - "burnett": 13829, - "dreamed": 13830, - "ensuing": 13831, - "##anda": 13832, - "receptors": 13833, - "someday": 13834, - "hawkins": 13835, - "mattered": 13836, - "##lal": 13837, - "slavic": 13838, - "1799": 13839, - "jesuit": 13840, - "cameroon": 13841, - "wasted": 13842, - "tai": 13843, - "wax": 13844, - "lowering": 13845, - "victorious": 13846, - "freaking": 13847, - "outright": 13848, - "hancock": 13849, - "librarian": 13850, - "sensing": 13851, - "bald": 13852, - "calcium": 13853, - "myers": 13854, - "tablet": 13855, - "announcing": 13856, - "barack": 13857, - "shipyard": 13858, - "pharmaceutical": 13859, - "##uan": 13860, - "greenwich": 13861, - "flush": 13862, - "medley": 13863, - "patches": 13864, - "wolfgang": 13865, - "pt": 13866, - "speeches": 13867, - "acquiring": 13868, - "exams": 13869, - "nikolai": 13870, - "##gg": 13871, - "hayden": 13872, - "kannada": 13873, - "##type": 13874, - "reilly": 13875, - "##pt": 13876, - "waitress": 13877, - "abdomen": 13878, - "devastated": 13879, - "capped": 13880, - "pseudonym": 13881, - "pharmacy": 13882, - "fulfill": 13883, - "paraguay": 13884, - "1796": 13885, - "clicked": 13886, - "##trom": 13887, - "archipelago": 13888, - "syndicated": 13889, - "##hman": 13890, - "lumber": 13891, - "orgasm": 13892, - "rejection": 13893, - "clifford": 13894, - "lorraine": 13895, - "advent": 13896, - "mafia": 13897, - "rodney": 13898, - "brock": 13899, - "##ght": 13900, - "##used": 13901, - "##elia": 13902, - "cassette": 13903, - "chamberlain": 13904, - "despair": 13905, - "mongolia": 13906, - "sensors": 13907, - "developmental": 13908, - "upstream": 13909, - "##eg": 13910, - "##alis": 13911, - "spanning": 13912, - "165": 13913, - "trombone": 13914, - "basque": 13915, - "seeded": 13916, - "interred": 13917, - "renewable": 13918, - "rhys": 13919, - "leapt": 13920, - "revision": 13921, - "molecule": 13922, - "##ages": 13923, - "chord": 13924, - "vicious": 13925, - "nord": 13926, - "shivered": 13927, - "23rd": 13928, - "arlington": 13929, - "debts": 13930, - "corpus": 13931, - "sunrise": 13932, - "bays": 13933, - "blackburn": 13934, - "centimetres": 13935, - "##uded": 13936, - "shuddered": 13937, - "gm": 13938, - "strangely": 13939, - "gripping": 13940, - "cartoons": 13941, - "isabelle": 13942, - "orbital": 13943, - "##ppa": 13944, - "seals": 13945, - "proving": 13946, - "##lton": 13947, - "refusal": 13948, - "strengthened": 13949, - "bust": 13950, - "assisting": 13951, - "baghdad": 13952, - "batsman": 13953, - "portrayal": 13954, - "mara": 13955, - "pushes": 13956, - "spears": 13957, - "og": 13958, - "##cock": 13959, - "reside": 13960, - "nathaniel": 13961, - "brennan": 13962, - "1776": 13963, - "confirmation": 13964, - "caucus": 13965, - "##worthy": 13966, - "markings": 13967, - "yemen": 13968, - "nobles": 13969, - "ku": 13970, - "lazy": 13971, - "viewer": 13972, - "catalan": 13973, - "encompasses": 13974, - "sawyer": 13975, - "##fall": 13976, - "sparked": 13977, - "substances": 13978, - "patents": 13979, - "braves": 13980, - "arranger": 13981, - "evacuation": 13982, - "sergio": 13983, - "persuade": 13984, - "dover": 13985, - "tolerance": 13986, - "penguin": 13987, - "cum": 13988, - "jockey": 13989, - "insufficient": 13990, - "townships": 13991, - "occupying": 13992, - "declining": 13993, - "plural": 13994, - "processed": 13995, - "projection": 13996, - "puppet": 13997, - "flanders": 13998, - "introduces": 13999, - "liability": 14000, - "##yon": 14001, - "gymnastics": 14002, - "antwerp": 14003, - "taipei": 14004, - "hobart": 14005, - "candles": 14006, - "jeep": 14007, - "wes": 14008, - "observers": 14009, - "126": 14010, - "chaplain": 14011, - "bundle": 14012, - "glorious": 14013, - "##hine": 14014, - "hazel": 14015, - "flung": 14016, - "sol": 14017, - "excavations": 14018, - "dumped": 14019, - "stares": 14020, - "sh": 14021, - "bangalore": 14022, - "triangular": 14023, - "icelandic": 14024, - "intervals": 14025, - "expressing": 14026, - "turbine": 14027, - "##vers": 14028, - "songwriting": 14029, - "crafts": 14030, - "##igo": 14031, - "jasmine": 14032, - "ditch": 14033, - "rite": 14034, - "##ways": 14035, - "entertaining": 14036, - "comply": 14037, - "sorrow": 14038, - "wrestlers": 14039, - "basel": 14040, - "emirates": 14041, - "marian": 14042, - "rivera": 14043, - "helpful": 14044, - "##some": 14045, - "caution": 14046, - "downward": 14047, - "networking": 14048, - "##atory": 14049, - "##tered": 14050, - "darted": 14051, - "genocide": 14052, - "emergence": 14053, - "replies": 14054, - "specializing": 14055, - "spokesman": 14056, - "convenient": 14057, - "unlocked": 14058, - "fading": 14059, - "augustine": 14060, - "concentrations": 14061, - "resemblance": 14062, - "elijah": 14063, - "investigator": 14064, - "andhra": 14065, - "##uda": 14066, - "promotes": 14067, - "bean": 14068, - "##rrell": 14069, - "fleeing": 14070, - "wan": 14071, - "simone": 14072, - "announcer": 14073, - "##ame": 14074, - "##bby": 14075, - "lydia": 14076, - "weaver": 14077, - "132": 14078, - "residency": 14079, - "modification": 14080, - "##fest": 14081, - "stretches": 14082, - "##ast": 14083, - "alternatively": 14084, - "nat": 14085, - "lowe": 14086, - "lacks": 14087, - "##ented": 14088, - "pam": 14089, - "tile": 14090, - "concealed": 14091, - "inferior": 14092, - "abdullah": 14093, - "residences": 14094, - "tissues": 14095, - "vengeance": 14096, - "##ided": 14097, - "moisture": 14098, - "peculiar": 14099, - "groove": 14100, - "zip": 14101, - "bologna": 14102, - "jennings": 14103, - "ninja": 14104, - "oversaw": 14105, - "zombies": 14106, - "pumping": 14107, - "batch": 14108, - "livingston": 14109, - "emerald": 14110, - "installations": 14111, - "1797": 14112, - "peel": 14113, - "nitrogen": 14114, - "rama": 14115, - "##fying": 14116, - "##star": 14117, - "schooling": 14118, - "strands": 14119, - "responding": 14120, - "werner": 14121, - "##ost": 14122, - "lime": 14123, - "casa": 14124, - "accurately": 14125, - "targeting": 14126, - "##rod": 14127, - "underway": 14128, - "##uru": 14129, - "hemisphere": 14130, - "lester": 14131, - "##yard": 14132, - "occupies": 14133, - "2d": 14134, - "griffith": 14135, - "angrily": 14136, - "reorganized": 14137, - "##owing": 14138, - "courtney": 14139, - "deposited": 14140, - "##dd": 14141, - "##30": 14142, - "estadio": 14143, - "##ifies": 14144, - "dunn": 14145, - "exiled": 14146, - "##ying": 14147, - "checks": 14148, - "##combe": 14149, - "##о": 14150, - "##fly": 14151, - "successes": 14152, - "unexpectedly": 14153, - "blu": 14154, - "assessed": 14155, - "##flower": 14156, - "##ه": 14157, - "observing": 14158, - "sacked": 14159, - "spiders": 14160, - "kn": 14161, - "##tail": 14162, - "mu": 14163, - "nodes": 14164, - "prosperity": 14165, - "audrey": 14166, - "divisional": 14167, - "155": 14168, - "broncos": 14169, - "tangled": 14170, - "adjust": 14171, - "feeds": 14172, - "erosion": 14173, - "paolo": 14174, - "surf": 14175, - "directory": 14176, - "snatched": 14177, - "humid": 14178, - "admiralty": 14179, - "screwed": 14180, - "gt": 14181, - "reddish": 14182, - "##nese": 14183, - "modules": 14184, - "trench": 14185, - "lamps": 14186, - "bind": 14187, - "leah": 14188, - "bucks": 14189, - "competes": 14190, - "##nz": 14191, - "##form": 14192, - "transcription": 14193, - "##uc": 14194, - "isles": 14195, - "violently": 14196, - "clutching": 14197, - "pga": 14198, - "cyclist": 14199, - "inflation": 14200, - "flats": 14201, - "ragged": 14202, - "unnecessary": 14203, - "##hian": 14204, - "stubborn": 14205, - "coordinated": 14206, - "harriet": 14207, - "baba": 14208, - "disqualified": 14209, - "330": 14210, - "insect": 14211, - "wolfe": 14212, - "##fies": 14213, - "reinforcements": 14214, - "rocked": 14215, - "duel": 14216, - "winked": 14217, - "embraced": 14218, - "bricks": 14219, - "##raj": 14220, - "hiatus": 14221, - "defeats": 14222, - "pending": 14223, - "brightly": 14224, - "jealousy": 14225, - "##xton": 14226, - "##hm": 14227, - "##uki": 14228, - "lena": 14229, - "gdp": 14230, - "colorful": 14231, - "##dley": 14232, - "stein": 14233, - "kidney": 14234, - "##shu": 14235, - "underwear": 14236, - "wanderers": 14237, - "##haw": 14238, - "##icus": 14239, - "guardians": 14240, - "m³": 14241, - "roared": 14242, - "habits": 14243, - "##wise": 14244, - "permits": 14245, - "gp": 14246, - "uranium": 14247, - "punished": 14248, - "disguise": 14249, - "bundesliga": 14250, - "elise": 14251, - "dundee": 14252, - "erotic": 14253, - "partisan": 14254, - "pi": 14255, - "collectors": 14256, - "float": 14257, - "individually": 14258, - "rendering": 14259, - "behavioral": 14260, - "bucharest": 14261, - "ser": 14262, - "hare": 14263, - "valerie": 14264, - "corporal": 14265, - "nutrition": 14266, - "proportional": 14267, - "##isa": 14268, - "immense": 14269, - "##kis": 14270, - "pavement": 14271, - "##zie": 14272, - "##eld": 14273, - "sutherland": 14274, - "crouched": 14275, - "1775": 14276, - "##lp": 14277, - "suzuki": 14278, - "trades": 14279, - "endurance": 14280, - "operas": 14281, - "crosby": 14282, - "prayed": 14283, - "priory": 14284, - "rory": 14285, - "socially": 14286, - "##urn": 14287, - "gujarat": 14288, - "##pu": 14289, - "walton": 14290, - "cube": 14291, - "pasha": 14292, - "privilege": 14293, - "lennon": 14294, - "floods": 14295, - "thorne": 14296, - "waterfall": 14297, - "nipple": 14298, - "scouting": 14299, - "approve": 14300, - "##lov": 14301, - "minorities": 14302, - "voter": 14303, - "dwight": 14304, - "extensions": 14305, - "assure": 14306, - "ballroom": 14307, - "slap": 14308, - "dripping": 14309, - "privileges": 14310, - "rejoined": 14311, - "confessed": 14312, - "demonstrating": 14313, - "patriotic": 14314, - "yell": 14315, - "investor": 14316, - "##uth": 14317, - "pagan": 14318, - "slumped": 14319, - "squares": 14320, - "##cle": 14321, - "##kins": 14322, - "confront": 14323, - "bert": 14324, - "embarrassment": 14325, - "##aid": 14326, - "aston": 14327, - "urging": 14328, - "sweater": 14329, - "starr": 14330, - "yuri": 14331, - "brains": 14332, - "williamson": 14333, - "commuter": 14334, - "mortar": 14335, - "structured": 14336, - "selfish": 14337, - "exports": 14338, - "##jon": 14339, - "cds": 14340, - "##him": 14341, - "unfinished": 14342, - "##rre": 14343, - "mortgage": 14344, - "destinations": 14345, - "##nagar": 14346, - "canoe": 14347, - "solitary": 14348, - "buchanan": 14349, - "delays": 14350, - "magistrate": 14351, - "fk": 14352, - "##pling": 14353, - "motivation": 14354, - "##lier": 14355, - "##vier": 14356, - "recruiting": 14357, - "assess": 14358, - "##mouth": 14359, - "malik": 14360, - "antique": 14361, - "1791": 14362, - "pius": 14363, - "rahman": 14364, - "reich": 14365, - "tub": 14366, - "zhou": 14367, - "smashed": 14368, - "airs": 14369, - "galway": 14370, - "xii": 14371, - "conditioning": 14372, - "honduras": 14373, - "discharged": 14374, - "dexter": 14375, - "##pf": 14376, - "lionel": 14377, - "129": 14378, - "debates": 14379, - "lemon": 14380, - "tiffany": 14381, - "volunteered": 14382, - "dom": 14383, - "dioxide": 14384, - "procession": 14385, - "devi": 14386, - "sic": 14387, - "tremendous": 14388, - "advertisements": 14389, - "colts": 14390, - "transferring": 14391, - "verdict": 14392, - "hanover": 14393, - "decommissioned": 14394, - "utter": 14395, - "relate": 14396, - "pac": 14397, - "racism": 14398, - "##top": 14399, - "beacon": 14400, - "limp": 14401, - "similarity": 14402, - "terra": 14403, - "occurrence": 14404, - "ant": 14405, - "##how": 14406, - "becky": 14407, - "capt": 14408, - "updates": 14409, - "armament": 14410, - "richie": 14411, - "pal": 14412, - "##graph": 14413, - "halloween": 14414, - "mayo": 14415, - "##ssen": 14416, - "##bone": 14417, - "cara": 14418, - "serena": 14419, - "fcc": 14420, - "dolls": 14421, - "obligations": 14422, - "##dling": 14423, - "violated": 14424, - "lafayette": 14425, - "jakarta": 14426, - "exploitation": 14427, - "##ime": 14428, - "infamous": 14429, - "iconic": 14430, - "##lah": 14431, - "##park": 14432, - "kitty": 14433, - "moody": 14434, - "reginald": 14435, - "dread": 14436, - "spill": 14437, - "crystals": 14438, - "olivier": 14439, - "modeled": 14440, - "bluff": 14441, - "equilibrium": 14442, - "separating": 14443, - "notices": 14444, - "ordnance": 14445, - "extinction": 14446, - "onset": 14447, - "cosmic": 14448, - "attachment": 14449, - "sammy": 14450, - "expose": 14451, - "privy": 14452, - "anchored": 14453, - "##bil": 14454, - "abbott": 14455, - "admits": 14456, - "bending": 14457, - "baritone": 14458, - "emmanuel": 14459, - "policeman": 14460, - "vaughan": 14461, - "winged": 14462, - "climax": 14463, - "dresses": 14464, - "denny": 14465, - "polytechnic": 14466, - "mohamed": 14467, - "burmese": 14468, - "authentic": 14469, - "nikki": 14470, - "genetics": 14471, - "grandparents": 14472, - "homestead": 14473, - "gaza": 14474, - "postponed": 14475, - "metacritic": 14476, - "una": 14477, - "##sby": 14478, - "##bat": 14479, - "unstable": 14480, - "dissertation": 14481, - "##rial": 14482, - "##cian": 14483, - "curls": 14484, - "obscure": 14485, - "uncovered": 14486, - "bronx": 14487, - "praying": 14488, - "disappearing": 14489, - "##hoe": 14490, - "prehistoric": 14491, - "coke": 14492, - "turret": 14493, - "mutations": 14494, - "nonprofit": 14495, - "pits": 14496, - "monaco": 14497, - "##ي": 14498, - "##usion": 14499, - "prominently": 14500, - "dispatched": 14501, - "podium": 14502, - "##mir": 14503, - "uci": 14504, - "##uation": 14505, - "133": 14506, - "fortifications": 14507, - "birthplace": 14508, - "kendall": 14509, - "##lby": 14510, - "##oll": 14511, - "preacher": 14512, - "rack": 14513, - "goodman": 14514, - "##rman": 14515, - "persistent": 14516, - "##ott": 14517, - "countless": 14518, - "jaime": 14519, - "recorder": 14520, - "lexington": 14521, - "persecution": 14522, - "jumps": 14523, - "renewal": 14524, - "wagons": 14525, - "##11": 14526, - "crushing": 14527, - "##holder": 14528, - "decorations": 14529, - "##lake": 14530, - "abundance": 14531, - "wrath": 14532, - "laundry": 14533, - "Ā£1": 14534, - "garde": 14535, - "##rp": 14536, - "jeanne": 14537, - "beetles": 14538, - "peasant": 14539, - "##sl": 14540, - "splitting": 14541, - "caste": 14542, - "sergei": 14543, - "##rer": 14544, - "##ema": 14545, - "scripts": 14546, - "##ively": 14547, - "rub": 14548, - "satellites": 14549, - "##vor": 14550, - "inscribed": 14551, - "verlag": 14552, - "scrapped": 14553, - "gale": 14554, - "packages": 14555, - "chick": 14556, - "potato": 14557, - "slogan": 14558, - "kathleen": 14559, - "arabs": 14560, - "##culture": 14561, - "counterparts": 14562, - "reminiscent": 14563, - "choral": 14564, - "##tead": 14565, - "rand": 14566, - "retains": 14567, - "bushes": 14568, - "dane": 14569, - "accomplish": 14570, - "courtesy": 14571, - "closes": 14572, - "##oth": 14573, - "slaughter": 14574, - "hague": 14575, - "krakow": 14576, - "lawson": 14577, - "tailed": 14578, - "elias": 14579, - "ginger": 14580, - "##ttes": 14581, - "canopy": 14582, - "betrayal": 14583, - "rebuilding": 14584, - "turf": 14585, - "##hof": 14586, - "frowning": 14587, - "allegiance": 14588, - "brigades": 14589, - "kicks": 14590, - "rebuild": 14591, - "polls": 14592, - "alias": 14593, - "nationalism": 14594, - "td": 14595, - "rowan": 14596, - "audition": 14597, - "bowie": 14598, - "fortunately": 14599, - "recognizes": 14600, - "harp": 14601, - "dillon": 14602, - "horrified": 14603, - "##oro": 14604, - "renault": 14605, - "##tics": 14606, - "ropes": 14607, - "##α": 14608, - "presumed": 14609, - "rewarded": 14610, - "infrared": 14611, - "wiping": 14612, - "accelerated": 14613, - "illustration": 14614, - "##rid": 14615, - "presses": 14616, - "practitioners": 14617, - "badminton": 14618, - "##iard": 14619, - "detained": 14620, - "##tera": 14621, - "recognizing": 14622, - "relates": 14623, - "misery": 14624, - "##sies": 14625, - "##tly": 14626, - "reproduction": 14627, - "piercing": 14628, - "potatoes": 14629, - "thornton": 14630, - "esther": 14631, - "manners": 14632, - "hbo": 14633, - "##aan": 14634, - "ours": 14635, - "bullshit": 14636, - "ernie": 14637, - "perennial": 14638, - "sensitivity": 14639, - "illuminated": 14640, - "rupert": 14641, - "##jin": 14642, - "##iss": 14643, - "##ear": 14644, - "rfc": 14645, - "nassau": 14646, - "##dock": 14647, - "staggered": 14648, - "socialism": 14649, - "##haven": 14650, - "appointments": 14651, - "nonsense": 14652, - "prestige": 14653, - "sharma": 14654, - "haul": 14655, - "##tical": 14656, - "solidarity": 14657, - "gps": 14658, - "##ook": 14659, - "##rata": 14660, - "igor": 14661, - "pedestrian": 14662, - "##uit": 14663, - "baxter": 14664, - "tenants": 14665, - "wires": 14666, - "medication": 14667, - "unlimited": 14668, - "guiding": 14669, - "impacts": 14670, - "diabetes": 14671, - "##rama": 14672, - "sasha": 14673, - "pas": 14674, - "clive": 14675, - "extraction": 14676, - "131": 14677, - "continually": 14678, - "constraints": 14679, - "##bilities": 14680, - "sonata": 14681, - "hunted": 14682, - "sixteenth": 14683, - "chu": 14684, - "planting": 14685, - "quote": 14686, - "mayer": 14687, - "pretended": 14688, - "abs": 14689, - "spat": 14690, - "##hua": 14691, - "ceramic": 14692, - "##cci": 14693, - "curtains": 14694, - "pigs": 14695, - "pitching": 14696, - "##dad": 14697, - "latvian": 14698, - "sore": 14699, - "dayton": 14700, - "##sted": 14701, - "##qi": 14702, - "patrols": 14703, - "slice": 14704, - "playground": 14705, - "##nted": 14706, - "shone": 14707, - "stool": 14708, - "apparatus": 14709, - "inadequate": 14710, - "mates": 14711, - "treason": 14712, - "##ija": 14713, - "desires": 14714, - "##liga": 14715, - "##croft": 14716, - "somalia": 14717, - "laurent": 14718, - "mir": 14719, - "leonardo": 14720, - "oracle": 14721, - "grape": 14722, - "obliged": 14723, - "chevrolet": 14724, - "thirteenth": 14725, - "stunning": 14726, - "enthusiastic": 14727, - "##ede": 14728, - "accounted": 14729, - "concludes": 14730, - "currents": 14731, - "basil": 14732, - "##kovic": 14733, - "drought": 14734, - "##rica": 14735, - "mai": 14736, - "##aire": 14737, - "shove": 14738, - "posting": 14739, - "##shed": 14740, - "pilgrimage": 14741, - "humorous": 14742, - "packing": 14743, - "fry": 14744, - "pencil": 14745, - "wines": 14746, - "smells": 14747, - "144": 14748, - "marilyn": 14749, - "aching": 14750, - "newest": 14751, - "clung": 14752, - "bon": 14753, - "neighbours": 14754, - "sanctioned": 14755, - "##pie": 14756, - "mug": 14757, - "##stock": 14758, - "drowning": 14759, - "##mma": 14760, - "hydraulic": 14761, - "##vil": 14762, - "hiring": 14763, - "reminder": 14764, - "lilly": 14765, - "investigators": 14766, - "##ncies": 14767, - "sour": 14768, - "##eous": 14769, - "compulsory": 14770, - "packet": 14771, - "##rion": 14772, - "##graphic": 14773, - "##elle": 14774, - "cannes": 14775, - "##inate": 14776, - "depressed": 14777, - "##rit": 14778, - "heroic": 14779, - "importantly": 14780, - "theresa": 14781, - "##tled": 14782, - "conway": 14783, - "saturn": 14784, - "marginal": 14785, - "rae": 14786, - "##xia": 14787, - "corresponds": 14788, - "royce": 14789, - "pact": 14790, - "jasper": 14791, - "explosives": 14792, - "packaging": 14793, - "aluminium": 14794, - "##ttered": 14795, - "denotes": 14796, - "rhythmic": 14797, - "spans": 14798, - "assignments": 14799, - "hereditary": 14800, - "outlined": 14801, - "originating": 14802, - "sundays": 14803, - "lad": 14804, - "reissued": 14805, - "greeting": 14806, - "beatrice": 14807, - "##dic": 14808, - "pillar": 14809, - "marcos": 14810, - "plots": 14811, - "handbook": 14812, - "alcoholic": 14813, - "judiciary": 14814, - "avant": 14815, - "slides": 14816, - "extract": 14817, - "masculine": 14818, - "blur": 14819, - "##eum": 14820, - "##force": 14821, - "homage": 14822, - "trembled": 14823, - "owens": 14824, - "hymn": 14825, - "trey": 14826, - "omega": 14827, - "signaling": 14828, - "socks": 14829, - "accumulated": 14830, - "reacted": 14831, - "attic": 14832, - "theo": 14833, - "lining": 14834, - "angie": 14835, - "distraction": 14836, - "primera": 14837, - "talbot": 14838, - "##key": 14839, - "1200": 14840, - "ti": 14841, - "creativity": 14842, - "billed": 14843, - "##hey": 14844, - "deacon": 14845, - "eduardo": 14846, - "identifies": 14847, - "proposition": 14848, - "dizzy": 14849, - "gunner": 14850, - "hogan": 14851, - "##yam": 14852, - "##pping": 14853, - "##hol": 14854, - "ja": 14855, - "##chan": 14856, - "jensen": 14857, - "reconstructed": 14858, - "##berger": 14859, - "clearance": 14860, - "darius": 14861, - "##nier": 14862, - "abe": 14863, - "harlem": 14864, - "plea": 14865, - "dei": 14866, - "circled": 14867, - "emotionally": 14868, - "notation": 14869, - "fascist": 14870, - "neville": 14871, - "exceeded": 14872, - "upwards": 14873, - "viable": 14874, - "ducks": 14875, - "##fo": 14876, - "workforce": 14877, - "racer": 14878, - "limiting": 14879, - "shri": 14880, - "##lson": 14881, - "possesses": 14882, - "1600": 14883, - "kerr": 14884, - "moths": 14885, - "devastating": 14886, - "laden": 14887, - "disturbing": 14888, - "locking": 14889, - "##cture": 14890, - "gal": 14891, - "fearing": 14892, - "accreditation": 14893, - "flavor": 14894, - "aide": 14895, - "1870s": 14896, - "mountainous": 14897, - "##baum": 14898, - "melt": 14899, - "##ures": 14900, - "motel": 14901, - "texture": 14902, - "servers": 14903, - "soda": 14904, - "##mb": 14905, - "herd": 14906, - "##nium": 14907, - "erect": 14908, - "puzzled": 14909, - "hum": 14910, - "peggy": 14911, - "examinations": 14912, - "gould": 14913, - "testified": 14914, - "geoff": 14915, - "ren": 14916, - "devised": 14917, - "sacks": 14918, - "##law": 14919, - "denial": 14920, - "posters": 14921, - "grunted": 14922, - "cesar": 14923, - "tutor": 14924, - "ec": 14925, - "gerry": 14926, - "offerings": 14927, - "byrne": 14928, - "falcons": 14929, - "combinations": 14930, - "ct": 14931, - "incoming": 14932, - "pardon": 14933, - "rocking": 14934, - "26th": 14935, - "avengers": 14936, - "flared": 14937, - "mankind": 14938, - "seller": 14939, - "uttar": 14940, - "loch": 14941, - "nadia": 14942, - "stroking": 14943, - "exposing": 14944, - "##hd": 14945, - "fertile": 14946, - "ancestral": 14947, - "instituted": 14948, - "##has": 14949, - "noises": 14950, - "prophecy": 14951, - "taxation": 14952, - "eminent": 14953, - "vivid": 14954, - "pol": 14955, - "##bol": 14956, - "dart": 14957, - "indirect": 14958, - "multimedia": 14959, - "notebook": 14960, - "upside": 14961, - "displaying": 14962, - "adrenaline": 14963, - "referenced": 14964, - "geometric": 14965, - "##iving": 14966, - "progression": 14967, - "##ddy": 14968, - "blunt": 14969, - "announce": 14970, - "##far": 14971, - "implementing": 14972, - "##lav": 14973, - "aggression": 14974, - "liaison": 14975, - "cooler": 14976, - "cares": 14977, - "headache": 14978, - "plantations": 14979, - "gorge": 14980, - "dots": 14981, - "impulse": 14982, - "thickness": 14983, - "ashamed": 14984, - "averaging": 14985, - "kathy": 14986, - "obligation": 14987, - "precursor": 14988, - "137": 14989, - "fowler": 14990, - "symmetry": 14991, - "thee": 14992, - "225": 14993, - "hears": 14994, - "##rai": 14995, - "undergoing": 14996, - "ads": 14997, - "butcher": 14998, - "bowler": 14999, - "##lip": 15000, - "cigarettes": 15001, - "subscription": 15002, - "goodness": 15003, - "##ically": 15004, - "browne": 15005, - "##hos": 15006, - "##tech": 15007, - "kyoto": 15008, - "donor": 15009, - "##erty": 15010, - "damaging": 15011, - "friction": 15012, - "drifting": 15013, - "expeditions": 15014, - "hardened": 15015, - "prostitution": 15016, - "152": 15017, - "fauna": 15018, - "blankets": 15019, - "claw": 15020, - "tossing": 15021, - "snarled": 15022, - "butterflies": 15023, - "recruits": 15024, - "investigative": 15025, - "coated": 15026, - "healed": 15027, - "138": 15028, - "communal": 15029, - "hai": 15030, - "xiii": 15031, - "academics": 15032, - "boone": 15033, - "psychologist": 15034, - "restless": 15035, - "lahore": 15036, - "stephens": 15037, - "mba": 15038, - "brendan": 15039, - "foreigners": 15040, - "printer": 15041, - "##pc": 15042, - "ached": 15043, - "explode": 15044, - "27th": 15045, - "deed": 15046, - "scratched": 15047, - "dared": 15048, - "##pole": 15049, - "cardiac": 15050, - "1780": 15051, - "okinawa": 15052, - "proto": 15053, - "commando": 15054, - "compelled": 15055, - "oddly": 15056, - "electrons": 15057, - "##base": 15058, - "replica": 15059, - "thanksgiving": 15060, - "##rist": 15061, - "sheila": 15062, - "deliberate": 15063, - "stafford": 15064, - "tidal": 15065, - "representations": 15066, - "hercules": 15067, - "ou": 15068, - "##path": 15069, - "##iated": 15070, - "kidnapping": 15071, - "lenses": 15072, - "##tling": 15073, - "deficit": 15074, - "samoa": 15075, - "mouths": 15076, - "consuming": 15077, - "computational": 15078, - "maze": 15079, - "granting": 15080, - "smirk": 15081, - "razor": 15082, - "fixture": 15083, - "ideals": 15084, - "inviting": 15085, - "aiden": 15086, - "nominal": 15087, - "##vs": 15088, - "issuing": 15089, - "julio": 15090, - "pitt": 15091, - "ramsey": 15092, - "docks": 15093, - "##oss": 15094, - "exhaust": 15095, - "##owed": 15096, - "bavarian": 15097, - "draped": 15098, - "anterior": 15099, - "mating": 15100, - "ethiopian": 15101, - "explores": 15102, - "noticing": 15103, - "##nton": 15104, - "discarded": 15105, - "convenience": 15106, - "hoffman": 15107, - "endowment": 15108, - "beasts": 15109, - "cartridge": 15110, - "mormon": 15111, - "paternal": 15112, - "probe": 15113, - "sleeves": 15114, - "interfere": 15115, - "lump": 15116, - "deadline": 15117, - "##rail": 15118, - "jenks": 15119, - "bulldogs": 15120, - "scrap": 15121, - "alternating": 15122, - "justified": 15123, - "reproductive": 15124, - "nam": 15125, - "seize": 15126, - "descending": 15127, - "secretariat": 15128, - "kirby": 15129, - "coupe": 15130, - "grouped": 15131, - "smash": 15132, - "panther": 15133, - "sedan": 15134, - "tapping": 15135, - "##18": 15136, - "lola": 15137, - "cheer": 15138, - "germanic": 15139, - "unfortunate": 15140, - "##eter": 15141, - "unrelated": 15142, - "##fan": 15143, - "subordinate": 15144, - "##sdale": 15145, - "suzanne": 15146, - "advertisement": 15147, - "##ility": 15148, - "horsepower": 15149, - "##lda": 15150, - "cautiously": 15151, - "discourse": 15152, - "luigi": 15153, - "##mans": 15154, - "##fields": 15155, - "noun": 15156, - "prevalent": 15157, - "mao": 15158, - "schneider": 15159, - "everett": 15160, - "surround": 15161, - "governorate": 15162, - "kira": 15163, - "##avia": 15164, - "westward": 15165, - "##take": 15166, - "misty": 15167, - "rails": 15168, - "sustainability": 15169, - "134": 15170, - "unused": 15171, - "##rating": 15172, - "packs": 15173, - "toast": 15174, - "unwilling": 15175, - "regulate": 15176, - "thy": 15177, - "suffrage": 15178, - "nile": 15179, - "awe": 15180, - "assam": 15181, - "definitions": 15182, - "travelers": 15183, - "affordable": 15184, - "##rb": 15185, - "conferred": 15186, - "sells": 15187, - "undefeated": 15188, - "beneficial": 15189, - "torso": 15190, - "basal": 15191, - "repeating": 15192, - "remixes": 15193, - "##pass": 15194, - "bahrain": 15195, - "cables": 15196, - "fang": 15197, - "##itated": 15198, - "excavated": 15199, - "numbering": 15200, - "statutory": 15201, - "##rey": 15202, - "deluxe": 15203, - "##lian": 15204, - "forested": 15205, - "ramirez": 15206, - "derbyshire": 15207, - "zeus": 15208, - "slamming": 15209, - "transfers": 15210, - "astronomer": 15211, - "banana": 15212, - "lottery": 15213, - "berg": 15214, - "histories": 15215, - "bamboo": 15216, - "##uchi": 15217, - "resurrection": 15218, - "posterior": 15219, - "bowls": 15220, - "vaguely": 15221, - "##thi": 15222, - "thou": 15223, - "preserving": 15224, - "tensed": 15225, - "offence": 15226, - "##inas": 15227, - "meyrick": 15228, - "callum": 15229, - "ridden": 15230, - "watt": 15231, - "langdon": 15232, - "tying": 15233, - "lowland": 15234, - "snorted": 15235, - "daring": 15236, - "truman": 15237, - "##hale": 15238, - "##girl": 15239, - "aura": 15240, - "overly": 15241, - "filing": 15242, - "weighing": 15243, - "goa": 15244, - "infections": 15245, - "philanthropist": 15246, - "saunders": 15247, - "eponymous": 15248, - "##owski": 15249, - "latitude": 15250, - "perspectives": 15251, - "reviewing": 15252, - "mets": 15253, - "commandant": 15254, - "radial": 15255, - "##kha": 15256, - "flashlight": 15257, - "reliability": 15258, - "koch": 15259, - "vowels": 15260, - "amazed": 15261, - "ada": 15262, - "elaine": 15263, - "supper": 15264, - "##rth": 15265, - "##encies": 15266, - "predator": 15267, - "debated": 15268, - "soviets": 15269, - "cola": 15270, - "##boards": 15271, - "##nah": 15272, - "compartment": 15273, - "crooked": 15274, - "arbitrary": 15275, - "fourteenth": 15276, - "##ctive": 15277, - "havana": 15278, - "majors": 15279, - "steelers": 15280, - "clips": 15281, - "profitable": 15282, - "ambush": 15283, - "exited": 15284, - "packers": 15285, - "##tile": 15286, - "nude": 15287, - "cracks": 15288, - "fungi": 15289, - "##е": 15290, - "limb": 15291, - "trousers": 15292, - "josie": 15293, - "shelby": 15294, - "tens": 15295, - "frederic": 15296, - "##ος": 15297, - "definite": 15298, - "smoothly": 15299, - "constellation": 15300, - "insult": 15301, - "baton": 15302, - "discs": 15303, - "lingering": 15304, - "##nco": 15305, - "conclusions": 15306, - "lent": 15307, - "staging": 15308, - "becker": 15309, - "grandpa": 15310, - "shaky": 15311, - "##tron": 15312, - "einstein": 15313, - "obstacles": 15314, - "sk": 15315, - "adverse": 15316, - "elle": 15317, - "economically": 15318, - "##moto": 15319, - "mccartney": 15320, - "thor": 15321, - "dismissal": 15322, - "motions": 15323, - "readings": 15324, - "nostrils": 15325, - "treatise": 15326, - "##pace": 15327, - "squeezing": 15328, - "evidently": 15329, - "prolonged": 15330, - "1783": 15331, - "venezuelan": 15332, - "je": 15333, - "marguerite": 15334, - "beirut": 15335, - "takeover": 15336, - "shareholders": 15337, - "##vent": 15338, - "denise": 15339, - "digit": 15340, - "airplay": 15341, - "norse": 15342, - "##bbling": 15343, - "imaginary": 15344, - "pills": 15345, - "hubert": 15346, - "blaze": 15347, - "vacated": 15348, - "eliminating": 15349, - "##ello": 15350, - "vine": 15351, - "mansfield": 15352, - "##tty": 15353, - "retrospective": 15354, - "barrow": 15355, - "borne": 15356, - "clutch": 15357, - "bail": 15358, - "forensic": 15359, - "weaving": 15360, - "##nett": 15361, - "##witz": 15362, - "desktop": 15363, - "citadel": 15364, - "promotions": 15365, - "worrying": 15366, - "dorset": 15367, - "ieee": 15368, - "subdivided": 15369, - "##iating": 15370, - "manned": 15371, - "expeditionary": 15372, - "pickup": 15373, - "synod": 15374, - "chuckle": 15375, - "185": 15376, - "barney": 15377, - "##rz": 15378, - "##ffin": 15379, - "functionality": 15380, - "karachi": 15381, - "litigation": 15382, - "meanings": 15383, - "uc": 15384, - "lick": 15385, - "turbo": 15386, - "anders": 15387, - "##ffed": 15388, - "execute": 15389, - "curl": 15390, - "oppose": 15391, - "ankles": 15392, - "typhoon": 15393, - "##ŲÆ": 15394, - "##ache": 15395, - "##asia": 15396, - "linguistics": 15397, - "compassion": 15398, - "pressures": 15399, - "grazing": 15400, - "perfection": 15401, - "##iting": 15402, - "immunity": 15403, - "monopoly": 15404, - "muddy": 15405, - "backgrounds": 15406, - "136": 15407, - "namibia": 15408, - "francesca": 15409, - "monitors": 15410, - "attracting": 15411, - "stunt": 15412, - "tuition": 15413, - "##ŠøŠø": 15414, - "vegetable": 15415, - "##mates": 15416, - "##quent": 15417, - "mgm": 15418, - "jen": 15419, - "complexes": 15420, - "forts": 15421, - "##ond": 15422, - "cellar": 15423, - "bites": 15424, - "seventeenth": 15425, - "royals": 15426, - "flemish": 15427, - "failures": 15428, - "mast": 15429, - "charities": 15430, - "##cular": 15431, - "peruvian": 15432, - "capitals": 15433, - "macmillan": 15434, - "ipswich": 15435, - "outward": 15436, - "frigate": 15437, - "postgraduate": 15438, - "folds": 15439, - "employing": 15440, - "##ouse": 15441, - "concurrently": 15442, - "fiery": 15443, - "##tai": 15444, - "contingent": 15445, - "nightmares": 15446, - "monumental": 15447, - "nicaragua": 15448, - "##kowski": 15449, - "lizard": 15450, - "mal": 15451, - "fielding": 15452, - "gig": 15453, - "reject": 15454, - "##pad": 15455, - "harding": 15456, - "##ipe": 15457, - "coastline": 15458, - "##cin": 15459, - "##nos": 15460, - "beethoven": 15461, - "humphrey": 15462, - "innovations": 15463, - "##tam": 15464, - "##nge": 15465, - "norris": 15466, - "doris": 15467, - "solicitor": 15468, - "huang": 15469, - "obey": 15470, - "141": 15471, - "##lc": 15472, - "niagara": 15473, - "##tton": 15474, - "shelves": 15475, - "aug": 15476, - "bourbon": 15477, - "curry": 15478, - "nightclub": 15479, - "specifications": 15480, - "hilton": 15481, - "##ndo": 15482, - "centennial": 15483, - "dispersed": 15484, - "worm": 15485, - "neglected": 15486, - "briggs": 15487, - "sm": 15488, - "font": 15489, - "kuala": 15490, - "uneasy": 15491, - "plc": 15492, - "##nstein": 15493, - "##bound": 15494, - "##aking": 15495, - "##burgh": 15496, - "awaiting": 15497, - "pronunciation": 15498, - "##bbed": 15499, - "##quest": 15500, - "eh": 15501, - "optimal": 15502, - "zhu": 15503, - "raped": 15504, - "greens": 15505, - "presided": 15506, - "brenda": 15507, - "worries": 15508, - "##life": 15509, - "venetian": 15510, - "marxist": 15511, - "turnout": 15512, - "##lius": 15513, - "refined": 15514, - "braced": 15515, - "sins": 15516, - "grasped": 15517, - "sunderland": 15518, - "nickel": 15519, - "speculated": 15520, - "lowell": 15521, - "cyrillic": 15522, - "communism": 15523, - "fundraising": 15524, - "resembling": 15525, - "colonists": 15526, - "mutant": 15527, - "freddie": 15528, - "usc": 15529, - "##mos": 15530, - "gratitude": 15531, - "##run": 15532, - "mural": 15533, - "##lous": 15534, - "chemist": 15535, - "wi": 15536, - "reminds": 15537, - "28th": 15538, - "steals": 15539, - "tess": 15540, - "pietro": 15541, - "##ingen": 15542, - "promoter": 15543, - "ri": 15544, - "microphone": 15545, - "honoured": 15546, - "rai": 15547, - "sant": 15548, - "##qui": 15549, - "feather": 15550, - "##nson": 15551, - "burlington": 15552, - "kurdish": 15553, - "terrorists": 15554, - "deborah": 15555, - "sickness": 15556, - "##wed": 15557, - "##eet": 15558, - "hazard": 15559, - "irritated": 15560, - "desperation": 15561, - "veil": 15562, - "clarity": 15563, - "##rik": 15564, - "jewels": 15565, - "xv": 15566, - "##gged": 15567, - "##ows": 15568, - "##cup": 15569, - "berkshire": 15570, - "unfair": 15571, - "mysteries": 15572, - "orchid": 15573, - "winced": 15574, - "exhaustion": 15575, - "renovations": 15576, - "stranded": 15577, - "obe": 15578, - "infinity": 15579, - "##nies": 15580, - "adapt": 15581, - "redevelopment": 15582, - "thanked": 15583, - "registry": 15584, - "olga": 15585, - "domingo": 15586, - "noir": 15587, - "tudor": 15588, - "ole": 15589, - "##atus": 15590, - "commenting": 15591, - "behaviors": 15592, - "##ais": 15593, - "crisp": 15594, - "pauline": 15595, - "probable": 15596, - "stirling": 15597, - "wigan": 15598, - "##bian": 15599, - "paralympics": 15600, - "panting": 15601, - "surpassed": 15602, - "##rew": 15603, - "luca": 15604, - "barred": 15605, - "pony": 15606, - "famed": 15607, - "##sters": 15608, - "cassandra": 15609, - "waiter": 15610, - "carolyn": 15611, - "exported": 15612, - "##orted": 15613, - "andres": 15614, - "destructive": 15615, - "deeds": 15616, - "jonah": 15617, - "castles": 15618, - "vacancy": 15619, - "suv": 15620, - "##glass": 15621, - "1788": 15622, - "orchard": 15623, - "yep": 15624, - "famine": 15625, - "belarusian": 15626, - "sprang": 15627, - "##forth": 15628, - "skinny": 15629, - "##mis": 15630, - "administrators": 15631, - "rotterdam": 15632, - "zambia": 15633, - "zhao": 15634, - "boiler": 15635, - "discoveries": 15636, - "##ride": 15637, - "##physics": 15638, - "lucius": 15639, - "disappointing": 15640, - "outreach": 15641, - "spoon": 15642, - "##frame": 15643, - "qualifications": 15644, - "unanimously": 15645, - "enjoys": 15646, - "regency": 15647, - "##iidae": 15648, - "stade": 15649, - "realism": 15650, - "veterinary": 15651, - "rodgers": 15652, - "dump": 15653, - "alain": 15654, - "chestnut": 15655, - "castile": 15656, - "censorship": 15657, - "rumble": 15658, - "gibbs": 15659, - "##itor": 15660, - "communion": 15661, - "reggae": 15662, - "inactivated": 15663, - "logs": 15664, - "loads": 15665, - "##houses": 15666, - "homosexual": 15667, - "##iano": 15668, - "ale": 15669, - "informs": 15670, - "##cas": 15671, - "phrases": 15672, - "plaster": 15673, - "linebacker": 15674, - "ambrose": 15675, - "kaiser": 15676, - "fascinated": 15677, - "850": 15678, - "limerick": 15679, - "recruitment": 15680, - "forge": 15681, - "mastered": 15682, - "##nding": 15683, - "leinster": 15684, - "rooted": 15685, - "threaten": 15686, - "##strom": 15687, - "borneo": 15688, - "##hes": 15689, - "suggestions": 15690, - "scholarships": 15691, - "propeller": 15692, - "documentaries": 15693, - "patronage": 15694, - "coats": 15695, - "constructing": 15696, - "invest": 15697, - "neurons": 15698, - "comet": 15699, - "entirety": 15700, - "shouts": 15701, - "identities": 15702, - "annoying": 15703, - "unchanged": 15704, - "wary": 15705, - "##antly": 15706, - "##ogy": 15707, - "neat": 15708, - "oversight": 15709, - "##kos": 15710, - "phillies": 15711, - "replay": 15712, - "constance": 15713, - "##kka": 15714, - "incarnation": 15715, - "humble": 15716, - "skies": 15717, - "minus": 15718, - "##acy": 15719, - "smithsonian": 15720, - "##chel": 15721, - "guerrilla": 15722, - "jar": 15723, - "cadets": 15724, - "##plate": 15725, - "surplus": 15726, - "audit": 15727, - "##aru": 15728, - "cracking": 15729, - "joanna": 15730, - "louisa": 15731, - "pacing": 15732, - "##lights": 15733, - "intentionally": 15734, - "##iri": 15735, - "diner": 15736, - "nwa": 15737, - "imprint": 15738, - "australians": 15739, - "tong": 15740, - "unprecedented": 15741, - "bunker": 15742, - "naive": 15743, - "specialists": 15744, - "ark": 15745, - "nichols": 15746, - "railing": 15747, - "leaked": 15748, - "pedal": 15749, - "##uka": 15750, - "shrub": 15751, - "longing": 15752, - "roofs": 15753, - "v8": 15754, - "captains": 15755, - "neural": 15756, - "tuned": 15757, - "##ntal": 15758, - "##jet": 15759, - "emission": 15760, - "medina": 15761, - "frantic": 15762, - "codex": 15763, - "definitive": 15764, - "sid": 15765, - "abolition": 15766, - "intensified": 15767, - "stocks": 15768, - "enrique": 15769, - "sustain": 15770, - "genoa": 15771, - "oxide": 15772, - "##written": 15773, - "clues": 15774, - "cha": 15775, - "##gers": 15776, - "tributaries": 15777, - "fragment": 15778, - "venom": 15779, - "##rity": 15780, - "##ente": 15781, - "##sca": 15782, - "muffled": 15783, - "vain": 15784, - "sire": 15785, - "laos": 15786, - "##ingly": 15787, - "##hana": 15788, - "hastily": 15789, - "snapping": 15790, - "surfaced": 15791, - "sentiment": 15792, - "motive": 15793, - "##oft": 15794, - "contests": 15795, - "approximate": 15796, - "mesa": 15797, - "luckily": 15798, - "dinosaur": 15799, - "exchanges": 15800, - "propelled": 15801, - "accord": 15802, - "bourne": 15803, - "relieve": 15804, - "tow": 15805, - "masks": 15806, - "offended": 15807, - "##ues": 15808, - "cynthia": 15809, - "##mmer": 15810, - "rains": 15811, - "bartender": 15812, - "zinc": 15813, - "reviewers": 15814, - "lois": 15815, - "##sai": 15816, - "legged": 15817, - "arrogant": 15818, - "rafe": 15819, - "rosie": 15820, - "comprise": 15821, - "handicap": 15822, - "blockade": 15823, - "inlet": 15824, - "lagoon": 15825, - "copied": 15826, - "drilling": 15827, - "shelley": 15828, - "petals": 15829, - "##inian": 15830, - "mandarin": 15831, - "obsolete": 15832, - "##inated": 15833, - "onward": 15834, - "arguably": 15835, - "productivity": 15836, - "cindy": 15837, - "praising": 15838, - "seldom": 15839, - "busch": 15840, - "discusses": 15841, - "raleigh": 15842, - "shortage": 15843, - "ranged": 15844, - "stanton": 15845, - "encouragement": 15846, - "firstly": 15847, - "conceded": 15848, - "overs": 15849, - "temporal": 15850, - "##uke": 15851, - "cbe": 15852, - "##bos": 15853, - "woo": 15854, - "certainty": 15855, - "pumps": 15856, - "##pton": 15857, - "stalked": 15858, - "##uli": 15859, - "lizzie": 15860, - "periodic": 15861, - "thieves": 15862, - "weaker": 15863, - "##night": 15864, - "gases": 15865, - "shoving": 15866, - "chooses": 15867, - "wc": 15868, - "##chemical": 15869, - "prompting": 15870, - "weights": 15871, - "##kill": 15872, - "robust": 15873, - "flanked": 15874, - "sticky": 15875, - "hu": 15876, - "tuberculosis": 15877, - "##eb": 15878, - "##eal": 15879, - "christchurch": 15880, - "resembled": 15881, - "wallet": 15882, - "reese": 15883, - "inappropriate": 15884, - "pictured": 15885, - "distract": 15886, - "fixing": 15887, - "fiddle": 15888, - "giggled": 15889, - "burger": 15890, - "heirs": 15891, - "hairy": 15892, - "mechanic": 15893, - "torque": 15894, - "apache": 15895, - "obsessed": 15896, - "chiefly": 15897, - "cheng": 15898, - "logging": 15899, - "##tag": 15900, - "extracted": 15901, - "meaningful": 15902, - "numb": 15903, - "##vsky": 15904, - "gloucestershire": 15905, - "reminding": 15906, - "##bay": 15907, - "unite": 15908, - "##lit": 15909, - "breeds": 15910, - "diminished": 15911, - "clown": 15912, - "glove": 15913, - "1860s": 15914, - "##ن": 15915, - "##ug": 15916, - "archibald": 15917, - "focal": 15918, - "freelance": 15919, - "sliced": 15920, - "depiction": 15921, - "##yk": 15922, - "organism": 15923, - "switches": 15924, - "sights": 15925, - "stray": 15926, - "crawling": 15927, - "##ril": 15928, - "lever": 15929, - "leningrad": 15930, - "interpretations": 15931, - "loops": 15932, - "anytime": 15933, - "reel": 15934, - "alicia": 15935, - "delighted": 15936, - "##ech": 15937, - "inhaled": 15938, - "xiv": 15939, - "suitcase": 15940, - "bernie": 15941, - "vega": 15942, - "licenses": 15943, - "northampton": 15944, - "exclusion": 15945, - "induction": 15946, - "monasteries": 15947, - "racecourse": 15948, - "homosexuality": 15949, - "##right": 15950, - "##sfield": 15951, - "##rky": 15952, - "dimitri": 15953, - "michele": 15954, - "alternatives": 15955, - "ions": 15956, - "commentators": 15957, - "genuinely": 15958, - "objected": 15959, - "pork": 15960, - "hospitality": 15961, - "fencing": 15962, - "stephan": 15963, - "warships": 15964, - "peripheral": 15965, - "wit": 15966, - "drunken": 15967, - "wrinkled": 15968, - "quentin": 15969, - "spends": 15970, - "departing": 15971, - "chung": 15972, - "numerical": 15973, - "spokesperson": 15974, - "##zone": 15975, - "johannesburg": 15976, - "caliber": 15977, - "killers": 15978, - "##udge": 15979, - "assumes": 15980, - "neatly": 15981, - "demographic": 15982, - "abigail": 15983, - "bloc": 15984, - "##vel": 15985, - "mounting": 15986, - "##lain": 15987, - "bentley": 15988, - "slightest": 15989, - "xu": 15990, - "recipients": 15991, - "##jk": 15992, - "merlin": 15993, - "##writer": 15994, - "seniors": 15995, - "prisons": 15996, - "blinking": 15997, - "hindwings": 15998, - "flickered": 15999, - "kappa": 16000, - "##hel": 16001, - "80s": 16002, - "strengthening": 16003, - "appealing": 16004, - "brewing": 16005, - "gypsy": 16006, - "mali": 16007, - "lashes": 16008, - "hulk": 16009, - "unpleasant": 16010, - "harassment": 16011, - "bio": 16012, - "treaties": 16013, - "predict": 16014, - "instrumentation": 16015, - "pulp": 16016, - "troupe": 16017, - "boiling": 16018, - "mantle": 16019, - "##ffe": 16020, - "ins": 16021, - "##vn": 16022, - "dividing": 16023, - "handles": 16024, - "verbs": 16025, - "##onal": 16026, - "coconut": 16027, - "senegal": 16028, - "340": 16029, - "thorough": 16030, - "gum": 16031, - "momentarily": 16032, - "##sto": 16033, - "cocaine": 16034, - "panicked": 16035, - "destined": 16036, - "##turing": 16037, - "teatro": 16038, - "denying": 16039, - "weary": 16040, - "captained": 16041, - "mans": 16042, - "##hawks": 16043, - "##code": 16044, - "wakefield": 16045, - "bollywood": 16046, - "thankfully": 16047, - "##16": 16048, - "cyril": 16049, - "##wu": 16050, - "amendments": 16051, - "##bahn": 16052, - "consultation": 16053, - "stud": 16054, - "reflections": 16055, - "kindness": 16056, - "1787": 16057, - "internally": 16058, - "##ovo": 16059, - "tex": 16060, - "mosaic": 16061, - "distribute": 16062, - "paddy": 16063, - "seeming": 16064, - "143": 16065, - "##hic": 16066, - "piers": 16067, - "##15": 16068, - "##mura": 16069, - "##verse": 16070, - "popularly": 16071, - "winger": 16072, - "kang": 16073, - "sentinel": 16074, - "mccoy": 16075, - "##anza": 16076, - "covenant": 16077, - "##bag": 16078, - "verge": 16079, - "fireworks": 16080, - "suppress": 16081, - "thrilled": 16082, - "dominate": 16083, - "##jar": 16084, - "swansea": 16085, - "##60": 16086, - "142": 16087, - "reconciliation": 16088, - "##ndi": 16089, - "stiffened": 16090, - "cue": 16091, - "dorian": 16092, - "##uf": 16093, - "damascus": 16094, - "amor": 16095, - "ida": 16096, - "foremost": 16097, - "##aga": 16098, - "porsche": 16099, - "unseen": 16100, - "dir": 16101, - "##had": 16102, - "##azi": 16103, - "stony": 16104, - "lexi": 16105, - "melodies": 16106, - "##nko": 16107, - "angular": 16108, - "integer": 16109, - "podcast": 16110, - "ants": 16111, - "inherent": 16112, - "jaws": 16113, - "justify": 16114, - "persona": 16115, - "##olved": 16116, - "josephine": 16117, - "##nr": 16118, - "##ressed": 16119, - "customary": 16120, - "flashes": 16121, - "gala": 16122, - "cyrus": 16123, - "glaring": 16124, - "backyard": 16125, - "ariel": 16126, - "physiology": 16127, - "greenland": 16128, - "html": 16129, - "stir": 16130, - "avon": 16131, - "atletico": 16132, - "finch": 16133, - "methodology": 16134, - "ked": 16135, - "##lent": 16136, - "mas": 16137, - "catholicism": 16138, - "townsend": 16139, - "branding": 16140, - "quincy": 16141, - "fits": 16142, - "containers": 16143, - "1777": 16144, - "ashore": 16145, - "aragon": 16146, - "##19": 16147, - "forearm": 16148, - "poisoning": 16149, - "##sd": 16150, - "adopting": 16151, - "conquer": 16152, - "grinding": 16153, - "amnesty": 16154, - "keller": 16155, - "finances": 16156, - "evaluate": 16157, - "forged": 16158, - "lankan": 16159, - "instincts": 16160, - "##uto": 16161, - "guam": 16162, - "bosnian": 16163, - "photographed": 16164, - "workplace": 16165, - "desirable": 16166, - "protector": 16167, - "##dog": 16168, - "allocation": 16169, - "intently": 16170, - "encourages": 16171, - "willy": 16172, - "##sten": 16173, - "bodyguard": 16174, - "electro": 16175, - "brighter": 16176, - "##ν": 16177, - "bihar": 16178, - "##chev": 16179, - "lasts": 16180, - "opener": 16181, - "amphibious": 16182, - "sal": 16183, - "verde": 16184, - "arte": 16185, - "##cope": 16186, - "captivity": 16187, - "vocabulary": 16188, - "yields": 16189, - "##tted": 16190, - "agreeing": 16191, - "desmond": 16192, - "pioneered": 16193, - "##chus": 16194, - "strap": 16195, - "campaigned": 16196, - "railroads": 16197, - "##ович": 16198, - "emblem": 16199, - "##dre": 16200, - "stormed": 16201, - "501": 16202, - "##ulous": 16203, - "marijuana": 16204, - "northumberland": 16205, - "##gn": 16206, - "##nath": 16207, - "bowen": 16208, - "landmarks": 16209, - "beaumont": 16210, - "##qua": 16211, - "danube": 16212, - "##bler": 16213, - "attorneys": 16214, - "th": 16215, - "ge": 16216, - "flyers": 16217, - "critique": 16218, - "villains": 16219, - "cass": 16220, - "mutation": 16221, - "acc": 16222, - "##0s": 16223, - "colombo": 16224, - "mckay": 16225, - "motif": 16226, - "sampling": 16227, - "concluding": 16228, - "syndicate": 16229, - "##rell": 16230, - "neon": 16231, - "stables": 16232, - "ds": 16233, - "warnings": 16234, - "clint": 16235, - "mourning": 16236, - "wilkinson": 16237, - "##tated": 16238, - "merrill": 16239, - "leopard": 16240, - "evenings": 16241, - "exhaled": 16242, - "emil": 16243, - "sonia": 16244, - "ezra": 16245, - "discrete": 16246, - "stove": 16247, - "farrell": 16248, - "fifteenth": 16249, - "prescribed": 16250, - "superhero": 16251, - "##rier": 16252, - "worms": 16253, - "helm": 16254, - "wren": 16255, - "##duction": 16256, - "##hc": 16257, - "expo": 16258, - "##rator": 16259, - "hq": 16260, - "unfamiliar": 16261, - "antony": 16262, - "prevents": 16263, - "acceleration": 16264, - "fiercely": 16265, - "mari": 16266, - "painfully": 16267, - "calculations": 16268, - "cheaper": 16269, - "ign": 16270, - "clifton": 16271, - "irvine": 16272, - "davenport": 16273, - "mozambique": 16274, - "##np": 16275, - "pierced": 16276, - "##evich": 16277, - "wonders": 16278, - "##wig": 16279, - "##cate": 16280, - "##iling": 16281, - "crusade": 16282, - "ware": 16283, - "##uel": 16284, - "enzymes": 16285, - "reasonably": 16286, - "mls": 16287, - "##coe": 16288, - "mater": 16289, - "ambition": 16290, - "bunny": 16291, - "eliot": 16292, - "kernel": 16293, - "##fin": 16294, - "asphalt": 16295, - "headmaster": 16296, - "torah": 16297, - "aden": 16298, - "lush": 16299, - "pins": 16300, - "waived": 16301, - "##care": 16302, - "##yas": 16303, - "joao": 16304, - "substrate": 16305, - "enforce": 16306, - "##grad": 16307, - "##ules": 16308, - "alvarez": 16309, - "selections": 16310, - "epidemic": 16311, - "tempted": 16312, - "##bit": 16313, - "bremen": 16314, - "translates": 16315, - "ensured": 16316, - "waterfront": 16317, - "29th": 16318, - "forrest": 16319, - "manny": 16320, - "malone": 16321, - "kramer": 16322, - "reigning": 16323, - "cookies": 16324, - "simpler": 16325, - "absorption": 16326, - "205": 16327, - "engraved": 16328, - "##ffy": 16329, - "evaluated": 16330, - "1778": 16331, - "haze": 16332, - "146": 16333, - "comforting": 16334, - "crossover": 16335, - "##abe": 16336, - "thorn": 16337, - "##rift": 16338, - "##imo": 16339, - "##pop": 16340, - "suppression": 16341, - "fatigue": 16342, - "cutter": 16343, - "##tr": 16344, - "201": 16345, - "wurttemberg": 16346, - "##orf": 16347, - "enforced": 16348, - "hovering": 16349, - "proprietary": 16350, - "gb": 16351, - "samurai": 16352, - "syllable": 16353, - "ascent": 16354, - "lacey": 16355, - "tick": 16356, - "lars": 16357, - "tractor": 16358, - "merchandise": 16359, - "rep": 16360, - "bouncing": 16361, - "defendants": 16362, - "##yre": 16363, - "huntington": 16364, - "##ground": 16365, - "##oko": 16366, - "standardized": 16367, - "##hor": 16368, - "##hima": 16369, - "assassinated": 16370, - "nu": 16371, - "predecessors": 16372, - "rainy": 16373, - "liar": 16374, - "assurance": 16375, - "lyrical": 16376, - "##uga": 16377, - "secondly": 16378, - "flattened": 16379, - "ios": 16380, - "parameter": 16381, - "undercover": 16382, - "##mity": 16383, - "bordeaux": 16384, - "punish": 16385, - "ridges": 16386, - "markers": 16387, - "exodus": 16388, - "inactive": 16389, - "hesitate": 16390, - "debbie": 16391, - "nyc": 16392, - "pledge": 16393, - "savoy": 16394, - "nagar": 16395, - "offset": 16396, - "organist": 16397, - "##tium": 16398, - "hesse": 16399, - "marin": 16400, - "converting": 16401, - "##iver": 16402, - "diagram": 16403, - "propulsion": 16404, - "pu": 16405, - "validity": 16406, - "reverted": 16407, - "supportive": 16408, - "##dc": 16409, - "ministries": 16410, - "clans": 16411, - "responds": 16412, - "proclamation": 16413, - "##inae": 16414, - "##Ćø": 16415, - "##rea": 16416, - "ein": 16417, - "pleading": 16418, - "patriot": 16419, - "sf": 16420, - "birch": 16421, - "islanders": 16422, - "strauss": 16423, - "hates": 16424, - "##dh": 16425, - "brandenburg": 16426, - "concession": 16427, - "rd": 16428, - "##ob": 16429, - "1900s": 16430, - "killings": 16431, - "textbook": 16432, - "antiquity": 16433, - "cinematography": 16434, - "wharf": 16435, - "embarrassing": 16436, - "setup": 16437, - "creed": 16438, - "farmland": 16439, - "inequality": 16440, - "centred": 16441, - "signatures": 16442, - "fallon": 16443, - "370": 16444, - "##ingham": 16445, - "##uts": 16446, - "ceylon": 16447, - "gazing": 16448, - "directive": 16449, - "laurie": 16450, - "##tern": 16451, - "globally": 16452, - "##uated": 16453, - "##dent": 16454, - "allah": 16455, - "excavation": 16456, - "threads": 16457, - "##cross": 16458, - "148": 16459, - "frantically": 16460, - "icc": 16461, - "utilize": 16462, - "determines": 16463, - "respiratory": 16464, - "thoughtful": 16465, - "receptions": 16466, - "##dicate": 16467, - "merging": 16468, - "chandra": 16469, - "seine": 16470, - "147": 16471, - "builders": 16472, - "builds": 16473, - "diagnostic": 16474, - "dev": 16475, - "visibility": 16476, - "goddamn": 16477, - "analyses": 16478, - "dhaka": 16479, - "cho": 16480, - "proves": 16481, - "chancel": 16482, - "concurrent": 16483, - "curiously": 16484, - "canadians": 16485, - "pumped": 16486, - "restoring": 16487, - "1850s": 16488, - "turtles": 16489, - "jaguar": 16490, - "sinister": 16491, - "spinal": 16492, - "traction": 16493, - "declan": 16494, - "vows": 16495, - "1784": 16496, - "glowed": 16497, - "capitalism": 16498, - "swirling": 16499, - "install": 16500, - "universidad": 16501, - "##lder": 16502, - "##oat": 16503, - "soloist": 16504, - "##genic": 16505, - "##oor": 16506, - "coincidence": 16507, - "beginnings": 16508, - "nissan": 16509, - "dip": 16510, - "resorts": 16511, - "caucasus": 16512, - "combustion": 16513, - "infectious": 16514, - "##eno": 16515, - "pigeon": 16516, - "serpent": 16517, - "##itating": 16518, - "conclude": 16519, - "masked": 16520, - "salad": 16521, - "jew": 16522, - "##gr": 16523, - "surreal": 16524, - "toni": 16525, - "##wc": 16526, - "harmonica": 16527, - "151": 16528, - "##gins": 16529, - "##etic": 16530, - "##coat": 16531, - "fishermen": 16532, - "intending": 16533, - "bravery": 16534, - "##wave": 16535, - "klaus": 16536, - "titan": 16537, - "wembley": 16538, - "taiwanese": 16539, - "ransom": 16540, - "40th": 16541, - "incorrect": 16542, - "hussein": 16543, - "eyelids": 16544, - "jp": 16545, - "cooke": 16546, - "dramas": 16547, - "utilities": 16548, - "##etta": 16549, - "##print": 16550, - "eisenhower": 16551, - "principally": 16552, - "granada": 16553, - "lana": 16554, - "##rak": 16555, - "openings": 16556, - "concord": 16557, - "##bl": 16558, - "bethany": 16559, - "connie": 16560, - "morality": 16561, - "sega": 16562, - "##mons": 16563, - "##nard": 16564, - "earnings": 16565, - "##kara": 16566, - "##cine": 16567, - "wii": 16568, - "communes": 16569, - "##rel": 16570, - "coma": 16571, - "composing": 16572, - "softened": 16573, - "severed": 16574, - "grapes": 16575, - "##17": 16576, - "nguyen": 16577, - "analyzed": 16578, - "warlord": 16579, - "hubbard": 16580, - "heavenly": 16581, - "behave": 16582, - "slovenian": 16583, - "##hit": 16584, - "##ony": 16585, - "hailed": 16586, - "filmmakers": 16587, - "trance": 16588, - "caldwell": 16589, - "skye": 16590, - "unrest": 16591, - "coward": 16592, - "likelihood": 16593, - "##aging": 16594, - "bern": 16595, - "sci": 16596, - "taliban": 16597, - "honolulu": 16598, - "propose": 16599, - "##wang": 16600, - "1700": 16601, - "browser": 16602, - "imagining": 16603, - "cobra": 16604, - "contributes": 16605, - "dukes": 16606, - "instinctively": 16607, - "conan": 16608, - "violinist": 16609, - "##ores": 16610, - "accessories": 16611, - "gradual": 16612, - "##amp": 16613, - "quotes": 16614, - "sioux": 16615, - "##dating": 16616, - "undertake": 16617, - "intercepted": 16618, - "sparkling": 16619, - "compressed": 16620, - "139": 16621, - "fungus": 16622, - "tombs": 16623, - "haley": 16624, - "imposing": 16625, - "rests": 16626, - "degradation": 16627, - "lincolnshire": 16628, - "retailers": 16629, - "wetlands": 16630, - "tulsa": 16631, - "distributor": 16632, - "dungeon": 16633, - "nun": 16634, - "greenhouse": 16635, - "convey": 16636, - "atlantis": 16637, - "aft": 16638, - "exits": 16639, - "oman": 16640, - "dresser": 16641, - "lyons": 16642, - "##sti": 16643, - "joking": 16644, - "eddy": 16645, - "judgement": 16646, - "omitted": 16647, - "digits": 16648, - "##cts": 16649, - "##game": 16650, - "juniors": 16651, - "##rae": 16652, - "cents": 16653, - "stricken": 16654, - "une": 16655, - "##ngo": 16656, - "wizards": 16657, - "weir": 16658, - "breton": 16659, - "nan": 16660, - "technician": 16661, - "fibers": 16662, - "liking": 16663, - "royalty": 16664, - "##cca": 16665, - "154": 16666, - "persia": 16667, - "terribly": 16668, - "magician": 16669, - "##rable": 16670, - "##unt": 16671, - "vance": 16672, - "cafeteria": 16673, - "booker": 16674, - "camille": 16675, - "warmer": 16676, - "##static": 16677, - "consume": 16678, - "cavern": 16679, - "gaps": 16680, - "compass": 16681, - "contemporaries": 16682, - "foyer": 16683, - "soothing": 16684, - "graveyard": 16685, - "maj": 16686, - "plunged": 16687, - "blush": 16688, - "##wear": 16689, - "cascade": 16690, - "demonstrates": 16691, - "ordinance": 16692, - "##nov": 16693, - "boyle": 16694, - "##lana": 16695, - "rockefeller": 16696, - "shaken": 16697, - "banjo": 16698, - "izzy": 16699, - "##ense": 16700, - "breathless": 16701, - "vines": 16702, - "##32": 16703, - "##eman": 16704, - "alterations": 16705, - "chromosome": 16706, - "dwellings": 16707, - "feudal": 16708, - "mole": 16709, - "153": 16710, - "catalonia": 16711, - "relics": 16712, - "tenant": 16713, - "mandated": 16714, - "##fm": 16715, - "fridge": 16716, - "hats": 16717, - "honesty": 16718, - "patented": 16719, - "raul": 16720, - "heap": 16721, - "cruisers": 16722, - "accusing": 16723, - "enlightenment": 16724, - "infants": 16725, - "wherein": 16726, - "chatham": 16727, - "contractors": 16728, - "zen": 16729, - "affinity": 16730, - "hc": 16731, - "osborne": 16732, - "piston": 16733, - "156": 16734, - "traps": 16735, - "maturity": 16736, - "##rana": 16737, - "lagos": 16738, - "##zal": 16739, - "peering": 16740, - "##nay": 16741, - "attendant": 16742, - "dealers": 16743, - "protocols": 16744, - "subset": 16745, - "prospects": 16746, - "biographical": 16747, - "##cre": 16748, - "artery": 16749, - "##zers": 16750, - "insignia": 16751, - "nuns": 16752, - "endured": 16753, - "##eration": 16754, - "recommend": 16755, - "schwartz": 16756, - "serbs": 16757, - "berger": 16758, - "cromwell": 16759, - "crossroads": 16760, - "##ctor": 16761, - "enduring": 16762, - "clasped": 16763, - "grounded": 16764, - "##bine": 16765, - "marseille": 16766, - "twitched": 16767, - "abel": 16768, - "choke": 16769, - "https": 16770, - "catalyst": 16771, - "moldova": 16772, - "italians": 16773, - "##tist": 16774, - "disastrous": 16775, - "wee": 16776, - "##oured": 16777, - "##nti": 16778, - "wwf": 16779, - "nope": 16780, - "##piration": 16781, - "##asa": 16782, - "expresses": 16783, - "thumbs": 16784, - "167": 16785, - "##nza": 16786, - "coca": 16787, - "1781": 16788, - "cheating": 16789, - "##ption": 16790, - "skipped": 16791, - "sensory": 16792, - "heidelberg": 16793, - "spies": 16794, - "satan": 16795, - "dangers": 16796, - "semifinal": 16797, - "202": 16798, - "bohemia": 16799, - "whitish": 16800, - "confusing": 16801, - "shipbuilding": 16802, - "relies": 16803, - "surgeons": 16804, - "landings": 16805, - "ravi": 16806, - "baku": 16807, - "moor": 16808, - "suffix": 16809, - "alejandro": 16810, - "##yana": 16811, - "litre": 16812, - "upheld": 16813, - "##unk": 16814, - "rajasthan": 16815, - "##rek": 16816, - "coaster": 16817, - "insists": 16818, - "posture": 16819, - "scenarios": 16820, - "etienne": 16821, - "favoured": 16822, - "appoint": 16823, - "transgender": 16824, - "elephants": 16825, - "poked": 16826, - "greenwood": 16827, - "defences": 16828, - "fulfilled": 16829, - "militant": 16830, - "somali": 16831, - "1758": 16832, - "chalk": 16833, - "potent": 16834, - "##ucci": 16835, - "migrants": 16836, - "wink": 16837, - "assistants": 16838, - "nos": 16839, - "restriction": 16840, - "activism": 16841, - "niger": 16842, - "##ario": 16843, - "colon": 16844, - "shaun": 16845, - "##sat": 16846, - "daphne": 16847, - "##erated": 16848, - "swam": 16849, - "congregations": 16850, - "reprise": 16851, - "considerations": 16852, - "magnet": 16853, - "playable": 16854, - "xvi": 16855, - "##р": 16856, - "overthrow": 16857, - "tobias": 16858, - "knob": 16859, - "chavez": 16860, - "coding": 16861, - "##mers": 16862, - "propped": 16863, - "katrina": 16864, - "orient": 16865, - "newcomer": 16866, - "##suke": 16867, - "temperate": 16868, - "##pool": 16869, - "farmhouse": 16870, - "interrogation": 16871, - "##vd": 16872, - "committing": 16873, - "##vert": 16874, - "forthcoming": 16875, - "strawberry": 16876, - "joaquin": 16877, - "macau": 16878, - "ponds": 16879, - "shocking": 16880, - "siberia": 16881, - "##cellular": 16882, - "chant": 16883, - "contributors": 16884, - "##nant": 16885, - "##ologists": 16886, - "sped": 16887, - "absorb": 16888, - "hail": 16889, - "1782": 16890, - "spared": 16891, - "##hore": 16892, - "barbados": 16893, - "karate": 16894, - "opus": 16895, - "originates": 16896, - "saul": 16897, - "##xie": 16898, - "evergreen": 16899, - "leaped": 16900, - "##rock": 16901, - "correlation": 16902, - "exaggerated": 16903, - "weekday": 16904, - "unification": 16905, - "bump": 16906, - "tracing": 16907, - "brig": 16908, - "afb": 16909, - "pathways": 16910, - "utilizing": 16911, - "##ners": 16912, - "mod": 16913, - "mb": 16914, - "disturbance": 16915, - "kneeling": 16916, - "##stad": 16917, - "##guchi": 16918, - "100th": 16919, - "pune": 16920, - "##thy": 16921, - "decreasing": 16922, - "168": 16923, - "manipulation": 16924, - "miriam": 16925, - "academia": 16926, - "ecosystem": 16927, - "occupational": 16928, - "rbi": 16929, - "##lem": 16930, - "rift": 16931, - "##14": 16932, - "rotary": 16933, - "stacked": 16934, - "incorporation": 16935, - "awakening": 16936, - "generators": 16937, - "guerrero": 16938, - "racist": 16939, - "##omy": 16940, - "cyber": 16941, - "derivatives": 16942, - "culminated": 16943, - "allie": 16944, - "annals": 16945, - "panzer": 16946, - "sainte": 16947, - "wikipedia": 16948, - "pops": 16949, - "zu": 16950, - "austro": 16951, - "##vate": 16952, - "algerian": 16953, - "politely": 16954, - "nicholson": 16955, - "mornings": 16956, - "educate": 16957, - "tastes": 16958, - "thrill": 16959, - "dartmouth": 16960, - "##gating": 16961, - "db": 16962, - "##jee": 16963, - "regan": 16964, - "differing": 16965, - "concentrating": 16966, - "choreography": 16967, - "divinity": 16968, - "##media": 16969, - "pledged": 16970, - "alexandre": 16971, - "routing": 16972, - "gregor": 16973, - "madeline": 16974, - "##idal": 16975, - "apocalypse": 16976, - "##hora": 16977, - "gunfire": 16978, - "culminating": 16979, - "elves": 16980, - "fined": 16981, - "liang": 16982, - "lam": 16983, - "programmed": 16984, - "tar": 16985, - "guessing": 16986, - "transparency": 16987, - "gabrielle": 16988, - "##gna": 16989, - "cancellation": 16990, - "flexibility": 16991, - "##lining": 16992, - "accession": 16993, - "shea": 16994, - "stronghold": 16995, - "nets": 16996, - "specializes": 16997, - "##rgan": 16998, - "abused": 16999, - "hasan": 17000, - "sgt": 17001, - "ling": 17002, - "exceeding": 17003, - "##ā‚„": 17004, - "admiration": 17005, - "supermarket": 17006, - "##ark": 17007, - "photographers": 17008, - "specialised": 17009, - "tilt": 17010, - "resonance": 17011, - "hmm": 17012, - "perfume": 17013, - "380": 17014, - "sami": 17015, - "threatens": 17016, - "garland": 17017, - "botany": 17018, - "guarding": 17019, - "boiled": 17020, - "greet": 17021, - "puppy": 17022, - "russo": 17023, - "supplier": 17024, - "wilmington": 17025, - "vibrant": 17026, - "vijay": 17027, - "##bius": 17028, - "paralympic": 17029, - "grumbled": 17030, - "paige": 17031, - "faa": 17032, - "licking": 17033, - "margins": 17034, - "hurricanes": 17035, - "##gong": 17036, - "fest": 17037, - "grenade": 17038, - "ripping": 17039, - "##uz": 17040, - "counseling": 17041, - "weigh": 17042, - "##sian": 17043, - "needles": 17044, - "wiltshire": 17045, - "edison": 17046, - "costly": 17047, - "##not": 17048, - "fulton": 17049, - "tramway": 17050, - "redesigned": 17051, - "staffordshire": 17052, - "cache": 17053, - "gasping": 17054, - "watkins": 17055, - "sleepy": 17056, - "candidacy": 17057, - "##group": 17058, - "monkeys": 17059, - "timeline": 17060, - "throbbing": 17061, - "##bid": 17062, - "##sos": 17063, - "berth": 17064, - "uzbekistan": 17065, - "vanderbilt": 17066, - "bothering": 17067, - "overturned": 17068, - "ballots": 17069, - "gem": 17070, - "##iger": 17071, - "sunglasses": 17072, - "subscribers": 17073, - "hooker": 17074, - "compelling": 17075, - "ang": 17076, - "exceptionally": 17077, - "saloon": 17078, - "stab": 17079, - "##rdi": 17080, - "carla": 17081, - "terrifying": 17082, - "rom": 17083, - "##vision": 17084, - "coil": 17085, - "##oids": 17086, - "satisfying": 17087, - "vendors": 17088, - "31st": 17089, - "mackay": 17090, - "deities": 17091, - "overlooked": 17092, - "ambient": 17093, - "bahamas": 17094, - "felipe": 17095, - "olympia": 17096, - "whirled": 17097, - "botanist": 17098, - "advertised": 17099, - "tugging": 17100, - "##dden": 17101, - "disciples": 17102, - "morales": 17103, - "unionist": 17104, - "rites": 17105, - "foley": 17106, - "morse": 17107, - "motives": 17108, - "creepy": 17109, - "##ā‚€": 17110, - "soo": 17111, - "##sz": 17112, - "bargain": 17113, - "highness": 17114, - "frightening": 17115, - "turnpike": 17116, - "tory": 17117, - "reorganization": 17118, - "##cer": 17119, - "depict": 17120, - "biographer": 17121, - "##walk": 17122, - "unopposed": 17123, - "manifesto": 17124, - "##gles": 17125, - "institut": 17126, - "emile": 17127, - "accidental": 17128, - "kapoor": 17129, - "##dam": 17130, - "kilkenny": 17131, - "cortex": 17132, - "lively": 17133, - "##13": 17134, - "romanesque": 17135, - "jain": 17136, - "shan": 17137, - "cannons": 17138, - "##ood": 17139, - "##ske": 17140, - "petrol": 17141, - "echoing": 17142, - "amalgamated": 17143, - "disappears": 17144, - "cautious": 17145, - "proposes": 17146, - "sanctions": 17147, - "trenton": 17148, - "##Ų±": 17149, - "flotilla": 17150, - "aus": 17151, - "contempt": 17152, - "tor": 17153, - "canary": 17154, - "cote": 17155, - "theirs": 17156, - "##hun": 17157, - "conceptual": 17158, - "deleted": 17159, - "fascinating": 17160, - "paso": 17161, - "blazing": 17162, - "elf": 17163, - "honourable": 17164, - "hutchinson": 17165, - "##eiro": 17166, - "##outh": 17167, - "##zin": 17168, - "surveyor": 17169, - "tee": 17170, - "amidst": 17171, - "wooded": 17172, - "reissue": 17173, - "intro": 17174, - "##ono": 17175, - "cobb": 17176, - "shelters": 17177, - "newsletter": 17178, - "hanson": 17179, - "brace": 17180, - "encoding": 17181, - "confiscated": 17182, - "dem": 17183, - "caravan": 17184, - "marino": 17185, - "scroll": 17186, - "melodic": 17187, - "cows": 17188, - "imam": 17189, - "##adi": 17190, - "##aneous": 17191, - "northward": 17192, - "searches": 17193, - "biodiversity": 17194, - "cora": 17195, - "310": 17196, - "roaring": 17197, - "##bers": 17198, - "connell": 17199, - "theologian": 17200, - "halo": 17201, - "compose": 17202, - "pathetic": 17203, - "unmarried": 17204, - "dynamo": 17205, - "##oot": 17206, - "az": 17207, - "calculation": 17208, - "toulouse": 17209, - "deserves": 17210, - "humour": 17211, - "nr": 17212, - "forgiveness": 17213, - "tam": 17214, - "undergone": 17215, - "martyr": 17216, - "pamela": 17217, - "myths": 17218, - "whore": 17219, - "counselor": 17220, - "hicks": 17221, - "290": 17222, - "heavens": 17223, - "battleship": 17224, - "electromagnetic": 17225, - "##bbs": 17226, - "stellar": 17227, - "establishments": 17228, - "presley": 17229, - "hopped": 17230, - "##chin": 17231, - "temptation": 17232, - "90s": 17233, - "wills": 17234, - "nas": 17235, - "##yuan": 17236, - "nhs": 17237, - "##nya": 17238, - "seminars": 17239, - "##yev": 17240, - "adaptations": 17241, - "gong": 17242, - "asher": 17243, - "lex": 17244, - "indicator": 17245, - "sikh": 17246, - "tobago": 17247, - "cites": 17248, - "goin": 17249, - "##yte": 17250, - "satirical": 17251, - "##gies": 17252, - "characterised": 17253, - "correspond": 17254, - "bubbles": 17255, - "lure": 17256, - "participates": 17257, - "##vid": 17258, - "eruption": 17259, - "skate": 17260, - "therapeutic": 17261, - "1785": 17262, - "canals": 17263, - "wholesale": 17264, - "defaulted": 17265, - "sac": 17266, - "460": 17267, - "petit": 17268, - "##zzled": 17269, - "virgil": 17270, - "leak": 17271, - "ravens": 17272, - "256": 17273, - "portraying": 17274, - "##yx": 17275, - "ghetto": 17276, - "creators": 17277, - "dams": 17278, - "portray": 17279, - "vicente": 17280, - "##rington": 17281, - "fae": 17282, - "namesake": 17283, - "bounty": 17284, - "##arium": 17285, - "joachim": 17286, - "##ota": 17287, - "##iser": 17288, - "aforementioned": 17289, - "axle": 17290, - "snout": 17291, - "depended": 17292, - "dismantled": 17293, - "reuben": 17294, - "480": 17295, - "##ibly": 17296, - "gallagher": 17297, - "##lau": 17298, - "##pd": 17299, - "earnest": 17300, - "##ieu": 17301, - "##iary": 17302, - "inflicted": 17303, - "objections": 17304, - "##llar": 17305, - "asa": 17306, - "gritted": 17307, - "##athy": 17308, - "jericho": 17309, - "##sea": 17310, - "##was": 17311, - "flick": 17312, - "underside": 17313, - "ceramics": 17314, - "undead": 17315, - "substituted": 17316, - "195": 17317, - "eastward": 17318, - "undoubtedly": 17319, - "wheeled": 17320, - "chimney": 17321, - "##iche": 17322, - "guinness": 17323, - "cb": 17324, - "##ager": 17325, - "siding": 17326, - "##bell": 17327, - "traitor": 17328, - "baptiste": 17329, - "disguised": 17330, - "inauguration": 17331, - "149": 17332, - "tipperary": 17333, - "choreographer": 17334, - "perched": 17335, - "warmed": 17336, - "stationary": 17337, - "eco": 17338, - "##ike": 17339, - "##ntes": 17340, - "bacterial": 17341, - "##aurus": 17342, - "flores": 17343, - "phosphate": 17344, - "##core": 17345, - "attacker": 17346, - "invaders": 17347, - "alvin": 17348, - "intersects": 17349, - "a1": 17350, - "indirectly": 17351, - "immigrated": 17352, - "businessmen": 17353, - "cornelius": 17354, - "valves": 17355, - "narrated": 17356, - "pill": 17357, - "sober": 17358, - "ul": 17359, - "nationale": 17360, - "monastic": 17361, - "applicants": 17362, - "scenery": 17363, - "##jack": 17364, - "161": 17365, - "motifs": 17366, - "constitutes": 17367, - "cpu": 17368, - "##osh": 17369, - "jurisdictions": 17370, - "sd": 17371, - "tuning": 17372, - "irritation": 17373, - "woven": 17374, - "##uddin": 17375, - "fertility": 17376, - "gao": 17377, - "##erie": 17378, - "antagonist": 17379, - "impatient": 17380, - "glacial": 17381, - "hides": 17382, - "boarded": 17383, - "denominations": 17384, - "interception": 17385, - "##jas": 17386, - "cookie": 17387, - "nicola": 17388, - "##tee": 17389, - "algebraic": 17390, - "marquess": 17391, - "bahn": 17392, - "parole": 17393, - "buyers": 17394, - "bait": 17395, - "turbines": 17396, - "paperwork": 17397, - "bestowed": 17398, - "natasha": 17399, - "renee": 17400, - "oceans": 17401, - "purchases": 17402, - "157": 17403, - "vaccine": 17404, - "215": 17405, - "##tock": 17406, - "fixtures": 17407, - "playhouse": 17408, - "integrate": 17409, - "jai": 17410, - "oswald": 17411, - "intellectuals": 17412, - "##cky": 17413, - "booked": 17414, - "nests": 17415, - "mortimer": 17416, - "##isi": 17417, - "obsession": 17418, - "sept": 17419, - "##gler": 17420, - "##sum": 17421, - "440": 17422, - "scrutiny": 17423, - "simultaneous": 17424, - "squinted": 17425, - "##shin": 17426, - "collects": 17427, - "oven": 17428, - "shankar": 17429, - "penned": 17430, - "remarkably": 17431, - "##я": 17432, - "slips": 17433, - "luggage": 17434, - "spectral": 17435, - "1786": 17436, - "collaborations": 17437, - "louie": 17438, - "consolidation": 17439, - "##ailed": 17440, - "##ivating": 17441, - "420": 17442, - "hoover": 17443, - "blackpool": 17444, - "harness": 17445, - "ignition": 17446, - "vest": 17447, - "tails": 17448, - "belmont": 17449, - "mongol": 17450, - "skinner": 17451, - "##nae": 17452, - "visually": 17453, - "mage": 17454, - "derry": 17455, - "##tism": 17456, - "##unce": 17457, - "stevie": 17458, - "transitional": 17459, - "##rdy": 17460, - "redskins": 17461, - "drying": 17462, - "prep": 17463, - "prospective": 17464, - "##21": 17465, - "annoyance": 17466, - "oversee": 17467, - "##loaded": 17468, - "fills": 17469, - "##books": 17470, - "##iki": 17471, - "announces": 17472, - "fda": 17473, - "scowled": 17474, - "respects": 17475, - "prasad": 17476, - "mystic": 17477, - "tucson": 17478, - "##vale": 17479, - "revue": 17480, - "springer": 17481, - "bankrupt": 17482, - "1772": 17483, - "aristotle": 17484, - "salvatore": 17485, - "habsburg": 17486, - "##geny": 17487, - "dal": 17488, - "natal": 17489, - "nut": 17490, - "pod": 17491, - "chewing": 17492, - "darts": 17493, - "moroccan": 17494, - "walkover": 17495, - "rosario": 17496, - "lenin": 17497, - "punjabi": 17498, - "##ße": 17499, - "grossed": 17500, - "scattering": 17501, - "wired": 17502, - "invasive": 17503, - "hui": 17504, - "polynomial": 17505, - "corridors": 17506, - "wakes": 17507, - "gina": 17508, - "portrays": 17509, - "##cratic": 17510, - "arid": 17511, - "retreating": 17512, - "erich": 17513, - "irwin": 17514, - "sniper": 17515, - "##dha": 17516, - "linen": 17517, - "lindsey": 17518, - "maneuver": 17519, - "butch": 17520, - "shutting": 17521, - "socio": 17522, - "bounce": 17523, - "commemorative": 17524, - "postseason": 17525, - "jeremiah": 17526, - "pines": 17527, - "275": 17528, - "mystical": 17529, - "beads": 17530, - "bp": 17531, - "abbas": 17532, - "furnace": 17533, - "bidding": 17534, - "consulted": 17535, - "assaulted": 17536, - "empirical": 17537, - "rubble": 17538, - "enclosure": 17539, - "sob": 17540, - "weakly": 17541, - "cancel": 17542, - "polly": 17543, - "yielded": 17544, - "##emann": 17545, - "curly": 17546, - "prediction": 17547, - "battered": 17548, - "70s": 17549, - "vhs": 17550, - "jacqueline": 17551, - "render": 17552, - "sails": 17553, - "barked": 17554, - "detailing": 17555, - "grayson": 17556, - "riga": 17557, - "sloane": 17558, - "raging": 17559, - "##yah": 17560, - "herbs": 17561, - "bravo": 17562, - "##athlon": 17563, - "alloy": 17564, - "giggle": 17565, - "imminent": 17566, - "suffers": 17567, - "assumptions": 17568, - "waltz": 17569, - "##itate": 17570, - "accomplishments": 17571, - "##ited": 17572, - "bathing": 17573, - "remixed": 17574, - "deception": 17575, - "prefix": 17576, - "##emia": 17577, - "deepest": 17578, - "##tier": 17579, - "##eis": 17580, - "balkan": 17581, - "frogs": 17582, - "##rong": 17583, - "slab": 17584, - "##pate": 17585, - "philosophers": 17586, - "peterborough": 17587, - "grains": 17588, - "imports": 17589, - "dickinson": 17590, - "rwanda": 17591, - "##atics": 17592, - "1774": 17593, - "dirk": 17594, - "lan": 17595, - "tablets": 17596, - "##rove": 17597, - "clone": 17598, - "##rice": 17599, - "caretaker": 17600, - "hostilities": 17601, - "mclean": 17602, - "##gre": 17603, - "regimental": 17604, - "treasures": 17605, - "norms": 17606, - "impose": 17607, - "tsar": 17608, - "tango": 17609, - "diplomacy": 17610, - "variously": 17611, - "complain": 17612, - "192": 17613, - "recognise": 17614, - "arrests": 17615, - "1779": 17616, - "celestial": 17617, - "pulitzer": 17618, - "##dus": 17619, - "bing": 17620, - "libretto": 17621, - "##moor": 17622, - "adele": 17623, - "splash": 17624, - "##rite": 17625, - "expectation": 17626, - "lds": 17627, - "confronts": 17628, - "##izer": 17629, - "spontaneous": 17630, - "harmful": 17631, - "wedge": 17632, - "entrepreneurs": 17633, - "buyer": 17634, - "##ope": 17635, - "bilingual": 17636, - "translate": 17637, - "rugged": 17638, - "conner": 17639, - "circulated": 17640, - "uae": 17641, - "eaton": 17642, - "##gra": 17643, - "##zzle": 17644, - "lingered": 17645, - "lockheed": 17646, - "vishnu": 17647, - "reelection": 17648, - "alonso": 17649, - "##oom": 17650, - "joints": 17651, - "yankee": 17652, - "headline": 17653, - "cooperate": 17654, - "heinz": 17655, - "laureate": 17656, - "invading": 17657, - "##sford": 17658, - "echoes": 17659, - "scandinavian": 17660, - "##dham": 17661, - "hugging": 17662, - "vitamin": 17663, - "salute": 17664, - "micah": 17665, - "hind": 17666, - "trader": 17667, - "##sper": 17668, - "radioactive": 17669, - "##ndra": 17670, - "militants": 17671, - "poisoned": 17672, - "ratified": 17673, - "remark": 17674, - "campeonato": 17675, - "deprived": 17676, - "wander": 17677, - "prop": 17678, - "##dong": 17679, - "outlook": 17680, - "##tani": 17681, - "##rix": 17682, - "##eye": 17683, - "chiang": 17684, - "darcy": 17685, - "##oping": 17686, - "mandolin": 17687, - "spice": 17688, - "statesman": 17689, - "babylon": 17690, - "182": 17691, - "walled": 17692, - "forgetting": 17693, - "afro": 17694, - "##cap": 17695, - "158": 17696, - "giorgio": 17697, - "buffer": 17698, - "##polis": 17699, - "planetary": 17700, - "##gis": 17701, - "overlap": 17702, - "terminals": 17703, - "kinda": 17704, - "centenary": 17705, - "##bir": 17706, - "arising": 17707, - "manipulate": 17708, - "elm": 17709, - "ke": 17710, - "1770": 17711, - "ak": 17712, - "##tad": 17713, - "chrysler": 17714, - "mapped": 17715, - "moose": 17716, - "pomeranian": 17717, - "quad": 17718, - "macarthur": 17719, - "assemblies": 17720, - "shoreline": 17721, - "recalls": 17722, - "stratford": 17723, - "##rted": 17724, - "noticeable": 17725, - "##evic": 17726, - "imp": 17727, - "##rita": 17728, - "##sque": 17729, - "accustomed": 17730, - "supplying": 17731, - "tents": 17732, - "disgusted": 17733, - "vogue": 17734, - "sipped": 17735, - "filters": 17736, - "khz": 17737, - "reno": 17738, - "selecting": 17739, - "luftwaffe": 17740, - "mcmahon": 17741, - "tyne": 17742, - "masterpiece": 17743, - "carriages": 17744, - "collided": 17745, - "dunes": 17746, - "exercised": 17747, - "flare": 17748, - "remembers": 17749, - "muzzle": 17750, - "##mobile": 17751, - "heck": 17752, - "##rson": 17753, - "burgess": 17754, - "lunged": 17755, - "middleton": 17756, - "boycott": 17757, - "bilateral": 17758, - "##sity": 17759, - "hazardous": 17760, - "lumpur": 17761, - "multiplayer": 17762, - "spotlight": 17763, - "jackets": 17764, - "goldman": 17765, - "liege": 17766, - "porcelain": 17767, - "rag": 17768, - "waterford": 17769, - "benz": 17770, - "attracts": 17771, - "hopeful": 17772, - "battling": 17773, - "ottomans": 17774, - "kensington": 17775, - "baked": 17776, - "hymns": 17777, - "cheyenne": 17778, - "lattice": 17779, - "levine": 17780, - "borrow": 17781, - "polymer": 17782, - "clashes": 17783, - "michaels": 17784, - "monitored": 17785, - "commitments": 17786, - "denounced": 17787, - "##25": 17788, - "##von": 17789, - "cavity": 17790, - "##oney": 17791, - "hobby": 17792, - "akin": 17793, - "##holders": 17794, - "futures": 17795, - "intricate": 17796, - "cornish": 17797, - "patty": 17798, - "##oned": 17799, - "illegally": 17800, - "dolphin": 17801, - "##lag": 17802, - "barlow": 17803, - "yellowish": 17804, - "maddie": 17805, - "apologized": 17806, - "luton": 17807, - "plagued": 17808, - "##puram": 17809, - "nana": 17810, - "##rds": 17811, - "sway": 17812, - "fanny": 17813, - "łodz": 17814, - "##rino": 17815, - "psi": 17816, - "suspicions": 17817, - "hanged": 17818, - "##eding": 17819, - "initiate": 17820, - "charlton": 17821, - "##por": 17822, - "nak": 17823, - "competent": 17824, - "235": 17825, - "analytical": 17826, - "annex": 17827, - "wardrobe": 17828, - "reservations": 17829, - "##rma": 17830, - "sect": 17831, - "162": 17832, - "fairfax": 17833, - "hedge": 17834, - "piled": 17835, - "buckingham": 17836, - "uneven": 17837, - "bauer": 17838, - "simplicity": 17839, - "snyder": 17840, - "interpret": 17841, - "accountability": 17842, - "donors": 17843, - "moderately": 17844, - "byrd": 17845, - "continents": 17846, - "##cite": 17847, - "##max": 17848, - "disciple": 17849, - "hr": 17850, - "jamaican": 17851, - "ping": 17852, - "nominees": 17853, - "##uss": 17854, - "mongolian": 17855, - "diver": 17856, - "attackers": 17857, - "eagerly": 17858, - "ideological": 17859, - "pillows": 17860, - "miracles": 17861, - "apartheid": 17862, - "revolver": 17863, - "sulfur": 17864, - "clinics": 17865, - "moran": 17866, - "163": 17867, - "##enko": 17868, - "ile": 17869, - "katy": 17870, - "rhetoric": 17871, - "##icated": 17872, - "chronology": 17873, - "recycling": 17874, - "##hrer": 17875, - "elongated": 17876, - "mughal": 17877, - "pascal": 17878, - "profiles": 17879, - "vibration": 17880, - "databases": 17881, - "domination": 17882, - "##fare": 17883, - "##rant": 17884, - "matthias": 17885, - "digest": 17886, - "rehearsal": 17887, - "polling": 17888, - "weiss": 17889, - "initiation": 17890, - "reeves": 17891, - "clinging": 17892, - "flourished": 17893, - "impress": 17894, - "ngo": 17895, - "##hoff": 17896, - "##ume": 17897, - "buckley": 17898, - "symposium": 17899, - "rhythms": 17900, - "weed": 17901, - "emphasize": 17902, - "transforming": 17903, - "##taking": 17904, - "##gence": 17905, - "##yman": 17906, - "accountant": 17907, - "analyze": 17908, - "flicker": 17909, - "foil": 17910, - "priesthood": 17911, - "voluntarily": 17912, - "decreases": 17913, - "##80": 17914, - "##hya": 17915, - "slater": 17916, - "sv": 17917, - "charting": 17918, - "mcgill": 17919, - "##lde": 17920, - "moreno": 17921, - "##iu": 17922, - "besieged": 17923, - "zur": 17924, - "robes": 17925, - "##phic": 17926, - "admitting": 17927, - "api": 17928, - "deported": 17929, - "turmoil": 17930, - "peyton": 17931, - "earthquakes": 17932, - "##ares": 17933, - "nationalists": 17934, - "beau": 17935, - "clair": 17936, - "brethren": 17937, - "interrupt": 17938, - "welch": 17939, - "curated": 17940, - "galerie": 17941, - "requesting": 17942, - "164": 17943, - "##ested": 17944, - "impending": 17945, - "steward": 17946, - "viper": 17947, - "##vina": 17948, - "complaining": 17949, - "beautifully": 17950, - "brandy": 17951, - "foam": 17952, - "nl": 17953, - "1660": 17954, - "##cake": 17955, - "alessandro": 17956, - "punches": 17957, - "laced": 17958, - "explanations": 17959, - "##lim": 17960, - "attribute": 17961, - "clit": 17962, - "reggie": 17963, - "discomfort": 17964, - "##cards": 17965, - "smoothed": 17966, - "whales": 17967, - "##cene": 17968, - "adler": 17969, - "countered": 17970, - "duffy": 17971, - "disciplinary": 17972, - "widening": 17973, - "recipe": 17974, - "reliance": 17975, - "conducts": 17976, - "goats": 17977, - "gradient": 17978, - "preaching": 17979, - "##shaw": 17980, - "matilda": 17981, - "quasi": 17982, - "striped": 17983, - "meridian": 17984, - "cannabis": 17985, - "cordoba": 17986, - "certificates": 17987, - "##agh": 17988, - "##tering": 17989, - "graffiti": 17990, - "hangs": 17991, - "pilgrims": 17992, - "repeats": 17993, - "##ych": 17994, - "revive": 17995, - "urine": 17996, - "etat": 17997, - "##hawk": 17998, - "fueled": 17999, - "belts": 18000, - "fuzzy": 18001, - "susceptible": 18002, - "##hang": 18003, - "mauritius": 18004, - "salle": 18005, - "sincere": 18006, - "beers": 18007, - "hooks": 18008, - "##cki": 18009, - "arbitration": 18010, - "entrusted": 18011, - "advise": 18012, - "sniffed": 18013, - "seminar": 18014, - "junk": 18015, - "donnell": 18016, - "processors": 18017, - "principality": 18018, - "strapped": 18019, - "celia": 18020, - "mendoza": 18021, - "everton": 18022, - "fortunes": 18023, - "prejudice": 18024, - "starving": 18025, - "reassigned": 18026, - "steamer": 18027, - "##lund": 18028, - "tuck": 18029, - "evenly": 18030, - "foreman": 18031, - "##ffen": 18032, - "dans": 18033, - "375": 18034, - "envisioned": 18035, - "slit": 18036, - "##xy": 18037, - "baseman": 18038, - "liberia": 18039, - "rosemary": 18040, - "##weed": 18041, - "electrified": 18042, - "periodically": 18043, - "potassium": 18044, - "stride": 18045, - "contexts": 18046, - "sperm": 18047, - "slade": 18048, - "mariners": 18049, - "influx": 18050, - "bianca": 18051, - "subcommittee": 18052, - "##rane": 18053, - "spilling": 18054, - "icao": 18055, - "estuary": 18056, - "##nock": 18057, - "delivers": 18058, - "iphone": 18059, - "##ulata": 18060, - "isa": 18061, - "mira": 18062, - "bohemian": 18063, - "dessert": 18064, - "##sbury": 18065, - "welcoming": 18066, - "proudly": 18067, - "slowing": 18068, - "##chs": 18069, - "musee": 18070, - "ascension": 18071, - "russ": 18072, - "##vian": 18073, - "waits": 18074, - "##psy": 18075, - "africans": 18076, - "exploit": 18077, - "##morphic": 18078, - "gov": 18079, - "eccentric": 18080, - "crab": 18081, - "peck": 18082, - "##ull": 18083, - "entrances": 18084, - "formidable": 18085, - "marketplace": 18086, - "groom": 18087, - "bolted": 18088, - "metabolism": 18089, - "patton": 18090, - "robbins": 18091, - "courier": 18092, - "payload": 18093, - "endure": 18094, - "##ifier": 18095, - "andes": 18096, - "refrigerator": 18097, - "##pr": 18098, - "ornate": 18099, - "##uca": 18100, - "ruthless": 18101, - "illegitimate": 18102, - "masonry": 18103, - "strasbourg": 18104, - "bikes": 18105, - "adobe": 18106, - "##³": 18107, - "apples": 18108, - "quintet": 18109, - "willingly": 18110, - "niche": 18111, - "bakery": 18112, - "corpses": 18113, - "energetic": 18114, - "##cliffe": 18115, - "##sser": 18116, - "##ards": 18117, - "177": 18118, - "centimeters": 18119, - "centro": 18120, - "fuscous": 18121, - "cretaceous": 18122, - "rancho": 18123, - "##yde": 18124, - "andrei": 18125, - "telecom": 18126, - "tottenham": 18127, - "oasis": 18128, - "ordination": 18129, - "vulnerability": 18130, - "presiding": 18131, - "corey": 18132, - "cp": 18133, - "penguins": 18134, - "sims": 18135, - "##pis": 18136, - "malawi": 18137, - "piss": 18138, - "##48": 18139, - "correction": 18140, - "##cked": 18141, - "##ffle": 18142, - "##ryn": 18143, - "countdown": 18144, - "detectives": 18145, - "psychiatrist": 18146, - "psychedelic": 18147, - "dinosaurs": 18148, - "blouse": 18149, - "##get": 18150, - "choi": 18151, - "vowed": 18152, - "##oz": 18153, - "randomly": 18154, - "##pol": 18155, - "49ers": 18156, - "scrub": 18157, - "blanche": 18158, - "bruins": 18159, - "dusseldorf": 18160, - "##using": 18161, - "unwanted": 18162, - "##ums": 18163, - "212": 18164, - "dominique": 18165, - "elevations": 18166, - "headlights": 18167, - "om": 18168, - "laguna": 18169, - "##oga": 18170, - "1750": 18171, - "famously": 18172, - "ignorance": 18173, - "shrewsbury": 18174, - "##aine": 18175, - "ajax": 18176, - "breuning": 18177, - "che": 18178, - "confederacy": 18179, - "greco": 18180, - "overhaul": 18181, - "##screen": 18182, - "paz": 18183, - "skirts": 18184, - "disagreement": 18185, - "cruelty": 18186, - "jagged": 18187, - "phoebe": 18188, - "shifter": 18189, - "hovered": 18190, - "viruses": 18191, - "##wes": 18192, - "mandy": 18193, - "##lined": 18194, - "##gc": 18195, - "landlord": 18196, - "squirrel": 18197, - "dashed": 18198, - "##ι": 18199, - "ornamental": 18200, - "gag": 18201, - "wally": 18202, - "grange": 18203, - "literal": 18204, - "spurs": 18205, - "undisclosed": 18206, - "proceeding": 18207, - "yin": 18208, - "##text": 18209, - "billie": 18210, - "orphan": 18211, - "spanned": 18212, - "humidity": 18213, - "indy": 18214, - "weighted": 18215, - "presentations": 18216, - "explosions": 18217, - "lucian": 18218, - "##tary": 18219, - "vaughn": 18220, - "hindus": 18221, - "##anga": 18222, - "##hell": 18223, - "psycho": 18224, - "171": 18225, - "daytona": 18226, - "protects": 18227, - "efficiently": 18228, - "rematch": 18229, - "sly": 18230, - "tandem": 18231, - "##oya": 18232, - "rebranded": 18233, - "impaired": 18234, - "hee": 18235, - "metropolis": 18236, - "peach": 18237, - "godfrey": 18238, - "diaspora": 18239, - "ethnicity": 18240, - "prosperous": 18241, - "gleaming": 18242, - "dar": 18243, - "grossing": 18244, - "playback": 18245, - "##rden": 18246, - "stripe": 18247, - "pistols": 18248, - "##tain": 18249, - "births": 18250, - "labelled": 18251, - "##cating": 18252, - "172": 18253, - "rudy": 18254, - "alba": 18255, - "##onne": 18256, - "aquarium": 18257, - "hostility": 18258, - "##gb": 18259, - "##tase": 18260, - "shudder": 18261, - "sumatra": 18262, - "hardest": 18263, - "lakers": 18264, - "consonant": 18265, - "creeping": 18266, - "demos": 18267, - "homicide": 18268, - "capsule": 18269, - "zeke": 18270, - "liberties": 18271, - "expulsion": 18272, - "pueblo": 18273, - "##comb": 18274, - "trait": 18275, - "transporting": 18276, - "##ddin": 18277, - "##neck": 18278, - "##yna": 18279, - "depart": 18280, - "gregg": 18281, - "mold": 18282, - "ledge": 18283, - "hangar": 18284, - "oldham": 18285, - "playboy": 18286, - "termination": 18287, - "analysts": 18288, - "gmbh": 18289, - "romero": 18290, - "##itic": 18291, - "insist": 18292, - "cradle": 18293, - "filthy": 18294, - "brightness": 18295, - "slash": 18296, - "shootout": 18297, - "deposed": 18298, - "bordering": 18299, - "##truct": 18300, - "isis": 18301, - "microwave": 18302, - "tumbled": 18303, - "sheltered": 18304, - "cathy": 18305, - "werewolves": 18306, - "messy": 18307, - "andersen": 18308, - "convex": 18309, - "clapped": 18310, - "clinched": 18311, - "satire": 18312, - "wasting": 18313, - "edo": 18314, - "vc": 18315, - "rufus": 18316, - "##jak": 18317, - "mont": 18318, - "##etti": 18319, - "poznan": 18320, - "##keeping": 18321, - "restructuring": 18322, - "transverse": 18323, - "##rland": 18324, - "azerbaijani": 18325, - "slovene": 18326, - "gestures": 18327, - "roommate": 18328, - "choking": 18329, - "shear": 18330, - "##quist": 18331, - "vanguard": 18332, - "oblivious": 18333, - "##hiro": 18334, - "disagreed": 18335, - "baptism": 18336, - "##lich": 18337, - "coliseum": 18338, - "##aceae": 18339, - "salvage": 18340, - "societe": 18341, - "cory": 18342, - "locke": 18343, - "relocation": 18344, - "relying": 18345, - "versailles": 18346, - "ahl": 18347, - "swelling": 18348, - "##elo": 18349, - "cheerful": 18350, - "##word": 18351, - "##edes": 18352, - "gin": 18353, - "sarajevo": 18354, - "obstacle": 18355, - "diverted": 18356, - "##nac": 18357, - "messed": 18358, - "thoroughbred": 18359, - "fluttered": 18360, - "utrecht": 18361, - "chewed": 18362, - "acquaintance": 18363, - "assassins": 18364, - "dispatch": 18365, - "mirza": 18366, - "##wart": 18367, - "nike": 18368, - "salzburg": 18369, - "swell": 18370, - "yen": 18371, - "##gee": 18372, - "idle": 18373, - "ligue": 18374, - "samson": 18375, - "##nds": 18376, - "##igh": 18377, - "playful": 18378, - "spawned": 18379, - "##cise": 18380, - "tease": 18381, - "##case": 18382, - "burgundy": 18383, - "##bot": 18384, - "stirring": 18385, - "skeptical": 18386, - "interceptions": 18387, - "marathi": 18388, - "##dies": 18389, - "bedrooms": 18390, - "aroused": 18391, - "pinch": 18392, - "##lik": 18393, - "preferences": 18394, - "tattoos": 18395, - "buster": 18396, - "digitally": 18397, - "projecting": 18398, - "rust": 18399, - "##ital": 18400, - "kitten": 18401, - "priorities": 18402, - "addison": 18403, - "pseudo": 18404, - "##guard": 18405, - "dusk": 18406, - "icons": 18407, - "sermon": 18408, - "##psis": 18409, - "##iba": 18410, - "bt": 18411, - "##lift": 18412, - "##xt": 18413, - "ju": 18414, - "truce": 18415, - "rink": 18416, - "##dah": 18417, - "##wy": 18418, - "defects": 18419, - "psychiatry": 18420, - "offences": 18421, - "calculate": 18422, - "glucose": 18423, - "##iful": 18424, - "##rized": 18425, - "##unda": 18426, - "francaise": 18427, - "##hari": 18428, - "richest": 18429, - "warwickshire": 18430, - "carly": 18431, - "1763": 18432, - "purity": 18433, - "redemption": 18434, - "lending": 18435, - "##cious": 18436, - "muse": 18437, - "bruises": 18438, - "cerebral": 18439, - "aero": 18440, - "carving": 18441, - "##name": 18442, - "preface": 18443, - "terminology": 18444, - "invade": 18445, - "monty": 18446, - "##int": 18447, - "anarchist": 18448, - "blurred": 18449, - "##iled": 18450, - "rossi": 18451, - "treats": 18452, - "guts": 18453, - "shu": 18454, - "foothills": 18455, - "ballads": 18456, - "undertaking": 18457, - "premise": 18458, - "cecilia": 18459, - "affiliates": 18460, - "blasted": 18461, - "conditional": 18462, - "wilder": 18463, - "minors": 18464, - "drone": 18465, - "rudolph": 18466, - "buffy": 18467, - "swallowing": 18468, - "horton": 18469, - "attested": 18470, - "##hop": 18471, - "rutherford": 18472, - "howell": 18473, - "primetime": 18474, - "livery": 18475, - "penal": 18476, - "##bis": 18477, - "minimize": 18478, - "hydro": 18479, - "wrecked": 18480, - "wrought": 18481, - "palazzo": 18482, - "##gling": 18483, - "cans": 18484, - "vernacular": 18485, - "friedman": 18486, - "nobleman": 18487, - "shale": 18488, - "walnut": 18489, - "danielle": 18490, - "##ection": 18491, - "##tley": 18492, - "sears": 18493, - "##kumar": 18494, - "chords": 18495, - "lend": 18496, - "flipping": 18497, - "streamed": 18498, - "por": 18499, - "dracula": 18500, - "gallons": 18501, - "sacrifices": 18502, - "gamble": 18503, - "orphanage": 18504, - "##iman": 18505, - "mckenzie": 18506, - "##gible": 18507, - "boxers": 18508, - "daly": 18509, - "##balls": 18510, - "##ان": 18511, - "208": 18512, - "##ific": 18513, - "##rative": 18514, - "##iq": 18515, - "exploited": 18516, - "slated": 18517, - "##uity": 18518, - "circling": 18519, - "hillary": 18520, - "pinched": 18521, - "goldberg": 18522, - "provost": 18523, - "campaigning": 18524, - "lim": 18525, - "piles": 18526, - "ironically": 18527, - "jong": 18528, - "mohan": 18529, - "successors": 18530, - "usaf": 18531, - "##tem": 18532, - "##ught": 18533, - "autobiographical": 18534, - "haute": 18535, - "preserves": 18536, - "##ending": 18537, - "acquitted": 18538, - "comparisons": 18539, - "203": 18540, - "hydroelectric": 18541, - "gangs": 18542, - "cypriot": 18543, - "torpedoes": 18544, - "rushes": 18545, - "chrome": 18546, - "derive": 18547, - "bumps": 18548, - "instability": 18549, - "fiat": 18550, - "pets": 18551, - "##mbe": 18552, - "silas": 18553, - "dye": 18554, - "reckless": 18555, - "settler": 18556, - "##itation": 18557, - "info": 18558, - "heats": 18559, - "##writing": 18560, - "176": 18561, - "canonical": 18562, - "maltese": 18563, - "fins": 18564, - "mushroom": 18565, - "stacy": 18566, - "aspen": 18567, - "avid": 18568, - "##kur": 18569, - "##loading": 18570, - "vickers": 18571, - "gaston": 18572, - "hillside": 18573, - "statutes": 18574, - "wilde": 18575, - "gail": 18576, - "kung": 18577, - "sabine": 18578, - "comfortably": 18579, - "motorcycles": 18580, - "##rgo": 18581, - "169": 18582, - "pneumonia": 18583, - "fetch": 18584, - "##sonic": 18585, - "axel": 18586, - "faintly": 18587, - "parallels": 18588, - "##oop": 18589, - "mclaren": 18590, - "spouse": 18591, - "compton": 18592, - "interdisciplinary": 18593, - "miner": 18594, - "##eni": 18595, - "181": 18596, - "clamped": 18597, - "##chal": 18598, - "##llah": 18599, - "separates": 18600, - "versa": 18601, - "##mler": 18602, - "scarborough": 18603, - "labrador": 18604, - "##lity": 18605, - "##osing": 18606, - "rutgers": 18607, - "hurdles": 18608, - "como": 18609, - "166": 18610, - "burt": 18611, - "divers": 18612, - "##100": 18613, - "wichita": 18614, - "cade": 18615, - "coincided": 18616, - "##erson": 18617, - "bruised": 18618, - "mla": 18619, - "##pper": 18620, - "vineyard": 18621, - "##ili": 18622, - "##brush": 18623, - "notch": 18624, - "mentioning": 18625, - "jase": 18626, - "hearted": 18627, - "kits": 18628, - "doe": 18629, - "##acle": 18630, - "pomerania": 18631, - "##ady": 18632, - "ronan": 18633, - "seizure": 18634, - "pavel": 18635, - "problematic": 18636, - "##zaki": 18637, - "domenico": 18638, - "##ulin": 18639, - "catering": 18640, - "penelope": 18641, - "dependence": 18642, - "parental": 18643, - "emilio": 18644, - "ministerial": 18645, - "atkinson": 18646, - "##bolic": 18647, - "clarkson": 18648, - "chargers": 18649, - "colby": 18650, - "grill": 18651, - "peeked": 18652, - "arises": 18653, - "summon": 18654, - "##aged": 18655, - "fools": 18656, - "##grapher": 18657, - "faculties": 18658, - "qaeda": 18659, - "##vial": 18660, - "garner": 18661, - "refurbished": 18662, - "##hwa": 18663, - "geelong": 18664, - "disasters": 18665, - "nudged": 18666, - "bs": 18667, - "shareholder": 18668, - "lori": 18669, - "algae": 18670, - "reinstated": 18671, - "rot": 18672, - "##ades": 18673, - "##nous": 18674, - "invites": 18675, - "stainless": 18676, - "183": 18677, - "inclusive": 18678, - "##itude": 18679, - "diocesan": 18680, - "til": 18681, - "##icz": 18682, - "denomination": 18683, - "##xa": 18684, - "benton": 18685, - "floral": 18686, - "registers": 18687, - "##ider": 18688, - "##erman": 18689, - "##kell": 18690, - "absurd": 18691, - "brunei": 18692, - "guangzhou": 18693, - "hitter": 18694, - "retaliation": 18695, - "##uled": 18696, - "##eve": 18697, - "blanc": 18698, - "nh": 18699, - "consistency": 18700, - "contamination": 18701, - "##eres": 18702, - "##rner": 18703, - "dire": 18704, - "palermo": 18705, - "broadcasters": 18706, - "diaries": 18707, - "inspire": 18708, - "vols": 18709, - "brewer": 18710, - "tightening": 18711, - "ky": 18712, - "mixtape": 18713, - "hormone": 18714, - "##tok": 18715, - "stokes": 18716, - "##color": 18717, - "##dly": 18718, - "##ssi": 18719, - "pg": 18720, - "##ometer": 18721, - "##lington": 18722, - "sanitation": 18723, - "##tility": 18724, - "intercontinental": 18725, - "apps": 18726, - "##adt": 18727, - "¹⁄₂": 18728, - "cylinders": 18729, - "economies": 18730, - "favourable": 18731, - "unison": 18732, - "croix": 18733, - "gertrude": 18734, - "odyssey": 18735, - "vanity": 18736, - "dangling": 18737, - "##logists": 18738, - "upgrades": 18739, - "dice": 18740, - "middleweight": 18741, - "practitioner": 18742, - "##ight": 18743, - "206": 18744, - "henrik": 18745, - "parlor": 18746, - "orion": 18747, - "angered": 18748, - "lac": 18749, - "python": 18750, - "blurted": 18751, - "##rri": 18752, - "sensual": 18753, - "intends": 18754, - "swings": 18755, - "angled": 18756, - "##phs": 18757, - "husky": 18758, - "attain": 18759, - "peerage": 18760, - "precinct": 18761, - "textiles": 18762, - "cheltenham": 18763, - "shuffled": 18764, - "dai": 18765, - "confess": 18766, - "tasting": 18767, - "bhutan": 18768, - "##riation": 18769, - "tyrone": 18770, - "segregation": 18771, - "abrupt": 18772, - "ruiz": 18773, - "##rish": 18774, - "smirked": 18775, - "blackwell": 18776, - "confidential": 18777, - "browning": 18778, - "amounted": 18779, - "##put": 18780, - "vase": 18781, - "scarce": 18782, - "fabulous": 18783, - "raided": 18784, - "staple": 18785, - "guyana": 18786, - "unemployed": 18787, - "glider": 18788, - "shay": 18789, - "##tow": 18790, - "carmine": 18791, - "troll": 18792, - "intervene": 18793, - "squash": 18794, - "superstar": 18795, - "##uce": 18796, - "cylindrical": 18797, - "len": 18798, - "roadway": 18799, - "researched": 18800, - "handy": 18801, - "##rium": 18802, - "##jana": 18803, - "meta": 18804, - "lao": 18805, - "declares": 18806, - "##rring": 18807, - "##tadt": 18808, - "##elin": 18809, - "##kova": 18810, - "willem": 18811, - "shrubs": 18812, - "napoleonic": 18813, - "realms": 18814, - "skater": 18815, - "qi": 18816, - "volkswagen": 18817, - "##ł": 18818, - "tad": 18819, - "hara": 18820, - "archaeologist": 18821, - "awkwardly": 18822, - "eerie": 18823, - "##kind": 18824, - "wiley": 18825, - "##heimer": 18826, - "##24": 18827, - "titus": 18828, - "organizers": 18829, - "cfl": 18830, - "crusaders": 18831, - "lama": 18832, - "usb": 18833, - "vent": 18834, - "enraged": 18835, - "thankful": 18836, - "occupants": 18837, - "maximilian": 18838, - "##gaard": 18839, - "possessing": 18840, - "textbooks": 18841, - "##oran": 18842, - "collaborator": 18843, - "quaker": 18844, - "##ulo": 18845, - "avalanche": 18846, - "mono": 18847, - "silky": 18848, - "straits": 18849, - "isaiah": 18850, - "mustang": 18851, - "surged": 18852, - "resolutions": 18853, - "potomac": 18854, - "descend": 18855, - "cl": 18856, - "kilograms": 18857, - "plato": 18858, - "strains": 18859, - "saturdays": 18860, - "##olin": 18861, - "bernstein": 18862, - "##ype": 18863, - "holstein": 18864, - "ponytail": 18865, - "##watch": 18866, - "belize": 18867, - "conversely": 18868, - "heroine": 18869, - "perpetual": 18870, - "##ylus": 18871, - "charcoal": 18872, - "piedmont": 18873, - "glee": 18874, - "negotiating": 18875, - "backdrop": 18876, - "prologue": 18877, - "##jah": 18878, - "##mmy": 18879, - "pasadena": 18880, - "climbs": 18881, - "ramos": 18882, - "sunni": 18883, - "##holm": 18884, - "##tner": 18885, - "##tri": 18886, - "anand": 18887, - "deficiency": 18888, - "hertfordshire": 18889, - "stout": 18890, - "##avi": 18891, - "aperture": 18892, - "orioles": 18893, - "##irs": 18894, - "doncaster": 18895, - "intrigued": 18896, - "bombed": 18897, - "coating": 18898, - "otis": 18899, - "##mat": 18900, - "cocktail": 18901, - "##jit": 18902, - "##eto": 18903, - "amir": 18904, - "arousal": 18905, - "sar": 18906, - "##proof": 18907, - "##act": 18908, - "##ories": 18909, - "dixie": 18910, - "pots": 18911, - "##bow": 18912, - "whereabouts": 18913, - "159": 18914, - "##fted": 18915, - "drains": 18916, - "bullying": 18917, - "cottages": 18918, - "scripture": 18919, - "coherent": 18920, - "fore": 18921, - "poe": 18922, - "appetite": 18923, - "##uration": 18924, - "sampled": 18925, - "##ators": 18926, - "##dp": 18927, - "derrick": 18928, - "rotor": 18929, - "jays": 18930, - "peacock": 18931, - "installment": 18932, - "##rro": 18933, - "advisors": 18934, - "##coming": 18935, - "rodeo": 18936, - "scotch": 18937, - "##mot": 18938, - "##db": 18939, - "##fen": 18940, - "##vant": 18941, - "ensued": 18942, - "rodrigo": 18943, - "dictatorship": 18944, - "martyrs": 18945, - "twenties": 18946, - "##н": 18947, - "towed": 18948, - "incidence": 18949, - "marta": 18950, - "rainforest": 18951, - "sai": 18952, - "scaled": 18953, - "##cles": 18954, - "oceanic": 18955, - "qualifiers": 18956, - "symphonic": 18957, - "mcbride": 18958, - "dislike": 18959, - "generalized": 18960, - "aubrey": 18961, - "colonization": 18962, - "##iation": 18963, - "##lion": 18964, - "##ssing": 18965, - "disliked": 18966, - "lublin": 18967, - "salesman": 18968, - "##ulates": 18969, - "spherical": 18970, - "whatsoever": 18971, - "sweating": 18972, - "avalon": 18973, - "contention": 18974, - "punt": 18975, - "severity": 18976, - "alderman": 18977, - "atari": 18978, - "##dina": 18979, - "##grant": 18980, - "##rop": 18981, - "scarf": 18982, - "seville": 18983, - "vertices": 18984, - "annexation": 18985, - "fairfield": 18986, - "fascination": 18987, - "inspiring": 18988, - "launches": 18989, - "palatinate": 18990, - "regretted": 18991, - "##rca": 18992, - "feral": 18993, - "##iom": 18994, - "elk": 18995, - "nap": 18996, - "olsen": 18997, - "reddy": 18998, - "yong": 18999, - "##leader": 19000, - "##iae": 19001, - "garment": 19002, - "transports": 19003, - "feng": 19004, - "gracie": 19005, - "outrage": 19006, - "viceroy": 19007, - "insides": 19008, - "##esis": 19009, - "breakup": 19010, - "grady": 19011, - "organizer": 19012, - "softer": 19013, - "grimaced": 19014, - "222": 19015, - "murals": 19016, - "galicia": 19017, - "arranging": 19018, - "vectors": 19019, - "##rsten": 19020, - "bas": 19021, - "##sb": 19022, - "##cens": 19023, - "sloan": 19024, - "##eka": 19025, - "bitten": 19026, - "ara": 19027, - "fender": 19028, - "nausea": 19029, - "bumped": 19030, - "kris": 19031, - "banquet": 19032, - "comrades": 19033, - "detector": 19034, - "persisted": 19035, - "##llan": 19036, - "adjustment": 19037, - "endowed": 19038, - "cinemas": 19039, - "##shot": 19040, - "sellers": 19041, - "##uman": 19042, - "peek": 19043, - "epa": 19044, - "kindly": 19045, - "neglect": 19046, - "simpsons": 19047, - "talon": 19048, - "mausoleum": 19049, - "runaway": 19050, - "hangul": 19051, - "lookout": 19052, - "##cic": 19053, - "rewards": 19054, - "coughed": 19055, - "acquainted": 19056, - "chloride": 19057, - "##ald": 19058, - "quicker": 19059, - "accordion": 19060, - "neolithic": 19061, - "##qa": 19062, - "artemis": 19063, - "coefficient": 19064, - "lenny": 19065, - "pandora": 19066, - "tx": 19067, - "##xed": 19068, - "ecstasy": 19069, - "litter": 19070, - "segunda": 19071, - "chairperson": 19072, - "gemma": 19073, - "hiss": 19074, - "rumor": 19075, - "vow": 19076, - "nasal": 19077, - "antioch": 19078, - "compensate": 19079, - "patiently": 19080, - "transformers": 19081, - "##eded": 19082, - "judo": 19083, - "morrow": 19084, - "penis": 19085, - "posthumous": 19086, - "philips": 19087, - "bandits": 19088, - "husbands": 19089, - "denote": 19090, - "flaming": 19091, - "##any": 19092, - "##phones": 19093, - "langley": 19094, - "yorker": 19095, - "1760": 19096, - "walters": 19097, - "##uo": 19098, - "##kle": 19099, - "gubernatorial": 19100, - "fatty": 19101, - "samsung": 19102, - "leroy": 19103, - "outlaw": 19104, - "##nine": 19105, - "unpublished": 19106, - "poole": 19107, - "jakob": 19108, - "##įµ¢": 19109, - "##ā‚™": 19110, - "crete": 19111, - "distorted": 19112, - "superiority": 19113, - "##dhi": 19114, - "intercept": 19115, - "crust": 19116, - "mig": 19117, - "claus": 19118, - "crashes": 19119, - "positioning": 19120, - "188": 19121, - "stallion": 19122, - "301": 19123, - "frontal": 19124, - "armistice": 19125, - "##estinal": 19126, - "elton": 19127, - "aj": 19128, - "encompassing": 19129, - "camel": 19130, - "commemorated": 19131, - "malaria": 19132, - "woodward": 19133, - "calf": 19134, - "cigar": 19135, - "penetrate": 19136, - "##oso": 19137, - "willard": 19138, - "##rno": 19139, - "##uche": 19140, - "illustrate": 19141, - "amusing": 19142, - "convergence": 19143, - "noteworthy": 19144, - "##lma": 19145, - "##rva": 19146, - "journeys": 19147, - "realise": 19148, - "manfred": 19149, - "##sable": 19150, - "410": 19151, - "##vocation": 19152, - "hearings": 19153, - "fiance": 19154, - "##posed": 19155, - "educators": 19156, - "provoked": 19157, - "adjusting": 19158, - "##cturing": 19159, - "modular": 19160, - "stockton": 19161, - "paterson": 19162, - "vlad": 19163, - "rejects": 19164, - "electors": 19165, - "selena": 19166, - "maureen": 19167, - "##tres": 19168, - "uber": 19169, - "##rce": 19170, - "swirled": 19171, - "##num": 19172, - "proportions": 19173, - "nanny": 19174, - "pawn": 19175, - "naturalist": 19176, - "parma": 19177, - "apostles": 19178, - "awoke": 19179, - "ethel": 19180, - "wen": 19181, - "##bey": 19182, - "monsoon": 19183, - "overview": 19184, - "##inating": 19185, - "mccain": 19186, - "rendition": 19187, - "risky": 19188, - "adorned": 19189, - "##ih": 19190, - "equestrian": 19191, - "germain": 19192, - "nj": 19193, - "conspicuous": 19194, - "confirming": 19195, - "##yoshi": 19196, - "shivering": 19197, - "##imeter": 19198, - "milestone": 19199, - "rumours": 19200, - "flinched": 19201, - "bounds": 19202, - "smacked": 19203, - "token": 19204, - "##bei": 19205, - "lectured": 19206, - "automobiles": 19207, - "##shore": 19208, - "impacted": 19209, - "##iable": 19210, - "nouns": 19211, - "nero": 19212, - "##leaf": 19213, - "ismail": 19214, - "prostitute": 19215, - "trams": 19216, - "##lace": 19217, - "bridget": 19218, - "sud": 19219, - "stimulus": 19220, - "impressions": 19221, - "reins": 19222, - "revolves": 19223, - "##oud": 19224, - "##gned": 19225, - "giro": 19226, - "honeymoon": 19227, - "##swell": 19228, - "criterion": 19229, - "##sms": 19230, - "##uil": 19231, - "libyan": 19232, - "prefers": 19233, - "##osition": 19234, - "211": 19235, - "preview": 19236, - "sucks": 19237, - "accusation": 19238, - "bursts": 19239, - "metaphor": 19240, - "diffusion": 19241, - "tolerate": 19242, - "faye": 19243, - "betting": 19244, - "cinematographer": 19245, - "liturgical": 19246, - "specials": 19247, - "bitterly": 19248, - "humboldt": 19249, - "##ckle": 19250, - "flux": 19251, - "rattled": 19252, - "##itzer": 19253, - "archaeologists": 19254, - "odor": 19255, - "authorised": 19256, - "marshes": 19257, - "discretion": 19258, - "##ов": 19259, - "alarmed": 19260, - "archaic": 19261, - "inverse": 19262, - "##leton": 19263, - "explorers": 19264, - "##pine": 19265, - "drummond": 19266, - "tsunami": 19267, - "woodlands": 19268, - "##minate": 19269, - "##tland": 19270, - "booklet": 19271, - "insanity": 19272, - "owning": 19273, - "insert": 19274, - "crafted": 19275, - "calculus": 19276, - "##tore": 19277, - "receivers": 19278, - "##bt": 19279, - "stung": 19280, - "##eca": 19281, - "##nched": 19282, - "prevailing": 19283, - "travellers": 19284, - "eyeing": 19285, - "lila": 19286, - "graphs": 19287, - "##borne": 19288, - "178": 19289, - "julien": 19290, - "##won": 19291, - "morale": 19292, - "adaptive": 19293, - "therapist": 19294, - "erica": 19295, - "cw": 19296, - "libertarian": 19297, - "bowman": 19298, - "pitches": 19299, - "vita": 19300, - "##ional": 19301, - "crook": 19302, - "##ads": 19303, - "##entation": 19304, - "caledonia": 19305, - "mutiny": 19306, - "##sible": 19307, - "1840s": 19308, - "automation": 19309, - "##ß": 19310, - "flock": 19311, - "##pia": 19312, - "ironic": 19313, - "pathology": 19314, - "##imus": 19315, - "remarried": 19316, - "##22": 19317, - "joker": 19318, - "withstand": 19319, - "energies": 19320, - "##att": 19321, - "shropshire": 19322, - "hostages": 19323, - "madeleine": 19324, - "tentatively": 19325, - "conflicting": 19326, - "mateo": 19327, - "recipes": 19328, - "euros": 19329, - "ol": 19330, - "mercenaries": 19331, - "nico": 19332, - "##ndon": 19333, - "albuquerque": 19334, - "augmented": 19335, - "mythical": 19336, - "bel": 19337, - "freud": 19338, - "##child": 19339, - "cough": 19340, - "##lica": 19341, - "365": 19342, - "freddy": 19343, - "lillian": 19344, - "genetically": 19345, - "nuremberg": 19346, - "calder": 19347, - "209": 19348, - "bonn": 19349, - "outdoors": 19350, - "paste": 19351, - "suns": 19352, - "urgency": 19353, - "vin": 19354, - "restraint": 19355, - "tyson": 19356, - "##cera": 19357, - "##selle": 19358, - "barrage": 19359, - "bethlehem": 19360, - "kahn": 19361, - "##par": 19362, - "mounts": 19363, - "nippon": 19364, - "barony": 19365, - "happier": 19366, - "ryu": 19367, - "makeshift": 19368, - "sheldon": 19369, - "blushed": 19370, - "castillo": 19371, - "barking": 19372, - "listener": 19373, - "taped": 19374, - "bethel": 19375, - "fluent": 19376, - "headlines": 19377, - "pornography": 19378, - "rum": 19379, - "disclosure": 19380, - "sighing": 19381, - "mace": 19382, - "doubling": 19383, - "gunther": 19384, - "manly": 19385, - "##plex": 19386, - "rt": 19387, - "interventions": 19388, - "physiological": 19389, - "forwards": 19390, - "emerges": 19391, - "##tooth": 19392, - "##gny": 19393, - "compliment": 19394, - "rib": 19395, - "recession": 19396, - "visibly": 19397, - "barge": 19398, - "faults": 19399, - "connector": 19400, - "exquisite": 19401, - "prefect": 19402, - "##rlin": 19403, - "patio": 19404, - "##cured": 19405, - "elevators": 19406, - "brandt": 19407, - "italics": 19408, - "pena": 19409, - "173": 19410, - "wasp": 19411, - "satin": 19412, - "ea": 19413, - "botswana": 19414, - "graceful": 19415, - "respectable": 19416, - "##jima": 19417, - "##rter": 19418, - "##oic": 19419, - "franciscan": 19420, - "generates": 19421, - "##dl": 19422, - "alfredo": 19423, - "disgusting": 19424, - "##olate": 19425, - "##iously": 19426, - "sherwood": 19427, - "warns": 19428, - "cod": 19429, - "promo": 19430, - "cheryl": 19431, - "sino": 19432, - "##Ų©": 19433, - "##escu": 19434, - "twitch": 19435, - "##zhi": 19436, - "brownish": 19437, - "thom": 19438, - "ortiz": 19439, - "##dron": 19440, - "densely": 19441, - "##beat": 19442, - "carmel": 19443, - "reinforce": 19444, - "##bana": 19445, - "187": 19446, - "anastasia": 19447, - "downhill": 19448, - "vertex": 19449, - "contaminated": 19450, - "remembrance": 19451, - "harmonic": 19452, - "homework": 19453, - "##sol": 19454, - "fiancee": 19455, - "gears": 19456, - "olds": 19457, - "angelica": 19458, - "loft": 19459, - "ramsay": 19460, - "quiz": 19461, - "colliery": 19462, - "sevens": 19463, - "##cape": 19464, - "autism": 19465, - "##hil": 19466, - "walkway": 19467, - "##boats": 19468, - "ruben": 19469, - "abnormal": 19470, - "ounce": 19471, - "khmer": 19472, - "##bbe": 19473, - "zachary": 19474, - "bedside": 19475, - "morphology": 19476, - "punching": 19477, - "##olar": 19478, - "sparrow": 19479, - "convinces": 19480, - "##35": 19481, - "hewitt": 19482, - "queer": 19483, - "remastered": 19484, - "rods": 19485, - "mabel": 19486, - "solemn": 19487, - "notified": 19488, - "lyricist": 19489, - "symmetric": 19490, - "##xide": 19491, - "174": 19492, - "encore": 19493, - "passports": 19494, - "wildcats": 19495, - "##uni": 19496, - "baja": 19497, - "##pac": 19498, - "mildly": 19499, - "##ease": 19500, - "bleed": 19501, - "commodity": 19502, - "mounds": 19503, - "glossy": 19504, - "orchestras": 19505, - "##omo": 19506, - "damian": 19507, - "prelude": 19508, - "ambitions": 19509, - "##vet": 19510, - "awhile": 19511, - "remotely": 19512, - "##aud": 19513, - "asserts": 19514, - "imply": 19515, - "##iques": 19516, - "distinctly": 19517, - "modelling": 19518, - "remedy": 19519, - "##dded": 19520, - "windshield": 19521, - "dani": 19522, - "xiao": 19523, - "##endra": 19524, - "audible": 19525, - "powerplant": 19526, - "1300": 19527, - "invalid": 19528, - "elemental": 19529, - "acquisitions": 19530, - "##hala": 19531, - "immaculate": 19532, - "libby": 19533, - "plata": 19534, - "smuggling": 19535, - "ventilation": 19536, - "denoted": 19537, - "minh": 19538, - "##morphism": 19539, - "430": 19540, - "differed": 19541, - "dion": 19542, - "kelley": 19543, - "lore": 19544, - "mocking": 19545, - "sabbath": 19546, - "spikes": 19547, - "hygiene": 19548, - "drown": 19549, - "runoff": 19550, - "stylized": 19551, - "tally": 19552, - "liberated": 19553, - "aux": 19554, - "interpreter": 19555, - "righteous": 19556, - "aba": 19557, - "siren": 19558, - "reaper": 19559, - "pearce": 19560, - "millie": 19561, - "##cier": 19562, - "##yra": 19563, - "gaius": 19564, - "##iso": 19565, - "captures": 19566, - "##ttering": 19567, - "dorm": 19568, - "claudio": 19569, - "##sic": 19570, - "benches": 19571, - "knighted": 19572, - "blackness": 19573, - "##ored": 19574, - "discount": 19575, - "fumble": 19576, - "oxidation": 19577, - "routed": 19578, - "##Ļ‚": 19579, - "novak": 19580, - "perpendicular": 19581, - "spoiled": 19582, - "fracture": 19583, - "splits": 19584, - "##urt": 19585, - "pads": 19586, - "topology": 19587, - "##cats": 19588, - "axes": 19589, - "fortunate": 19590, - "offenders": 19591, - "protestants": 19592, - "esteem": 19593, - "221": 19594, - "broadband": 19595, - "convened": 19596, - "frankly": 19597, - "hound": 19598, - "prototypes": 19599, - "isil": 19600, - "facilitated": 19601, - "keel": 19602, - "##sher": 19603, - "sahara": 19604, - "awaited": 19605, - "bubba": 19606, - "orb": 19607, - "prosecutors": 19608, - "186": 19609, - "hem": 19610, - "520": 19611, - "##xing": 19612, - "relaxing": 19613, - "remnant": 19614, - "romney": 19615, - "sorted": 19616, - "slalom": 19617, - "stefano": 19618, - "ulrich": 19619, - "##active": 19620, - "exemption": 19621, - "folder": 19622, - "pauses": 19623, - "foliage": 19624, - "hitchcock": 19625, - "epithet": 19626, - "204": 19627, - "criticisms": 19628, - "##aca": 19629, - "ballistic": 19630, - "brody": 19631, - "hinduism": 19632, - "chaotic": 19633, - "youths": 19634, - "equals": 19635, - "##pala": 19636, - "pts": 19637, - "thicker": 19638, - "analogous": 19639, - "capitalist": 19640, - "improvised": 19641, - "overseeing": 19642, - "sinatra": 19643, - "ascended": 19644, - "beverage": 19645, - "##tl": 19646, - "straightforward": 19647, - "##kon": 19648, - "curran": 19649, - "##west": 19650, - "bois": 19651, - "325": 19652, - "induce": 19653, - "surveying": 19654, - "emperors": 19655, - "sax": 19656, - "unpopular": 19657, - "##kk": 19658, - "cartoonist": 19659, - "fused": 19660, - "##mble": 19661, - "unto": 19662, - "##yuki": 19663, - "localities": 19664, - "##cko": 19665, - "##ln": 19666, - "darlington": 19667, - "slain": 19668, - "academie": 19669, - "lobbying": 19670, - "sediment": 19671, - "puzzles": 19672, - "##grass": 19673, - "defiance": 19674, - "dickens": 19675, - "manifest": 19676, - "tongues": 19677, - "alumnus": 19678, - "arbor": 19679, - "coincide": 19680, - "184": 19681, - "appalachian": 19682, - "mustafa": 19683, - "examiner": 19684, - "cabaret": 19685, - "traumatic": 19686, - "yves": 19687, - "bracelet": 19688, - "draining": 19689, - "heroin": 19690, - "magnum": 19691, - "baths": 19692, - "odessa": 19693, - "consonants": 19694, - "mitsubishi": 19695, - "##gua": 19696, - "kellan": 19697, - "vaudeville": 19698, - "##fr": 19699, - "joked": 19700, - "null": 19701, - "straps": 19702, - "probation": 19703, - "##ław": 19704, - "ceded": 19705, - "interfaces": 19706, - "##pas": 19707, - "##zawa": 19708, - "blinding": 19709, - "viet": 19710, - "224": 19711, - "rothschild": 19712, - "museo": 19713, - "640": 19714, - "huddersfield": 19715, - "##vr": 19716, - "tactic": 19717, - "##storm": 19718, - "brackets": 19719, - "dazed": 19720, - "incorrectly": 19721, - "##vu": 19722, - "reg": 19723, - "glazed": 19724, - "fearful": 19725, - "manifold": 19726, - "benefited": 19727, - "irony": 19728, - "##sun": 19729, - "stumbling": 19730, - "##rte": 19731, - "willingness": 19732, - "balkans": 19733, - "mei": 19734, - "wraps": 19735, - "##aba": 19736, - "injected": 19737, - "##lea": 19738, - "gu": 19739, - "syed": 19740, - "harmless": 19741, - "##hammer": 19742, - "bray": 19743, - "takeoff": 19744, - "poppy": 19745, - "timor": 19746, - "cardboard": 19747, - "astronaut": 19748, - "purdue": 19749, - "weeping": 19750, - "southbound": 19751, - "cursing": 19752, - "stalls": 19753, - "diagonal": 19754, - "##neer": 19755, - "lamar": 19756, - "bryce": 19757, - "comte": 19758, - "weekdays": 19759, - "harrington": 19760, - "##uba": 19761, - "negatively": 19762, - "##see": 19763, - "lays": 19764, - "grouping": 19765, - "##cken": 19766, - "##henko": 19767, - "affirmed": 19768, - "halle": 19769, - "modernist": 19770, - "##lai": 19771, - "hodges": 19772, - "smelling": 19773, - "aristocratic": 19774, - "baptized": 19775, - "dismiss": 19776, - "justification": 19777, - "oilers": 19778, - "##now": 19779, - "coupling": 19780, - "qin": 19781, - "snack": 19782, - "healer": 19783, - "##qing": 19784, - "gardener": 19785, - "layla": 19786, - "battled": 19787, - "formulated": 19788, - "stephenson": 19789, - "gravitational": 19790, - "##gill": 19791, - "##jun": 19792, - "1768": 19793, - "granny": 19794, - "coordinating": 19795, - "suites": 19796, - "##cd": 19797, - "##ioned": 19798, - "monarchs": 19799, - "##cote": 19800, - "##hips": 19801, - "sep": 19802, - "blended": 19803, - "apr": 19804, - "barrister": 19805, - "deposition": 19806, - "fia": 19807, - "mina": 19808, - "policemen": 19809, - "paranoid": 19810, - "##pressed": 19811, - "churchyard": 19812, - "covert": 19813, - "crumpled": 19814, - "creep": 19815, - "abandoning": 19816, - "tr": 19817, - "transmit": 19818, - "conceal": 19819, - "barr": 19820, - "understands": 19821, - "readiness": 19822, - "spire": 19823, - "##cology": 19824, - "##enia": 19825, - "##erry": 19826, - "610": 19827, - "startling": 19828, - "unlock": 19829, - "vida": 19830, - "bowled": 19831, - "slots": 19832, - "##nat": 19833, - "##islav": 19834, - "spaced": 19835, - "trusting": 19836, - "admire": 19837, - "rig": 19838, - "##ink": 19839, - "slack": 19840, - "##70": 19841, - "mv": 19842, - "207": 19843, - "casualty": 19844, - "##wei": 19845, - "classmates": 19846, - "##odes": 19847, - "##rar": 19848, - "##rked": 19849, - "amherst": 19850, - "furnished": 19851, - "evolve": 19852, - "foundry": 19853, - "menace": 19854, - "mead": 19855, - "##lein": 19856, - "flu": 19857, - "wesleyan": 19858, - "##kled": 19859, - "monterey": 19860, - "webber": 19861, - "##vos": 19862, - "wil": 19863, - "##mith": 19864, - "##на": 19865, - "bartholomew": 19866, - "justices": 19867, - "restrained": 19868, - "##cke": 19869, - "amenities": 19870, - "191": 19871, - "mediated": 19872, - "sewage": 19873, - "trenches": 19874, - "ml": 19875, - "mainz": 19876, - "##thus": 19877, - "1800s": 19878, - "##cula": 19879, - "##inski": 19880, - "caine": 19881, - "bonding": 19882, - "213": 19883, - "converts": 19884, - "spheres": 19885, - "superseded": 19886, - "marianne": 19887, - "crypt": 19888, - "sweaty": 19889, - "ensign": 19890, - "historia": 19891, - "##br": 19892, - "spruce": 19893, - "##post": 19894, - "##ask": 19895, - "forks": 19896, - "thoughtfully": 19897, - "yukon": 19898, - "pamphlet": 19899, - "ames": 19900, - "##uter": 19901, - "karma": 19902, - "##yya": 19903, - "bryn": 19904, - "negotiation": 19905, - "sighs": 19906, - "incapable": 19907, - "##mbre": 19908, - "##ntial": 19909, - "actresses": 19910, - "taft": 19911, - "##mill": 19912, - "luce": 19913, - "prevailed": 19914, - "##amine": 19915, - "1773": 19916, - "motionless": 19917, - "envoy": 19918, - "testify": 19919, - "investing": 19920, - "sculpted": 19921, - "instructors": 19922, - "provence": 19923, - "kali": 19924, - "cullen": 19925, - "horseback": 19926, - "##while": 19927, - "goodwin": 19928, - "##jos": 19929, - "gaa": 19930, - "norte": 19931, - "##ldon": 19932, - "modify": 19933, - "wavelength": 19934, - "abd": 19935, - "214": 19936, - "skinned": 19937, - "sprinter": 19938, - "forecast": 19939, - "scheduling": 19940, - "marries": 19941, - "squared": 19942, - "tentative": 19943, - "##chman": 19944, - "boer": 19945, - "##isch": 19946, - "bolts": 19947, - "swap": 19948, - "fisherman": 19949, - "assyrian": 19950, - "impatiently": 19951, - "guthrie": 19952, - "martins": 19953, - "murdoch": 19954, - "194": 19955, - "tanya": 19956, - "nicely": 19957, - "dolly": 19958, - "lacy": 19959, - "med": 19960, - "##45": 19961, - "syn": 19962, - "decks": 19963, - "fashionable": 19964, - "millionaire": 19965, - "##ust": 19966, - "surfing": 19967, - "##ml": 19968, - "##ision": 19969, - "heaved": 19970, - "tammy": 19971, - "consulate": 19972, - "attendees": 19973, - "routinely": 19974, - "197": 19975, - "fuse": 19976, - "saxophonist": 19977, - "backseat": 19978, - "malaya": 19979, - "##lord": 19980, - "scowl": 19981, - "tau": 19982, - "##ishly": 19983, - "193": 19984, - "sighted": 19985, - "steaming": 19986, - "##rks": 19987, - "303": 19988, - "911": 19989, - "##holes": 19990, - "##hong": 19991, - "ching": 19992, - "##wife": 19993, - "bless": 19994, - "conserved": 19995, - "jurassic": 19996, - "stacey": 19997, - "unix": 19998, - "zion": 19999, - "chunk": 20000, - "rigorous": 20001, - "blaine": 20002, - "198": 20003, - "peabody": 20004, - "slayer": 20005, - "dismay": 20006, - "brewers": 20007, - "nz": 20008, - "##jer": 20009, - "det": 20010, - "##glia": 20011, - "glover": 20012, - "postwar": 20013, - "int": 20014, - "penetration": 20015, - "sylvester": 20016, - "imitation": 20017, - "vertically": 20018, - "airlift": 20019, - "heiress": 20020, - "knoxville": 20021, - "viva": 20022, - "##uin": 20023, - "390": 20024, - "macon": 20025, - "##rim": 20026, - "##fighter": 20027, - "##gonal": 20028, - "janice": 20029, - "##orescence": 20030, - "##wari": 20031, - "marius": 20032, - "belongings": 20033, - "leicestershire": 20034, - "196": 20035, - "blanco": 20036, - "inverted": 20037, - "preseason": 20038, - "sanity": 20039, - "sobbing": 20040, - "##due": 20041, - "##elt": 20042, - "##dled": 20043, - "collingwood": 20044, - "regeneration": 20045, - "flickering": 20046, - "shortest": 20047, - "##mount": 20048, - "##osi": 20049, - "feminism": 20050, - "##lat": 20051, - "sherlock": 20052, - "cabinets": 20053, - "fumbled": 20054, - "northbound": 20055, - "precedent": 20056, - "snaps": 20057, - "##mme": 20058, - "researching": 20059, - "##akes": 20060, - "guillaume": 20061, - "insights": 20062, - "manipulated": 20063, - "vapor": 20064, - "neighbour": 20065, - "sap": 20066, - "gangster": 20067, - "frey": 20068, - "f1": 20069, - "stalking": 20070, - "scarcely": 20071, - "callie": 20072, - "barnett": 20073, - "tendencies": 20074, - "audi": 20075, - "doomed": 20076, - "assessing": 20077, - "slung": 20078, - "panchayat": 20079, - "ambiguous": 20080, - "bartlett": 20081, - "##etto": 20082, - "distributing": 20083, - "violating": 20084, - "wolverhampton": 20085, - "##hetic": 20086, - "swami": 20087, - "histoire": 20088, - "##urus": 20089, - "liable": 20090, - "pounder": 20091, - "groin": 20092, - "hussain": 20093, - "larsen": 20094, - "popping": 20095, - "surprises": 20096, - "##atter": 20097, - "vie": 20098, - "curt": 20099, - "##station": 20100, - "mute": 20101, - "relocate": 20102, - "musicals": 20103, - "authorization": 20104, - "richter": 20105, - "##sef": 20106, - "immortality": 20107, - "tna": 20108, - "bombings": 20109, - "##press": 20110, - "deteriorated": 20111, - "yiddish": 20112, - "##acious": 20113, - "robbed": 20114, - "colchester": 20115, - "cs": 20116, - "pmid": 20117, - "ao": 20118, - "verified": 20119, - "balancing": 20120, - "apostle": 20121, - "swayed": 20122, - "recognizable": 20123, - "oxfordshire": 20124, - "retention": 20125, - "nottinghamshire": 20126, - "contender": 20127, - "judd": 20128, - "invitational": 20129, - "shrimp": 20130, - "uhf": 20131, - "##icient": 20132, - "cleaner": 20133, - "longitudinal": 20134, - "tanker": 20135, - "##mur": 20136, - "acronym": 20137, - "broker": 20138, - "koppen": 20139, - "sundance": 20140, - "suppliers": 20141, - "##gil": 20142, - "4000": 20143, - "clipped": 20144, - "fuels": 20145, - "petite": 20146, - "##anne": 20147, - "landslide": 20148, - "helene": 20149, - "diversion": 20150, - "populous": 20151, - "landowners": 20152, - "auspices": 20153, - "melville": 20154, - "quantitative": 20155, - "##xes": 20156, - "ferries": 20157, - "nicky": 20158, - "##llus": 20159, - "doo": 20160, - "haunting": 20161, - "roche": 20162, - "carver": 20163, - "downed": 20164, - "unavailable": 20165, - "##pathy": 20166, - "approximation": 20167, - "hiroshima": 20168, - "##hue": 20169, - "garfield": 20170, - "valle": 20171, - "comparatively": 20172, - "keyboardist": 20173, - "traveler": 20174, - "##eit": 20175, - "congestion": 20176, - "calculating": 20177, - "subsidiaries": 20178, - "##bate": 20179, - "serb": 20180, - "modernization": 20181, - "fairies": 20182, - "deepened": 20183, - "ville": 20184, - "averages": 20185, - "##lore": 20186, - "inflammatory": 20187, - "tonga": 20188, - "##itch": 20189, - "coā‚‚": 20190, - "squads": 20191, - "##hea": 20192, - "gigantic": 20193, - "serum": 20194, - "enjoyment": 20195, - "retailer": 20196, - "verona": 20197, - "35th": 20198, - "cis": 20199, - "##phobic": 20200, - "magna": 20201, - "technicians": 20202, - "##vati": 20203, - "arithmetic": 20204, - "##sport": 20205, - "levin": 20206, - "##dation": 20207, - "amtrak": 20208, - "chow": 20209, - "sienna": 20210, - "##eyer": 20211, - "backstage": 20212, - "entrepreneurship": 20213, - "##otic": 20214, - "learnt": 20215, - "tao": 20216, - "##udy": 20217, - "worcestershire": 20218, - "formulation": 20219, - "baggage": 20220, - "hesitant": 20221, - "bali": 20222, - "sabotage": 20223, - "##kari": 20224, - "barren": 20225, - "enhancing": 20226, - "murmur": 20227, - "pl": 20228, - "freshly": 20229, - "putnam": 20230, - "syntax": 20231, - "aces": 20232, - "medicines": 20233, - "resentment": 20234, - "bandwidth": 20235, - "##sier": 20236, - "grins": 20237, - "chili": 20238, - "guido": 20239, - "##sei": 20240, - "framing": 20241, - "implying": 20242, - "gareth": 20243, - "lissa": 20244, - "genevieve": 20245, - "pertaining": 20246, - "admissions": 20247, - "geo": 20248, - "thorpe": 20249, - "proliferation": 20250, - "sato": 20251, - "bela": 20252, - "analyzing": 20253, - "parting": 20254, - "##gor": 20255, - "awakened": 20256, - "##isman": 20257, - "huddled": 20258, - "secrecy": 20259, - "##kling": 20260, - "hush": 20261, - "gentry": 20262, - "540": 20263, - "dungeons": 20264, - "##ego": 20265, - "coasts": 20266, - "##utz": 20267, - "sacrificed": 20268, - "##chule": 20269, - "landowner": 20270, - "mutually": 20271, - "prevalence": 20272, - "programmer": 20273, - "adolescent": 20274, - "disrupted": 20275, - "seaside": 20276, - "gee": 20277, - "trusts": 20278, - "vamp": 20279, - "georgie": 20280, - "##nesian": 20281, - "##iol": 20282, - "schedules": 20283, - "sindh": 20284, - "##market": 20285, - "etched": 20286, - "hm": 20287, - "sparse": 20288, - "bey": 20289, - "beaux": 20290, - "scratching": 20291, - "gliding": 20292, - "unidentified": 20293, - "216": 20294, - "collaborating": 20295, - "gems": 20296, - "jesuits": 20297, - "oro": 20298, - "accumulation": 20299, - "shaping": 20300, - "mbe": 20301, - "anal": 20302, - "##xin": 20303, - "231": 20304, - "enthusiasts": 20305, - "newscast": 20306, - "##egan": 20307, - "janata": 20308, - "dewey": 20309, - "parkinson": 20310, - "179": 20311, - "ankara": 20312, - "biennial": 20313, - "towering": 20314, - "dd": 20315, - "inconsistent": 20316, - "950": 20317, - "##chet": 20318, - "thriving": 20319, - "terminate": 20320, - "cabins": 20321, - "furiously": 20322, - "eats": 20323, - "advocating": 20324, - "donkey": 20325, - "marley": 20326, - "muster": 20327, - "phyllis": 20328, - "leiden": 20329, - "##user": 20330, - "grassland": 20331, - "glittering": 20332, - "iucn": 20333, - "loneliness": 20334, - "217": 20335, - "memorandum": 20336, - "armenians": 20337, - "##ddle": 20338, - "popularized": 20339, - "rhodesia": 20340, - "60s": 20341, - "lame": 20342, - "##illon": 20343, - "sans": 20344, - "bikini": 20345, - "header": 20346, - "orbits": 20347, - "##xx": 20348, - "##finger": 20349, - "##ulator": 20350, - "sharif": 20351, - "spines": 20352, - "biotechnology": 20353, - "strolled": 20354, - "naughty": 20355, - "yates": 20356, - "##wire": 20357, - "fremantle": 20358, - "milo": 20359, - "##mour": 20360, - "abducted": 20361, - "removes": 20362, - "##atin": 20363, - "humming": 20364, - "wonderland": 20365, - "##chrome": 20366, - "##ester": 20367, - "hume": 20368, - "pivotal": 20369, - "##rates": 20370, - "armand": 20371, - "grams": 20372, - "believers": 20373, - "elector": 20374, - "rte": 20375, - "apron": 20376, - "bis": 20377, - "scraped": 20378, - "##yria": 20379, - "endorsement": 20380, - "initials": 20381, - "##llation": 20382, - "eps": 20383, - "dotted": 20384, - "hints": 20385, - "buzzing": 20386, - "emigration": 20387, - "nearer": 20388, - "##tom": 20389, - "indicators": 20390, - "##ulu": 20391, - "coarse": 20392, - "neutron": 20393, - "protectorate": 20394, - "##uze": 20395, - "directional": 20396, - "exploits": 20397, - "pains": 20398, - "loire": 20399, - "1830s": 20400, - "proponents": 20401, - "guggenheim": 20402, - "rabbits": 20403, - "ritchie": 20404, - "305": 20405, - "hectare": 20406, - "inputs": 20407, - "hutton": 20408, - "##raz": 20409, - "verify": 20410, - "##ako": 20411, - "boilers": 20412, - "longitude": 20413, - "##lev": 20414, - "skeletal": 20415, - "yer": 20416, - "emilia": 20417, - "citrus": 20418, - "compromised": 20419, - "##gau": 20420, - "pokemon": 20421, - "prescription": 20422, - "paragraph": 20423, - "eduard": 20424, - "cadillac": 20425, - "attire": 20426, - "categorized": 20427, - "kenyan": 20428, - "weddings": 20429, - "charley": 20430, - "##bourg": 20431, - "entertain": 20432, - "monmouth": 20433, - "##lles": 20434, - "nutrients": 20435, - "davey": 20436, - "mesh": 20437, - "incentive": 20438, - "practised": 20439, - "ecosystems": 20440, - "kemp": 20441, - "subdued": 20442, - "overheard": 20443, - "##rya": 20444, - "bodily": 20445, - "maxim": 20446, - "##nius": 20447, - "apprenticeship": 20448, - "ursula": 20449, - "##fight": 20450, - "lodged": 20451, - "rug": 20452, - "silesian": 20453, - "unconstitutional": 20454, - "patel": 20455, - "inspected": 20456, - "coyote": 20457, - "unbeaten": 20458, - "##hak": 20459, - "34th": 20460, - "disruption": 20461, - "convict": 20462, - "parcel": 20463, - "##cl": 20464, - "##nham": 20465, - "collier": 20466, - "implicated": 20467, - "mallory": 20468, - "##iac": 20469, - "##lab": 20470, - "susannah": 20471, - "winkler": 20472, - "##rber": 20473, - "shia": 20474, - "phelps": 20475, - "sediments": 20476, - "graphical": 20477, - "robotic": 20478, - "##sner": 20479, - "adulthood": 20480, - "mart": 20481, - "smoked": 20482, - "##isto": 20483, - "kathryn": 20484, - "clarified": 20485, - "##aran": 20486, - "divides": 20487, - "convictions": 20488, - "oppression": 20489, - "pausing": 20490, - "burying": 20491, - "##mt": 20492, - "federico": 20493, - "mathias": 20494, - "eileen": 20495, - "##tana": 20496, - "kite": 20497, - "hunched": 20498, - "##acies": 20499, - "189": 20500, - "##atz": 20501, - "disadvantage": 20502, - "liza": 20503, - "kinetic": 20504, - "greedy": 20505, - "paradox": 20506, - "yokohama": 20507, - "dowager": 20508, - "trunks": 20509, - "ventured": 20510, - "##gement": 20511, - "gupta": 20512, - "vilnius": 20513, - "olaf": 20514, - "##thest": 20515, - "crimean": 20516, - "hopper": 20517, - "##ej": 20518, - "progressively": 20519, - "arturo": 20520, - "mouthed": 20521, - "arrondissement": 20522, - "##fusion": 20523, - "rubin": 20524, - "simulcast": 20525, - "oceania": 20526, - "##orum": 20527, - "##stra": 20528, - "##rred": 20529, - "busiest": 20530, - "intensely": 20531, - "navigator": 20532, - "cary": 20533, - "##vine": 20534, - "##hini": 20535, - "##bies": 20536, - "fife": 20537, - "rowe": 20538, - "rowland": 20539, - "posing": 20540, - "insurgents": 20541, - "shafts": 20542, - "lawsuits": 20543, - "activate": 20544, - "conor": 20545, - "inward": 20546, - "culturally": 20547, - "garlic": 20548, - "265": 20549, - "##eering": 20550, - "eclectic": 20551, - "##hui": 20552, - "##kee": 20553, - "##nl": 20554, - "furrowed": 20555, - "vargas": 20556, - "meteorological": 20557, - "rendezvous": 20558, - "##aus": 20559, - "culinary": 20560, - "commencement": 20561, - "##dition": 20562, - "quota": 20563, - "##notes": 20564, - "mommy": 20565, - "salaries": 20566, - "overlapping": 20567, - "mule": 20568, - "##iology": 20569, - "##mology": 20570, - "sums": 20571, - "wentworth": 20572, - "##isk": 20573, - "##zione": 20574, - "mainline": 20575, - "subgroup": 20576, - "##illy": 20577, - "hack": 20578, - "plaintiff": 20579, - "verdi": 20580, - "bulb": 20581, - "differentiation": 20582, - "engagements": 20583, - "multinational": 20584, - "supplemented": 20585, - "bertrand": 20586, - "caller": 20587, - "regis": 20588, - "##naire": 20589, - "##sler": 20590, - "##arts": 20591, - "##imated": 20592, - "blossom": 20593, - "propagation": 20594, - "kilometer": 20595, - "viaduct": 20596, - "vineyards": 20597, - "##uate": 20598, - "beckett": 20599, - "optimization": 20600, - "golfer": 20601, - "songwriters": 20602, - "seminal": 20603, - "semitic": 20604, - "thud": 20605, - "volatile": 20606, - "evolving": 20607, - "ridley": 20608, - "##wley": 20609, - "trivial": 20610, - "distributions": 20611, - "scandinavia": 20612, - "jiang": 20613, - "##ject": 20614, - "wrestled": 20615, - "insistence": 20616, - "##dio": 20617, - "emphasizes": 20618, - "napkin": 20619, - "##ods": 20620, - "adjunct": 20621, - "rhyme": 20622, - "##ricted": 20623, - "##eti": 20624, - "hopeless": 20625, - "surrounds": 20626, - "tremble": 20627, - "32nd": 20628, - "smoky": 20629, - "##ntly": 20630, - "oils": 20631, - "medicinal": 20632, - "padded": 20633, - "steer": 20634, - "wilkes": 20635, - "219": 20636, - "255": 20637, - "concessions": 20638, - "hue": 20639, - "uniquely": 20640, - "blinded": 20641, - "landon": 20642, - "yahoo": 20643, - "##lane": 20644, - "hendrix": 20645, - "commemorating": 20646, - "dex": 20647, - "specify": 20648, - "chicks": 20649, - "##ggio": 20650, - "intercity": 20651, - "1400": 20652, - "morley": 20653, - "##torm": 20654, - "highlighting": 20655, - "##oting": 20656, - "pang": 20657, - "oblique": 20658, - "stalled": 20659, - "##liner": 20660, - "flirting": 20661, - "newborn": 20662, - "1769": 20663, - "bishopric": 20664, - "shaved": 20665, - "232": 20666, - "currie": 20667, - "##ush": 20668, - "dharma": 20669, - "spartan": 20670, - "##ooped": 20671, - "favorites": 20672, - "smug": 20673, - "novella": 20674, - "sirens": 20675, - "abusive": 20676, - "creations": 20677, - "espana": 20678, - "##lage": 20679, - "paradigm": 20680, - "semiconductor": 20681, - "sheen": 20682, - "##rdo": 20683, - "##yen": 20684, - "##zak": 20685, - "nrl": 20686, - "renew": 20687, - "##pose": 20688, - "##tur": 20689, - "adjutant": 20690, - "marches": 20691, - "norma": 20692, - "##enity": 20693, - "ineffective": 20694, - "weimar": 20695, - "grunt": 20696, - "##gat": 20697, - "lordship": 20698, - "plotting": 20699, - "expenditure": 20700, - "infringement": 20701, - "lbs": 20702, - "refrain": 20703, - "av": 20704, - "mimi": 20705, - "mistakenly": 20706, - "postmaster": 20707, - "1771": 20708, - "##bara": 20709, - "ras": 20710, - "motorsports": 20711, - "tito": 20712, - "199": 20713, - "subjective": 20714, - "##zza": 20715, - "bully": 20716, - "stew": 20717, - "##kaya": 20718, - "prescott": 20719, - "1a": 20720, - "##raphic": 20721, - "##zam": 20722, - "bids": 20723, - "styling": 20724, - "paranormal": 20725, - "reeve": 20726, - "sneaking": 20727, - "exploding": 20728, - "katz": 20729, - "akbar": 20730, - "migrant": 20731, - "syllables": 20732, - "indefinitely": 20733, - "##ogical": 20734, - "destroys": 20735, - "replaces": 20736, - "applause": 20737, - "##phine": 20738, - "pest": 20739, - "##fide": 20740, - "218": 20741, - "articulated": 20742, - "bertie": 20743, - "##thing": 20744, - "##cars": 20745, - "##ptic": 20746, - "courtroom": 20747, - "crowley": 20748, - "aesthetics": 20749, - "cummings": 20750, - "tehsil": 20751, - "hormones": 20752, - "titanic": 20753, - "dangerously": 20754, - "##ibe": 20755, - "stadion": 20756, - "jaenelle": 20757, - "auguste": 20758, - "ciudad": 20759, - "##chu": 20760, - "mysore": 20761, - "partisans": 20762, - "##sio": 20763, - "lucan": 20764, - "philipp": 20765, - "##aly": 20766, - "debating": 20767, - "henley": 20768, - "interiors": 20769, - "##rano": 20770, - "##tious": 20771, - "homecoming": 20772, - "beyonce": 20773, - "usher": 20774, - "henrietta": 20775, - "prepares": 20776, - "weeds": 20777, - "##oman": 20778, - "ely": 20779, - "plucked": 20780, - "##pire": 20781, - "##dable": 20782, - "luxurious": 20783, - "##aq": 20784, - "artifact": 20785, - "password": 20786, - "pasture": 20787, - "juno": 20788, - "maddy": 20789, - "minsk": 20790, - "##dder": 20791, - "##ologies": 20792, - "##rone": 20793, - "assessments": 20794, - "martian": 20795, - "royalist": 20796, - "1765": 20797, - "examines": 20798, - "##mani": 20799, - "##rge": 20800, - "nino": 20801, - "223": 20802, - "parry": 20803, - "scooped": 20804, - "relativity": 20805, - "##eli": 20806, - "##uting": 20807, - "##cao": 20808, - "congregational": 20809, - "noisy": 20810, - "traverse": 20811, - "##agawa": 20812, - "strikeouts": 20813, - "nickelodeon": 20814, - "obituary": 20815, - "transylvania": 20816, - "binds": 20817, - "depictions": 20818, - "polk": 20819, - "trolley": 20820, - "##yed": 20821, - "##lard": 20822, - "breeders": 20823, - "##under": 20824, - "dryly": 20825, - "hokkaido": 20826, - "1762": 20827, - "strengths": 20828, - "stacks": 20829, - "bonaparte": 20830, - "connectivity": 20831, - "neared": 20832, - "prostitutes": 20833, - "stamped": 20834, - "anaheim": 20835, - "gutierrez": 20836, - "sinai": 20837, - "##zzling": 20838, - "bram": 20839, - "fresno": 20840, - "madhya": 20841, - "##86": 20842, - "proton": 20843, - "##lena": 20844, - "##llum": 20845, - "##phon": 20846, - "reelected": 20847, - "wanda": 20848, - "##anus": 20849, - "##lb": 20850, - "ample": 20851, - "distinguishing": 20852, - "##yler": 20853, - "grasping": 20854, - "sermons": 20855, - "tomato": 20856, - "bland": 20857, - "stimulation": 20858, - "avenues": 20859, - "##eux": 20860, - "spreads": 20861, - "scarlett": 20862, - "fern": 20863, - "pentagon": 20864, - "assert": 20865, - "baird": 20866, - "chesapeake": 20867, - "ir": 20868, - "calmed": 20869, - "distortion": 20870, - "fatalities": 20871, - "##olis": 20872, - "correctional": 20873, - "pricing": 20874, - "##astic": 20875, - "##gina": 20876, - "prom": 20877, - "dammit": 20878, - "ying": 20879, - "collaborate": 20880, - "##chia": 20881, - "welterweight": 20882, - "33rd": 20883, - "pointer": 20884, - "substitution": 20885, - "bonded": 20886, - "umpire": 20887, - "communicating": 20888, - "multitude": 20889, - "paddle": 20890, - "##obe": 20891, - "federally": 20892, - "intimacy": 20893, - "##insky": 20894, - "betray": 20895, - "ssr": 20896, - "##lett": 20897, - "##lean": 20898, - "##lves": 20899, - "##therapy": 20900, - "airbus": 20901, - "##tery": 20902, - "functioned": 20903, - "ud": 20904, - "bearer": 20905, - "biomedical": 20906, - "netflix": 20907, - "##hire": 20908, - "##nca": 20909, - "condom": 20910, - "brink": 20911, - "ik": 20912, - "##nical": 20913, - "macy": 20914, - "##bet": 20915, - "flap": 20916, - "gma": 20917, - "experimented": 20918, - "jelly": 20919, - "lavender": 20920, - "##icles": 20921, - "##ulia": 20922, - "munro": 20923, - "##mian": 20924, - "##tial": 20925, - "rye": 20926, - "##rle": 20927, - "60th": 20928, - "gigs": 20929, - "hottest": 20930, - "rotated": 20931, - "predictions": 20932, - "fuji": 20933, - "bu": 20934, - "##erence": 20935, - "##omi": 20936, - "barangay": 20937, - "##fulness": 20938, - "##sas": 20939, - "clocks": 20940, - "##rwood": 20941, - "##liness": 20942, - "cereal": 20943, - "roe": 20944, - "wight": 20945, - "decker": 20946, - "uttered": 20947, - "babu": 20948, - "onion": 20949, - "xml": 20950, - "forcibly": 20951, - "##df": 20952, - "petra": 20953, - "sarcasm": 20954, - "hartley": 20955, - "peeled": 20956, - "storytelling": 20957, - "##42": 20958, - "##xley": 20959, - "##ysis": 20960, - "##ffa": 20961, - "fibre": 20962, - "kiel": 20963, - "auditor": 20964, - "fig": 20965, - "harald": 20966, - "greenville": 20967, - "##berries": 20968, - "geographically": 20969, - "nell": 20970, - "quartz": 20971, - "##athic": 20972, - "cemeteries": 20973, - "##lr": 20974, - "crossings": 20975, - "nah": 20976, - "holloway": 20977, - "reptiles": 20978, - "chun": 20979, - "sichuan": 20980, - "snowy": 20981, - "660": 20982, - "corrections": 20983, - "##ivo": 20984, - "zheng": 20985, - "ambassadors": 20986, - "blacksmith": 20987, - "fielded": 20988, - "fluids": 20989, - "hardcover": 20990, - "turnover": 20991, - "medications": 20992, - "melvin": 20993, - "academies": 20994, - "##erton": 20995, - "ro": 20996, - "roach": 20997, - "absorbing": 20998, - "spaniards": 20999, - "colton": 21000, - "##founded": 21001, - "outsider": 21002, - "espionage": 21003, - "kelsey": 21004, - "245": 21005, - "edible": 21006, - "##ulf": 21007, - "dora": 21008, - "establishes": 21009, - "##sham": 21010, - "##tries": 21011, - "contracting": 21012, - "##tania": 21013, - "cinematic": 21014, - "costello": 21015, - "nesting": 21016, - "##uron": 21017, - "connolly": 21018, - "duff": 21019, - "##nology": 21020, - "mma": 21021, - "##mata": 21022, - "fergus": 21023, - "sexes": 21024, - "gi": 21025, - "optics": 21026, - "spectator": 21027, - "woodstock": 21028, - "banning": 21029, - "##hee": 21030, - "##fle": 21031, - "differentiate": 21032, - "outfielder": 21033, - "refinery": 21034, - "226": 21035, - "312": 21036, - "gerhard": 21037, - "horde": 21038, - "lair": 21039, - "drastically": 21040, - "##udi": 21041, - "landfall": 21042, - "##cheng": 21043, - "motorsport": 21044, - "odi": 21045, - "##achi": 21046, - "predominant": 21047, - "quay": 21048, - "skins": 21049, - "##ental": 21050, - "edna": 21051, - "harshly": 21052, - "complementary": 21053, - "murdering": 21054, - "##aves": 21055, - "wreckage": 21056, - "##90": 21057, - "ono": 21058, - "outstretched": 21059, - "lennox": 21060, - "munitions": 21061, - "galen": 21062, - "reconcile": 21063, - "470": 21064, - "scalp": 21065, - "bicycles": 21066, - "gillespie": 21067, - "questionable": 21068, - "rosenberg": 21069, - "guillermo": 21070, - "hostel": 21071, - "jarvis": 21072, - "kabul": 21073, - "volvo": 21074, - "opium": 21075, - "yd": 21076, - "##twined": 21077, - "abuses": 21078, - "decca": 21079, - "outpost": 21080, - "##cino": 21081, - "sensible": 21082, - "neutrality": 21083, - "##64": 21084, - "ponce": 21085, - "anchorage": 21086, - "atkins": 21087, - "turrets": 21088, - "inadvertently": 21089, - "disagree": 21090, - "libre": 21091, - "vodka": 21092, - "reassuring": 21093, - "weighs": 21094, - "##yal": 21095, - "glide": 21096, - "jumper": 21097, - "ceilings": 21098, - "repertory": 21099, - "outs": 21100, - "stain": 21101, - "##bial": 21102, - "envy": 21103, - "##ucible": 21104, - "smashing": 21105, - "heightened": 21106, - "policing": 21107, - "hyun": 21108, - "mixes": 21109, - "lai": 21110, - "prima": 21111, - "##ples": 21112, - "celeste": 21113, - "##bina": 21114, - "lucrative": 21115, - "intervened": 21116, - "kc": 21117, - "manually": 21118, - "##rned": 21119, - "stature": 21120, - "staffed": 21121, - "bun": 21122, - "bastards": 21123, - "nairobi": 21124, - "priced": 21125, - "##auer": 21126, - "thatcher": 21127, - "##kia": 21128, - "tripped": 21129, - "comune": 21130, - "##ogan": 21131, - "##pled": 21132, - "brasil": 21133, - "incentives": 21134, - "emanuel": 21135, - "hereford": 21136, - "musica": 21137, - "##kim": 21138, - "benedictine": 21139, - "biennale": 21140, - "##lani": 21141, - "eureka": 21142, - "gardiner": 21143, - "rb": 21144, - "knocks": 21145, - "sha": 21146, - "##ael": 21147, - "##elled": 21148, - "##onate": 21149, - "efficacy": 21150, - "ventura": 21151, - "masonic": 21152, - "sanford": 21153, - "maize": 21154, - "leverage": 21155, - "##feit": 21156, - "capacities": 21157, - "santana": 21158, - "##aur": 21159, - "novelty": 21160, - "vanilla": 21161, - "##cter": 21162, - "##tour": 21163, - "benin": 21164, - "##oir": 21165, - "##rain": 21166, - "neptune": 21167, - "drafting": 21168, - "tallinn": 21169, - "##cable": 21170, - "humiliation": 21171, - "##boarding": 21172, - "schleswig": 21173, - "fabian": 21174, - "bernardo": 21175, - "liturgy": 21176, - "spectacle": 21177, - "sweeney": 21178, - "pont": 21179, - "routledge": 21180, - "##tment": 21181, - "cosmos": 21182, - "ut": 21183, - "hilt": 21184, - "sleek": 21185, - "universally": 21186, - "##eville": 21187, - "##gawa": 21188, - "typed": 21189, - "##dry": 21190, - "favors": 21191, - "allegheny": 21192, - "glaciers": 21193, - "##rly": 21194, - "recalling": 21195, - "aziz": 21196, - "##log": 21197, - "parasite": 21198, - "requiem": 21199, - "auf": 21200, - "##berto": 21201, - "##llin": 21202, - "illumination": 21203, - "##breaker": 21204, - "##issa": 21205, - "festivities": 21206, - "bows": 21207, - "govern": 21208, - "vibe": 21209, - "vp": 21210, - "333": 21211, - "sprawled": 21212, - "larson": 21213, - "pilgrim": 21214, - "bwf": 21215, - "leaping": 21216, - "##rts": 21217, - "##ssel": 21218, - "alexei": 21219, - "greyhound": 21220, - "hoarse": 21221, - "##dler": 21222, - "##oration": 21223, - "seneca": 21224, - "##cule": 21225, - "gaping": 21226, - "##ulously": 21227, - "##pura": 21228, - "cinnamon": 21229, - "##gens": 21230, - "##rricular": 21231, - "craven": 21232, - "fantasies": 21233, - "houghton": 21234, - "engined": 21235, - "reigned": 21236, - "dictator": 21237, - "supervising": 21238, - "##oris": 21239, - "bogota": 21240, - "commentaries": 21241, - "unnatural": 21242, - "fingernails": 21243, - "spirituality": 21244, - "tighten": 21245, - "##tm": 21246, - "canadiens": 21247, - "protesting": 21248, - "intentional": 21249, - "cheers": 21250, - "sparta": 21251, - "##ytic": 21252, - "##iere": 21253, - "##zine": 21254, - "widen": 21255, - "belgarath": 21256, - "controllers": 21257, - "dodd": 21258, - "iaaf": 21259, - "navarre": 21260, - "##ication": 21261, - "defect": 21262, - "squire": 21263, - "steiner": 21264, - "whisky": 21265, - "##mins": 21266, - "560": 21267, - "inevitably": 21268, - "tome": 21269, - "##gold": 21270, - "chew": 21271, - "##uid": 21272, - "##lid": 21273, - "elastic": 21274, - "##aby": 21275, - "streaked": 21276, - "alliances": 21277, - "jailed": 21278, - "regal": 21279, - "##ined": 21280, - "##phy": 21281, - "czechoslovak": 21282, - "narration": 21283, - "absently": 21284, - "##uld": 21285, - "bluegrass": 21286, - "guangdong": 21287, - "quran": 21288, - "criticizing": 21289, - "hose": 21290, - "hari": 21291, - "##liest": 21292, - "##owa": 21293, - "skier": 21294, - "streaks": 21295, - "deploy": 21296, - "##lom": 21297, - "raft": 21298, - "bose": 21299, - "dialed": 21300, - "huff": 21301, - "##eira": 21302, - "haifa": 21303, - "simplest": 21304, - "bursting": 21305, - "endings": 21306, - "ib": 21307, - "sultanate": 21308, - "##titled": 21309, - "franks": 21310, - "whitman": 21311, - "ensures": 21312, - "sven": 21313, - "##ggs": 21314, - "collaborators": 21315, - "forster": 21316, - "organising": 21317, - "ui": 21318, - "banished": 21319, - "napier": 21320, - "injustice": 21321, - "teller": 21322, - "layered": 21323, - "thump": 21324, - "##otti": 21325, - "roc": 21326, - "battleships": 21327, - "evidenced": 21328, - "fugitive": 21329, - "sadie": 21330, - "robotics": 21331, - "##roud": 21332, - "equatorial": 21333, - "geologist": 21334, - "##iza": 21335, - "yielding": 21336, - "##bron": 21337, - "##sr": 21338, - "internationale": 21339, - "mecca": 21340, - "##diment": 21341, - "sbs": 21342, - "skyline": 21343, - "toad": 21344, - "uploaded": 21345, - "reflective": 21346, - "undrafted": 21347, - "lal": 21348, - "leafs": 21349, - "bayern": 21350, - "##dai": 21351, - "lakshmi": 21352, - "shortlisted": 21353, - "##stick": 21354, - "##wicz": 21355, - "camouflage": 21356, - "donate": 21357, - "af": 21358, - "christi": 21359, - "lau": 21360, - "##acio": 21361, - "disclosed": 21362, - "nemesis": 21363, - "1761": 21364, - "assemble": 21365, - "straining": 21366, - "northamptonshire": 21367, - "tal": 21368, - "##asi": 21369, - "bernardino": 21370, - "premature": 21371, - "heidi": 21372, - "42nd": 21373, - "coefficients": 21374, - "galactic": 21375, - "reproduce": 21376, - "buzzed": 21377, - "sensations": 21378, - "zionist": 21379, - "monsieur": 21380, - "myrtle": 21381, - "##eme": 21382, - "archery": 21383, - "strangled": 21384, - "musically": 21385, - "viewpoint": 21386, - "antiquities": 21387, - "bei": 21388, - "trailers": 21389, - "seahawks": 21390, - "cured": 21391, - "pee": 21392, - "preferring": 21393, - "tasmanian": 21394, - "lange": 21395, - "sul": 21396, - "##mail": 21397, - "##working": 21398, - "colder": 21399, - "overland": 21400, - "lucivar": 21401, - "massey": 21402, - "gatherings": 21403, - "haitian": 21404, - "##smith": 21405, - "disapproval": 21406, - "flaws": 21407, - "##cco": 21408, - "##enbach": 21409, - "1766": 21410, - "npr": 21411, - "##icular": 21412, - "boroughs": 21413, - "creole": 21414, - "forums": 21415, - "techno": 21416, - "1755": 21417, - "dent": 21418, - "abdominal": 21419, - "streetcar": 21420, - "##eson": 21421, - "##stream": 21422, - "procurement": 21423, - "gemini": 21424, - "predictable": 21425, - "##tya": 21426, - "acheron": 21427, - "christoph": 21428, - "feeder": 21429, - "fronts": 21430, - "vendor": 21431, - "bernhard": 21432, - "jammu": 21433, - "tumors": 21434, - "slang": 21435, - "##uber": 21436, - "goaltender": 21437, - "twists": 21438, - "curving": 21439, - "manson": 21440, - "vuelta": 21441, - "mer": 21442, - "peanut": 21443, - "confessions": 21444, - "pouch": 21445, - "unpredictable": 21446, - "allowance": 21447, - "theodor": 21448, - "vascular": 21449, - "##factory": 21450, - "bala": 21451, - "authenticity": 21452, - "metabolic": 21453, - "coughing": 21454, - "nanjing": 21455, - "##cea": 21456, - "pembroke": 21457, - "##bard": 21458, - "splendid": 21459, - "36th": 21460, - "ff": 21461, - "hourly": 21462, - "##ahu": 21463, - "elmer": 21464, - "handel": 21465, - "##ivate": 21466, - "awarding": 21467, - "thrusting": 21468, - "dl": 21469, - "experimentation": 21470, - "##hesion": 21471, - "##46": 21472, - "caressed": 21473, - "entertained": 21474, - "steak": 21475, - "##rangle": 21476, - "biologist": 21477, - "orphans": 21478, - "baroness": 21479, - "oyster": 21480, - "stepfather": 21481, - "##dridge": 21482, - "mirage": 21483, - "reefs": 21484, - "speeding": 21485, - "##31": 21486, - "barons": 21487, - "1764": 21488, - "227": 21489, - "inhabit": 21490, - "preached": 21491, - "repealed": 21492, - "##tral": 21493, - "honoring": 21494, - "boogie": 21495, - "captives": 21496, - "administer": 21497, - "johanna": 21498, - "##imate": 21499, - "gel": 21500, - "suspiciously": 21501, - "1767": 21502, - "sobs": 21503, - "##dington": 21504, - "backbone": 21505, - "hayward": 21506, - "garry": 21507, - "##folding": 21508, - "##nesia": 21509, - "maxi": 21510, - "##oof": 21511, - "##ppe": 21512, - "ellison": 21513, - "galileo": 21514, - "##stand": 21515, - "crimea": 21516, - "frenzy": 21517, - "amour": 21518, - "bumper": 21519, - "matrices": 21520, - "natalia": 21521, - "baking": 21522, - "garth": 21523, - "palestinians": 21524, - "##grove": 21525, - "smack": 21526, - "conveyed": 21527, - "ensembles": 21528, - "gardening": 21529, - "##manship": 21530, - "##rup": 21531, - "##stituting": 21532, - "1640": 21533, - "harvesting": 21534, - "topography": 21535, - "jing": 21536, - "shifters": 21537, - "dormitory": 21538, - "##carriage": 21539, - "##lston": 21540, - "ist": 21541, - "skulls": 21542, - "##stadt": 21543, - "dolores": 21544, - "jewellery": 21545, - "sarawak": 21546, - "##wai": 21547, - "##zier": 21548, - "fences": 21549, - "christy": 21550, - "confinement": 21551, - "tumbling": 21552, - "credibility": 21553, - "fir": 21554, - "stench": 21555, - "##bria": 21556, - "##plication": 21557, - "##nged": 21558, - "##sam": 21559, - "virtues": 21560, - "##belt": 21561, - "marjorie": 21562, - "pba": 21563, - "##eem": 21564, - "##made": 21565, - "celebrates": 21566, - "schooner": 21567, - "agitated": 21568, - "barley": 21569, - "fulfilling": 21570, - "anthropologist": 21571, - "##pro": 21572, - "restrict": 21573, - "novi": 21574, - "regulating": 21575, - "##nent": 21576, - "padres": 21577, - "##rani": 21578, - "##hesive": 21579, - "loyola": 21580, - "tabitha": 21581, - "milky": 21582, - "olson": 21583, - "proprietor": 21584, - "crambidae": 21585, - "guarantees": 21586, - "intercollegiate": 21587, - "ljubljana": 21588, - "hilda": 21589, - "##sko": 21590, - "ignorant": 21591, - "hooded": 21592, - "##lts": 21593, - "sardinia": 21594, - "##lidae": 21595, - "##vation": 21596, - "frontman": 21597, - "privileged": 21598, - "witchcraft": 21599, - "##gp": 21600, - "jammed": 21601, - "laude": 21602, - "poking": 21603, - "##than": 21604, - "bracket": 21605, - "amazement": 21606, - "yunnan": 21607, - "##erus": 21608, - "maharaja": 21609, - "linnaeus": 21610, - "264": 21611, - "commissioning": 21612, - "milano": 21613, - "peacefully": 21614, - "##logies": 21615, - "akira": 21616, - "rani": 21617, - "regulator": 21618, - "##36": 21619, - "grasses": 21620, - "##rance": 21621, - "luzon": 21622, - "crows": 21623, - "compiler": 21624, - "gretchen": 21625, - "seaman": 21626, - "edouard": 21627, - "tab": 21628, - "buccaneers": 21629, - "ellington": 21630, - "hamlets": 21631, - "whig": 21632, - "socialists": 21633, - "##anto": 21634, - "directorial": 21635, - "easton": 21636, - "mythological": 21637, - "##kr": 21638, - "##vary": 21639, - "rhineland": 21640, - "semantic": 21641, - "taut": 21642, - "dune": 21643, - "inventions": 21644, - "succeeds": 21645, - "##iter": 21646, - "replication": 21647, - "branched": 21648, - "##pired": 21649, - "jul": 21650, - "prosecuted": 21651, - "kangaroo": 21652, - "penetrated": 21653, - "##avian": 21654, - "middlesbrough": 21655, - "doses": 21656, - "bleak": 21657, - "madam": 21658, - "predatory": 21659, - "relentless": 21660, - "##vili": 21661, - "reluctance": 21662, - "##vir": 21663, - "hailey": 21664, - "crore": 21665, - "silvery": 21666, - "1759": 21667, - "monstrous": 21668, - "swimmers": 21669, - "transmissions": 21670, - "hawthorn": 21671, - "informing": 21672, - "##eral": 21673, - "toilets": 21674, - "caracas": 21675, - "crouch": 21676, - "kb": 21677, - "##sett": 21678, - "295": 21679, - "cartel": 21680, - "hadley": 21681, - "##aling": 21682, - "alexia": 21683, - "yvonne": 21684, - "##biology": 21685, - "cinderella": 21686, - "eton": 21687, - "superb": 21688, - "blizzard": 21689, - "stabbing": 21690, - "industrialist": 21691, - "maximus": 21692, - "##gm": 21693, - "##orus": 21694, - "groves": 21695, - "maud": 21696, - "clade": 21697, - "oversized": 21698, - "comedic": 21699, - "##bella": 21700, - "rosen": 21701, - "nomadic": 21702, - "fulham": 21703, - "montane": 21704, - "beverages": 21705, - "galaxies": 21706, - "redundant": 21707, - "swarm": 21708, - "##rot": 21709, - "##folia": 21710, - "##llis": 21711, - "buckinghamshire": 21712, - "fen": 21713, - "bearings": 21714, - "bahadur": 21715, - "##rom": 21716, - "gilles": 21717, - "phased": 21718, - "dynamite": 21719, - "faber": 21720, - "benoit": 21721, - "vip": 21722, - "##ount": 21723, - "##wd": 21724, - "booking": 21725, - "fractured": 21726, - "tailored": 21727, - "anya": 21728, - "spices": 21729, - "westwood": 21730, - "cairns": 21731, - "auditions": 21732, - "inflammation": 21733, - "steamed": 21734, - "##rocity": 21735, - "##acion": 21736, - "##urne": 21737, - "skyla": 21738, - "thereof": 21739, - "watford": 21740, - "torment": 21741, - "archdeacon": 21742, - "transforms": 21743, - "lulu": 21744, - "demeanor": 21745, - "fucked": 21746, - "serge": 21747, - "##sor": 21748, - "mckenna": 21749, - "minas": 21750, - "entertainer": 21751, - "##icide": 21752, - "caress": 21753, - "originate": 21754, - "residue": 21755, - "##sty": 21756, - "1740": 21757, - "##ilised": 21758, - "##org": 21759, - "beech": 21760, - "##wana": 21761, - "subsidies": 21762, - "##ghton": 21763, - "emptied": 21764, - "gladstone": 21765, - "ru": 21766, - "firefighters": 21767, - "voodoo": 21768, - "##rcle": 21769, - "het": 21770, - "nightingale": 21771, - "tamara": 21772, - "edmond": 21773, - "ingredient": 21774, - "weaknesses": 21775, - "silhouette": 21776, - "285": 21777, - "compatibility": 21778, - "withdrawing": 21779, - "hampson": 21780, - "##mona": 21781, - "anguish": 21782, - "giggling": 21783, - "##mber": 21784, - "bookstore": 21785, - "##jiang": 21786, - "southernmost": 21787, - "tilting": 21788, - "##vance": 21789, - "bai": 21790, - "economical": 21791, - "rf": 21792, - "briefcase": 21793, - "dreadful": 21794, - "hinted": 21795, - "projections": 21796, - "shattering": 21797, - "totaling": 21798, - "##rogate": 21799, - "analogue": 21800, - "indicted": 21801, - "periodical": 21802, - "fullback": 21803, - "##dman": 21804, - "haynes": 21805, - "##tenberg": 21806, - "##ffs": 21807, - "##ishment": 21808, - "1745": 21809, - "thirst": 21810, - "stumble": 21811, - "penang": 21812, - "vigorous": 21813, - "##ddling": 21814, - "##kor": 21815, - "##lium": 21816, - "octave": 21817, - "##ove": 21818, - "##enstein": 21819, - "##inen": 21820, - "##ones": 21821, - "siberian": 21822, - "##uti": 21823, - "cbn": 21824, - "repeal": 21825, - "swaying": 21826, - "##vington": 21827, - "khalid": 21828, - "tanaka": 21829, - "unicorn": 21830, - "otago": 21831, - "plastered": 21832, - "lobe": 21833, - "riddle": 21834, - "##rella": 21835, - "perch": 21836, - "##ishing": 21837, - "croydon": 21838, - "filtered": 21839, - "graeme": 21840, - "tripoli": 21841, - "##ossa": 21842, - "crocodile": 21843, - "##chers": 21844, - "sufi": 21845, - "mined": 21846, - "##tung": 21847, - "inferno": 21848, - "lsu": 21849, - "##phi": 21850, - "swelled": 21851, - "utilizes": 21852, - "Ā£2": 21853, - "cale": 21854, - "periodicals": 21855, - "styx": 21856, - "hike": 21857, - "informally": 21858, - "coop": 21859, - "lund": 21860, - "##tidae": 21861, - "ala": 21862, - "hen": 21863, - "qui": 21864, - "transformations": 21865, - "disposed": 21866, - "sheath": 21867, - "chickens": 21868, - "##cade": 21869, - "fitzroy": 21870, - "sas": 21871, - "silesia": 21872, - "unacceptable": 21873, - "odisha": 21874, - "1650": 21875, - "sabrina": 21876, - "pe": 21877, - "spokane": 21878, - "ratios": 21879, - "athena": 21880, - "massage": 21881, - "shen": 21882, - "dilemma": 21883, - "##drum": 21884, - "##riz": 21885, - "##hul": 21886, - "corona": 21887, - "doubtful": 21888, - "niall": 21889, - "##pha": 21890, - "##bino": 21891, - "fines": 21892, - "cite": 21893, - "acknowledging": 21894, - "bangor": 21895, - "ballard": 21896, - "bathurst": 21897, - "##resh": 21898, - "huron": 21899, - "mustered": 21900, - "alzheimer": 21901, - "garments": 21902, - "kinase": 21903, - "tyre": 21904, - "warship": 21905, - "##cp": 21906, - "flashback": 21907, - "pulmonary": 21908, - "braun": 21909, - "cheat": 21910, - "kamal": 21911, - "cyclists": 21912, - "constructions": 21913, - "grenades": 21914, - "ndp": 21915, - "traveller": 21916, - "excuses": 21917, - "stomped": 21918, - "signalling": 21919, - "trimmed": 21920, - "futsal": 21921, - "mosques": 21922, - "relevance": 21923, - "##wine": 21924, - "wta": 21925, - "##23": 21926, - "##vah": 21927, - "##lter": 21928, - "hoc": 21929, - "##riding": 21930, - "optimistic": 21931, - "##Ā“s": 21932, - "deco": 21933, - "sim": 21934, - "interacting": 21935, - "rejecting": 21936, - "moniker": 21937, - "waterways": 21938, - "##ieri": 21939, - "##oku": 21940, - "mayors": 21941, - "gdansk": 21942, - "outnumbered": 21943, - "pearls": 21944, - "##ended": 21945, - "##hampton": 21946, - "fairs": 21947, - "totals": 21948, - "dominating": 21949, - "262": 21950, - "notions": 21951, - "stairway": 21952, - "compiling": 21953, - "pursed": 21954, - "commodities": 21955, - "grease": 21956, - "yeast": 21957, - "##jong": 21958, - "carthage": 21959, - "griffiths": 21960, - "residual": 21961, - "amc": 21962, - "contraction": 21963, - "laird": 21964, - "sapphire": 21965, - "##marine": 21966, - "##ivated": 21967, - "amalgamation": 21968, - "dissolve": 21969, - "inclination": 21970, - "lyle": 21971, - "packaged": 21972, - "altitudes": 21973, - "suez": 21974, - "canons": 21975, - "graded": 21976, - "lurched": 21977, - "narrowing": 21978, - "boasts": 21979, - "guise": 21980, - "wed": 21981, - "enrico": 21982, - "##ovsky": 21983, - "rower": 21984, - "scarred": 21985, - "bree": 21986, - "cub": 21987, - "iberian": 21988, - "protagonists": 21989, - "bargaining": 21990, - "proposing": 21991, - "trainers": 21992, - "voyages": 21993, - "vans": 21994, - "fishes": 21995, - "##aea": 21996, - "##ivist": 21997, - "##verance": 21998, - "encryption": 21999, - "artworks": 22000, - "kazan": 22001, - "sabre": 22002, - "cleopatra": 22003, - "hepburn": 22004, - "rotting": 22005, - "supremacy": 22006, - "mecklenburg": 22007, - "##brate": 22008, - "burrows": 22009, - "hazards": 22010, - "outgoing": 22011, - "flair": 22012, - "organizes": 22013, - "##ctions": 22014, - "scorpion": 22015, - "##usions": 22016, - "boo": 22017, - "234": 22018, - "chevalier": 22019, - "dunedin": 22020, - "slapping": 22021, - "##34": 22022, - "ineligible": 22023, - "pensions": 22024, - "##38": 22025, - "##omic": 22026, - "manufactures": 22027, - "emails": 22028, - "bismarck": 22029, - "238": 22030, - "weakening": 22031, - "blackish": 22032, - "ding": 22033, - "mcgee": 22034, - "quo": 22035, - "##rling": 22036, - "northernmost": 22037, - "xx": 22038, - "manpower": 22039, - "greed": 22040, - "sampson": 22041, - "clicking": 22042, - "##ange": 22043, - "##horpe": 22044, - "##inations": 22045, - "##roving": 22046, - "torre": 22047, - "##eptive": 22048, - "##moral": 22049, - "symbolism": 22050, - "38th": 22051, - "asshole": 22052, - "meritorious": 22053, - "outfits": 22054, - "splashed": 22055, - "biographies": 22056, - "sprung": 22057, - "astros": 22058, - "##tale": 22059, - "302": 22060, - "737": 22061, - "filly": 22062, - "raoul": 22063, - "nw": 22064, - "tokugawa": 22065, - "linden": 22066, - "clubhouse": 22067, - "##apa": 22068, - "tracts": 22069, - "romano": 22070, - "##pio": 22071, - "putin": 22072, - "tags": 22073, - "##note": 22074, - "chained": 22075, - "dickson": 22076, - "gunshot": 22077, - "moe": 22078, - "gunn": 22079, - "rashid": 22080, - "##tails": 22081, - "zipper": 22082, - "##bas": 22083, - "##nea": 22084, - "contrasted": 22085, - "##ply": 22086, - "##udes": 22087, - "plum": 22088, - "pharaoh": 22089, - "##pile": 22090, - "aw": 22091, - "comedies": 22092, - "ingrid": 22093, - "sandwiches": 22094, - "subdivisions": 22095, - "1100": 22096, - "mariana": 22097, - "nokia": 22098, - "kamen": 22099, - "hz": 22100, - "delaney": 22101, - "veto": 22102, - "herring": 22103, - "##words": 22104, - "possessive": 22105, - "outlines": 22106, - "##roup": 22107, - "siemens": 22108, - "stairwell": 22109, - "rc": 22110, - "gallantry": 22111, - "messiah": 22112, - "palais": 22113, - "yells": 22114, - "233": 22115, - "zeppelin": 22116, - "##dm": 22117, - "bolivar": 22118, - "##cede": 22119, - "smackdown": 22120, - "mckinley": 22121, - "##mora": 22122, - "##yt": 22123, - "muted": 22124, - "geologic": 22125, - "finely": 22126, - "unitary": 22127, - "avatar": 22128, - "hamas": 22129, - "maynard": 22130, - "rees": 22131, - "bog": 22132, - "contrasting": 22133, - "##rut": 22134, - "liv": 22135, - "chico": 22136, - "disposition": 22137, - "pixel": 22138, - "##erate": 22139, - "becca": 22140, - "dmitry": 22141, - "yeshiva": 22142, - "narratives": 22143, - "##lva": 22144, - "##ulton": 22145, - "mercenary": 22146, - "sharpe": 22147, - "tempered": 22148, - "navigate": 22149, - "stealth": 22150, - "amassed": 22151, - "keynes": 22152, - "##lini": 22153, - "untouched": 22154, - "##rrie": 22155, - "havoc": 22156, - "lithium": 22157, - "##fighting": 22158, - "abyss": 22159, - "graf": 22160, - "southward": 22161, - "wolverine": 22162, - "balloons": 22163, - "implements": 22164, - "ngos": 22165, - "transitions": 22166, - "##icum": 22167, - "ambushed": 22168, - "concacaf": 22169, - "dormant": 22170, - "economists": 22171, - "##dim": 22172, - "costing": 22173, - "csi": 22174, - "rana": 22175, - "universite": 22176, - "boulders": 22177, - "verity": 22178, - "##llon": 22179, - "collin": 22180, - "mellon": 22181, - "misses": 22182, - "cypress": 22183, - "fluorescent": 22184, - "lifeless": 22185, - "spence": 22186, - "##ulla": 22187, - "crewe": 22188, - "shepard": 22189, - "pak": 22190, - "revelations": 22191, - "##Ł…": 22192, - "jolly": 22193, - "gibbons": 22194, - "paw": 22195, - "##dro": 22196, - "##quel": 22197, - "freeing": 22198, - "##test": 22199, - "shack": 22200, - "fries": 22201, - "palatine": 22202, - "##51": 22203, - "##hiko": 22204, - "accompaniment": 22205, - "cruising": 22206, - "recycled": 22207, - "##aver": 22208, - "erwin": 22209, - "sorting": 22210, - "synthesizers": 22211, - "dyke": 22212, - "realities": 22213, - "sg": 22214, - "strides": 22215, - "enslaved": 22216, - "wetland": 22217, - "##ghan": 22218, - "competence": 22219, - "gunpowder": 22220, - "grassy": 22221, - "maroon": 22222, - "reactors": 22223, - "objection": 22224, - "##oms": 22225, - "carlson": 22226, - "gearbox": 22227, - "macintosh": 22228, - "radios": 22229, - "shelton": 22230, - "##sho": 22231, - "clergyman": 22232, - "prakash": 22233, - "254": 22234, - "mongols": 22235, - "trophies": 22236, - "oricon": 22237, - "228": 22238, - "stimuli": 22239, - "twenty20": 22240, - "cantonese": 22241, - "cortes": 22242, - "mirrored": 22243, - "##saurus": 22244, - "bhp": 22245, - "cristina": 22246, - "melancholy": 22247, - "##lating": 22248, - "enjoyable": 22249, - "nuevo": 22250, - "##wny": 22251, - "downfall": 22252, - "schumacher": 22253, - "##ind": 22254, - "banging": 22255, - "lausanne": 22256, - "rumbled": 22257, - "paramilitary": 22258, - "reflex": 22259, - "ax": 22260, - "amplitude": 22261, - "migratory": 22262, - "##gall": 22263, - "##ups": 22264, - "midi": 22265, - "barnard": 22266, - "lastly": 22267, - "sherry": 22268, - "##hp": 22269, - "##nall": 22270, - "keystone": 22271, - "##kra": 22272, - "carleton": 22273, - "slippery": 22274, - "##53": 22275, - "coloring": 22276, - "foe": 22277, - "socket": 22278, - "otter": 22279, - "##rgos": 22280, - "mats": 22281, - "##tose": 22282, - "consultants": 22283, - "bafta": 22284, - "bison": 22285, - "topping": 22286, - "##km": 22287, - "490": 22288, - "primal": 22289, - "abandonment": 22290, - "transplant": 22291, - "atoll": 22292, - "hideous": 22293, - "mort": 22294, - "pained": 22295, - "reproduced": 22296, - "tae": 22297, - "howling": 22298, - "##turn": 22299, - "unlawful": 22300, - "billionaire": 22301, - "hotter": 22302, - "poised": 22303, - "lansing": 22304, - "##chang": 22305, - "dinamo": 22306, - "retro": 22307, - "messing": 22308, - "nfc": 22309, - "domesday": 22310, - "##mina": 22311, - "blitz": 22312, - "timed": 22313, - "##athing": 22314, - "##kley": 22315, - "ascending": 22316, - "gesturing": 22317, - "##izations": 22318, - "signaled": 22319, - "tis": 22320, - "chinatown": 22321, - "mermaid": 22322, - "savanna": 22323, - "jameson": 22324, - "##aint": 22325, - "catalina": 22326, - "##pet": 22327, - "##hers": 22328, - "cochrane": 22329, - "cy": 22330, - "chatting": 22331, - "##kus": 22332, - "alerted": 22333, - "computation": 22334, - "mused": 22335, - "noelle": 22336, - "majestic": 22337, - "mohawk": 22338, - "campo": 22339, - "octagonal": 22340, - "##sant": 22341, - "##hend": 22342, - "241": 22343, - "aspiring": 22344, - "##mart": 22345, - "comprehend": 22346, - "iona": 22347, - "paralyzed": 22348, - "shimmering": 22349, - "swindon": 22350, - "rhone": 22351, - "##eley": 22352, - "reputed": 22353, - "configurations": 22354, - "pitchfork": 22355, - "agitation": 22356, - "francais": 22357, - "gillian": 22358, - "lipstick": 22359, - "##ilo": 22360, - "outsiders": 22361, - "pontifical": 22362, - "resisting": 22363, - "bitterness": 22364, - "sewer": 22365, - "rockies": 22366, - "##edd": 22367, - "##ucher": 22368, - "misleading": 22369, - "1756": 22370, - "exiting": 22371, - "galloway": 22372, - "##nging": 22373, - "risked": 22374, - "##heart": 22375, - "246": 22376, - "commemoration": 22377, - "schultz": 22378, - "##rka": 22379, - "integrating": 22380, - "##rsa": 22381, - "poses": 22382, - "shrieked": 22383, - "##weiler": 22384, - "guineas": 22385, - "gladys": 22386, - "jerking": 22387, - "owls": 22388, - "goldsmith": 22389, - "nightly": 22390, - "penetrating": 22391, - "##unced": 22392, - "lia": 22393, - "##33": 22394, - "ignited": 22395, - "betsy": 22396, - "##aring": 22397, - "##thorpe": 22398, - "follower": 22399, - "vigorously": 22400, - "##rave": 22401, - "coded": 22402, - "kiran": 22403, - "knit": 22404, - "zoology": 22405, - "tbilisi": 22406, - "##28": 22407, - "##bered": 22408, - "repository": 22409, - "govt": 22410, - "deciduous": 22411, - "dino": 22412, - "growling": 22413, - "##bba": 22414, - "enhancement": 22415, - "unleashed": 22416, - "chanting": 22417, - "pussy": 22418, - "biochemistry": 22419, - "##eric": 22420, - "kettle": 22421, - "repression": 22422, - "toxicity": 22423, - "nrhp": 22424, - "##arth": 22425, - "##kko": 22426, - "##bush": 22427, - "ernesto": 22428, - "commended": 22429, - "outspoken": 22430, - "242": 22431, - "mca": 22432, - "parchment": 22433, - "sms": 22434, - "kristen": 22435, - "##aton": 22436, - "bisexual": 22437, - "raked": 22438, - "glamour": 22439, - "navajo": 22440, - "a2": 22441, - "conditioned": 22442, - "showcased": 22443, - "##hma": 22444, - "spacious": 22445, - "youthful": 22446, - "##esa": 22447, - "usl": 22448, - "appliances": 22449, - "junta": 22450, - "brest": 22451, - "layne": 22452, - "conglomerate": 22453, - "enchanted": 22454, - "chao": 22455, - "loosened": 22456, - "picasso": 22457, - "circulating": 22458, - "inspect": 22459, - "montevideo": 22460, - "##centric": 22461, - "##kti": 22462, - "piazza": 22463, - "spurred": 22464, - "##aith": 22465, - "bari": 22466, - "freedoms": 22467, - "poultry": 22468, - "stamford": 22469, - "lieu": 22470, - "##ect": 22471, - "indigo": 22472, - "sarcastic": 22473, - "bahia": 22474, - "stump": 22475, - "attach": 22476, - "dvds": 22477, - "frankenstein": 22478, - "lille": 22479, - "approx": 22480, - "scriptures": 22481, - "pollen": 22482, - "##script": 22483, - "nmi": 22484, - "overseen": 22485, - "##ivism": 22486, - "tides": 22487, - "proponent": 22488, - "newmarket": 22489, - "inherit": 22490, - "milling": 22491, - "##erland": 22492, - "centralized": 22493, - "##rou": 22494, - "distributors": 22495, - "credentials": 22496, - "drawers": 22497, - "abbreviation": 22498, - "##lco": 22499, - "##xon": 22500, - "downing": 22501, - "uncomfortably": 22502, - "ripe": 22503, - "##oes": 22504, - "erase": 22505, - "franchises": 22506, - "##ever": 22507, - "populace": 22508, - "##bery": 22509, - "##khar": 22510, - "decomposition": 22511, - "pleas": 22512, - "##tet": 22513, - "daryl": 22514, - "sabah": 22515, - "##stle": 22516, - "##wide": 22517, - "fearless": 22518, - "genie": 22519, - "lesions": 22520, - "annette": 22521, - "##ogist": 22522, - "oboe": 22523, - "appendix": 22524, - "nair": 22525, - "dripped": 22526, - "petitioned": 22527, - "maclean": 22528, - "mosquito": 22529, - "parrot": 22530, - "rpg": 22531, - "hampered": 22532, - "1648": 22533, - "operatic": 22534, - "reservoirs": 22535, - "##tham": 22536, - "irrelevant": 22537, - "jolt": 22538, - "summarized": 22539, - "##fp": 22540, - "medallion": 22541, - "##taff": 22542, - "##āˆ’": 22543, - "clawed": 22544, - "harlow": 22545, - "narrower": 22546, - "goddard": 22547, - "marcia": 22548, - "bodied": 22549, - "fremont": 22550, - "suarez": 22551, - "altering": 22552, - "tempest": 22553, - "mussolini": 22554, - "porn": 22555, - "##isms": 22556, - "sweetly": 22557, - "oversees": 22558, - "walkers": 22559, - "solitude": 22560, - "grimly": 22561, - "shrines": 22562, - "hk": 22563, - "ich": 22564, - "supervisors": 22565, - "hostess": 22566, - "dietrich": 22567, - "legitimacy": 22568, - "brushes": 22569, - "expressive": 22570, - "##yp": 22571, - "dissipated": 22572, - "##rse": 22573, - "localized": 22574, - "systemic": 22575, - "##nikov": 22576, - "gettysburg": 22577, - "##js": 22578, - "##uaries": 22579, - "dialogues": 22580, - "muttering": 22581, - "251": 22582, - "housekeeper": 22583, - "sicilian": 22584, - "discouraged": 22585, - "##frey": 22586, - "beamed": 22587, - "kaladin": 22588, - "halftime": 22589, - "kidnap": 22590, - "##amo": 22591, - "##llet": 22592, - "1754": 22593, - "synonymous": 22594, - "depleted": 22595, - "instituto": 22596, - "insulin": 22597, - "reprised": 22598, - "##opsis": 22599, - "clashed": 22600, - "##ctric": 22601, - "interrupting": 22602, - "radcliffe": 22603, - "insisting": 22604, - "medici": 22605, - "1715": 22606, - "ejected": 22607, - "playfully": 22608, - "turbulent": 22609, - "##47": 22610, - "starvation": 22611, - "##rini": 22612, - "shipment": 22613, - "rebellious": 22614, - "petersen": 22615, - "verification": 22616, - "merits": 22617, - "##rified": 22618, - "cakes": 22619, - "##charged": 22620, - "1757": 22621, - "milford": 22622, - "shortages": 22623, - "spying": 22624, - "fidelity": 22625, - "##aker": 22626, - "emitted": 22627, - "storylines": 22628, - "harvested": 22629, - "seismic": 22630, - "##iform": 22631, - "cheung": 22632, - "kilda": 22633, - "theoretically": 22634, - "barbie": 22635, - "lynx": 22636, - "##rgy": 22637, - "##tius": 22638, - "goblin": 22639, - "mata": 22640, - "poisonous": 22641, - "##nburg": 22642, - "reactive": 22643, - "residues": 22644, - "obedience": 22645, - "##евич": 22646, - "conjecture": 22647, - "##rac": 22648, - "401": 22649, - "hating": 22650, - "sixties": 22651, - "kicker": 22652, - "moaning": 22653, - "motown": 22654, - "##bha": 22655, - "emancipation": 22656, - "neoclassical": 22657, - "##hering": 22658, - "consoles": 22659, - "ebert": 22660, - "professorship": 22661, - "##tures": 22662, - "sustaining": 22663, - "assaults": 22664, - "obeyed": 22665, - "affluent": 22666, - "incurred": 22667, - "tornadoes": 22668, - "##eber": 22669, - "##zow": 22670, - "emphasizing": 22671, - "highlanders": 22672, - "cheated": 22673, - "helmets": 22674, - "##ctus": 22675, - "internship": 22676, - "terence": 22677, - "bony": 22678, - "executions": 22679, - "legislators": 22680, - "berries": 22681, - "peninsular": 22682, - "tinged": 22683, - "##aco": 22684, - "1689": 22685, - "amplifier": 22686, - "corvette": 22687, - "ribbons": 22688, - "lavish": 22689, - "pennant": 22690, - "##lander": 22691, - "worthless": 22692, - "##chfield": 22693, - "##forms": 22694, - "mariano": 22695, - "pyrenees": 22696, - "expenditures": 22697, - "##icides": 22698, - "chesterfield": 22699, - "mandir": 22700, - "tailor": 22701, - "39th": 22702, - "sergey": 22703, - "nestled": 22704, - "willed": 22705, - "aristocracy": 22706, - "devotees": 22707, - "goodnight": 22708, - "raaf": 22709, - "rumored": 22710, - "weaponry": 22711, - "remy": 22712, - "appropriations": 22713, - "harcourt": 22714, - "burr": 22715, - "riaa": 22716, - "##lence": 22717, - "limitation": 22718, - "unnoticed": 22719, - "guo": 22720, - "soaking": 22721, - "swamps": 22722, - "##tica": 22723, - "collapsing": 22724, - "tatiana": 22725, - "descriptive": 22726, - "brigham": 22727, - "psalm": 22728, - "##chment": 22729, - "maddox": 22730, - "##lization": 22731, - "patti": 22732, - "caliph": 22733, - "##aja": 22734, - "akron": 22735, - "injuring": 22736, - "serra": 22737, - "##ganj": 22738, - "basins": 22739, - "##sari": 22740, - "astonished": 22741, - "launcher": 22742, - "##church": 22743, - "hilary": 22744, - "wilkins": 22745, - "sewing": 22746, - "##sf": 22747, - "stinging": 22748, - "##fia": 22749, - "##ncia": 22750, - "underwood": 22751, - "startup": 22752, - "##ition": 22753, - "compilations": 22754, - "vibrations": 22755, - "embankment": 22756, - "jurist": 22757, - "##nity": 22758, - "bard": 22759, - "juventus": 22760, - "groundwater": 22761, - "kern": 22762, - "palaces": 22763, - "helium": 22764, - "boca": 22765, - "cramped": 22766, - "marissa": 22767, - "soto": 22768, - "##worm": 22769, - "jae": 22770, - "princely": 22771, - "##ggy": 22772, - "faso": 22773, - "bazaar": 22774, - "warmly": 22775, - "##voking": 22776, - "229": 22777, - "pairing": 22778, - "##lite": 22779, - "##grate": 22780, - "##nets": 22781, - "wien": 22782, - "freaked": 22783, - "ulysses": 22784, - "rebirth": 22785, - "##alia": 22786, - "##rent": 22787, - "mummy": 22788, - "guzman": 22789, - "jimenez": 22790, - "stilled": 22791, - "##nitz": 22792, - "trajectory": 22793, - "tha": 22794, - "woken": 22795, - "archival": 22796, - "professions": 22797, - "##pts": 22798, - "##pta": 22799, - "hilly": 22800, - "shadowy": 22801, - "shrink": 22802, - "##bolt": 22803, - "norwood": 22804, - "glued": 22805, - "migrate": 22806, - "stereotypes": 22807, - "devoid": 22808, - "##pheus": 22809, - "625": 22810, - "evacuate": 22811, - "horrors": 22812, - "infancy": 22813, - "gotham": 22814, - "knowles": 22815, - "optic": 22816, - "downloaded": 22817, - "sachs": 22818, - "kingsley": 22819, - "parramatta": 22820, - "darryl": 22821, - "mor": 22822, - "##onale": 22823, - "shady": 22824, - "commence": 22825, - "confesses": 22826, - "kan": 22827, - "##meter": 22828, - "##placed": 22829, - "marlborough": 22830, - "roundabout": 22831, - "regents": 22832, - "frigates": 22833, - "io": 22834, - "##imating": 22835, - "gothenburg": 22836, - "revoked": 22837, - "carvings": 22838, - "clockwise": 22839, - "convertible": 22840, - "intruder": 22841, - "##sche": 22842, - "banged": 22843, - "##ogo": 22844, - "vicky": 22845, - "bourgeois": 22846, - "##mony": 22847, - "dupont": 22848, - "footing": 22849, - "##gum": 22850, - "pd": 22851, - "##real": 22852, - "buckle": 22853, - "yun": 22854, - "penthouse": 22855, - "sane": 22856, - "720": 22857, - "serviced": 22858, - "stakeholders": 22859, - "neumann": 22860, - "bb": 22861, - "##eers": 22862, - "comb": 22863, - "##gam": 22864, - "catchment": 22865, - "pinning": 22866, - "rallies": 22867, - "typing": 22868, - "##elles": 22869, - "forefront": 22870, - "freiburg": 22871, - "sweetie": 22872, - "giacomo": 22873, - "widowed": 22874, - "goodwill": 22875, - "worshipped": 22876, - "aspirations": 22877, - "midday": 22878, - "##vat": 22879, - "fishery": 22880, - "##trick": 22881, - "bournemouth": 22882, - "turk": 22883, - "243": 22884, - "hearth": 22885, - "ethanol": 22886, - "guadalajara": 22887, - "murmurs": 22888, - "sl": 22889, - "##uge": 22890, - "afforded": 22891, - "scripted": 22892, - "##hta": 22893, - "wah": 22894, - "##jn": 22895, - "coroner": 22896, - "translucent": 22897, - "252": 22898, - "memorials": 22899, - "puck": 22900, - "progresses": 22901, - "clumsy": 22902, - "##race": 22903, - "315": 22904, - "candace": 22905, - "recounted": 22906, - "##27": 22907, - "##slin": 22908, - "##uve": 22909, - "filtering": 22910, - "##mac": 22911, - "howl": 22912, - "strata": 22913, - "heron": 22914, - "leveled": 22915, - "##ays": 22916, - "dubious": 22917, - "##oja": 22918, - "##т": 22919, - "##wheel": 22920, - "citations": 22921, - "exhibiting": 22922, - "##laya": 22923, - "##mics": 22924, - "##pods": 22925, - "turkic": 22926, - "##lberg": 22927, - "injunction": 22928, - "##ennial": 22929, - "##mit": 22930, - "antibodies": 22931, - "##44": 22932, - "organise": 22933, - "##rigues": 22934, - "cardiovascular": 22935, - "cushion": 22936, - "inverness": 22937, - "##zquez": 22938, - "dia": 22939, - "cocoa": 22940, - "sibling": 22941, - "##tman": 22942, - "##roid": 22943, - "expanse": 22944, - "feasible": 22945, - "tunisian": 22946, - "algiers": 22947, - "##relli": 22948, - "rus": 22949, - "bloomberg": 22950, - "dso": 22951, - "westphalia": 22952, - "bro": 22953, - "tacoma": 22954, - "281": 22955, - "downloads": 22956, - "##ours": 22957, - "konrad": 22958, - "duran": 22959, - "##hdi": 22960, - "continuum": 22961, - "jett": 22962, - "compares": 22963, - "legislator": 22964, - "secession": 22965, - "##nable": 22966, - "##gues": 22967, - "##zuka": 22968, - "translating": 22969, - "reacher": 22970, - "##gley": 22971, - "##ła": 22972, - "aleppo": 22973, - "##agi": 22974, - "tc": 22975, - "orchards": 22976, - "trapping": 22977, - "linguist": 22978, - "versatile": 22979, - "drumming": 22980, - "postage": 22981, - "calhoun": 22982, - "superiors": 22983, - "##mx": 22984, - "barefoot": 22985, - "leary": 22986, - "##cis": 22987, - "ignacio": 22988, - "alfa": 22989, - "kaplan": 22990, - "##rogen": 22991, - "bratislava": 22992, - "mori": 22993, - "##vot": 22994, - "disturb": 22995, - "haas": 22996, - "313": 22997, - "cartridges": 22998, - "gilmore": 22999, - "radiated": 23000, - "salford": 23001, - "tunic": 23002, - "hades": 23003, - "##ulsive": 23004, - "archeological": 23005, - "delilah": 23006, - "magistrates": 23007, - "auditioned": 23008, - "brewster": 23009, - "charters": 23010, - "empowerment": 23011, - "blogs": 23012, - "cappella": 23013, - "dynasties": 23014, - "iroquois": 23015, - "whipping": 23016, - "##krishna": 23017, - "raceway": 23018, - "truths": 23019, - "myra": 23020, - "weaken": 23021, - "judah": 23022, - "mcgregor": 23023, - "##horse": 23024, - "mic": 23025, - "refueling": 23026, - "37th": 23027, - "burnley": 23028, - "bosses": 23029, - "markus": 23030, - "premio": 23031, - "query": 23032, - "##gga": 23033, - "dunbar": 23034, - "##economic": 23035, - "darkest": 23036, - "lyndon": 23037, - "sealing": 23038, - "commendation": 23039, - "reappeared": 23040, - "##mun": 23041, - "addicted": 23042, - "ezio": 23043, - "slaughtered": 23044, - "satisfactory": 23045, - "shuffle": 23046, - "##eves": 23047, - "##thic": 23048, - "##uj": 23049, - "fortification": 23050, - "warrington": 23051, - "##otto": 23052, - "resurrected": 23053, - "fargo": 23054, - "mane": 23055, - "##utable": 23056, - "##lei": 23057, - "##space": 23058, - "foreword": 23059, - "ox": 23060, - "##aris": 23061, - "##vern": 23062, - "abrams": 23063, - "hua": 23064, - "##mento": 23065, - "sakura": 23066, - "##alo": 23067, - "uv": 23068, - "sentimental": 23069, - "##skaya": 23070, - "midfield": 23071, - "##eses": 23072, - "sturdy": 23073, - "scrolls": 23074, - "macleod": 23075, - "##kyu": 23076, - "entropy": 23077, - "##lance": 23078, - "mitochondrial": 23079, - "cicero": 23080, - "excelled": 23081, - "thinner": 23082, - "convoys": 23083, - "perceive": 23084, - "##oslav": 23085, - "##urable": 23086, - "systematically": 23087, - "grind": 23088, - "burkina": 23089, - "287": 23090, - "##tagram": 23091, - "ops": 23092, - "##aman": 23093, - "guantanamo": 23094, - "##cloth": 23095, - "##tite": 23096, - "forcefully": 23097, - "wavy": 23098, - "##jou": 23099, - "pointless": 23100, - "##linger": 23101, - "##tze": 23102, - "layton": 23103, - "portico": 23104, - "superficial": 23105, - "clerical": 23106, - "outlaws": 23107, - "##hism": 23108, - "burials": 23109, - "muir": 23110, - "##inn": 23111, - "creditors": 23112, - "hauling": 23113, - "rattle": 23114, - "##leg": 23115, - "calais": 23116, - "monde": 23117, - "archers": 23118, - "reclaimed": 23119, - "dwell": 23120, - "wexford": 23121, - "hellenic": 23122, - "falsely": 23123, - "remorse": 23124, - "##tek": 23125, - "dough": 23126, - "furnishings": 23127, - "##uttered": 23128, - "gabon": 23129, - "neurological": 23130, - "novice": 23131, - "##igraphy": 23132, - "contemplated": 23133, - "pulpit": 23134, - "nightstand": 23135, - "saratoga": 23136, - "##istan": 23137, - "documenting": 23138, - "pulsing": 23139, - "taluk": 23140, - "##firmed": 23141, - "busted": 23142, - "marital": 23143, - "##rien": 23144, - "disagreements": 23145, - "wasps": 23146, - "##yes": 23147, - "hodge": 23148, - "mcdonnell": 23149, - "mimic": 23150, - "fran": 23151, - "pendant": 23152, - "dhabi": 23153, - "musa": 23154, - "##nington": 23155, - "congratulations": 23156, - "argent": 23157, - "darrell": 23158, - "concussion": 23159, - "losers": 23160, - "regrets": 23161, - "thessaloniki": 23162, - "reversal": 23163, - "donaldson": 23164, - "hardwood": 23165, - "thence": 23166, - "achilles": 23167, - "ritter": 23168, - "##eran": 23169, - "demonic": 23170, - "jurgen": 23171, - "prophets": 23172, - "goethe": 23173, - "eki": 23174, - "classmate": 23175, - "buff": 23176, - "##cking": 23177, - "yank": 23178, - "irrational": 23179, - "##inging": 23180, - "perished": 23181, - "seductive": 23182, - "qur": 23183, - "sourced": 23184, - "##crat": 23185, - "##typic": 23186, - "mustard": 23187, - "ravine": 23188, - "barre": 23189, - "horizontally": 23190, - "characterization": 23191, - "phylogenetic": 23192, - "boise": 23193, - "##dit": 23194, - "##runner": 23195, - "##tower": 23196, - "brutally": 23197, - "intercourse": 23198, - "seduce": 23199, - "##bbing": 23200, - "fay": 23201, - "ferris": 23202, - "ogden": 23203, - "amar": 23204, - "nik": 23205, - "unarmed": 23206, - "##inator": 23207, - "evaluating": 23208, - "kyrgyzstan": 23209, - "sweetness": 23210, - "##lford": 23211, - "##oki": 23212, - "mccormick": 23213, - "meiji": 23214, - "notoriety": 23215, - "stimulate": 23216, - "disrupt": 23217, - "figuring": 23218, - "instructional": 23219, - "mcgrath": 23220, - "##zoo": 23221, - "groundbreaking": 23222, - "##lto": 23223, - "flinch": 23224, - "khorasan": 23225, - "agrarian": 23226, - "bengals": 23227, - "mixer": 23228, - "radiating": 23229, - "##sov": 23230, - "ingram": 23231, - "pitchers": 23232, - "nad": 23233, - "tariff": 23234, - "##cript": 23235, - "tata": 23236, - "##codes": 23237, - "##emi": 23238, - "##ungen": 23239, - "appellate": 23240, - "lehigh": 23241, - "##bled": 23242, - "##giri": 23243, - "brawl": 23244, - "duct": 23245, - "texans": 23246, - "##ciation": 23247, - "##ropolis": 23248, - "skipper": 23249, - "speculative": 23250, - "vomit": 23251, - "doctrines": 23252, - "stresses": 23253, - "253": 23254, - "davy": 23255, - "graders": 23256, - "whitehead": 23257, - "jozef": 23258, - "timely": 23259, - "cumulative": 23260, - "haryana": 23261, - "paints": 23262, - "appropriately": 23263, - "boon": 23264, - "cactus": 23265, - "##ales": 23266, - "##pid": 23267, - "dow": 23268, - "legions": 23269, - "##pit": 23270, - "perceptions": 23271, - "1730": 23272, - "picturesque": 23273, - "##yse": 23274, - "periphery": 23275, - "rune": 23276, - "wr": 23277, - "##aha": 23278, - "celtics": 23279, - "sentencing": 23280, - "whoa": 23281, - "##erin": 23282, - "confirms": 23283, - "variance": 23284, - "425": 23285, - "moines": 23286, - "mathews": 23287, - "spade": 23288, - "rave": 23289, - "m1": 23290, - "fronted": 23291, - "fx": 23292, - "blending": 23293, - "alleging": 23294, - "reared": 23295, - "##gl": 23296, - "237": 23297, - "##paper": 23298, - "grassroots": 23299, - "eroded": 23300, - "##free": 23301, - "##physical": 23302, - "directs": 23303, - "ordeal": 23304, - "##sław": 23305, - "accelerate": 23306, - "hacker": 23307, - "rooftop": 23308, - "##inia": 23309, - "lev": 23310, - "buys": 23311, - "cebu": 23312, - "devote": 23313, - "##lce": 23314, - "specialising": 23315, - "##ulsion": 23316, - "choreographed": 23317, - "repetition": 23318, - "warehouses": 23319, - "##ryl": 23320, - "paisley": 23321, - "tuscany": 23322, - "analogy": 23323, - "sorcerer": 23324, - "hash": 23325, - "huts": 23326, - "shards": 23327, - "descends": 23328, - "exclude": 23329, - "nix": 23330, - "chaplin": 23331, - "gaga": 23332, - "ito": 23333, - "vane": 23334, - "##drich": 23335, - "causeway": 23336, - "misconduct": 23337, - "limo": 23338, - "orchestrated": 23339, - "glands": 23340, - "jana": 23341, - "##kot": 23342, - "u2": 23343, - "##mple": 23344, - "##sons": 23345, - "branching": 23346, - "contrasts": 23347, - "scoop": 23348, - "longed": 23349, - "##virus": 23350, - "chattanooga": 23351, - "##75": 23352, - "syrup": 23353, - "cornerstone": 23354, - "##tized": 23355, - "##mind": 23356, - "##iaceae": 23357, - "careless": 23358, - "precedence": 23359, - "frescoes": 23360, - "##uet": 23361, - "chilled": 23362, - "consult": 23363, - "modelled": 23364, - "snatch": 23365, - "peat": 23366, - "##thermal": 23367, - "caucasian": 23368, - "humane": 23369, - "relaxation": 23370, - "spins": 23371, - "temperance": 23372, - "##lbert": 23373, - "occupations": 23374, - "lambda": 23375, - "hybrids": 23376, - "moons": 23377, - "mp3": 23378, - "##oese": 23379, - "247": 23380, - "rolf": 23381, - "societal": 23382, - "yerevan": 23383, - "ness": 23384, - "##ssler": 23385, - "befriended": 23386, - "mechanized": 23387, - "nominate": 23388, - "trough": 23389, - "boasted": 23390, - "cues": 23391, - "seater": 23392, - "##hom": 23393, - "bends": 23394, - "##tangle": 23395, - "conductors": 23396, - "emptiness": 23397, - "##lmer": 23398, - "eurasian": 23399, - "adriatic": 23400, - "tian": 23401, - "##cie": 23402, - "anxiously": 23403, - "lark": 23404, - "propellers": 23405, - "chichester": 23406, - "jock": 23407, - "ev": 23408, - "2a": 23409, - "##holding": 23410, - "credible": 23411, - "recounts": 23412, - "tori": 23413, - "loyalist": 23414, - "abduction": 23415, - "##hoot": 23416, - "##redo": 23417, - "nepali": 23418, - "##mite": 23419, - "ventral": 23420, - "tempting": 23421, - "##ango": 23422, - "##crats": 23423, - "steered": 23424, - "##wice": 23425, - "javelin": 23426, - "dipping": 23427, - "laborers": 23428, - "prentice": 23429, - "looming": 23430, - "titanium": 23431, - "##ː": 23432, - "badges": 23433, - "emir": 23434, - "tensor": 23435, - "##ntation": 23436, - "egyptians": 23437, - "rash": 23438, - "denies": 23439, - "hawthorne": 23440, - "lombard": 23441, - "showers": 23442, - "wehrmacht": 23443, - "dietary": 23444, - "trojan": 23445, - "##reus": 23446, - "welles": 23447, - "executing": 23448, - "horseshoe": 23449, - "lifeboat": 23450, - "##lak": 23451, - "elsa": 23452, - "infirmary": 23453, - "nearing": 23454, - "roberta": 23455, - "boyer": 23456, - "mutter": 23457, - "trillion": 23458, - "joanne": 23459, - "##fine": 23460, - "##oked": 23461, - "sinks": 23462, - "vortex": 23463, - "uruguayan": 23464, - "clasp": 23465, - "sirius": 23466, - "##block": 23467, - "accelerator": 23468, - "prohibit": 23469, - "sunken": 23470, - "byu": 23471, - "chronological": 23472, - "diplomats": 23473, - "ochreous": 23474, - "510": 23475, - "symmetrical": 23476, - "1644": 23477, - "maia": 23478, - "##tology": 23479, - "salts": 23480, - "reigns": 23481, - "atrocities": 23482, - "##ŠøŃ": 23483, - "hess": 23484, - "bared": 23485, - "issn": 23486, - "##vyn": 23487, - "cater": 23488, - "saturated": 23489, - "##cycle": 23490, - "##isse": 23491, - "sable": 23492, - "voyager": 23493, - "dyer": 23494, - "yusuf": 23495, - "##inge": 23496, - "fountains": 23497, - "wolff": 23498, - "##39": 23499, - "##nni": 23500, - "engraving": 23501, - "rollins": 23502, - "atheist": 23503, - "ominous": 23504, - "##ault": 23505, - "herr": 23506, - "chariot": 23507, - "martina": 23508, - "strung": 23509, - "##fell": 23510, - "##farlane": 23511, - "horrific": 23512, - "sahib": 23513, - "gazes": 23514, - "saetan": 23515, - "erased": 23516, - "ptolemy": 23517, - "##olic": 23518, - "flushing": 23519, - "lauderdale": 23520, - "analytic": 23521, - "##ices": 23522, - "530": 23523, - "navarro": 23524, - "beak": 23525, - "gorilla": 23526, - "herrera": 23527, - "broom": 23528, - "guadalupe": 23529, - "raiding": 23530, - "sykes": 23531, - "311": 23532, - "bsc": 23533, - "deliveries": 23534, - "1720": 23535, - "invasions": 23536, - "carmichael": 23537, - "tajikistan": 23538, - "thematic": 23539, - "ecumenical": 23540, - "sentiments": 23541, - "onstage": 23542, - "##rians": 23543, - "##brand": 23544, - "##sume": 23545, - "catastrophic": 23546, - "flanks": 23547, - "molten": 23548, - "##arns": 23549, - "waller": 23550, - "aimee": 23551, - "terminating": 23552, - "##icing": 23553, - "alternately": 23554, - "##oche": 23555, - "nehru": 23556, - "printers": 23557, - "outraged": 23558, - "##eving": 23559, - "empires": 23560, - "template": 23561, - "banners": 23562, - "repetitive": 23563, - "za": 23564, - "##oise": 23565, - "vegetarian": 23566, - "##tell": 23567, - "guiana": 23568, - "opt": 23569, - "cavendish": 23570, - "lucknow": 23571, - "synthesized": 23572, - "##hani": 23573, - "##mada": 23574, - "finalized": 23575, - "##ctable": 23576, - "fictitious": 23577, - "mayoral": 23578, - "unreliable": 23579, - "##enham": 23580, - "embracing": 23581, - "peppers": 23582, - "rbis": 23583, - "##chio": 23584, - "##neo": 23585, - "inhibition": 23586, - "slashed": 23587, - "togo": 23588, - "orderly": 23589, - "embroidered": 23590, - "safari": 23591, - "salty": 23592, - "236": 23593, - "barron": 23594, - "benito": 23595, - "totaled": 23596, - "##dak": 23597, - "pubs": 23598, - "simulated": 23599, - "caden": 23600, - "devin": 23601, - "tolkien": 23602, - "momma": 23603, - "welding": 23604, - "sesame": 23605, - "##ept": 23606, - "gottingen": 23607, - "hardness": 23608, - "630": 23609, - "shaman": 23610, - "temeraire": 23611, - "620": 23612, - "adequately": 23613, - "pediatric": 23614, - "##kit": 23615, - "ck": 23616, - "assertion": 23617, - "radicals": 23618, - "composure": 23619, - "cadence": 23620, - "seafood": 23621, - "beaufort": 23622, - "lazarus": 23623, - "mani": 23624, - "warily": 23625, - "cunning": 23626, - "kurdistan": 23627, - "249": 23628, - "cantata": 23629, - "##kir": 23630, - "ares": 23631, - "##41": 23632, - "##clusive": 23633, - "nape": 23634, - "townland": 23635, - "geared": 23636, - "insulted": 23637, - "flutter": 23638, - "boating": 23639, - "violate": 23640, - "draper": 23641, - "dumping": 23642, - "malmo": 23643, - "##hh": 23644, - "##romatic": 23645, - "firearm": 23646, - "alta": 23647, - "bono": 23648, - "obscured": 23649, - "##clave": 23650, - "exceeds": 23651, - "panorama": 23652, - "unbelievable": 23653, - "##train": 23654, - "preschool": 23655, - "##essed": 23656, - "disconnected": 23657, - "installing": 23658, - "rescuing": 23659, - "secretaries": 23660, - "accessibility": 23661, - "##castle": 23662, - "##drive": 23663, - "##ifice": 23664, - "##film": 23665, - "bouts": 23666, - "slug": 23667, - "waterway": 23668, - "mindanao": 23669, - "##buro": 23670, - "##ratic": 23671, - "halves": 23672, - "##Ł„": 23673, - "calming": 23674, - "liter": 23675, - "maternity": 23676, - "adorable": 23677, - "bragg": 23678, - "electrification": 23679, - "mcc": 23680, - "##dote": 23681, - "roxy": 23682, - "schizophrenia": 23683, - "##body": 23684, - "munoz": 23685, - "kaye": 23686, - "whaling": 23687, - "239": 23688, - "mil": 23689, - "tingling": 23690, - "tolerant": 23691, - "##ago": 23692, - "unconventional": 23693, - "volcanoes": 23694, - "##finder": 23695, - "deportivo": 23696, - "##llie": 23697, - "robson": 23698, - "kaufman": 23699, - "neuroscience": 23700, - "wai": 23701, - "deportation": 23702, - "masovian": 23703, - "scraping": 23704, - "converse": 23705, - "##bh": 23706, - "hacking": 23707, - "bulge": 23708, - "##oun": 23709, - "administratively": 23710, - "yao": 23711, - "580": 23712, - "amp": 23713, - "mammoth": 23714, - "booster": 23715, - "claremont": 23716, - "hooper": 23717, - "nomenclature": 23718, - "pursuits": 23719, - "mclaughlin": 23720, - "melinda": 23721, - "##sul": 23722, - "catfish": 23723, - "barclay": 23724, - "substrates": 23725, - "taxa": 23726, - "zee": 23727, - "originals": 23728, - "kimberly": 23729, - "packets": 23730, - "padma": 23731, - "##ality": 23732, - "borrowing": 23733, - "ostensibly": 23734, - "solvent": 23735, - "##bri": 23736, - "##genesis": 23737, - "##mist": 23738, - "lukas": 23739, - "shreveport": 23740, - "veracruz": 23741, - "##ь": 23742, - "##lou": 23743, - "##wives": 23744, - "cheney": 23745, - "tt": 23746, - "anatolia": 23747, - "hobbs": 23748, - "##zyn": 23749, - "cyclic": 23750, - "radiant": 23751, - "alistair": 23752, - "greenish": 23753, - "siena": 23754, - "dat": 23755, - "independents": 23756, - "##bation": 23757, - "conform": 23758, - "pieter": 23759, - "hyper": 23760, - "applicant": 23761, - "bradshaw": 23762, - "spores": 23763, - "telangana": 23764, - "vinci": 23765, - "inexpensive": 23766, - "nuclei": 23767, - "322": 23768, - "jang": 23769, - "nme": 23770, - "soho": 23771, - "spd": 23772, - "##ign": 23773, - "cradled": 23774, - "receptionist": 23775, - "pow": 23776, - "##43": 23777, - "##rika": 23778, - "fascism": 23779, - "##ifer": 23780, - "experimenting": 23781, - "##ading": 23782, - "##iec": 23783, - "##region": 23784, - "345": 23785, - "jocelyn": 23786, - "maris": 23787, - "stair": 23788, - "nocturnal": 23789, - "toro": 23790, - "constabulary": 23791, - "elgin": 23792, - "##kker": 23793, - "msc": 23794, - "##giving": 23795, - "##schen": 23796, - "##rase": 23797, - "doherty": 23798, - "doping": 23799, - "sarcastically": 23800, - "batter": 23801, - "maneuvers": 23802, - "##cano": 23803, - "##apple": 23804, - "##gai": 23805, - "##git": 23806, - "intrinsic": 23807, - "##nst": 23808, - "##stor": 23809, - "1753": 23810, - "showtime": 23811, - "cafes": 23812, - "gasps": 23813, - "lviv": 23814, - "ushered": 23815, - "##thed": 23816, - "fours": 23817, - "restart": 23818, - "astonishment": 23819, - "transmitting": 23820, - "flyer": 23821, - "shrugs": 23822, - "##sau": 23823, - "intriguing": 23824, - "cones": 23825, - "dictated": 23826, - "mushrooms": 23827, - "medial": 23828, - "##kovsky": 23829, - "##elman": 23830, - "escorting": 23831, - "gaped": 23832, - "##26": 23833, - "godfather": 23834, - "##door": 23835, - "##sell": 23836, - "djs": 23837, - "recaptured": 23838, - "timetable": 23839, - "vila": 23840, - "1710": 23841, - "3a": 23842, - "aerodrome": 23843, - "mortals": 23844, - "scientology": 23845, - "##orne": 23846, - "angelina": 23847, - "mag": 23848, - "convection": 23849, - "unpaid": 23850, - "insertion": 23851, - "intermittent": 23852, - "lego": 23853, - "##nated": 23854, - "endeavor": 23855, - "kota": 23856, - "pereira": 23857, - "##lz": 23858, - "304": 23859, - "bwv": 23860, - "glamorgan": 23861, - "insults": 23862, - "agatha": 23863, - "fey": 23864, - "##cend": 23865, - "fleetwood": 23866, - "mahogany": 23867, - "protruding": 23868, - "steamship": 23869, - "zeta": 23870, - "##arty": 23871, - "mcguire": 23872, - "suspense": 23873, - "##sphere": 23874, - "advising": 23875, - "urges": 23876, - "##wala": 23877, - "hurriedly": 23878, - "meteor": 23879, - "gilded": 23880, - "inline": 23881, - "arroyo": 23882, - "stalker": 23883, - "##oge": 23884, - "excitedly": 23885, - "revered": 23886, - "##cure": 23887, - "earle": 23888, - "introductory": 23889, - "##break": 23890, - "##ilde": 23891, - "mutants": 23892, - "puff": 23893, - "pulses": 23894, - "reinforcement": 23895, - "##haling": 23896, - "curses": 23897, - "lizards": 23898, - "stalk": 23899, - "correlated": 23900, - "##fixed": 23901, - "fallout": 23902, - "macquarie": 23903, - "##unas": 23904, - "bearded": 23905, - "denton": 23906, - "heaving": 23907, - "802": 23908, - "##ocation": 23909, - "winery": 23910, - "assign": 23911, - "dortmund": 23912, - "##lkirk": 23913, - "everest": 23914, - "invariant": 23915, - "charismatic": 23916, - "susie": 23917, - "##elling": 23918, - "bled": 23919, - "lesley": 23920, - "telegram": 23921, - "sumner": 23922, - "bk": 23923, - "##ogen": 23924, - "##Šŗ": 23925, - "wilcox": 23926, - "needy": 23927, - "colbert": 23928, - "duval": 23929, - "##iferous": 23930, - "##mbled": 23931, - "allotted": 23932, - "attends": 23933, - "imperative": 23934, - "##hita": 23935, - "replacements": 23936, - "hawker": 23937, - "##inda": 23938, - "insurgency": 23939, - "##zee": 23940, - "##eke": 23941, - "casts": 23942, - "##yla": 23943, - "680": 23944, - "ives": 23945, - "transitioned": 23946, - "##pack": 23947, - "##powering": 23948, - "authoritative": 23949, - "baylor": 23950, - "flex": 23951, - "cringed": 23952, - "plaintiffs": 23953, - "woodrow": 23954, - "##skie": 23955, - "drastic": 23956, - "ape": 23957, - "aroma": 23958, - "unfolded": 23959, - "commotion": 23960, - "nt": 23961, - "preoccupied": 23962, - "theta": 23963, - "routines": 23964, - "lasers": 23965, - "privatization": 23966, - "wand": 23967, - "domino": 23968, - "ek": 23969, - "clenching": 23970, - "nsa": 23971, - "strategically": 23972, - "showered": 23973, - "bile": 23974, - "handkerchief": 23975, - "pere": 23976, - "storing": 23977, - "christophe": 23978, - "insulting": 23979, - "316": 23980, - "nakamura": 23981, - "romani": 23982, - "asiatic": 23983, - "magdalena": 23984, - "palma": 23985, - "cruises": 23986, - "stripping": 23987, - "405": 23988, - "konstantin": 23989, - "soaring": 23990, - "##berman": 23991, - "colloquially": 23992, - "forerunner": 23993, - "havilland": 23994, - "incarcerated": 23995, - "parasites": 23996, - "sincerity": 23997, - "##utus": 23998, - "disks": 23999, - "plank": 24000, - "saigon": 24001, - "##ining": 24002, - "corbin": 24003, - "homo": 24004, - "ornaments": 24005, - "powerhouse": 24006, - "##tlement": 24007, - "chong": 24008, - "fastened": 24009, - "feasibility": 24010, - "idf": 24011, - "morphological": 24012, - "usable": 24013, - "##nish": 24014, - "##zuki": 24015, - "aqueduct": 24016, - "jaguars": 24017, - "keepers": 24018, - "##flies": 24019, - "aleksandr": 24020, - "faust": 24021, - "assigns": 24022, - "ewing": 24023, - "bacterium": 24024, - "hurled": 24025, - "tricky": 24026, - "hungarians": 24027, - "integers": 24028, - "wallis": 24029, - "321": 24030, - "yamaha": 24031, - "##isha": 24032, - "hushed": 24033, - "oblivion": 24034, - "aviator": 24035, - "evangelist": 24036, - "friars": 24037, - "##eller": 24038, - "monograph": 24039, - "ode": 24040, - "##nary": 24041, - "airplanes": 24042, - "labourers": 24043, - "charms": 24044, - "##nee": 24045, - "1661": 24046, - "hagen": 24047, - "tnt": 24048, - "rudder": 24049, - "fiesta": 24050, - "transcript": 24051, - "dorothea": 24052, - "ska": 24053, - "inhibitor": 24054, - "maccabi": 24055, - "retorted": 24056, - "raining": 24057, - "encompassed": 24058, - "clauses": 24059, - "menacing": 24060, - "1642": 24061, - "lineman": 24062, - "##gist": 24063, - "vamps": 24064, - "##ape": 24065, - "##dick": 24066, - "gloom": 24067, - "##rera": 24068, - "dealings": 24069, - "easing": 24070, - "seekers": 24071, - "##nut": 24072, - "##pment": 24073, - "helens": 24074, - "unmanned": 24075, - "##anu": 24076, - "##isson": 24077, - "basics": 24078, - "##amy": 24079, - "##ckman": 24080, - "adjustments": 24081, - "1688": 24082, - "brutality": 24083, - "horne": 24084, - "##zell": 24085, - "sui": 24086, - "##55": 24087, - "##mable": 24088, - "aggregator": 24089, - "##thal": 24090, - "rhino": 24091, - "##drick": 24092, - "##vira": 24093, - "counters": 24094, - "zoom": 24095, - "##01": 24096, - "##rting": 24097, - "mn": 24098, - "montenegrin": 24099, - "packard": 24100, - "##unciation": 24101, - "##ā™­": 24102, - "##kki": 24103, - "reclaim": 24104, - "scholastic": 24105, - "thugs": 24106, - "pulsed": 24107, - "##icia": 24108, - "syriac": 24109, - "quan": 24110, - "saddam": 24111, - "banda": 24112, - "kobe": 24113, - "blaming": 24114, - "buddies": 24115, - "dissent": 24116, - "##lusion": 24117, - "##usia": 24118, - "corbett": 24119, - "jaya": 24120, - "delle": 24121, - "erratic": 24122, - "lexie": 24123, - "##hesis": 24124, - "435": 24125, - "amiga": 24126, - "hermes": 24127, - "##pressing": 24128, - "##leen": 24129, - "chapels": 24130, - "gospels": 24131, - "jamal": 24132, - "##uating": 24133, - "compute": 24134, - "revolving": 24135, - "warp": 24136, - "##sso": 24137, - "##thes": 24138, - "armory": 24139, - "##eras": 24140, - "##gol": 24141, - "antrim": 24142, - "loki": 24143, - "##kow": 24144, - "##asian": 24145, - "##good": 24146, - "##zano": 24147, - "braid": 24148, - "handwriting": 24149, - "subdistrict": 24150, - "funky": 24151, - "pantheon": 24152, - "##iculate": 24153, - "concurrency": 24154, - "estimation": 24155, - "improper": 24156, - "juliana": 24157, - "##his": 24158, - "newcomers": 24159, - "johnstone": 24160, - "staten": 24161, - "communicated": 24162, - "##oco": 24163, - "##alle": 24164, - "sausage": 24165, - "stormy": 24166, - "##stered": 24167, - "##tters": 24168, - "superfamily": 24169, - "##grade": 24170, - "acidic": 24171, - "collateral": 24172, - "tabloid": 24173, - "##oped": 24174, - "##rza": 24175, - "bladder": 24176, - "austen": 24177, - "##ellant": 24178, - "mcgraw": 24179, - "##hay": 24180, - "hannibal": 24181, - "mein": 24182, - "aquino": 24183, - "lucifer": 24184, - "wo": 24185, - "badger": 24186, - "boar": 24187, - "cher": 24188, - "christensen": 24189, - "greenberg": 24190, - "interruption": 24191, - "##kken": 24192, - "jem": 24193, - "244": 24194, - "mocked": 24195, - "bottoms": 24196, - "cambridgeshire": 24197, - "##lide": 24198, - "sprawling": 24199, - "##bbly": 24200, - "eastwood": 24201, - "ghent": 24202, - "synth": 24203, - "##buck": 24204, - "advisers": 24205, - "##bah": 24206, - "nominally": 24207, - "hapoel": 24208, - "qu": 24209, - "daggers": 24210, - "estranged": 24211, - "fabricated": 24212, - "towels": 24213, - "vinnie": 24214, - "wcw": 24215, - "misunderstanding": 24216, - "anglia": 24217, - "nothin": 24218, - "unmistakable": 24219, - "##dust": 24220, - "##lova": 24221, - "chilly": 24222, - "marquette": 24223, - "truss": 24224, - "##edge": 24225, - "##erine": 24226, - "reece": 24227, - "##lty": 24228, - "##chemist": 24229, - "##connected": 24230, - "272": 24231, - "308": 24232, - "41st": 24233, - "bash": 24234, - "raion": 24235, - "waterfalls": 24236, - "##ump": 24237, - "##main": 24238, - "labyrinth": 24239, - "queue": 24240, - "theorist": 24241, - "##istle": 24242, - "bharatiya": 24243, - "flexed": 24244, - "soundtracks": 24245, - "rooney": 24246, - "leftist": 24247, - "patrolling": 24248, - "wharton": 24249, - "plainly": 24250, - "alleviate": 24251, - "eastman": 24252, - "schuster": 24253, - "topographic": 24254, - "engages": 24255, - "immensely": 24256, - "unbearable": 24257, - "fairchild": 24258, - "1620": 24259, - "dona": 24260, - "lurking": 24261, - "parisian": 24262, - "oliveira": 24263, - "ia": 24264, - "indictment": 24265, - "hahn": 24266, - "bangladeshi": 24267, - "##aster": 24268, - "vivo": 24269, - "##uming": 24270, - "##ential": 24271, - "antonia": 24272, - "expects": 24273, - "indoors": 24274, - "kildare": 24275, - "harlan": 24276, - "##logue": 24277, - "##ogenic": 24278, - "##sities": 24279, - "forgiven": 24280, - "##wat": 24281, - "childish": 24282, - "tavi": 24283, - "##mide": 24284, - "##orra": 24285, - "plausible": 24286, - "grimm": 24287, - "successively": 24288, - "scooted": 24289, - "##bola": 24290, - "##dget": 24291, - "##rith": 24292, - "spartans": 24293, - "emery": 24294, - "flatly": 24295, - "azure": 24296, - "epilogue": 24297, - "##wark": 24298, - "flourish": 24299, - "##iny": 24300, - "##tracted": 24301, - "##overs": 24302, - "##oshi": 24303, - "bestseller": 24304, - "distressed": 24305, - "receipt": 24306, - "spitting": 24307, - "hermit": 24308, - "topological": 24309, - "##cot": 24310, - "drilled": 24311, - "subunit": 24312, - "francs": 24313, - "##layer": 24314, - "eel": 24315, - "##fk": 24316, - "##itas": 24317, - "octopus": 24318, - "footprint": 24319, - "petitions": 24320, - "ufo": 24321, - "##say": 24322, - "##foil": 24323, - "interfering": 24324, - "leaking": 24325, - "palo": 24326, - "##metry": 24327, - "thistle": 24328, - "valiant": 24329, - "##pic": 24330, - "narayan": 24331, - "mcpherson": 24332, - "##fast": 24333, - "gonzales": 24334, - "##ym": 24335, - "##enne": 24336, - "dustin": 24337, - "novgorod": 24338, - "solos": 24339, - "##zman": 24340, - "doin": 24341, - "##raph": 24342, - "##patient": 24343, - "##meyer": 24344, - "soluble": 24345, - "ashland": 24346, - "cuffs": 24347, - "carole": 24348, - "pendleton": 24349, - "whistling": 24350, - "vassal": 24351, - "##river": 24352, - "deviation": 24353, - "revisited": 24354, - "constituents": 24355, - "rallied": 24356, - "rotate": 24357, - "loomed": 24358, - "##eil": 24359, - "##nting": 24360, - "amateurs": 24361, - "augsburg": 24362, - "auschwitz": 24363, - "crowns": 24364, - "skeletons": 24365, - "##cona": 24366, - "bonnet": 24367, - "257": 24368, - "dummy": 24369, - "globalization": 24370, - "simeon": 24371, - "sleeper": 24372, - "mandal": 24373, - "differentiated": 24374, - "##crow": 24375, - "##mare": 24376, - "milne": 24377, - "bundled": 24378, - "exasperated": 24379, - "talmud": 24380, - "owes": 24381, - "segregated": 24382, - "##feng": 24383, - "##uary": 24384, - "dentist": 24385, - "piracy": 24386, - "props": 24387, - "##rang": 24388, - "devlin": 24389, - "##torium": 24390, - "malicious": 24391, - "paws": 24392, - "##laid": 24393, - "dependency": 24394, - "##ergy": 24395, - "##fers": 24396, - "##enna": 24397, - "258": 24398, - "pistons": 24399, - "rourke": 24400, - "jed": 24401, - "grammatical": 24402, - "tres": 24403, - "maha": 24404, - "wig": 24405, - "512": 24406, - "ghostly": 24407, - "jayne": 24408, - "##achal": 24409, - "##creen": 24410, - "##ilis": 24411, - "##lins": 24412, - "##rence": 24413, - "designate": 24414, - "##with": 24415, - "arrogance": 24416, - "cambodian": 24417, - "clones": 24418, - "showdown": 24419, - "throttle": 24420, - "twain": 24421, - "##ception": 24422, - "lobes": 24423, - "metz": 24424, - "nagoya": 24425, - "335": 24426, - "braking": 24427, - "##furt": 24428, - "385": 24429, - "roaming": 24430, - "##minster": 24431, - "amin": 24432, - "crippled": 24433, - "##37": 24434, - "##llary": 24435, - "indifferent": 24436, - "hoffmann": 24437, - "idols": 24438, - "intimidating": 24439, - "1751": 24440, - "261": 24441, - "influenza": 24442, - "memo": 24443, - "onions": 24444, - "1748": 24445, - "bandage": 24446, - "consciously": 24447, - "##landa": 24448, - "##rage": 24449, - "clandestine": 24450, - "observes": 24451, - "swiped": 24452, - "tangle": 24453, - "##ener": 24454, - "##jected": 24455, - "##trum": 24456, - "##bill": 24457, - "##lta": 24458, - "hugs": 24459, - "congresses": 24460, - "josiah": 24461, - "spirited": 24462, - "##dek": 24463, - "humanist": 24464, - "managerial": 24465, - "filmmaking": 24466, - "inmate": 24467, - "rhymes": 24468, - "debuting": 24469, - "grimsby": 24470, - "ur": 24471, - "##laze": 24472, - "duplicate": 24473, - "vigor": 24474, - "##tf": 24475, - "republished": 24476, - "bolshevik": 24477, - "refurbishment": 24478, - "antibiotics": 24479, - "martini": 24480, - "methane": 24481, - "newscasts": 24482, - "royale": 24483, - "horizons": 24484, - "levant": 24485, - "iain": 24486, - "visas": 24487, - "##ischen": 24488, - "paler": 24489, - "##around": 24490, - "manifestation": 24491, - "snuck": 24492, - "alf": 24493, - "chop": 24494, - "futile": 24495, - "pedestal": 24496, - "rehab": 24497, - "##kat": 24498, - "bmg": 24499, - "kerman": 24500, - "res": 24501, - "fairbanks": 24502, - "jarrett": 24503, - "abstraction": 24504, - "saharan": 24505, - "##zek": 24506, - "1746": 24507, - "procedural": 24508, - "clearer": 24509, - "kincaid": 24510, - "sash": 24511, - "luciano": 24512, - "##ffey": 24513, - "crunch": 24514, - "helmut": 24515, - "##vara": 24516, - "revolutionaries": 24517, - "##tute": 24518, - "creamy": 24519, - "leach": 24520, - "##mmon": 24521, - "1747": 24522, - "permitting": 24523, - "nes": 24524, - "plight": 24525, - "wendell": 24526, - "##lese": 24527, - "contra": 24528, - "ts": 24529, - "clancy": 24530, - "ipa": 24531, - "mach": 24532, - "staples": 24533, - "autopsy": 24534, - "disturbances": 24535, - "nueva": 24536, - "karin": 24537, - "pontiac": 24538, - "##uding": 24539, - "proxy": 24540, - "venerable": 24541, - "haunt": 24542, - "leto": 24543, - "bergman": 24544, - "expands": 24545, - "##helm": 24546, - "wal": 24547, - "##pipe": 24548, - "canning": 24549, - "celine": 24550, - "cords": 24551, - "obesity": 24552, - "##enary": 24553, - "intrusion": 24554, - "planner": 24555, - "##phate": 24556, - "reasoned": 24557, - "sequencing": 24558, - "307": 24559, - "harrow": 24560, - "##chon": 24561, - "##dora": 24562, - "marred": 24563, - "mcintyre": 24564, - "repay": 24565, - "tarzan": 24566, - "darting": 24567, - "248": 24568, - "harrisburg": 24569, - "margarita": 24570, - "repulsed": 24571, - "##hur": 24572, - "##lding": 24573, - "belinda": 24574, - "hamburger": 24575, - "novo": 24576, - "compliant": 24577, - "runways": 24578, - "bingham": 24579, - "registrar": 24580, - "skyscraper": 24581, - "ic": 24582, - "cuthbert": 24583, - "improvisation": 24584, - "livelihood": 24585, - "##corp": 24586, - "##elial": 24587, - "admiring": 24588, - "##dened": 24589, - "sporadic": 24590, - "believer": 24591, - "casablanca": 24592, - "popcorn": 24593, - "##29": 24594, - "asha": 24595, - "shovel": 24596, - "##bek": 24597, - "##dice": 24598, - "coiled": 24599, - "tangible": 24600, - "##dez": 24601, - "casper": 24602, - "elsie": 24603, - "resin": 24604, - "tenderness": 24605, - "rectory": 24606, - "##ivision": 24607, - "avail": 24608, - "sonar": 24609, - "##mori": 24610, - "boutique": 24611, - "##dier": 24612, - "guerre": 24613, - "bathed": 24614, - "upbringing": 24615, - "vaulted": 24616, - "sandals": 24617, - "blessings": 24618, - "##naut": 24619, - "##utnant": 24620, - "1680": 24621, - "306": 24622, - "foxes": 24623, - "pia": 24624, - "corrosion": 24625, - "hesitantly": 24626, - "confederates": 24627, - "crystalline": 24628, - "footprints": 24629, - "shapiro": 24630, - "tirana": 24631, - "valentin": 24632, - "drones": 24633, - "45th": 24634, - "microscope": 24635, - "shipments": 24636, - "texted": 24637, - "inquisition": 24638, - "wry": 24639, - "guernsey": 24640, - "unauthorized": 24641, - "resigning": 24642, - "760": 24643, - "ripple": 24644, - "schubert": 24645, - "stu": 24646, - "reassure": 24647, - "felony": 24648, - "##ardo": 24649, - "brittle": 24650, - "koreans": 24651, - "##havan": 24652, - "##ives": 24653, - "dun": 24654, - "implicit": 24655, - "tyres": 24656, - "##aldi": 24657, - "##lth": 24658, - "magnolia": 24659, - "##ehan": 24660, - "##puri": 24661, - "##poulos": 24662, - "aggressively": 24663, - "fei": 24664, - "gr": 24665, - "familiarity": 24666, - "##poo": 24667, - "indicative": 24668, - "##trust": 24669, - "fundamentally": 24670, - "jimmie": 24671, - "overrun": 24672, - "395": 24673, - "anchors": 24674, - "moans": 24675, - "##opus": 24676, - "britannia": 24677, - "armagh": 24678, - "##ggle": 24679, - "purposely": 24680, - "seizing": 24681, - "##vao": 24682, - "bewildered": 24683, - "mundane": 24684, - "avoidance": 24685, - "cosmopolitan": 24686, - "geometridae": 24687, - "quartermaster": 24688, - "caf": 24689, - "415": 24690, - "chatter": 24691, - "engulfed": 24692, - "gleam": 24693, - "purge": 24694, - "##icate": 24695, - "juliette": 24696, - "jurisprudence": 24697, - "guerra": 24698, - "revisions": 24699, - "##bn": 24700, - "casimir": 24701, - "brew": 24702, - "##jm": 24703, - "1749": 24704, - "clapton": 24705, - "cloudy": 24706, - "conde": 24707, - "hermitage": 24708, - "278": 24709, - "simulations": 24710, - "torches": 24711, - "vincenzo": 24712, - "matteo": 24713, - "##rill": 24714, - "hidalgo": 24715, - "booming": 24716, - "westbound": 24717, - "accomplishment": 24718, - "tentacles": 24719, - "unaffected": 24720, - "##sius": 24721, - "annabelle": 24722, - "flopped": 24723, - "sloping": 24724, - "##litz": 24725, - "dreamer": 24726, - "interceptor": 24727, - "vu": 24728, - "##loh": 24729, - "consecration": 24730, - "copying": 24731, - "messaging": 24732, - "breaker": 24733, - "climates": 24734, - "hospitalized": 24735, - "1752": 24736, - "torino": 24737, - "afternoons": 24738, - "winfield": 24739, - "witnessing": 24740, - "##teacher": 24741, - "breakers": 24742, - "choirs": 24743, - "sawmill": 24744, - "coldly": 24745, - "##ege": 24746, - "sipping": 24747, - "haste": 24748, - "uninhabited": 24749, - "conical": 24750, - "bibliography": 24751, - "pamphlets": 24752, - "severn": 24753, - "edict": 24754, - "##oca": 24755, - "deux": 24756, - "illnesses": 24757, - "grips": 24758, - "##pl": 24759, - "rehearsals": 24760, - "sis": 24761, - "thinkers": 24762, - "tame": 24763, - "##keepers": 24764, - "1690": 24765, - "acacia": 24766, - "reformer": 24767, - "##osed": 24768, - "##rys": 24769, - "shuffling": 24770, - "##iring": 24771, - "##shima": 24772, - "eastbound": 24773, - "ionic": 24774, - "rhea": 24775, - "flees": 24776, - "littered": 24777, - "##oum": 24778, - "rocker": 24779, - "vomiting": 24780, - "groaning": 24781, - "champ": 24782, - "overwhelmingly": 24783, - "civilizations": 24784, - "paces": 24785, - "sloop": 24786, - "adoptive": 24787, - "##tish": 24788, - "skaters": 24789, - "##vres": 24790, - "aiding": 24791, - "mango": 24792, - "##joy": 24793, - "nikola": 24794, - "shriek": 24795, - "##ignon": 24796, - "pharmaceuticals": 24797, - "##mg": 24798, - "tuna": 24799, - "calvert": 24800, - "gustavo": 24801, - "stocked": 24802, - "yearbook": 24803, - "##urai": 24804, - "##mana": 24805, - "computed": 24806, - "subsp": 24807, - "riff": 24808, - "hanoi": 24809, - "kelvin": 24810, - "hamid": 24811, - "moors": 24812, - "pastures": 24813, - "summons": 24814, - "jihad": 24815, - "nectar": 24816, - "##ctors": 24817, - "bayou": 24818, - "untitled": 24819, - "pleasing": 24820, - "vastly": 24821, - "republics": 24822, - "intellect": 24823, - "##Ī·": 24824, - "##ulio": 24825, - "##tou": 24826, - "crumbling": 24827, - "stylistic": 24828, - "sb": 24829, - "##ی": 24830, - "consolation": 24831, - "frequented": 24832, - "hā‚‚o": 24833, - "walden": 24834, - "widows": 24835, - "##iens": 24836, - "404": 24837, - "##ignment": 24838, - "chunks": 24839, - "improves": 24840, - "288": 24841, - "grit": 24842, - "recited": 24843, - "##dev": 24844, - "snarl": 24845, - "sociological": 24846, - "##arte": 24847, - "##gul": 24848, - "inquired": 24849, - "##held": 24850, - "bruise": 24851, - "clube": 24852, - "consultancy": 24853, - "homogeneous": 24854, - "hornets": 24855, - "multiplication": 24856, - "pasta": 24857, - "prick": 24858, - "savior": 24859, - "##grin": 24860, - "##kou": 24861, - "##phile": 24862, - "yoon": 24863, - "##gara": 24864, - "grimes": 24865, - "vanishing": 24866, - "cheering": 24867, - "reacting": 24868, - "bn": 24869, - "distillery": 24870, - "##quisite": 24871, - "##vity": 24872, - "coe": 24873, - "dockyard": 24874, - "massif": 24875, - "##jord": 24876, - "escorts": 24877, - "voss": 24878, - "##valent": 24879, - "byte": 24880, - "chopped": 24881, - "hawke": 24882, - "illusions": 24883, - "workings": 24884, - "floats": 24885, - "##koto": 24886, - "##vac": 24887, - "kv": 24888, - "annapolis": 24889, - "madden": 24890, - "##onus": 24891, - "alvaro": 24892, - "noctuidae": 24893, - "##cum": 24894, - "##scopic": 24895, - "avenge": 24896, - "steamboat": 24897, - "forte": 24898, - "illustrates": 24899, - "erika": 24900, - "##trip": 24901, - "570": 24902, - "dew": 24903, - "nationalities": 24904, - "bran": 24905, - "manifested": 24906, - "thirsty": 24907, - "diversified": 24908, - "muscled": 24909, - "reborn": 24910, - "##standing": 24911, - "arson": 24912, - "##lessness": 24913, - "##dran": 24914, - "##logram": 24915, - "##boys": 24916, - "##kushima": 24917, - "##vious": 24918, - "willoughby": 24919, - "##phobia": 24920, - "286": 24921, - "alsace": 24922, - "dashboard": 24923, - "yuki": 24924, - "##chai": 24925, - "granville": 24926, - "myspace": 24927, - "publicized": 24928, - "tricked": 24929, - "##gang": 24930, - "adjective": 24931, - "##ater": 24932, - "relic": 24933, - "reorganisation": 24934, - "enthusiastically": 24935, - "indications": 24936, - "saxe": 24937, - "##lassified": 24938, - "consolidate": 24939, - "iec": 24940, - "padua": 24941, - "helplessly": 24942, - "ramps": 24943, - "renaming": 24944, - "regulars": 24945, - "pedestrians": 24946, - "accents": 24947, - "convicts": 24948, - "inaccurate": 24949, - "lowers": 24950, - "mana": 24951, - "##pati": 24952, - "barrie": 24953, - "bjp": 24954, - "outta": 24955, - "someplace": 24956, - "berwick": 24957, - "flanking": 24958, - "invoked": 24959, - "marrow": 24960, - "sparsely": 24961, - "excerpts": 24962, - "clothed": 24963, - "rei": 24964, - "##ginal": 24965, - "wept": 24966, - "##straße": 24967, - "##vish": 24968, - "alexa": 24969, - "excel": 24970, - "##ptive": 24971, - "membranes": 24972, - "aquitaine": 24973, - "creeks": 24974, - "cutler": 24975, - "sheppard": 24976, - "implementations": 24977, - "ns": 24978, - "##dur": 24979, - "fragrance": 24980, - "budge": 24981, - "concordia": 24982, - "magnesium": 24983, - "marcelo": 24984, - "##antes": 24985, - "gladly": 24986, - "vibrating": 24987, - "##rral": 24988, - "##ggles": 24989, - "montrose": 24990, - "##omba": 24991, - "lew": 24992, - "seamus": 24993, - "1630": 24994, - "cocky": 24995, - "##ament": 24996, - "##uen": 24997, - "bjorn": 24998, - "##rrick": 24999, - "fielder": 25000, - "fluttering": 25001, - "##lase": 25002, - "methyl": 25003, - "kimberley": 25004, - "mcdowell": 25005, - "reductions": 25006, - "barbed": 25007, - "##jic": 25008, - "##tonic": 25009, - "aeronautical": 25010, - "condensed": 25011, - "distracting": 25012, - "##promising": 25013, - "huffed": 25014, - "##cala": 25015, - "##sle": 25016, - "claudius": 25017, - "invincible": 25018, - "missy": 25019, - "pious": 25020, - "balthazar": 25021, - "ci": 25022, - "##lang": 25023, - "butte": 25024, - "combo": 25025, - "orson": 25026, - "##dication": 25027, - "myriad": 25028, - "1707": 25029, - "silenced": 25030, - "##fed": 25031, - "##rh": 25032, - "coco": 25033, - "netball": 25034, - "yourselves": 25035, - "##oza": 25036, - "clarify": 25037, - "heller": 25038, - "peg": 25039, - "durban": 25040, - "etudes": 25041, - "offender": 25042, - "roast": 25043, - "blackmail": 25044, - "curvature": 25045, - "##woods": 25046, - "vile": 25047, - "309": 25048, - "illicit": 25049, - "suriname": 25050, - "##linson": 25051, - "overture": 25052, - "1685": 25053, - "bubbling": 25054, - "gymnast": 25055, - "tucking": 25056, - "##mming": 25057, - "##ouin": 25058, - "maldives": 25059, - "##bala": 25060, - "gurney": 25061, - "##dda": 25062, - "##eased": 25063, - "##oides": 25064, - "backside": 25065, - "pinto": 25066, - "jars": 25067, - "racehorse": 25068, - "tending": 25069, - "##rdial": 25070, - "baronetcy": 25071, - "wiener": 25072, - "duly": 25073, - "##rke": 25074, - "barbarian": 25075, - "cupping": 25076, - "flawed": 25077, - "##thesis": 25078, - "bertha": 25079, - "pleistocene": 25080, - "puddle": 25081, - "swearing": 25082, - "##nob": 25083, - "##tically": 25084, - "fleeting": 25085, - "prostate": 25086, - "amulet": 25087, - "educating": 25088, - "##mined": 25089, - "##iti": 25090, - "##tler": 25091, - "75th": 25092, - "jens": 25093, - "respondents": 25094, - "analytics": 25095, - "cavaliers": 25096, - "papacy": 25097, - "raju": 25098, - "##iente": 25099, - "##ulum": 25100, - "##tip": 25101, - "funnel": 25102, - "271": 25103, - "disneyland": 25104, - "##lley": 25105, - "sociologist": 25106, - "##iam": 25107, - "2500": 25108, - "faulkner": 25109, - "louvre": 25110, - "menon": 25111, - "##dson": 25112, - "276": 25113, - "##ower": 25114, - "afterlife": 25115, - "mannheim": 25116, - "peptide": 25117, - "referees": 25118, - "comedians": 25119, - "meaningless": 25120, - "##anger": 25121, - "##laise": 25122, - "fabrics": 25123, - "hurley": 25124, - "renal": 25125, - "sleeps": 25126, - "##bour": 25127, - "##icle": 25128, - "breakout": 25129, - "kristin": 25130, - "roadside": 25131, - "animator": 25132, - "clover": 25133, - "disdain": 25134, - "unsafe": 25135, - "redesign": 25136, - "##urity": 25137, - "firth": 25138, - "barnsley": 25139, - "portage": 25140, - "reset": 25141, - "narrows": 25142, - "268": 25143, - "commandos": 25144, - "expansive": 25145, - "speechless": 25146, - "tubular": 25147, - "##lux": 25148, - "essendon": 25149, - "eyelashes": 25150, - "smashwords": 25151, - "##yad": 25152, - "##bang": 25153, - "##claim": 25154, - "craved": 25155, - "sprinted": 25156, - "chet": 25157, - "somme": 25158, - "astor": 25159, - "wrocław": 25160, - "orton": 25161, - "266": 25162, - "bane": 25163, - "##erving": 25164, - "##uing": 25165, - "mischief": 25166, - "##amps": 25167, - "##sund": 25168, - "scaling": 25169, - "terre": 25170, - "##xious": 25171, - "impairment": 25172, - "offenses": 25173, - "undermine": 25174, - "moi": 25175, - "soy": 25176, - "contiguous": 25177, - "arcadia": 25178, - "inuit": 25179, - "seam": 25180, - "##tops": 25181, - "macbeth": 25182, - "rebelled": 25183, - "##icative": 25184, - "##iot": 25185, - "590": 25186, - "elaborated": 25187, - "frs": 25188, - "uniformed": 25189, - "##dberg": 25190, - "259": 25191, - "powerless": 25192, - "priscilla": 25193, - "stimulated": 25194, - "980": 25195, - "qc": 25196, - "arboretum": 25197, - "frustrating": 25198, - "trieste": 25199, - "bullock": 25200, - "##nified": 25201, - "enriched": 25202, - "glistening": 25203, - "intern": 25204, - "##adia": 25205, - "locus": 25206, - "nouvelle": 25207, - "ollie": 25208, - "ike": 25209, - "lash": 25210, - "starboard": 25211, - "ee": 25212, - "tapestry": 25213, - "headlined": 25214, - "hove": 25215, - "rigged": 25216, - "##vite": 25217, - "pollock": 25218, - "##yme": 25219, - "thrive": 25220, - "clustered": 25221, - "cas": 25222, - "roi": 25223, - "gleamed": 25224, - "olympiad": 25225, - "##lino": 25226, - "pressured": 25227, - "regimes": 25228, - "##hosis": 25229, - "##lick": 25230, - "ripley": 25231, - "##ophone": 25232, - "kickoff": 25233, - "gallon": 25234, - "rockwell": 25235, - "##arable": 25236, - "crusader": 25237, - "glue": 25238, - "revolutions": 25239, - "scrambling": 25240, - "1714": 25241, - "grover": 25242, - "##jure": 25243, - "englishman": 25244, - "aztec": 25245, - "263": 25246, - "contemplating": 25247, - "coven": 25248, - "ipad": 25249, - "preach": 25250, - "triumphant": 25251, - "tufts": 25252, - "##esian": 25253, - "rotational": 25254, - "##phus": 25255, - "328": 25256, - "falkland": 25257, - "##brates": 25258, - "strewn": 25259, - "clarissa": 25260, - "rejoin": 25261, - "environmentally": 25262, - "glint": 25263, - "banded": 25264, - "drenched": 25265, - "moat": 25266, - "albanians": 25267, - "johor": 25268, - "rr": 25269, - "maestro": 25270, - "malley": 25271, - "nouveau": 25272, - "shaded": 25273, - "taxonomy": 25274, - "v6": 25275, - "adhere": 25276, - "bunk": 25277, - "airfields": 25278, - "##ritan": 25279, - "1741": 25280, - "encompass": 25281, - "remington": 25282, - "tran": 25283, - "##erative": 25284, - "amelie": 25285, - "mazda": 25286, - "friar": 25287, - "morals": 25288, - "passions": 25289, - "##zai": 25290, - "breadth": 25291, - "vis": 25292, - "##hae": 25293, - "argus": 25294, - "burnham": 25295, - "caressing": 25296, - "insider": 25297, - "rudd": 25298, - "##imov": 25299, - "##mini": 25300, - "##rso": 25301, - "italianate": 25302, - "murderous": 25303, - "textual": 25304, - "wainwright": 25305, - "armada": 25306, - "bam": 25307, - "weave": 25308, - "timer": 25309, - "##taken": 25310, - "##nh": 25311, - "fra": 25312, - "##crest": 25313, - "ardent": 25314, - "salazar": 25315, - "taps": 25316, - "tunis": 25317, - "##ntino": 25318, - "allegro": 25319, - "gland": 25320, - "philanthropic": 25321, - "##chester": 25322, - "implication": 25323, - "##optera": 25324, - "esq": 25325, - "judas": 25326, - "noticeably": 25327, - "wynn": 25328, - "##dara": 25329, - "inched": 25330, - "indexed": 25331, - "crises": 25332, - "villiers": 25333, - "bandit": 25334, - "royalties": 25335, - "patterned": 25336, - "cupboard": 25337, - "interspersed": 25338, - "accessory": 25339, - "isla": 25340, - "kendrick": 25341, - "entourage": 25342, - "stitches": 25343, - "##esthesia": 25344, - "headwaters": 25345, - "##ior": 25346, - "interlude": 25347, - "distraught": 25348, - "draught": 25349, - "1727": 25350, - "##basket": 25351, - "biased": 25352, - "sy": 25353, - "transient": 25354, - "triad": 25355, - "subgenus": 25356, - "adapting": 25357, - "kidd": 25358, - "shortstop": 25359, - "##umatic": 25360, - "dimly": 25361, - "spiked": 25362, - "mcleod": 25363, - "reprint": 25364, - "nellie": 25365, - "pretoria": 25366, - "windmill": 25367, - "##cek": 25368, - "singled": 25369, - "##mps": 25370, - "273": 25371, - "reunite": 25372, - "##orous": 25373, - "747": 25374, - "bankers": 25375, - "outlying": 25376, - "##omp": 25377, - "##ports": 25378, - "##tream": 25379, - "apologies": 25380, - "cosmetics": 25381, - "patsy": 25382, - "##deh": 25383, - "##ocks": 25384, - "##yson": 25385, - "bender": 25386, - "nantes": 25387, - "serene": 25388, - "##nad": 25389, - "lucha": 25390, - "mmm": 25391, - "323": 25392, - "##cius": 25393, - "##gli": 25394, - "cmll": 25395, - "coinage": 25396, - "nestor": 25397, - "juarez": 25398, - "##rook": 25399, - "smeared": 25400, - "sprayed": 25401, - "twitching": 25402, - "sterile": 25403, - "irina": 25404, - "embodied": 25405, - "juveniles": 25406, - "enveloped": 25407, - "miscellaneous": 25408, - "cancers": 25409, - "dq": 25410, - "gulped": 25411, - "luisa": 25412, - "crested": 25413, - "swat": 25414, - "donegal": 25415, - "ref": 25416, - "##anov": 25417, - "##acker": 25418, - "hearst": 25419, - "mercantile": 25420, - "##lika": 25421, - "doorbell": 25422, - "ua": 25423, - "vicki": 25424, - "##alla": 25425, - "##som": 25426, - "bilbao": 25427, - "psychologists": 25428, - "stryker": 25429, - "sw": 25430, - "horsemen": 25431, - "turkmenistan": 25432, - "wits": 25433, - "##national": 25434, - "anson": 25435, - "mathew": 25436, - "screenings": 25437, - "##umb": 25438, - "rihanna": 25439, - "##agne": 25440, - "##nessy": 25441, - "aisles": 25442, - "##iani": 25443, - "##osphere": 25444, - "hines": 25445, - "kenton": 25446, - "saskatoon": 25447, - "tasha": 25448, - "truncated": 25449, - "##champ": 25450, - "##itan": 25451, - "mildred": 25452, - "advises": 25453, - "fredrik": 25454, - "interpreting": 25455, - "inhibitors": 25456, - "##athi": 25457, - "spectroscopy": 25458, - "##hab": 25459, - "##kong": 25460, - "karim": 25461, - "panda": 25462, - "##oia": 25463, - "##nail": 25464, - "##vc": 25465, - "conqueror": 25466, - "kgb": 25467, - "leukemia": 25468, - "##dity": 25469, - "arrivals": 25470, - "cheered": 25471, - "pisa": 25472, - "phosphorus": 25473, - "shielded": 25474, - "##riated": 25475, - "mammal": 25476, - "unitarian": 25477, - "urgently": 25478, - "chopin": 25479, - "sanitary": 25480, - "##mission": 25481, - "spicy": 25482, - "drugged": 25483, - "hinges": 25484, - "##tort": 25485, - "tipping": 25486, - "trier": 25487, - "impoverished": 25488, - "westchester": 25489, - "##caster": 25490, - "267": 25491, - "epoch": 25492, - "nonstop": 25493, - "##gman": 25494, - "##khov": 25495, - "aromatic": 25496, - "centrally": 25497, - "cerro": 25498, - "##tively": 25499, - "##vio": 25500, - "billions": 25501, - "modulation": 25502, - "sedimentary": 25503, - "283": 25504, - "facilitating": 25505, - "outrageous": 25506, - "goldstein": 25507, - "##eak": 25508, - "##kt": 25509, - "ld": 25510, - "maitland": 25511, - "penultimate": 25512, - "pollard": 25513, - "##dance": 25514, - "fleets": 25515, - "spaceship": 25516, - "vertebrae": 25517, - "##nig": 25518, - "alcoholism": 25519, - "als": 25520, - "recital": 25521, - "##bham": 25522, - "##ference": 25523, - "##omics": 25524, - "m2": 25525, - "##bm": 25526, - "trois": 25527, - "##tropical": 25528, - "##в": 25529, - "commemorates": 25530, - "##meric": 25531, - "marge": 25532, - "##raction": 25533, - "1643": 25534, - "670": 25535, - "cosmetic": 25536, - "ravaged": 25537, - "##ige": 25538, - "catastrophe": 25539, - "eng": 25540, - "##shida": 25541, - "albrecht": 25542, - "arterial": 25543, - "bellamy": 25544, - "decor": 25545, - "harmon": 25546, - "##rde": 25547, - "bulbs": 25548, - "synchronized": 25549, - "vito": 25550, - "easiest": 25551, - "shetland": 25552, - "shielding": 25553, - "wnba": 25554, - "##glers": 25555, - "##ssar": 25556, - "##riam": 25557, - "brianna": 25558, - "cumbria": 25559, - "##aceous": 25560, - "##rard": 25561, - "cores": 25562, - "thayer": 25563, - "##nsk": 25564, - "brood": 25565, - "hilltop": 25566, - "luminous": 25567, - "carts": 25568, - "keynote": 25569, - "larkin": 25570, - "logos": 25571, - "##cta": 25572, - "##Ų§": 25573, - "##mund": 25574, - "##quay": 25575, - "lilith": 25576, - "tinted": 25577, - "277": 25578, - "wrestle": 25579, - "mobilization": 25580, - "##uses": 25581, - "sequential": 25582, - "siam": 25583, - "bloomfield": 25584, - "takahashi": 25585, - "274": 25586, - "##ieving": 25587, - "presenters": 25588, - "ringo": 25589, - "blazed": 25590, - "witty": 25591, - "##oven": 25592, - "##ignant": 25593, - "devastation": 25594, - "haydn": 25595, - "harmed": 25596, - "newt": 25597, - "therese": 25598, - "##peed": 25599, - "gershwin": 25600, - "molina": 25601, - "rabbis": 25602, - "sudanese": 25603, - "001": 25604, - "innate": 25605, - "restarted": 25606, - "##sack": 25607, - "##fus": 25608, - "slices": 25609, - "wb": 25610, - "##shah": 25611, - "enroll": 25612, - "hypothetical": 25613, - "hysterical": 25614, - "1743": 25615, - "fabio": 25616, - "indefinite": 25617, - "warped": 25618, - "##hg": 25619, - "exchanging": 25620, - "525": 25621, - "unsuitable": 25622, - "##sboro": 25623, - "gallo": 25624, - "1603": 25625, - "bret": 25626, - "cobalt": 25627, - "homemade": 25628, - "##hunter": 25629, - "mx": 25630, - "operatives": 25631, - "##dhar": 25632, - "terraces": 25633, - "durable": 25634, - "latch": 25635, - "pens": 25636, - "whorls": 25637, - "##ctuated": 25638, - "##eaux": 25639, - "billing": 25640, - "ligament": 25641, - "succumbed": 25642, - "##gly": 25643, - "regulators": 25644, - "spawn": 25645, - "##brick": 25646, - "##stead": 25647, - "filmfare": 25648, - "rochelle": 25649, - "##nzo": 25650, - "1725": 25651, - "circumstance": 25652, - "saber": 25653, - "supplements": 25654, - "##nsky": 25655, - "##tson": 25656, - "crowe": 25657, - "wellesley": 25658, - "carrot": 25659, - "##9th": 25660, - "##movable": 25661, - "primate": 25662, - "drury": 25663, - "sincerely": 25664, - "topical": 25665, - "##mad": 25666, - "##rao": 25667, - "callahan": 25668, - "kyiv": 25669, - "smarter": 25670, - "tits": 25671, - "undo": 25672, - "##yeh": 25673, - "announcements": 25674, - "anthologies": 25675, - "barrio": 25676, - "nebula": 25677, - "##islaus": 25678, - "##shaft": 25679, - "##tyn": 25680, - "bodyguards": 25681, - "2021": 25682, - "assassinate": 25683, - "barns": 25684, - "emmett": 25685, - "scully": 25686, - "##mah": 25687, - "##yd": 25688, - "##eland": 25689, - "##tino": 25690, - "##itarian": 25691, - "demoted": 25692, - "gorman": 25693, - "lashed": 25694, - "prized": 25695, - "adventist": 25696, - "writ": 25697, - "##gui": 25698, - "alla": 25699, - "invertebrates": 25700, - "##ausen": 25701, - "1641": 25702, - "amman": 25703, - "1742": 25704, - "align": 25705, - "healy": 25706, - "redistribution": 25707, - "##gf": 25708, - "##rize": 25709, - "insulation": 25710, - "##drop": 25711, - "adherents": 25712, - "hezbollah": 25713, - "vitro": 25714, - "ferns": 25715, - "yanking": 25716, - "269": 25717, - "php": 25718, - "registering": 25719, - "uppsala": 25720, - "cheerleading": 25721, - "confines": 25722, - "mischievous": 25723, - "tully": 25724, - "##ross": 25725, - "49th": 25726, - "docked": 25727, - "roam": 25728, - "stipulated": 25729, - "pumpkin": 25730, - "##bry": 25731, - "prompt": 25732, - "##ezer": 25733, - "blindly": 25734, - "shuddering": 25735, - "craftsmen": 25736, - "frail": 25737, - "scented": 25738, - "katharine": 25739, - "scramble": 25740, - "shaggy": 25741, - "sponge": 25742, - "helix": 25743, - "zaragoza": 25744, - "279": 25745, - "##52": 25746, - "43rd": 25747, - "backlash": 25748, - "fontaine": 25749, - "seizures": 25750, - "posse": 25751, - "cowan": 25752, - "nonfiction": 25753, - "telenovela": 25754, - "wwii": 25755, - "hammered": 25756, - "undone": 25757, - "##gpur": 25758, - "encircled": 25759, - "irs": 25760, - "##ivation": 25761, - "artefacts": 25762, - "oneself": 25763, - "searing": 25764, - "smallpox": 25765, - "##belle": 25766, - "##osaurus": 25767, - "shandong": 25768, - "breached": 25769, - "upland": 25770, - "blushing": 25771, - "rankin": 25772, - "infinitely": 25773, - "psyche": 25774, - "tolerated": 25775, - "docking": 25776, - "evicted": 25777, - "##col": 25778, - "unmarked": 25779, - "##lving": 25780, - "gnome": 25781, - "lettering": 25782, - "litres": 25783, - "musique": 25784, - "##oint": 25785, - "benevolent": 25786, - "##jal": 25787, - "blackened": 25788, - "##anna": 25789, - "mccall": 25790, - "racers": 25791, - "tingle": 25792, - "##ocene": 25793, - "##orestation": 25794, - "introductions": 25795, - "radically": 25796, - "292": 25797, - "##hiff": 25798, - "##ŲØŲ§ŲÆ": 25799, - "1610": 25800, - "1739": 25801, - "munchen": 25802, - "plead": 25803, - "##nka": 25804, - "condo": 25805, - "scissors": 25806, - "##sight": 25807, - "##tens": 25808, - "apprehension": 25809, - "##cey": 25810, - "##yin": 25811, - "hallmark": 25812, - "watering": 25813, - "formulas": 25814, - "sequels": 25815, - "##llas": 25816, - "aggravated": 25817, - "bae": 25818, - "commencing": 25819, - "##building": 25820, - "enfield": 25821, - "prohibits": 25822, - "marne": 25823, - "vedic": 25824, - "civilized": 25825, - "euclidean": 25826, - "jagger": 25827, - "beforehand": 25828, - "blasts": 25829, - "dumont": 25830, - "##arney": 25831, - "##nem": 25832, - "740": 25833, - "conversions": 25834, - "hierarchical": 25835, - "rios": 25836, - "simulator": 25837, - "##dya": 25838, - "##lellan": 25839, - "hedges": 25840, - "oleg": 25841, - "thrusts": 25842, - "shadowed": 25843, - "darby": 25844, - "maximize": 25845, - "1744": 25846, - "gregorian": 25847, - "##nded": 25848, - "##routed": 25849, - "sham": 25850, - "unspecified": 25851, - "##hog": 25852, - "emory": 25853, - "factual": 25854, - "##smo": 25855, - "##tp": 25856, - "fooled": 25857, - "##rger": 25858, - "ortega": 25859, - "wellness": 25860, - "marlon": 25861, - "##oton": 25862, - "##urance": 25863, - "casket": 25864, - "keating": 25865, - "ley": 25866, - "enclave": 25867, - "##ayan": 25868, - "char": 25869, - "influencing": 25870, - "jia": 25871, - "##chenko": 25872, - "412": 25873, - "ammonia": 25874, - "erebidae": 25875, - "incompatible": 25876, - "violins": 25877, - "cornered": 25878, - "##arat": 25879, - "grooves": 25880, - "astronauts": 25881, - "columbian": 25882, - "rampant": 25883, - "fabrication": 25884, - "kyushu": 25885, - "mahmud": 25886, - "vanish": 25887, - "##dern": 25888, - "mesopotamia": 25889, - "##lete": 25890, - "ict": 25891, - "##rgen": 25892, - "caspian": 25893, - "kenji": 25894, - "pitted": 25895, - "##vered": 25896, - "999": 25897, - "grimace": 25898, - "roanoke": 25899, - "tchaikovsky": 25900, - "twinned": 25901, - "##analysis": 25902, - "##awan": 25903, - "xinjiang": 25904, - "arias": 25905, - "clemson": 25906, - "kazakh": 25907, - "sizable": 25908, - "1662": 25909, - "##khand": 25910, - "##vard": 25911, - "plunge": 25912, - "tatum": 25913, - "vittorio": 25914, - "##nden": 25915, - "cholera": 25916, - "##dana": 25917, - "##oper": 25918, - "bracing": 25919, - "indifference": 25920, - "projectile": 25921, - "superliga": 25922, - "##chee": 25923, - "realises": 25924, - "upgrading": 25925, - "299": 25926, - "porte": 25927, - "retribution": 25928, - "##vies": 25929, - "nk": 25930, - "stil": 25931, - "##resses": 25932, - "ama": 25933, - "bureaucracy": 25934, - "blackberry": 25935, - "bosch": 25936, - "testosterone": 25937, - "collapses": 25938, - "greer": 25939, - "##pathic": 25940, - "ioc": 25941, - "fifties": 25942, - "malls": 25943, - "##erved": 25944, - "bao": 25945, - "baskets": 25946, - "adolescents": 25947, - "siegfried": 25948, - "##osity": 25949, - "##tosis": 25950, - "mantra": 25951, - "detecting": 25952, - "existent": 25953, - "fledgling": 25954, - "##cchi": 25955, - "dissatisfied": 25956, - "gan": 25957, - "telecommunication": 25958, - "mingled": 25959, - "sobbed": 25960, - "6000": 25961, - "controversies": 25962, - "outdated": 25963, - "taxis": 25964, - "##raus": 25965, - "fright": 25966, - "slams": 25967, - "##lham": 25968, - "##fect": 25969, - "##tten": 25970, - "detectors": 25971, - "fetal": 25972, - "tanned": 25973, - "##uw": 25974, - "fray": 25975, - "goth": 25976, - "olympian": 25977, - "skipping": 25978, - "mandates": 25979, - "scratches": 25980, - "sheng": 25981, - "unspoken": 25982, - "hyundai": 25983, - "tracey": 25984, - "hotspur": 25985, - "restrictive": 25986, - "##buch": 25987, - "americana": 25988, - "mundo": 25989, - "##bari": 25990, - "burroughs": 25991, - "diva": 25992, - "vulcan": 25993, - "##6th": 25994, - "distinctions": 25995, - "thumping": 25996, - "##ngen": 25997, - "mikey": 25998, - "sheds": 25999, - "fide": 26000, - "rescues": 26001, - "springsteen": 26002, - "vested": 26003, - "valuation": 26004, - "##ece": 26005, - "##ely": 26006, - "pinnacle": 26007, - "rake": 26008, - "sylvie": 26009, - "##edo": 26010, - "almond": 26011, - "quivering": 26012, - "##irus": 26013, - "alteration": 26014, - "faltered": 26015, - "##wad": 26016, - "51st": 26017, - "hydra": 26018, - "ticked": 26019, - "##kato": 26020, - "recommends": 26021, - "##dicated": 26022, - "antigua": 26023, - "arjun": 26024, - "stagecoach": 26025, - "wilfred": 26026, - "trickle": 26027, - "pronouns": 26028, - "##pon": 26029, - "aryan": 26030, - "nighttime": 26031, - "##anian": 26032, - "gall": 26033, - "pea": 26034, - "stitch": 26035, - "##hei": 26036, - "leung": 26037, - "milos": 26038, - "##dini": 26039, - "eritrea": 26040, - "nexus": 26041, - "starved": 26042, - "snowfall": 26043, - "kant": 26044, - "parasitic": 26045, - "cot": 26046, - "discus": 26047, - "hana": 26048, - "strikers": 26049, - "appleton": 26050, - "kitchens": 26051, - "##erina": 26052, - "##partisan": 26053, - "##itha": 26054, - "##vius": 26055, - "disclose": 26056, - "metis": 26057, - "##channel": 26058, - "1701": 26059, - "tesla": 26060, - "##vera": 26061, - "fitch": 26062, - "1735": 26063, - "blooded": 26064, - "##tila": 26065, - "decimal": 26066, - "##tang": 26067, - "##bai": 26068, - "cyclones": 26069, - "eun": 26070, - "bottled": 26071, - "peas": 26072, - "pensacola": 26073, - "basha": 26074, - "bolivian": 26075, - "crabs": 26076, - "boil": 26077, - "lanterns": 26078, - "partridge": 26079, - "roofed": 26080, - "1645": 26081, - "necks": 26082, - "##phila": 26083, - "opined": 26084, - "patting": 26085, - "##kla": 26086, - "##lland": 26087, - "chuckles": 26088, - "volta": 26089, - "whereupon": 26090, - "##nche": 26091, - "devout": 26092, - "euroleague": 26093, - "suicidal": 26094, - "##dee": 26095, - "inherently": 26096, - "involuntary": 26097, - "knitting": 26098, - "nasser": 26099, - "##hide": 26100, - "puppets": 26101, - "colourful": 26102, - "courageous": 26103, - "southend": 26104, - "stills": 26105, - "miraculous": 26106, - "hodgson": 26107, - "richer": 26108, - "rochdale": 26109, - "ethernet": 26110, - "greta": 26111, - "uniting": 26112, - "prism": 26113, - "umm": 26114, - "##haya": 26115, - "##itical": 26116, - "##utation": 26117, - "deterioration": 26118, - "pointe": 26119, - "prowess": 26120, - "##ropriation": 26121, - "lids": 26122, - "scranton": 26123, - "billings": 26124, - "subcontinent": 26125, - "##koff": 26126, - "##scope": 26127, - "brute": 26128, - "kellogg": 26129, - "psalms": 26130, - "degraded": 26131, - "##vez": 26132, - "stanisław": 26133, - "##ructured": 26134, - "ferreira": 26135, - "pun": 26136, - "astonishing": 26137, - "gunnar": 26138, - "##yat": 26139, - "arya": 26140, - "prc": 26141, - "gottfried": 26142, - "##tight": 26143, - "excursion": 26144, - "##ographer": 26145, - "dina": 26146, - "##quil": 26147, - "##nare": 26148, - "huffington": 26149, - "illustrious": 26150, - "wilbur": 26151, - "gundam": 26152, - "verandah": 26153, - "##zard": 26154, - "naacp": 26155, - "##odle": 26156, - "constructive": 26157, - "fjord": 26158, - "kade": 26159, - "##naud": 26160, - "generosity": 26161, - "thrilling": 26162, - "baseline": 26163, - "cayman": 26164, - "frankish": 26165, - "plastics": 26166, - "accommodations": 26167, - "zoological": 26168, - "##fting": 26169, - "cedric": 26170, - "qb": 26171, - "motorized": 26172, - "##dome": 26173, - "##otted": 26174, - "squealed": 26175, - "tackled": 26176, - "canucks": 26177, - "budgets": 26178, - "situ": 26179, - "asthma": 26180, - "dail": 26181, - "gabled": 26182, - "grasslands": 26183, - "whimpered": 26184, - "writhing": 26185, - "judgments": 26186, - "##65": 26187, - "minnie": 26188, - "pv": 26189, - "##carbon": 26190, - "bananas": 26191, - "grille": 26192, - "domes": 26193, - "monique": 26194, - "odin": 26195, - "maguire": 26196, - "markham": 26197, - "tierney": 26198, - "##estra": 26199, - "##chua": 26200, - "libel": 26201, - "poke": 26202, - "speedy": 26203, - "atrium": 26204, - "laval": 26205, - "notwithstanding": 26206, - "##edly": 26207, - "fai": 26208, - "kala": 26209, - "##sur": 26210, - "robb": 26211, - "##sma": 26212, - "listings": 26213, - "luz": 26214, - "supplementary": 26215, - "tianjin": 26216, - "##acing": 26217, - "enzo": 26218, - "jd": 26219, - "ric": 26220, - "scanner": 26221, - "croats": 26222, - "transcribed": 26223, - "##49": 26224, - "arden": 26225, - "cv": 26226, - "##hair": 26227, - "##raphy": 26228, - "##lver": 26229, - "##uy": 26230, - "357": 26231, - "seventies": 26232, - "staggering": 26233, - "alam": 26234, - "horticultural": 26235, - "hs": 26236, - "regression": 26237, - "timbers": 26238, - "blasting": 26239, - "##ounded": 26240, - "montagu": 26241, - "manipulating": 26242, - "##cit": 26243, - "catalytic": 26244, - "1550": 26245, - "troopers": 26246, - "##meo": 26247, - "condemnation": 26248, - "fitzpatrick": 26249, - "##oire": 26250, - "##roved": 26251, - "inexperienced": 26252, - "1670": 26253, - "castes": 26254, - "##lative": 26255, - "outing": 26256, - "314": 26257, - "dubois": 26258, - "flicking": 26259, - "quarrel": 26260, - "ste": 26261, - "learners": 26262, - "1625": 26263, - "iq": 26264, - "whistled": 26265, - "##class": 26266, - "282": 26267, - "classify": 26268, - "tariffs": 26269, - "temperament": 26270, - "355": 26271, - "folly": 26272, - "liszt": 26273, - "##yles": 26274, - "immersed": 26275, - "jordanian": 26276, - "ceasefire": 26277, - "apparel": 26278, - "extras": 26279, - "maru": 26280, - "fished": 26281, - "##bio": 26282, - "harta": 26283, - "stockport": 26284, - "assortment": 26285, - "craftsman": 26286, - "paralysis": 26287, - "transmitters": 26288, - "##cola": 26289, - "blindness": 26290, - "##wk": 26291, - "fatally": 26292, - "proficiency": 26293, - "solemnly": 26294, - "##orno": 26295, - "repairing": 26296, - "amore": 26297, - "groceries": 26298, - "ultraviolet": 26299, - "##chase": 26300, - "schoolhouse": 26301, - "##tua": 26302, - "resurgence": 26303, - "nailed": 26304, - "##otype": 26305, - "##Ɨ": 26306, - "ruse": 26307, - "saliva": 26308, - "diagrams": 26309, - "##tructing": 26310, - "albans": 26311, - "rann": 26312, - "thirties": 26313, - "1b": 26314, - "antennas": 26315, - "hilarious": 26316, - "cougars": 26317, - "paddington": 26318, - "stats": 26319, - "##eger": 26320, - "breakaway": 26321, - "ipod": 26322, - "reza": 26323, - "authorship": 26324, - "prohibiting": 26325, - "scoffed": 26326, - "##etz": 26327, - "##ttle": 26328, - "conscription": 26329, - "defected": 26330, - "trondheim": 26331, - "##fires": 26332, - "ivanov": 26333, - "keenan": 26334, - "##adan": 26335, - "##ciful": 26336, - "##fb": 26337, - "##slow": 26338, - "locating": 26339, - "##ials": 26340, - "##tford": 26341, - "cadiz": 26342, - "basalt": 26343, - "blankly": 26344, - "interned": 26345, - "rags": 26346, - "rattling": 26347, - "##tick": 26348, - "carpathian": 26349, - "reassured": 26350, - "sync": 26351, - "bum": 26352, - "guildford": 26353, - "iss": 26354, - "staunch": 26355, - "##onga": 26356, - "astronomers": 26357, - "sera": 26358, - "sofie": 26359, - "emergencies": 26360, - "susquehanna": 26361, - "##heard": 26362, - "duc": 26363, - "mastery": 26364, - "vh1": 26365, - "williamsburg": 26366, - "bayer": 26367, - "buckled": 26368, - "craving": 26369, - "##khan": 26370, - "##rdes": 26371, - "bloomington": 26372, - "##write": 26373, - "alton": 26374, - "barbecue": 26375, - "##bians": 26376, - "justine": 26377, - "##hri": 26378, - "##ndt": 26379, - "delightful": 26380, - "smartphone": 26381, - "newtown": 26382, - "photon": 26383, - "retrieval": 26384, - "peugeot": 26385, - "hissing": 26386, - "##monium": 26387, - "##orough": 26388, - "flavors": 26389, - "lighted": 26390, - "relaunched": 26391, - "tainted": 26392, - "##games": 26393, - "##lysis": 26394, - "anarchy": 26395, - "microscopic": 26396, - "hopping": 26397, - "adept": 26398, - "evade": 26399, - "evie": 26400, - "##beau": 26401, - "inhibit": 26402, - "sinn": 26403, - "adjustable": 26404, - "hurst": 26405, - "intuition": 26406, - "wilton": 26407, - "cisco": 26408, - "44th": 26409, - "lawful": 26410, - "lowlands": 26411, - "stockings": 26412, - "thierry": 26413, - "##dalen": 26414, - "##hila": 26415, - "##nai": 26416, - "fates": 26417, - "prank": 26418, - "tb": 26419, - "maison": 26420, - "lobbied": 26421, - "provocative": 26422, - "1724": 26423, - "4a": 26424, - "utopia": 26425, - "##qual": 26426, - "carbonate": 26427, - "gujarati": 26428, - "purcell": 26429, - "##rford": 26430, - "curtiss": 26431, - "##mei": 26432, - "overgrown": 26433, - "arenas": 26434, - "mediation": 26435, - "swallows": 26436, - "##rnik": 26437, - "respectful": 26438, - "turnbull": 26439, - "##hedron": 26440, - "##hope": 26441, - "alyssa": 26442, - "ozone": 26443, - "##Ź»i": 26444, - "ami": 26445, - "gestapo": 26446, - "johansson": 26447, - "snooker": 26448, - "canteen": 26449, - "cuff": 26450, - "declines": 26451, - "empathy": 26452, - "stigma": 26453, - "##ags": 26454, - "##iner": 26455, - "##raine": 26456, - "taxpayers": 26457, - "gui": 26458, - "volga": 26459, - "##wright": 26460, - "##copic": 26461, - "lifespan": 26462, - "overcame": 26463, - "tattooed": 26464, - "enactment": 26465, - "giggles": 26466, - "##ador": 26467, - "##camp": 26468, - "barrington": 26469, - "bribe": 26470, - "obligatory": 26471, - "orbiting": 26472, - "peng": 26473, - "##enas": 26474, - "elusive": 26475, - "sucker": 26476, - "##vating": 26477, - "cong": 26478, - "hardship": 26479, - "empowered": 26480, - "anticipating": 26481, - "estrada": 26482, - "cryptic": 26483, - "greasy": 26484, - "detainees": 26485, - "planck": 26486, - "sudbury": 26487, - "plaid": 26488, - "dod": 26489, - "marriott": 26490, - "kayla": 26491, - "##ears": 26492, - "##vb": 26493, - "##zd": 26494, - "mortally": 26495, - "##hein": 26496, - "cognition": 26497, - "radha": 26498, - "319": 26499, - "liechtenstein": 26500, - "meade": 26501, - "richly": 26502, - "argyle": 26503, - "harpsichord": 26504, - "liberalism": 26505, - "trumpets": 26506, - "lauded": 26507, - "tyrant": 26508, - "salsa": 26509, - "tiled": 26510, - "lear": 26511, - "promoters": 26512, - "reused": 26513, - "slicing": 26514, - "trident": 26515, - "##chuk": 26516, - "##gami": 26517, - "##lka": 26518, - "cantor": 26519, - "checkpoint": 26520, - "##points": 26521, - "gaul": 26522, - "leger": 26523, - "mammalian": 26524, - "##tov": 26525, - "##aar": 26526, - "##schaft": 26527, - "doha": 26528, - "frenchman": 26529, - "nirvana": 26530, - "##vino": 26531, - "delgado": 26532, - "headlining": 26533, - "##eron": 26534, - "##iography": 26535, - "jug": 26536, - "tko": 26537, - "1649": 26538, - "naga": 26539, - "intersections": 26540, - "##jia": 26541, - "benfica": 26542, - "nawab": 26543, - "##suka": 26544, - "ashford": 26545, - "gulp": 26546, - "##deck": 26547, - "##vill": 26548, - "##rug": 26549, - "brentford": 26550, - "frazier": 26551, - "pleasures": 26552, - "dunne": 26553, - "potsdam": 26554, - "shenzhen": 26555, - "dentistry": 26556, - "##tec": 26557, - "flanagan": 26558, - "##dorff": 26559, - "##hear": 26560, - "chorale": 26561, - "dinah": 26562, - "prem": 26563, - "quezon": 26564, - "##rogated": 26565, - "relinquished": 26566, - "sutra": 26567, - "terri": 26568, - "##pani": 26569, - "flaps": 26570, - "##rissa": 26571, - "poly": 26572, - "##rnet": 26573, - "homme": 26574, - "aback": 26575, - "##eki": 26576, - "linger": 26577, - "womb": 26578, - "##kson": 26579, - "##lewood": 26580, - "doorstep": 26581, - "orthodoxy": 26582, - "threaded": 26583, - "westfield": 26584, - "##rval": 26585, - "dioceses": 26586, - "fridays": 26587, - "subsided": 26588, - "##gata": 26589, - "loyalists": 26590, - "##biotic": 26591, - "##ettes": 26592, - "letterman": 26593, - "lunatic": 26594, - "prelate": 26595, - "tenderly": 26596, - "invariably": 26597, - "souza": 26598, - "thug": 26599, - "winslow": 26600, - "##otide": 26601, - "furlongs": 26602, - "gogh": 26603, - "jeopardy": 26604, - "##runa": 26605, - "pegasus": 26606, - "##umble": 26607, - "humiliated": 26608, - "standalone": 26609, - "tagged": 26610, - "##roller": 26611, - "freshmen": 26612, - "klan": 26613, - "##bright": 26614, - "attaining": 26615, - "initiating": 26616, - "transatlantic": 26617, - "logged": 26618, - "viz": 26619, - "##uance": 26620, - "1723": 26621, - "combatants": 26622, - "intervening": 26623, - "stephane": 26624, - "chieftain": 26625, - "despised": 26626, - "grazed": 26627, - "317": 26628, - "cdc": 26629, - "galveston": 26630, - "godzilla": 26631, - "macro": 26632, - "simulate": 26633, - "##planes": 26634, - "parades": 26635, - "##esses": 26636, - "960": 26637, - "##ductive": 26638, - "##unes": 26639, - "equator": 26640, - "overdose": 26641, - "##cans": 26642, - "##hosh": 26643, - "##lifting": 26644, - "joshi": 26645, - "epstein": 26646, - "sonora": 26647, - "treacherous": 26648, - "aquatics": 26649, - "manchu": 26650, - "responsive": 26651, - "##sation": 26652, - "supervisory": 26653, - "##christ": 26654, - "##llins": 26655, - "##ibar": 26656, - "##balance": 26657, - "##uso": 26658, - "kimball": 26659, - "karlsruhe": 26660, - "mab": 26661, - "##emy": 26662, - "ignores": 26663, - "phonetic": 26664, - "reuters": 26665, - "spaghetti": 26666, - "820": 26667, - "almighty": 26668, - "danzig": 26669, - "rumbling": 26670, - "tombstone": 26671, - "designations": 26672, - "lured": 26673, - "outset": 26674, - "##felt": 26675, - "supermarkets": 26676, - "##wt": 26677, - "grupo": 26678, - "kei": 26679, - "kraft": 26680, - "susanna": 26681, - "##blood": 26682, - "comprehension": 26683, - "genealogy": 26684, - "##aghan": 26685, - "##verted": 26686, - "redding": 26687, - "##ythe": 26688, - "1722": 26689, - "bowing": 26690, - "##pore": 26691, - "##roi": 26692, - "lest": 26693, - "sharpened": 26694, - "fulbright": 26695, - "valkyrie": 26696, - "sikhs": 26697, - "##unds": 26698, - "swans": 26699, - "bouquet": 26700, - "merritt": 26701, - "##tage": 26702, - "##venting": 26703, - "commuted": 26704, - "redhead": 26705, - "clerks": 26706, - "leasing": 26707, - "cesare": 26708, - "dea": 26709, - "hazy": 26710, - "##vances": 26711, - "fledged": 26712, - "greenfield": 26713, - "servicemen": 26714, - "##gical": 26715, - "armando": 26716, - "blackout": 26717, - "dt": 26718, - "sagged": 26719, - "downloadable": 26720, - "intra": 26721, - "potion": 26722, - "pods": 26723, - "##4th": 26724, - "##mism": 26725, - "xp": 26726, - "attendants": 26727, - "gambia": 26728, - "stale": 26729, - "##ntine": 26730, - "plump": 26731, - "asteroids": 26732, - "rediscovered": 26733, - "buds": 26734, - "flea": 26735, - "hive": 26736, - "##neas": 26737, - "1737": 26738, - "classifications": 26739, - "debuts": 26740, - "##eles": 26741, - "olympus": 26742, - "scala": 26743, - "##eurs": 26744, - "##gno": 26745, - "##mute": 26746, - "hummed": 26747, - "sigismund": 26748, - "visuals": 26749, - "wiggled": 26750, - "await": 26751, - "pilasters": 26752, - "clench": 26753, - "sulfate": 26754, - "##ances": 26755, - "bellevue": 26756, - "enigma": 26757, - "trainee": 26758, - "snort": 26759, - "##sw": 26760, - "clouded": 26761, - "denim": 26762, - "##rank": 26763, - "##rder": 26764, - "churning": 26765, - "hartman": 26766, - "lodges": 26767, - "riches": 26768, - "sima": 26769, - "##missible": 26770, - "accountable": 26771, - "socrates": 26772, - "regulates": 26773, - "mueller": 26774, - "##cr": 26775, - "1702": 26776, - "avoids": 26777, - "solids": 26778, - "himalayas": 26779, - "nutrient": 26780, - "pup": 26781, - "##jevic": 26782, - "squat": 26783, - "fades": 26784, - "nec": 26785, - "##lates": 26786, - "##pina": 26787, - "##rona": 26788, - "##ου": 26789, - "privateer": 26790, - "tequila": 26791, - "##gative": 26792, - "##mpton": 26793, - "apt": 26794, - "hornet": 26795, - "immortals": 26796, - "##dou": 26797, - "asturias": 26798, - "cleansing": 26799, - "dario": 26800, - "##rries": 26801, - "##anta": 26802, - "etymology": 26803, - "servicing": 26804, - "zhejiang": 26805, - "##venor": 26806, - "##nx": 26807, - "horned": 26808, - "erasmus": 26809, - "rayon": 26810, - "relocating": 26811, - "Ā£10": 26812, - "##bags": 26813, - "escalated": 26814, - "promenade": 26815, - "stubble": 26816, - "2010s": 26817, - "artisans": 26818, - "axial": 26819, - "liquids": 26820, - "mora": 26821, - "sho": 26822, - "yoo": 26823, - "##tsky": 26824, - "bundles": 26825, - "oldies": 26826, - "##nally": 26827, - "notification": 26828, - "bastion": 26829, - "##ths": 26830, - "sparkle": 26831, - "##lved": 26832, - "1728": 26833, - "leash": 26834, - "pathogen": 26835, - "highs": 26836, - "##hmi": 26837, - "immature": 26838, - "880": 26839, - "gonzaga": 26840, - "ignatius": 26841, - "mansions": 26842, - "monterrey": 26843, - "sweets": 26844, - "bryson": 26845, - "##loe": 26846, - "polled": 26847, - "regatta": 26848, - "brightest": 26849, - "pei": 26850, - "rosy": 26851, - "squid": 26852, - "hatfield": 26853, - "payroll": 26854, - "addict": 26855, - "meath": 26856, - "cornerback": 26857, - "heaviest": 26858, - "lodging": 26859, - "##mage": 26860, - "capcom": 26861, - "rippled": 26862, - "##sily": 26863, - "barnet": 26864, - "mayhem": 26865, - "ymca": 26866, - "snuggled": 26867, - "rousseau": 26868, - "##cute": 26869, - "blanchard": 26870, - "284": 26871, - "fragmented": 26872, - "leighton": 26873, - "chromosomes": 26874, - "risking": 26875, - "##md": 26876, - "##strel": 26877, - "##utter": 26878, - "corinne": 26879, - "coyotes": 26880, - "cynical": 26881, - "hiroshi": 26882, - "yeomanry": 26883, - "##ractive": 26884, - "ebook": 26885, - "grading": 26886, - "mandela": 26887, - "plume": 26888, - "agustin": 26889, - "magdalene": 26890, - "##rkin": 26891, - "bea": 26892, - "femme": 26893, - "trafford": 26894, - "##coll": 26895, - "##lun": 26896, - "##tance": 26897, - "52nd": 26898, - "fourier": 26899, - "upton": 26900, - "##mental": 26901, - "camilla": 26902, - "gust": 26903, - "iihf": 26904, - "islamabad": 26905, - "longevity": 26906, - "##kala": 26907, - "feldman": 26908, - "netting": 26909, - "##rization": 26910, - "endeavour": 26911, - "foraging": 26912, - "mfa": 26913, - "orr": 26914, - "##open": 26915, - "greyish": 26916, - "contradiction": 26917, - "graz": 26918, - "##ruff": 26919, - "handicapped": 26920, - "marlene": 26921, - "tweed": 26922, - "oaxaca": 26923, - "spp": 26924, - "campos": 26925, - "miocene": 26926, - "pri": 26927, - "configured": 26928, - "cooks": 26929, - "pluto": 26930, - "cozy": 26931, - "pornographic": 26932, - "##entes": 26933, - "70th": 26934, - "fairness": 26935, - "glided": 26936, - "jonny": 26937, - "lynne": 26938, - "rounding": 26939, - "sired": 26940, - "##emon": 26941, - "##nist": 26942, - "remade": 26943, - "uncover": 26944, - "##mack": 26945, - "complied": 26946, - "lei": 26947, - "newsweek": 26948, - "##jured": 26949, - "##parts": 26950, - "##enting": 26951, - "##pg": 26952, - "293": 26953, - "finer": 26954, - "guerrillas": 26955, - "athenian": 26956, - "deng": 26957, - "disused": 26958, - "stepmother": 26959, - "accuse": 26960, - "gingerly": 26961, - "seduction": 26962, - "521": 26963, - "confronting": 26964, - "##walker": 26965, - "##going": 26966, - "gora": 26967, - "nostalgia": 26968, - "sabres": 26969, - "virginity": 26970, - "wrenched": 26971, - "##minated": 26972, - "syndication": 26973, - "wielding": 26974, - "eyre": 26975, - "##56": 26976, - "##gnon": 26977, - "##igny": 26978, - "behaved": 26979, - "taxpayer": 26980, - "sweeps": 26981, - "##growth": 26982, - "childless": 26983, - "gallant": 26984, - "##ywood": 26985, - "amplified": 26986, - "geraldine": 26987, - "scrape": 26988, - "##ffi": 26989, - "babylonian": 26990, - "fresco": 26991, - "##rdan": 26992, - "##kney": 26993, - "##position": 26994, - "1718": 26995, - "restricting": 26996, - "tack": 26997, - "fukuoka": 26998, - "osborn": 26999, - "selector": 27000, - "partnering": 27001, - "##dlow": 27002, - "318": 27003, - "gnu": 27004, - "kia": 27005, - "tak": 27006, - "whitley": 27007, - "gables": 27008, - "##54": 27009, - "##mania": 27010, - "mri": 27011, - "softness": 27012, - "immersion": 27013, - "##bots": 27014, - "##evsky": 27015, - "1713": 27016, - "chilling": 27017, - "insignificant": 27018, - "pcs": 27019, - "##uis": 27020, - "elites": 27021, - "lina": 27022, - "purported": 27023, - "supplemental": 27024, - "teaming": 27025, - "##americana": 27026, - "##dding": 27027, - "##inton": 27028, - "proficient": 27029, - "rouen": 27030, - "##nage": 27031, - "##rret": 27032, - "niccolo": 27033, - "selects": 27034, - "##bread": 27035, - "fluffy": 27036, - "1621": 27037, - "gruff": 27038, - "knotted": 27039, - "mukherjee": 27040, - "polgara": 27041, - "thrash": 27042, - "nicholls": 27043, - "secluded": 27044, - "smoothing": 27045, - "thru": 27046, - "corsica": 27047, - "loaf": 27048, - "whitaker": 27049, - "inquiries": 27050, - "##rrier": 27051, - "##kam": 27052, - "indochina": 27053, - "289": 27054, - "marlins": 27055, - "myles": 27056, - "peking": 27057, - "##tea": 27058, - "extracts": 27059, - "pastry": 27060, - "superhuman": 27061, - "connacht": 27062, - "vogel": 27063, - "##ditional": 27064, - "##het": 27065, - "##udged": 27066, - "##lash": 27067, - "gloss": 27068, - "quarries": 27069, - "refit": 27070, - "teaser": 27071, - "##alic": 27072, - "##gaon": 27073, - "20s": 27074, - "materialized": 27075, - "sling": 27076, - "camped": 27077, - "pickering": 27078, - "tung": 27079, - "tracker": 27080, - "pursuant": 27081, - "##cide": 27082, - "cranes": 27083, - "soc": 27084, - "##cini": 27085, - "##typical": 27086, - "##viere": 27087, - "anhalt": 27088, - "overboard": 27089, - "workout": 27090, - "chores": 27091, - "fares": 27092, - "orphaned": 27093, - "stains": 27094, - "##logie": 27095, - "fenton": 27096, - "surpassing": 27097, - "joyah": 27098, - "triggers": 27099, - "##itte": 27100, - "grandmaster": 27101, - "##lass": 27102, - "##lists": 27103, - "clapping": 27104, - "fraudulent": 27105, - "ledger": 27106, - "nagasaki": 27107, - "##cor": 27108, - "##nosis": 27109, - "##tsa": 27110, - "eucalyptus": 27111, - "tun": 27112, - "##icio": 27113, - "##rney": 27114, - "##tara": 27115, - "dax": 27116, - "heroism": 27117, - "ina": 27118, - "wrexham": 27119, - "onboard": 27120, - "unsigned": 27121, - "##dates": 27122, - "moshe": 27123, - "galley": 27124, - "winnie": 27125, - "droplets": 27126, - "exiles": 27127, - "praises": 27128, - "watered": 27129, - "noodles": 27130, - "##aia": 27131, - "fein": 27132, - "adi": 27133, - "leland": 27134, - "multicultural": 27135, - "stink": 27136, - "bingo": 27137, - "comets": 27138, - "erskine": 27139, - "modernized": 27140, - "canned": 27141, - "constraint": 27142, - "domestically": 27143, - "chemotherapy": 27144, - "featherweight": 27145, - "stifled": 27146, - "##mum": 27147, - "darkly": 27148, - "irresistible": 27149, - "refreshing": 27150, - "hasty": 27151, - "isolate": 27152, - "##oys": 27153, - "kitchener": 27154, - "planners": 27155, - "##wehr": 27156, - "cages": 27157, - "yarn": 27158, - "implant": 27159, - "toulon": 27160, - "elects": 27161, - "childbirth": 27162, - "yue": 27163, - "##lind": 27164, - "##lone": 27165, - "cn": 27166, - "rightful": 27167, - "sportsman": 27168, - "junctions": 27169, - "remodeled": 27170, - "specifies": 27171, - "##rgh": 27172, - "291": 27173, - "##oons": 27174, - "complimented": 27175, - "##urgent": 27176, - "lister": 27177, - "ot": 27178, - "##logic": 27179, - "bequeathed": 27180, - "cheekbones": 27181, - "fontana": 27182, - "gabby": 27183, - "##dial": 27184, - "amadeus": 27185, - "corrugated": 27186, - "maverick": 27187, - "resented": 27188, - "triangles": 27189, - "##hered": 27190, - "##usly": 27191, - "nazareth": 27192, - "tyrol": 27193, - "1675": 27194, - "assent": 27195, - "poorer": 27196, - "sectional": 27197, - "aegean": 27198, - "##cous": 27199, - "296": 27200, - "nylon": 27201, - "ghanaian": 27202, - "##egorical": 27203, - "##weig": 27204, - "cushions": 27205, - "forbid": 27206, - "fusiliers": 27207, - "obstruction": 27208, - "somerville": 27209, - "##scia": 27210, - "dime": 27211, - "earrings": 27212, - "elliptical": 27213, - "leyte": 27214, - "oder": 27215, - "polymers": 27216, - "timmy": 27217, - "atm": 27218, - "midtown": 27219, - "piloted": 27220, - "settles": 27221, - "continual": 27222, - "externally": 27223, - "mayfield": 27224, - "##uh": 27225, - "enrichment": 27226, - "henson": 27227, - "keane": 27228, - "persians": 27229, - "1733": 27230, - "benji": 27231, - "braden": 27232, - "pep": 27233, - "324": 27234, - "##efe": 27235, - "contenders": 27236, - "pepsi": 27237, - "valet": 27238, - "##isches": 27239, - "298": 27240, - "##asse": 27241, - "##earing": 27242, - "goofy": 27243, - "stroll": 27244, - "##amen": 27245, - "authoritarian": 27246, - "occurrences": 27247, - "adversary": 27248, - "ahmedabad": 27249, - "tangent": 27250, - "toppled": 27251, - "dorchester": 27252, - "1672": 27253, - "modernism": 27254, - "marxism": 27255, - "islamist": 27256, - "charlemagne": 27257, - "exponential": 27258, - "racks": 27259, - "unicode": 27260, - "brunette": 27261, - "mbc": 27262, - "pic": 27263, - "skirmish": 27264, - "##bund": 27265, - "##lad": 27266, - "##powered": 27267, - "##yst": 27268, - "hoisted": 27269, - "messina": 27270, - "shatter": 27271, - "##ctum": 27272, - "jedi": 27273, - "vantage": 27274, - "##music": 27275, - "##neil": 27276, - "clemens": 27277, - "mahmoud": 27278, - "corrupted": 27279, - "authentication": 27280, - "lowry": 27281, - "nils": 27282, - "##washed": 27283, - "omnibus": 27284, - "wounding": 27285, - "jillian": 27286, - "##itors": 27287, - "##opped": 27288, - "serialized": 27289, - "narcotics": 27290, - "handheld": 27291, - "##arm": 27292, - "##plicity": 27293, - "intersecting": 27294, - "stimulating": 27295, - "##onis": 27296, - "crate": 27297, - "fellowships": 27298, - "hemingway": 27299, - "casinos": 27300, - "climatic": 27301, - "fordham": 27302, - "copeland": 27303, - "drip": 27304, - "beatty": 27305, - "leaflets": 27306, - "robber": 27307, - "brothel": 27308, - "madeira": 27309, - "##hedral": 27310, - "sphinx": 27311, - "ultrasound": 27312, - "##vana": 27313, - "valor": 27314, - "forbade": 27315, - "leonid": 27316, - "villas": 27317, - "##aldo": 27318, - "duane": 27319, - "marquez": 27320, - "##cytes": 27321, - "disadvantaged": 27322, - "forearms": 27323, - "kawasaki": 27324, - "reacts": 27325, - "consular": 27326, - "lax": 27327, - "uncles": 27328, - "uphold": 27329, - "##hopper": 27330, - "concepcion": 27331, - "dorsey": 27332, - "lass": 27333, - "##izan": 27334, - "arching": 27335, - "passageway": 27336, - "1708": 27337, - "researches": 27338, - "tia": 27339, - "internationals": 27340, - "##graphs": 27341, - "##opers": 27342, - "distinguishes": 27343, - "javanese": 27344, - "divert": 27345, - "##uven": 27346, - "plotted": 27347, - "##listic": 27348, - "##rwin": 27349, - "##erik": 27350, - "##tify": 27351, - "affirmative": 27352, - "signifies": 27353, - "validation": 27354, - "##bson": 27355, - "kari": 27356, - "felicity": 27357, - "georgina": 27358, - "zulu": 27359, - "##eros": 27360, - "##rained": 27361, - "##rath": 27362, - "overcoming": 27363, - "##dot": 27364, - "argyll": 27365, - "##rbin": 27366, - "1734": 27367, - "chiba": 27368, - "ratification": 27369, - "windy": 27370, - "earls": 27371, - "parapet": 27372, - "##marks": 27373, - "hunan": 27374, - "pristine": 27375, - "astrid": 27376, - "punta": 27377, - "##gart": 27378, - "brodie": 27379, - "##kota": 27380, - "##oder": 27381, - "malaga": 27382, - "minerva": 27383, - "rouse": 27384, - "##phonic": 27385, - "bellowed": 27386, - "pagoda": 27387, - "portals": 27388, - "reclamation": 27389, - "##gur": 27390, - "##odies": 27391, - "##⁄₄": 27392, - "parentheses": 27393, - "quoting": 27394, - "allergic": 27395, - "palette": 27396, - "showcases": 27397, - "benefactor": 27398, - "heartland": 27399, - "nonlinear": 27400, - "##tness": 27401, - "bladed": 27402, - "cheerfully": 27403, - "scans": 27404, - "##ety": 27405, - "##hone": 27406, - "1666": 27407, - "girlfriends": 27408, - "pedersen": 27409, - "hiram": 27410, - "sous": 27411, - "##liche": 27412, - "##nator": 27413, - "1683": 27414, - "##nery": 27415, - "##orio": 27416, - "##umen": 27417, - "bobo": 27418, - "primaries": 27419, - "smiley": 27420, - "##cb": 27421, - "unearthed": 27422, - "uniformly": 27423, - "fis": 27424, - "metadata": 27425, - "1635": 27426, - "ind": 27427, - "##oted": 27428, - "recoil": 27429, - "##titles": 27430, - "##tura": 27431, - "##ια": 27432, - "406": 27433, - "hilbert": 27434, - "jamestown": 27435, - "mcmillan": 27436, - "tulane": 27437, - "seychelles": 27438, - "##frid": 27439, - "antics": 27440, - "coli": 27441, - "fated": 27442, - "stucco": 27443, - "##grants": 27444, - "1654": 27445, - "bulky": 27446, - "accolades": 27447, - "arrays": 27448, - "caledonian": 27449, - "carnage": 27450, - "optimism": 27451, - "puebla": 27452, - "##tative": 27453, - "##cave": 27454, - "enforcing": 27455, - "rotherham": 27456, - "seo": 27457, - "dunlop": 27458, - "aeronautics": 27459, - "chimed": 27460, - "incline": 27461, - "zoning": 27462, - "archduke": 27463, - "hellenistic": 27464, - "##oses": 27465, - "##sions": 27466, - "candi": 27467, - "thong": 27468, - "##ople": 27469, - "magnate": 27470, - "rustic": 27471, - "##rsk": 27472, - "projective": 27473, - "slant": 27474, - "##offs": 27475, - "danes": 27476, - "hollis": 27477, - "vocalists": 27478, - "##ammed": 27479, - "congenital": 27480, - "contend": 27481, - "gesellschaft": 27482, - "##ocating": 27483, - "##pressive": 27484, - "douglass": 27485, - "quieter": 27486, - "##cm": 27487, - "##kshi": 27488, - "howled": 27489, - "salim": 27490, - "spontaneously": 27491, - "townsville": 27492, - "buena": 27493, - "southport": 27494, - "##bold": 27495, - "kato": 27496, - "1638": 27497, - "faerie": 27498, - "stiffly": 27499, - "##vus": 27500, - "##rled": 27501, - "297": 27502, - "flawless": 27503, - "realising": 27504, - "taboo": 27505, - "##7th": 27506, - "bytes": 27507, - "straightening": 27508, - "356": 27509, - "jena": 27510, - "##hid": 27511, - "##rmin": 27512, - "cartwright": 27513, - "berber": 27514, - "bertram": 27515, - "soloists": 27516, - "411": 27517, - "noses": 27518, - "417": 27519, - "coping": 27520, - "fission": 27521, - "hardin": 27522, - "inca": 27523, - "##cen": 27524, - "1717": 27525, - "mobilized": 27526, - "vhf": 27527, - "##raf": 27528, - "biscuits": 27529, - "curate": 27530, - "##85": 27531, - "##anial": 27532, - "331": 27533, - "gaunt": 27534, - "neighbourhoods": 27535, - "1540": 27536, - "##abas": 27537, - "blanca": 27538, - "bypassed": 27539, - "sockets": 27540, - "behold": 27541, - "coincidentally": 27542, - "##bane": 27543, - "nara": 27544, - "shave": 27545, - "splinter": 27546, - "terrific": 27547, - "##arion": 27548, - "##erian": 27549, - "commonplace": 27550, - "juris": 27551, - "redwood": 27552, - "waistband": 27553, - "boxed": 27554, - "caitlin": 27555, - "fingerprints": 27556, - "jennie": 27557, - "naturalized": 27558, - "##ired": 27559, - "balfour": 27560, - "craters": 27561, - "jody": 27562, - "bungalow": 27563, - "hugely": 27564, - "quilt": 27565, - "glitter": 27566, - "pigeons": 27567, - "undertaker": 27568, - "bulging": 27569, - "constrained": 27570, - "goo": 27571, - "##sil": 27572, - "##akh": 27573, - "assimilation": 27574, - "reworked": 27575, - "##person": 27576, - "persuasion": 27577, - "##pants": 27578, - "felicia": 27579, - "##cliff": 27580, - "##ulent": 27581, - "1732": 27582, - "explodes": 27583, - "##dun": 27584, - "##inium": 27585, - "##zic": 27586, - "lyman": 27587, - "vulture": 27588, - "hog": 27589, - "overlook": 27590, - "begs": 27591, - "northwards": 27592, - "ow": 27593, - "spoil": 27594, - "##urer": 27595, - "fatima": 27596, - "favorably": 27597, - "accumulate": 27598, - "sargent": 27599, - "sorority": 27600, - "corresponded": 27601, - "dispersal": 27602, - "kochi": 27603, - "toned": 27604, - "##imi": 27605, - "##lita": 27606, - "internacional": 27607, - "newfound": 27608, - "##agger": 27609, - "##lynn": 27610, - "##rigue": 27611, - "booths": 27612, - "peanuts": 27613, - "##eborg": 27614, - "medicare": 27615, - "muriel": 27616, - "nur": 27617, - "##uram": 27618, - "crates": 27619, - "millennia": 27620, - "pajamas": 27621, - "worsened": 27622, - "##breakers": 27623, - "jimi": 27624, - "vanuatu": 27625, - "yawned": 27626, - "##udeau": 27627, - "carousel": 27628, - "##hony": 27629, - "hurdle": 27630, - "##ccus": 27631, - "##mounted": 27632, - "##pod": 27633, - "rv": 27634, - "##eche": 27635, - "airship": 27636, - "ambiguity": 27637, - "compulsion": 27638, - "recapture": 27639, - "##claiming": 27640, - "arthritis": 27641, - "##osomal": 27642, - "1667": 27643, - "asserting": 27644, - "ngc": 27645, - "sniffing": 27646, - "dade": 27647, - "discontent": 27648, - "glendale": 27649, - "ported": 27650, - "##amina": 27651, - "defamation": 27652, - "rammed": 27653, - "##scent": 27654, - "fling": 27655, - "livingstone": 27656, - "##fleet": 27657, - "875": 27658, - "##ppy": 27659, - "apocalyptic": 27660, - "comrade": 27661, - "lcd": 27662, - "##lowe": 27663, - "cessna": 27664, - "eine": 27665, - "persecuted": 27666, - "subsistence": 27667, - "demi": 27668, - "hoop": 27669, - "reliefs": 27670, - "710": 27671, - "coptic": 27672, - "progressing": 27673, - "stemmed": 27674, - "perpetrators": 27675, - "1665": 27676, - "priestess": 27677, - "##nio": 27678, - "dobson": 27679, - "ebony": 27680, - "rooster": 27681, - "itf": 27682, - "tortricidae": 27683, - "##bbon": 27684, - "##jian": 27685, - "cleanup": 27686, - "##jean": 27687, - "##Ćøy": 27688, - "1721": 27689, - "eighties": 27690, - "taxonomic": 27691, - "holiness": 27692, - "##hearted": 27693, - "##spar": 27694, - "antilles": 27695, - "showcasing": 27696, - "stabilized": 27697, - "##nb": 27698, - "gia": 27699, - "mascara": 27700, - "michelangelo": 27701, - "dawned": 27702, - "##uria": 27703, - "##vinsky": 27704, - "extinguished": 27705, - "fitz": 27706, - "grotesque": 27707, - "Ā£100": 27708, - "##fera": 27709, - "##loid": 27710, - "##mous": 27711, - "barges": 27712, - "neue": 27713, - "throbbed": 27714, - "cipher": 27715, - "johnnie": 27716, - "##a1": 27717, - "##mpt": 27718, - "outburst": 27719, - "##swick": 27720, - "spearheaded": 27721, - "administrations": 27722, - "c1": 27723, - "heartbreak": 27724, - "pixels": 27725, - "pleasantly": 27726, - "##enay": 27727, - "lombardy": 27728, - "plush": 27729, - "##nsed": 27730, - "bobbie": 27731, - "##hly": 27732, - "reapers": 27733, - "tremor": 27734, - "xiang": 27735, - "minogue": 27736, - "substantive": 27737, - "hitch": 27738, - "barak": 27739, - "##wyl": 27740, - "kwan": 27741, - "##encia": 27742, - "910": 27743, - "obscene": 27744, - "elegance": 27745, - "indus": 27746, - "surfer": 27747, - "bribery": 27748, - "conserve": 27749, - "##hyllum": 27750, - "##masters": 27751, - "horatio": 27752, - "##fat": 27753, - "apes": 27754, - "rebound": 27755, - "psychotic": 27756, - "##pour": 27757, - "iteration": 27758, - "##mium": 27759, - "##vani": 27760, - "botanic": 27761, - "horribly": 27762, - "antiques": 27763, - "dispose": 27764, - "paxton": 27765, - "##hli": 27766, - "##wg": 27767, - "timeless": 27768, - "1704": 27769, - "disregard": 27770, - "engraver": 27771, - "hounds": 27772, - "##bau": 27773, - "##version": 27774, - "looted": 27775, - "uno": 27776, - "facilitates": 27777, - "groans": 27778, - "masjid": 27779, - "rutland": 27780, - "antibody": 27781, - "disqualification": 27782, - "decatur": 27783, - "footballers": 27784, - "quake": 27785, - "slacks": 27786, - "48th": 27787, - "rein": 27788, - "scribe": 27789, - "stabilize": 27790, - "commits": 27791, - "exemplary": 27792, - "tho": 27793, - "##hort": 27794, - "##chison": 27795, - "pantry": 27796, - "traversed": 27797, - "##hiti": 27798, - "disrepair": 27799, - "identifiable": 27800, - "vibrated": 27801, - "baccalaureate": 27802, - "##nnis": 27803, - "csa": 27804, - "interviewing": 27805, - "##iensis": 27806, - "##raße": 27807, - "greaves": 27808, - "wealthiest": 27809, - "343": 27810, - "classed": 27811, - "jogged": 27812, - "Ā£5": 27813, - "##58": 27814, - "##atal": 27815, - "illuminating": 27816, - "knicks": 27817, - "respecting": 27818, - "##uno": 27819, - "scrubbed": 27820, - "##iji": 27821, - "##dles": 27822, - "kruger": 27823, - "moods": 27824, - "growls": 27825, - "raider": 27826, - "silvia": 27827, - "chefs": 27828, - "kam": 27829, - "vr": 27830, - "cree": 27831, - "percival": 27832, - "##terol": 27833, - "gunter": 27834, - "counterattack": 27835, - "defiant": 27836, - "henan": 27837, - "ze": 27838, - "##rasia": 27839, - "##riety": 27840, - "equivalence": 27841, - "submissions": 27842, - "##fra": 27843, - "##thor": 27844, - "bautista": 27845, - "mechanically": 27846, - "##heater": 27847, - "cornice": 27848, - "herbal": 27849, - "templar": 27850, - "##mering": 27851, - "outputs": 27852, - "ruining": 27853, - "ligand": 27854, - "renumbered": 27855, - "extravagant": 27856, - "mika": 27857, - "blockbuster": 27858, - "eta": 27859, - "insurrection": 27860, - "##ilia": 27861, - "darkening": 27862, - "ferocious": 27863, - "pianos": 27864, - "strife": 27865, - "kinship": 27866, - "##aer": 27867, - "melee": 27868, - "##anor": 27869, - "##iste": 27870, - "##may": 27871, - "##oue": 27872, - "decidedly": 27873, - "weep": 27874, - "##jad": 27875, - "##missive": 27876, - "##ppel": 27877, - "354": 27878, - "puget": 27879, - "unease": 27880, - "##gnant": 27881, - "1629": 27882, - "hammering": 27883, - "kassel": 27884, - "ob": 27885, - "wessex": 27886, - "##lga": 27887, - "bromwich": 27888, - "egan": 27889, - "paranoia": 27890, - "utilization": 27891, - "##atable": 27892, - "##idad": 27893, - "contradictory": 27894, - "provoke": 27895, - "##ols": 27896, - "##ouring": 27897, - "##tangled": 27898, - "knesset": 27899, - "##very": 27900, - "##lette": 27901, - "plumbing": 27902, - "##sden": 27903, - "##¹": 27904, - "greensboro": 27905, - "occult": 27906, - "sniff": 27907, - "338": 27908, - "zev": 27909, - "beaming": 27910, - "gamer": 27911, - "haggard": 27912, - "mahal": 27913, - "##olt": 27914, - "##pins": 27915, - "mendes": 27916, - "utmost": 27917, - "briefing": 27918, - "gunnery": 27919, - "##gut": 27920, - "##pher": 27921, - "##zh": 27922, - "##rok": 27923, - "1679": 27924, - "khalifa": 27925, - "sonya": 27926, - "##boot": 27927, - "principals": 27928, - "urbana": 27929, - "wiring": 27930, - "##liffe": 27931, - "##minating": 27932, - "##rrado": 27933, - "dahl": 27934, - "nyu": 27935, - "skepticism": 27936, - "np": 27937, - "townspeople": 27938, - "ithaca": 27939, - "lobster": 27940, - "somethin": 27941, - "##fur": 27942, - "##arina": 27943, - "##āˆ’1": 27944, - "freighter": 27945, - "zimmerman": 27946, - "biceps": 27947, - "contractual": 27948, - "##herton": 27949, - "amend": 27950, - "hurrying": 27951, - "subconscious": 27952, - "##anal": 27953, - "336": 27954, - "meng": 27955, - "clermont": 27956, - "spawning": 27957, - "##eia": 27958, - "##lub": 27959, - "dignitaries": 27960, - "impetus": 27961, - "snacks": 27962, - "spotting": 27963, - "twigs": 27964, - "##bilis": 27965, - "##cz": 27966, - "##ouk": 27967, - "libertadores": 27968, - "nic": 27969, - "skylar": 27970, - "##aina": 27971, - "##firm": 27972, - "gustave": 27973, - "asean": 27974, - "##anum": 27975, - "dieter": 27976, - "legislatures": 27977, - "flirt": 27978, - "bromley": 27979, - "trolls": 27980, - "umar": 27981, - "##bbies": 27982, - "##tyle": 27983, - "blah": 27984, - "parc": 27985, - "bridgeport": 27986, - "crank": 27987, - "negligence": 27988, - "##nction": 27989, - "46th": 27990, - "constantin": 27991, - "molded": 27992, - "bandages": 27993, - "seriousness": 27994, - "00pm": 27995, - "siegel": 27996, - "carpets": 27997, - "compartments": 27998, - "upbeat": 27999, - "statehood": 28000, - "##dner": 28001, - "##edging": 28002, - "marko": 28003, - "730": 28004, - "platt": 28005, - "##hane": 28006, - "paving": 28007, - "##iy": 28008, - "1738": 28009, - "abbess": 28010, - "impatience": 28011, - "limousine": 28012, - "nbl": 28013, - "##talk": 28014, - "441": 28015, - "lucille": 28016, - "mojo": 28017, - "nightfall": 28018, - "robbers": 28019, - "##nais": 28020, - "karel": 28021, - "brisk": 28022, - "calves": 28023, - "replicate": 28024, - "ascribed": 28025, - "telescopes": 28026, - "##olf": 28027, - "intimidated": 28028, - "##reen": 28029, - "ballast": 28030, - "specialization": 28031, - "##sit": 28032, - "aerodynamic": 28033, - "caliphate": 28034, - "rainer": 28035, - "visionary": 28036, - "##arded": 28037, - "epsilon": 28038, - "##aday": 28039, - "##onte": 28040, - "aggregation": 28041, - "auditory": 28042, - "boosted": 28043, - "reunification": 28044, - "kathmandu": 28045, - "loco": 28046, - "robyn": 28047, - "402": 28048, - "acknowledges": 28049, - "appointing": 28050, - "humanoid": 28051, - "newell": 28052, - "redeveloped": 28053, - "restraints": 28054, - "##tained": 28055, - "barbarians": 28056, - "chopper": 28057, - "1609": 28058, - "italiana": 28059, - "##lez": 28060, - "##lho": 28061, - "investigates": 28062, - "wrestlemania": 28063, - "##anies": 28064, - "##bib": 28065, - "690": 28066, - "##falls": 28067, - "creaked": 28068, - "dragoons": 28069, - "gravely": 28070, - "minions": 28071, - "stupidity": 28072, - "volley": 28073, - "##harat": 28074, - "##week": 28075, - "musik": 28076, - "##eries": 28077, - "##uously": 28078, - "fungal": 28079, - "massimo": 28080, - "semantics": 28081, - "malvern": 28082, - "##ahl": 28083, - "##pee": 28084, - "discourage": 28085, - "embryo": 28086, - "imperialism": 28087, - "1910s": 28088, - "profoundly": 28089, - "##ddled": 28090, - "jiangsu": 28091, - "sparkled": 28092, - "stat": 28093, - "##holz": 28094, - "sweatshirt": 28095, - "tobin": 28096, - "##iction": 28097, - "sneered": 28098, - "##cheon": 28099, - "##oit": 28100, - "brit": 28101, - "causal": 28102, - "smyth": 28103, - "##neuve": 28104, - "diffuse": 28105, - "perrin": 28106, - "silvio": 28107, - "##ipes": 28108, - "##recht": 28109, - "detonated": 28110, - "iqbal": 28111, - "selma": 28112, - "##nism": 28113, - "##zumi": 28114, - "roasted": 28115, - "##riders": 28116, - "tay": 28117, - "##ados": 28118, - "##mament": 28119, - "##mut": 28120, - "##rud": 28121, - "840": 28122, - "completes": 28123, - "nipples": 28124, - "cfa": 28125, - "flavour": 28126, - "hirsch": 28127, - "##laus": 28128, - "calderon": 28129, - "sneakers": 28130, - "moravian": 28131, - "##ksha": 28132, - "1622": 28133, - "rq": 28134, - "294": 28135, - "##imeters": 28136, - "bodo": 28137, - "##isance": 28138, - "##pre": 28139, - "##ronia": 28140, - "anatomical": 28141, - "excerpt": 28142, - "##lke": 28143, - "dh": 28144, - "kunst": 28145, - "##tablished": 28146, - "##scoe": 28147, - "biomass": 28148, - "panted": 28149, - "unharmed": 28150, - "gael": 28151, - "housemates": 28152, - "montpellier": 28153, - "##59": 28154, - "coa": 28155, - "rodents": 28156, - "tonic": 28157, - "hickory": 28158, - "singleton": 28159, - "##taro": 28160, - "451": 28161, - "1719": 28162, - "aldo": 28163, - "breaststroke": 28164, - "dempsey": 28165, - "och": 28166, - "rocco": 28167, - "##cuit": 28168, - "merton": 28169, - "dissemination": 28170, - "midsummer": 28171, - "serials": 28172, - "##idi": 28173, - "haji": 28174, - "polynomials": 28175, - "##rdon": 28176, - "gs": 28177, - "enoch": 28178, - "prematurely": 28179, - "shutter": 28180, - "taunton": 28181, - "Ā£3": 28182, - "##grating": 28183, - "##inates": 28184, - "archangel": 28185, - "harassed": 28186, - "##asco": 28187, - "326": 28188, - "archway": 28189, - "dazzling": 28190, - "##ecin": 28191, - "1736": 28192, - "sumo": 28193, - "wat": 28194, - "##kovich": 28195, - "1086": 28196, - "honneur": 28197, - "##ently": 28198, - "##nostic": 28199, - "##ttal": 28200, - "##idon": 28201, - "1605": 28202, - "403": 28203, - "1716": 28204, - "blogger": 28205, - "rents": 28206, - "##gnan": 28207, - "hires": 28208, - "##ikh": 28209, - "##dant": 28210, - "howie": 28211, - "##rons": 28212, - "handler": 28213, - "retracted": 28214, - "shocks": 28215, - "1632": 28216, - "arun": 28217, - "duluth": 28218, - "kepler": 28219, - "trumpeter": 28220, - "##lary": 28221, - "peeking": 28222, - "seasoned": 28223, - "trooper": 28224, - "##mara": 28225, - "laszlo": 28226, - "##iciencies": 28227, - "##rti": 28228, - "heterosexual": 28229, - "##inatory": 28230, - "##ssion": 28231, - "indira": 28232, - "jogging": 28233, - "##inga": 28234, - "##lism": 28235, - "beit": 28236, - "dissatisfaction": 28237, - "malice": 28238, - "##ately": 28239, - "nedra": 28240, - "peeling": 28241, - "##rgeon": 28242, - "47th": 28243, - "stadiums": 28244, - "475": 28245, - "vertigo": 28246, - "##ains": 28247, - "iced": 28248, - "restroom": 28249, - "##plify": 28250, - "##tub": 28251, - "illustrating": 28252, - "pear": 28253, - "##chner": 28254, - "##sibility": 28255, - "inorganic": 28256, - "rappers": 28257, - "receipts": 28258, - "watery": 28259, - "##kura": 28260, - "lucinda": 28261, - "##oulos": 28262, - "reintroduced": 28263, - "##8th": 28264, - "##tched": 28265, - "gracefully": 28266, - "saxons": 28267, - "nutritional": 28268, - "wastewater": 28269, - "rained": 28270, - "favourites": 28271, - "bedrock": 28272, - "fisted": 28273, - "hallways": 28274, - "likeness": 28275, - "upscale": 28276, - "##lateral": 28277, - "1580": 28278, - "blinds": 28279, - "prequel": 28280, - "##pps": 28281, - "##tama": 28282, - "deter": 28283, - "humiliating": 28284, - "restraining": 28285, - "tn": 28286, - "vents": 28287, - "1659": 28288, - "laundering": 28289, - "recess": 28290, - "rosary": 28291, - "tractors": 28292, - "coulter": 28293, - "federer": 28294, - "##ifiers": 28295, - "##plin": 28296, - "persistence": 28297, - "##quitable": 28298, - "geschichte": 28299, - "pendulum": 28300, - "quakers": 28301, - "##beam": 28302, - "bassett": 28303, - "pictorial": 28304, - "buffet": 28305, - "koln": 28306, - "##sitor": 28307, - "drills": 28308, - "reciprocal": 28309, - "shooters": 28310, - "##57": 28311, - "##cton": 28312, - "##tees": 28313, - "converge": 28314, - "pip": 28315, - "dmitri": 28316, - "donnelly": 28317, - "yamamoto": 28318, - "aqua": 28319, - "azores": 28320, - "demographics": 28321, - "hypnotic": 28322, - "spitfire": 28323, - "suspend": 28324, - "wryly": 28325, - "roderick": 28326, - "##rran": 28327, - "sebastien": 28328, - "##asurable": 28329, - "mavericks": 28330, - "##fles": 28331, - "##200": 28332, - "himalayan": 28333, - "prodigy": 28334, - "##iance": 28335, - "transvaal": 28336, - "demonstrators": 28337, - "handcuffs": 28338, - "dodged": 28339, - "mcnamara": 28340, - "sublime": 28341, - "1726": 28342, - "crazed": 28343, - "##efined": 28344, - "##till": 28345, - "ivo": 28346, - "pondered": 28347, - "reconciled": 28348, - "shrill": 28349, - "sava": 28350, - "##duk": 28351, - "bal": 28352, - "cad": 28353, - "heresy": 28354, - "jaipur": 28355, - "goran": 28356, - "##nished": 28357, - "341": 28358, - "lux": 28359, - "shelly": 28360, - "whitehall": 28361, - "##hre": 28362, - "israelis": 28363, - "peacekeeping": 28364, - "##wled": 28365, - "1703": 28366, - "demetrius": 28367, - "ousted": 28368, - "##arians": 28369, - "##zos": 28370, - "beale": 28371, - "anwar": 28372, - "backstroke": 28373, - "raged": 28374, - "shrinking": 28375, - "cremated": 28376, - "##yck": 28377, - "benign": 28378, - "towing": 28379, - "wadi": 28380, - "darmstadt": 28381, - "landfill": 28382, - "parana": 28383, - "soothe": 28384, - "colleen": 28385, - "sidewalks": 28386, - "mayfair": 28387, - "tumble": 28388, - "hepatitis": 28389, - "ferrer": 28390, - "superstructure": 28391, - "##gingly": 28392, - "##urse": 28393, - "##wee": 28394, - "anthropological": 28395, - "translators": 28396, - "##mies": 28397, - "closeness": 28398, - "hooves": 28399, - "##pw": 28400, - "mondays": 28401, - "##roll": 28402, - "##vita": 28403, - "landscaping": 28404, - "##urized": 28405, - "purification": 28406, - "sock": 28407, - "thorns": 28408, - "thwarted": 28409, - "jalan": 28410, - "tiberius": 28411, - "##taka": 28412, - "saline": 28413, - "##rito": 28414, - "confidently": 28415, - "khyber": 28416, - "sculptors": 28417, - "##ij": 28418, - "brahms": 28419, - "hammersmith": 28420, - "inspectors": 28421, - "battista": 28422, - "fivb": 28423, - "fragmentation": 28424, - "hackney": 28425, - "##uls": 28426, - "arresting": 28427, - "exercising": 28428, - "antoinette": 28429, - "bedfordshire": 28430, - "##zily": 28431, - "dyed": 28432, - "##hema": 28433, - "1656": 28434, - "racetrack": 28435, - "variability": 28436, - "##tique": 28437, - "1655": 28438, - "austrians": 28439, - "deteriorating": 28440, - "madman": 28441, - "theorists": 28442, - "aix": 28443, - "lehman": 28444, - "weathered": 28445, - "1731": 28446, - "decreed": 28447, - "eruptions": 28448, - "1729": 28449, - "flaw": 28450, - "quinlan": 28451, - "sorbonne": 28452, - "flutes": 28453, - "nunez": 28454, - "1711": 28455, - "adored": 28456, - "downwards": 28457, - "fable": 28458, - "rasped": 28459, - "1712": 28460, - "moritz": 28461, - "mouthful": 28462, - "renegade": 28463, - "shivers": 28464, - "stunts": 28465, - "dysfunction": 28466, - "restrain": 28467, - "translit": 28468, - "327": 28469, - "pancakes": 28470, - "##avio": 28471, - "##cision": 28472, - "##tray": 28473, - "351": 28474, - "vial": 28475, - "##lden": 28476, - "bain": 28477, - "##maid": 28478, - "##oxide": 28479, - "chihuahua": 28480, - "malacca": 28481, - "vimes": 28482, - "##rba": 28483, - "##rnier": 28484, - "1664": 28485, - "donnie": 28486, - "plaques": 28487, - "##ually": 28488, - "337": 28489, - "bangs": 28490, - "floppy": 28491, - "huntsville": 28492, - "loretta": 28493, - "nikolay": 28494, - "##otte": 28495, - "eater": 28496, - "handgun": 28497, - "ubiquitous": 28498, - "##hett": 28499, - "eras": 28500, - "zodiac": 28501, - "1634": 28502, - "##omorphic": 28503, - "1820s": 28504, - "##zog": 28505, - "cochran": 28506, - "##bula": 28507, - "##lithic": 28508, - "warring": 28509, - "##rada": 28510, - "dalai": 28511, - "excused": 28512, - "blazers": 28513, - "mcconnell": 28514, - "reeling": 28515, - "bot": 28516, - "este": 28517, - "##abi": 28518, - "geese": 28519, - "hoax": 28520, - "taxon": 28521, - "##bla": 28522, - "guitarists": 28523, - "##icon": 28524, - "condemning": 28525, - "hunts": 28526, - "inversion": 28527, - "moffat": 28528, - "taekwondo": 28529, - "##lvis": 28530, - "1624": 28531, - "stammered": 28532, - "##rest": 28533, - "##rzy": 28534, - "sousa": 28535, - "fundraiser": 28536, - "marylebone": 28537, - "navigable": 28538, - "uptown": 28539, - "cabbage": 28540, - "daniela": 28541, - "salman": 28542, - "shitty": 28543, - "whimper": 28544, - "##kian": 28545, - "##utive": 28546, - "programmers": 28547, - "protections": 28548, - "rm": 28549, - "##rmi": 28550, - "##rued": 28551, - "forceful": 28552, - "##enes": 28553, - "fuss": 28554, - "##tao": 28555, - "##wash": 28556, - "brat": 28557, - "oppressive": 28558, - "reykjavik": 28559, - "spartak": 28560, - "ticking": 28561, - "##inkles": 28562, - "##kiewicz": 28563, - "adolph": 28564, - "horst": 28565, - "maui": 28566, - "protege": 28567, - "straighten": 28568, - "cpc": 28569, - "landau": 28570, - "concourse": 28571, - "clements": 28572, - "resultant": 28573, - "##ando": 28574, - "imaginative": 28575, - "joo": 28576, - "reactivated": 28577, - "##rem": 28578, - "##ffled": 28579, - "##uising": 28580, - "consultative": 28581, - "##guide": 28582, - "flop": 28583, - "kaitlyn": 28584, - "mergers": 28585, - "parenting": 28586, - "somber": 28587, - "##vron": 28588, - "supervise": 28589, - "vidhan": 28590, - "##imum": 28591, - "courtship": 28592, - "exemplified": 28593, - "harmonies": 28594, - "medallist": 28595, - "refining": 28596, - "##rrow": 28597, - "##ка": 28598, - "amara": 28599, - "##hum": 28600, - "780": 28601, - "goalscorer": 28602, - "sited": 28603, - "overshadowed": 28604, - "rohan": 28605, - "displeasure": 28606, - "secretive": 28607, - "multiplied": 28608, - "osman": 28609, - "##orth": 28610, - "engravings": 28611, - "padre": 28612, - "##kali": 28613, - "##veda": 28614, - "miniatures": 28615, - "mis": 28616, - "##yala": 28617, - "clap": 28618, - "pali": 28619, - "rook": 28620, - "##cana": 28621, - "1692": 28622, - "57th": 28623, - "antennae": 28624, - "astro": 28625, - "oskar": 28626, - "1628": 28627, - "bulldog": 28628, - "crotch": 28629, - "hackett": 28630, - "yucatan": 28631, - "##sure": 28632, - "amplifiers": 28633, - "brno": 28634, - "ferrara": 28635, - "migrating": 28636, - "##gree": 28637, - "thanking": 28638, - "turing": 28639, - "##eza": 28640, - "mccann": 28641, - "ting": 28642, - "andersson": 28643, - "onslaught": 28644, - "gaines": 28645, - "ganga": 28646, - "incense": 28647, - "standardization": 28648, - "##mation": 28649, - "sentai": 28650, - "scuba": 28651, - "stuffing": 28652, - "turquoise": 28653, - "waivers": 28654, - "alloys": 28655, - "##vitt": 28656, - "regaining": 28657, - "vaults": 28658, - "##clops": 28659, - "##gizing": 28660, - "digger": 28661, - "furry": 28662, - "memorabilia": 28663, - "probing": 28664, - "##iad": 28665, - "payton": 28666, - "rec": 28667, - "deutschland": 28668, - "filippo": 28669, - "opaque": 28670, - "seamen": 28671, - "zenith": 28672, - "afrikaans": 28673, - "##filtration": 28674, - "disciplined": 28675, - "inspirational": 28676, - "##merie": 28677, - "banco": 28678, - "confuse": 28679, - "grafton": 28680, - "tod": 28681, - "##dgets": 28682, - "championed": 28683, - "simi": 28684, - "anomaly": 28685, - "biplane": 28686, - "##ceptive": 28687, - "electrode": 28688, - "##para": 28689, - "1697": 28690, - "cleavage": 28691, - "crossbow": 28692, - "swirl": 28693, - "informant": 28694, - "##lars": 28695, - "##osta": 28696, - "afi": 28697, - "bonfire": 28698, - "spec": 28699, - "##oux": 28700, - "lakeside": 28701, - "slump": 28702, - "##culus": 28703, - "##lais": 28704, - "##qvist": 28705, - "##rrigan": 28706, - "1016": 28707, - "facades": 28708, - "borg": 28709, - "inwardly": 28710, - "cervical": 28711, - "xl": 28712, - "pointedly": 28713, - "050": 28714, - "stabilization": 28715, - "##odon": 28716, - "chests": 28717, - "1699": 28718, - "hacked": 28719, - "ctv": 28720, - "orthogonal": 28721, - "suzy": 28722, - "##lastic": 28723, - "gaulle": 28724, - "jacobite": 28725, - "rearview": 28726, - "##cam": 28727, - "##erted": 28728, - "ashby": 28729, - "##drik": 28730, - "##igate": 28731, - "##mise": 28732, - "##zbek": 28733, - "affectionately": 28734, - "canine": 28735, - "disperse": 28736, - "latham": 28737, - "##istles": 28738, - "##ivar": 28739, - "spielberg": 28740, - "##orin": 28741, - "##idium": 28742, - "ezekiel": 28743, - "cid": 28744, - "##sg": 28745, - "durga": 28746, - "middletown": 28747, - "##cina": 28748, - "customized": 28749, - "frontiers": 28750, - "harden": 28751, - "##etano": 28752, - "##zzy": 28753, - "1604": 28754, - "bolsheviks": 28755, - "##66": 28756, - "coloration": 28757, - "yoko": 28758, - "##bedo": 28759, - "briefs": 28760, - "slabs": 28761, - "debra": 28762, - "liquidation": 28763, - "plumage": 28764, - "##oin": 28765, - "blossoms": 28766, - "dementia": 28767, - "subsidy": 28768, - "1611": 28769, - "proctor": 28770, - "relational": 28771, - "jerseys": 28772, - "parochial": 28773, - "ter": 28774, - "##ici": 28775, - "esa": 28776, - "peshawar": 28777, - "cavalier": 28778, - "loren": 28779, - "cpi": 28780, - "idiots": 28781, - "shamrock": 28782, - "1646": 28783, - "dutton": 28784, - "malabar": 28785, - "mustache": 28786, - "##endez": 28787, - "##ocytes": 28788, - "referencing": 28789, - "terminates": 28790, - "marche": 28791, - "yarmouth": 28792, - "##sop": 28793, - "acton": 28794, - "mated": 28795, - "seton": 28796, - "subtly": 28797, - "baptised": 28798, - "beige": 28799, - "extremes": 28800, - "jolted": 28801, - "kristina": 28802, - "telecast": 28803, - "##actic": 28804, - "safeguard": 28805, - "waldo": 28806, - "##baldi": 28807, - "##bular": 28808, - "endeavors": 28809, - "sloppy": 28810, - "subterranean": 28811, - "##ensburg": 28812, - "##itung": 28813, - "delicately": 28814, - "pigment": 28815, - "tq": 28816, - "##scu": 28817, - "1626": 28818, - "##ound": 28819, - "collisions": 28820, - "coveted": 28821, - "herds": 28822, - "##personal": 28823, - "##meister": 28824, - "##nberger": 28825, - "chopra": 28826, - "##ricting": 28827, - "abnormalities": 28828, - "defective": 28829, - "galician": 28830, - "lucie": 28831, - "##dilly": 28832, - "alligator": 28833, - "likened": 28834, - "##genase": 28835, - "burundi": 28836, - "clears": 28837, - "complexion": 28838, - "derelict": 28839, - "deafening": 28840, - "diablo": 28841, - "fingered": 28842, - "champaign": 28843, - "dogg": 28844, - "enlist": 28845, - "isotope": 28846, - "labeling": 28847, - "mrna": 28848, - "##erre": 28849, - "brilliance": 28850, - "marvelous": 28851, - "##ayo": 28852, - "1652": 28853, - "crawley": 28854, - "ether": 28855, - "footed": 28856, - "dwellers": 28857, - "deserts": 28858, - "hamish": 28859, - "rubs": 28860, - "warlock": 28861, - "skimmed": 28862, - "##lizer": 28863, - "870": 28864, - "buick": 28865, - "embark": 28866, - "heraldic": 28867, - "irregularities": 28868, - "##ajan": 28869, - "kiara": 28870, - "##kulam": 28871, - "##ieg": 28872, - "antigen": 28873, - "kowalski": 28874, - "##lge": 28875, - "oakley": 28876, - "visitation": 28877, - "##mbit": 28878, - "vt": 28879, - "##suit": 28880, - "1570": 28881, - "murderers": 28882, - "##miento": 28883, - "##rites": 28884, - "chimneys": 28885, - "##sling": 28886, - "condemn": 28887, - "custer": 28888, - "exchequer": 28889, - "havre": 28890, - "##ghi": 28891, - "fluctuations": 28892, - "##rations": 28893, - "dfb": 28894, - "hendricks": 28895, - "vaccines": 28896, - "##tarian": 28897, - "nietzsche": 28898, - "biking": 28899, - "juicy": 28900, - "##duced": 28901, - "brooding": 28902, - "scrolling": 28903, - "selangor": 28904, - "##ragan": 28905, - "352": 28906, - "annum": 28907, - "boomed": 28908, - "seminole": 28909, - "sugarcane": 28910, - "##dna": 28911, - "departmental": 28912, - "dismissing": 28913, - "innsbruck": 28914, - "arteries": 28915, - "ashok": 28916, - "batavia": 28917, - "daze": 28918, - "kun": 28919, - "overtook": 28920, - "##rga": 28921, - "##tlan": 28922, - "beheaded": 28923, - "gaddafi": 28924, - "holm": 28925, - "electronically": 28926, - "faulty": 28927, - "galilee": 28928, - "fractures": 28929, - "kobayashi": 28930, - "##lized": 28931, - "gunmen": 28932, - "magma": 28933, - "aramaic": 28934, - "mala": 28935, - "eastenders": 28936, - "inference": 28937, - "messengers": 28938, - "bf": 28939, - "##qu": 28940, - "407": 28941, - "bathrooms": 28942, - "##vere": 28943, - "1658": 28944, - "flashbacks": 28945, - "ideally": 28946, - "misunderstood": 28947, - "##jali": 28948, - "##weather": 28949, - "mendez": 28950, - "##grounds": 28951, - "505": 28952, - "uncanny": 28953, - "##iii": 28954, - "1709": 28955, - "friendships": 28956, - "##nbc": 28957, - "sacrament": 28958, - "accommodated": 28959, - "reiterated": 28960, - "logistical": 28961, - "pebbles": 28962, - "thumped": 28963, - "##escence": 28964, - "administering": 28965, - "decrees": 28966, - "drafts": 28967, - "##flight": 28968, - "##cased": 28969, - "##tula": 28970, - "futuristic": 28971, - "picket": 28972, - "intimidation": 28973, - "winthrop": 28974, - "##fahan": 28975, - "interfered": 28976, - "339": 28977, - "afar": 28978, - "francoise": 28979, - "morally": 28980, - "uta": 28981, - "cochin": 28982, - "croft": 28983, - "dwarfs": 28984, - "##bruck": 28985, - "##dents": 28986, - "##nami": 28987, - "biker": 28988, - "##hner": 28989, - "##meral": 28990, - "nano": 28991, - "##isen": 28992, - "##ometric": 28993, - "##pres": 28994, - "##ан": 28995, - "brightened": 28996, - "meek": 28997, - "parcels": 28998, - "securely": 28999, - "gunners": 29000, - "##jhl": 29001, - "##zko": 29002, - "agile": 29003, - "hysteria": 29004, - "##lten": 29005, - "##rcus": 29006, - "bukit": 29007, - "champs": 29008, - "chevy": 29009, - "cuckoo": 29010, - "leith": 29011, - "sadler": 29012, - "theologians": 29013, - "welded": 29014, - "##section": 29015, - "1663": 29016, - "jj": 29017, - "plurality": 29018, - "xander": 29019, - "##rooms": 29020, - "##formed": 29021, - "shredded": 29022, - "temps": 29023, - "intimately": 29024, - "pau": 29025, - "tormented": 29026, - "##lok": 29027, - "##stellar": 29028, - "1618": 29029, - "charred": 29030, - "ems": 29031, - "essen": 29032, - "##mmel": 29033, - "alarms": 29034, - "spraying": 29035, - "ascot": 29036, - "blooms": 29037, - "twinkle": 29038, - "##abia": 29039, - "##apes": 29040, - "internment": 29041, - "obsidian": 29042, - "##chaft": 29043, - "snoop": 29044, - "##dav": 29045, - "##ooping": 29046, - "malibu": 29047, - "##tension": 29048, - "quiver": 29049, - "##itia": 29050, - "hays": 29051, - "mcintosh": 29052, - "travers": 29053, - "walsall": 29054, - "##ffie": 29055, - "1623": 29056, - "beverley": 29057, - "schwarz": 29058, - "plunging": 29059, - "structurally": 29060, - "m3": 29061, - "rosenthal": 29062, - "vikram": 29063, - "##tsk": 29064, - "770": 29065, - "ghz": 29066, - "##onda": 29067, - "##tiv": 29068, - "chalmers": 29069, - "groningen": 29070, - "pew": 29071, - "reckon": 29072, - "unicef": 29073, - "##rvis": 29074, - "55th": 29075, - "##gni": 29076, - "1651": 29077, - "sulawesi": 29078, - "avila": 29079, - "cai": 29080, - "metaphysical": 29081, - "screwing": 29082, - "turbulence": 29083, - "##mberg": 29084, - "augusto": 29085, - "samba": 29086, - "56th": 29087, - "baffled": 29088, - "momentary": 29089, - "toxin": 29090, - "##urian": 29091, - "##wani": 29092, - "aachen": 29093, - "condoms": 29094, - "dali": 29095, - "steppe": 29096, - "##3d": 29097, - "##app": 29098, - "##oed": 29099, - "##year": 29100, - "adolescence": 29101, - "dauphin": 29102, - "electrically": 29103, - "inaccessible": 29104, - "microscopy": 29105, - "nikita": 29106, - "##ega": 29107, - "atv": 29108, - "##cel": 29109, - "##enter": 29110, - "##oles": 29111, - "##oteric": 29112, - "##ы": 29113, - "accountants": 29114, - "punishments": 29115, - "wrongly": 29116, - "bribes": 29117, - "adventurous": 29118, - "clinch": 29119, - "flinders": 29120, - "southland": 29121, - "##hem": 29122, - "##kata": 29123, - "gough": 29124, - "##ciency": 29125, - "lads": 29126, - "soared": 29127, - "##ה": 29128, - "undergoes": 29129, - "deformation": 29130, - "outlawed": 29131, - "rubbish": 29132, - "##arus": 29133, - "##mussen": 29134, - "##nidae": 29135, - "##rzburg": 29136, - "arcs": 29137, - "##ingdon": 29138, - "##tituted": 29139, - "1695": 29140, - "wheelbase": 29141, - "wheeling": 29142, - "bombardier": 29143, - "campground": 29144, - "zebra": 29145, - "##lices": 29146, - "##oj": 29147, - "##bain": 29148, - "lullaby": 29149, - "##ecure": 29150, - "donetsk": 29151, - "wylie": 29152, - "grenada": 29153, - "##arding": 29154, - "##Ī·Ļ‚": 29155, - "squinting": 29156, - "eireann": 29157, - "opposes": 29158, - "##andra": 29159, - "maximal": 29160, - "runes": 29161, - "##broken": 29162, - "##cuting": 29163, - "##iface": 29164, - "##ror": 29165, - "##rosis": 29166, - "additive": 29167, - "britney": 29168, - "adultery": 29169, - "triggering": 29170, - "##drome": 29171, - "detrimental": 29172, - "aarhus": 29173, - "containment": 29174, - "jc": 29175, - "swapped": 29176, - "vichy": 29177, - "##ioms": 29178, - "madly": 29179, - "##oric": 29180, - "##rag": 29181, - "brant": 29182, - "##ckey": 29183, - "##trix": 29184, - "1560": 29185, - "1612": 29186, - "broughton": 29187, - "rustling": 29188, - "##stems": 29189, - "##uder": 29190, - "asbestos": 29191, - "mentoring": 29192, - "##nivorous": 29193, - "finley": 29194, - "leaps": 29195, - "##isan": 29196, - "apical": 29197, - "pry": 29198, - "slits": 29199, - "substitutes": 29200, - "##dict": 29201, - "intuitive": 29202, - "fantasia": 29203, - "insistent": 29204, - "unreasonable": 29205, - "##igen": 29206, - "##vna": 29207, - "domed": 29208, - "hannover": 29209, - "margot": 29210, - "ponder": 29211, - "##zziness": 29212, - "impromptu": 29213, - "jian": 29214, - "lc": 29215, - "rampage": 29216, - "stemming": 29217, - "##eft": 29218, - "andrey": 29219, - "gerais": 29220, - "whichever": 29221, - "amnesia": 29222, - "appropriated": 29223, - "anzac": 29224, - "clicks": 29225, - "modifying": 29226, - "ultimatum": 29227, - "cambrian": 29228, - "maids": 29229, - "verve": 29230, - "yellowstone": 29231, - "##mbs": 29232, - "conservatoire": 29233, - "##scribe": 29234, - "adherence": 29235, - "dinners": 29236, - "spectra": 29237, - "imperfect": 29238, - "mysteriously": 29239, - "sidekick": 29240, - "tatar": 29241, - "tuba": 29242, - "##aks": 29243, - "##ifolia": 29244, - "distrust": 29245, - "##athan": 29246, - "##zle": 29247, - "c2": 29248, - "ronin": 29249, - "zac": 29250, - "##pse": 29251, - "celaena": 29252, - "instrumentalist": 29253, - "scents": 29254, - "skopje": 29255, - "##mbling": 29256, - "comical": 29257, - "compensated": 29258, - "vidal": 29259, - "condor": 29260, - "intersect": 29261, - "jingle": 29262, - "wavelengths": 29263, - "##urrent": 29264, - "mcqueen": 29265, - "##izzly": 29266, - "carp": 29267, - "weasel": 29268, - "422": 29269, - "kanye": 29270, - "militias": 29271, - "postdoctoral": 29272, - "eugen": 29273, - "gunslinger": 29274, - "##ɛ": 29275, - "faux": 29276, - "hospice": 29277, - "##for": 29278, - "appalled": 29279, - "derivation": 29280, - "dwarves": 29281, - "##elis": 29282, - "dilapidated": 29283, - "##folk": 29284, - "astoria": 29285, - "philology": 29286, - "##lwyn": 29287, - "##otho": 29288, - "##saka": 29289, - "inducing": 29290, - "philanthropy": 29291, - "##bf": 29292, - "##itative": 29293, - "geek": 29294, - "markedly": 29295, - "sql": 29296, - "##yce": 29297, - "bessie": 29298, - "indices": 29299, - "rn": 29300, - "##flict": 29301, - "495": 29302, - "frowns": 29303, - "resolving": 29304, - "weightlifting": 29305, - "tugs": 29306, - "cleric": 29307, - "contentious": 29308, - "1653": 29309, - "mania": 29310, - "rms": 29311, - "##miya": 29312, - "##reate": 29313, - "##ruck": 29314, - "##tucket": 29315, - "bien": 29316, - "eels": 29317, - "marek": 29318, - "##ayton": 29319, - "##cence": 29320, - "discreet": 29321, - "unofficially": 29322, - "##ife": 29323, - "leaks": 29324, - "##bber": 29325, - "1705": 29326, - "332": 29327, - "dung": 29328, - "compressor": 29329, - "hillsborough": 29330, - "pandit": 29331, - "shillings": 29332, - "distal": 29333, - "##skin": 29334, - "381": 29335, - "##tat": 29336, - "##you": 29337, - "nosed": 29338, - "##nir": 29339, - "mangrove": 29340, - "undeveloped": 29341, - "##idia": 29342, - "textures": 29343, - "##inho": 29344, - "##500": 29345, - "##rise": 29346, - "ae": 29347, - "irritating": 29348, - "nay": 29349, - "amazingly": 29350, - "bancroft": 29351, - "apologetic": 29352, - "compassionate": 29353, - "kata": 29354, - "symphonies": 29355, - "##lovic": 29356, - "airspace": 29357, - "##lch": 29358, - "930": 29359, - "gifford": 29360, - "precautions": 29361, - "fulfillment": 29362, - "sevilla": 29363, - "vulgar": 29364, - "martinique": 29365, - "##urities": 29366, - "looting": 29367, - "piccolo": 29368, - "tidy": 29369, - "##dermott": 29370, - "quadrant": 29371, - "armchair": 29372, - "incomes": 29373, - "mathematicians": 29374, - "stampede": 29375, - "nilsson": 29376, - "##inking": 29377, - "##scan": 29378, - "foo": 29379, - "quarterfinal": 29380, - "##ostal": 29381, - "shang": 29382, - "shouldered": 29383, - "squirrels": 29384, - "##owe": 29385, - "344": 29386, - "vinegar": 29387, - "##bner": 29388, - "##rchy": 29389, - "##systems": 29390, - "delaying": 29391, - "##trics": 29392, - "ars": 29393, - "dwyer": 29394, - "rhapsody": 29395, - "sponsoring": 29396, - "##gration": 29397, - "bipolar": 29398, - "cinder": 29399, - "starters": 29400, - "##olio": 29401, - "##urst": 29402, - "421": 29403, - "signage": 29404, - "##nty": 29405, - "aground": 29406, - "figurative": 29407, - "mons": 29408, - "acquaintances": 29409, - "duets": 29410, - "erroneously": 29411, - "soyuz": 29412, - "elliptic": 29413, - "recreated": 29414, - "##cultural": 29415, - "##quette": 29416, - "##ssed": 29417, - "##tma": 29418, - "##zcz": 29419, - "moderator": 29420, - "scares": 29421, - "##itaire": 29422, - "##stones": 29423, - "##udence": 29424, - "juniper": 29425, - "sighting": 29426, - "##just": 29427, - "##nsen": 29428, - "britten": 29429, - "calabria": 29430, - "ry": 29431, - "bop": 29432, - "cramer": 29433, - "forsyth": 29434, - "stillness": 29435, - "##Š»": 29436, - "airmen": 29437, - "gathers": 29438, - "unfit": 29439, - "##umber": 29440, - "##upt": 29441, - "taunting": 29442, - "##rip": 29443, - "seeker": 29444, - "streamlined": 29445, - "##bution": 29446, - "holster": 29447, - "schumann": 29448, - "tread": 29449, - "vox": 29450, - "##gano": 29451, - "##onzo": 29452, - "strive": 29453, - "dil": 29454, - "reforming": 29455, - "covent": 29456, - "newbury": 29457, - "predicting": 29458, - "##orro": 29459, - "decorate": 29460, - "tre": 29461, - "##puted": 29462, - "andover": 29463, - "ie": 29464, - "asahi": 29465, - "dept": 29466, - "dunkirk": 29467, - "gills": 29468, - "##tori": 29469, - "buren": 29470, - "huskies": 29471, - "##stis": 29472, - "##stov": 29473, - "abstracts": 29474, - "bets": 29475, - "loosen": 29476, - "##opa": 29477, - "1682": 29478, - "yearning": 29479, - "##glio": 29480, - "##sir": 29481, - "berman": 29482, - "effortlessly": 29483, - "enamel": 29484, - "napoli": 29485, - "persist": 29486, - "##peration": 29487, - "##uez": 29488, - "attache": 29489, - "elisa": 29490, - "b1": 29491, - "invitations": 29492, - "##kic": 29493, - "accelerating": 29494, - "reindeer": 29495, - "boardwalk": 29496, - "clutches": 29497, - "nelly": 29498, - "polka": 29499, - "starbucks": 29500, - "##kei": 29501, - "adamant": 29502, - "huey": 29503, - "lough": 29504, - "unbroken": 29505, - "adventurer": 29506, - "embroidery": 29507, - "inspecting": 29508, - "stanza": 29509, - "##ducted": 29510, - "naia": 29511, - "taluka": 29512, - "##pone": 29513, - "##roids": 29514, - "chases": 29515, - "deprivation": 29516, - "florian": 29517, - "##jing": 29518, - "##ppet": 29519, - "earthly": 29520, - "##lib": 29521, - "##ssee": 29522, - "colossal": 29523, - "foreigner": 29524, - "vet": 29525, - "freaks": 29526, - "patrice": 29527, - "rosewood": 29528, - "triassic": 29529, - "upstate": 29530, - "##pkins": 29531, - "dominates": 29532, - "ata": 29533, - "chants": 29534, - "ks": 29535, - "vo": 29536, - "##400": 29537, - "##bley": 29538, - "##raya": 29539, - "##rmed": 29540, - "555": 29541, - "agra": 29542, - "infiltrate": 29543, - "##ailing": 29544, - "##ilation": 29545, - "##tzer": 29546, - "##uppe": 29547, - "##werk": 29548, - "binoculars": 29549, - "enthusiast": 29550, - "fujian": 29551, - "squeak": 29552, - "##avs": 29553, - "abolitionist": 29554, - "almeida": 29555, - "boredom": 29556, - "hampstead": 29557, - "marsden": 29558, - "rations": 29559, - "##ands": 29560, - "inflated": 29561, - "334": 29562, - "bonuses": 29563, - "rosalie": 29564, - "patna": 29565, - "##rco": 29566, - "329": 29567, - "detachments": 29568, - "penitentiary": 29569, - "54th": 29570, - "flourishing": 29571, - "woolf": 29572, - "##dion": 29573, - "##etched": 29574, - "papyrus": 29575, - "##lster": 29576, - "##nsor": 29577, - "##toy": 29578, - "bobbed": 29579, - "dismounted": 29580, - "endelle": 29581, - "inhuman": 29582, - "motorola": 29583, - "tbs": 29584, - "wince": 29585, - "wreath": 29586, - "##ticus": 29587, - "hideout": 29588, - "inspections": 29589, - "sanjay": 29590, - "disgrace": 29591, - "infused": 29592, - "pudding": 29593, - "stalks": 29594, - "##urbed": 29595, - "arsenic": 29596, - "leases": 29597, - "##hyl": 29598, - "##rrard": 29599, - "collarbone": 29600, - "##waite": 29601, - "##wil": 29602, - "dowry": 29603, - "##bant": 29604, - "##edance": 29605, - "genealogical": 29606, - "nitrate": 29607, - "salamanca": 29608, - "scandals": 29609, - "thyroid": 29610, - "necessitated": 29611, - "##!": 29612, - "##\"": 29613, - "###": 29614, - "##$": 29615, - "##%": 29616, - "##&": 29617, - "##'": 29618, - "##(": 29619, - "##)": 29620, - "##*": 29621, - "##+": 29622, - "##,": 29623, - "##-": 29624, - "##.": 29625, - "##/": 29626, - "##:": 29627, - "##;": 29628, - "##<": 29629, - "##=": 29630, - "##>": 29631, - "##?": 29632, - "##@": 29633, - "##[": 29634, - "##\\": 29635, - "##]": 29636, - "##^": 29637, - "##_": 29638, - "##`": 29639, - "##{": 29640, - "##|": 29641, - "##}": 29642, - "##~": 29643, - "##Ā”": 29644, - "##Ā¢": 29645, - "##Ā£": 29646, - "##¤": 29647, - "##Ā„": 29648, - "##¦": 29649, - "##§": 29650, - "##ĀØ": 29651, - "##Ā©": 29652, - "##ĀŖ": 29653, - "##Ā«": 29654, - "##¬": 29655, - "##Ā®": 29656, - "##±": 29657, - "##Ā“": 29658, - "##µ": 29659, - "##¶": 29660, - "##Ā·": 29661, - "##Āŗ": 29662, - "##Ā»": 29663, - "##¼": 29664, - "##¾": 29665, - "##Āæ": 29666, - "##Ʀ": 29667, - "##ư": 29668, - "##Ć·": 29669, - "##þ": 29670, - "##đ": 29671, - "##ħ": 29672, - "##ŋ": 29673, - "##œ": 29674, - "##ʒ": 29675, - "##ɐ": 29676, - "##ɑ": 29677, - "##ɒ": 29678, - "##ɔ": 29679, - "##ɕ": 29680, - "##ə": 29681, - "##É”": 29682, - "##É£": 29683, - "##ÉØ": 29684, - "##ÉŖ": 29685, - "##É«": 29686, - "##ɬ": 29687, - "##ÉÆ": 29688, - "##ɲ": 29689, - "##É“": 29690, - "##ɹ": 29691, - "##ɾ": 29692, - "##Ź€": 29693, - "##ʁ": 29694, - "##Ź‚": 29695, - "##ʃ": 29696, - "##ʉ": 29697, - "##ʊ": 29698, - "##Ź‹": 29699, - "##ʌ": 29700, - "##ŹŽ": 29701, - "##ʐ": 29702, - "##Ź‘": 29703, - "##Ź’": 29704, - "##Ź”": 29705, - "##ʰ": 29706, - "##ʲ": 29707, - "##ʳ": 29708, - "##Ź·": 29709, - "##Źø": 29710, - "##Ź»": 29711, - "##ʼ": 29712, - "##ʾ": 29713, - "##Źæ": 29714, - "##ˈ": 29715, - "##Ė”": 29716, - "##Ė¢": 29717, - "##Ė£": 29718, - "##ˤ": 29719, - "##β": 29720, - "##γ": 29721, - "##Ī“": 29722, - "##ε": 29723, - "##ζ": 29724, - "##Īø": 29725, - "##Īŗ": 29726, - "##Ī»": 29727, - "##μ": 29728, - "##ξ": 29729, - "##Īæ": 29730, - "##Ļ€": 29731, - "##ρ": 29732, - "##σ": 29733, - "##Ļ„": 29734, - "##Ļ…": 29735, - "##φ": 29736, - "##χ": 29737, - "##ψ": 29738, - "##ω": 29739, - "##б": 29740, - "##г": 29741, - "##Š“": 29742, - "##ж": 29743, - "##Š·": 29744, - "##м": 29745, - "##Šæ": 29746, - "##с": 29747, - "##у": 29748, - "##ф": 29749, - "##х": 29750, - "##ц": 29751, - "##ч": 29752, - "##ш": 29753, - "##щ": 29754, - "##ъ": 29755, - "##э": 29756, - "##ю": 29757, - "##ђ": 29758, - "##є": 29759, - "##і": 29760, - "##ј": 29761, - "##љ": 29762, - "##њ": 29763, - "##ћ": 29764, - "##ӏ": 29765, - "##Õ”": 29766, - "##Õ¢": 29767, - "##Õ£": 29768, - "##Õ¤": 29769, - "##Õ„": 29770, - "##Õ©": 29771, - "##Õ«": 29772, - "##Õ¬": 29773, - "##ÕÆ": 29774, - "##Õ°": 29775, - "##Õ“": 29776, - "##Õµ": 29777, - "##Õ¶": 29778, - "##Õø": 29779, - "##Õŗ": 29780, - "##Õ½": 29781, - "##Õ¾": 29782, - "##Õæ": 29783, - "##ր": 29784, - "##ւ": 29785, - "##ք": 29786, - "##Ö¾": 29787, - "##א": 29788, - "##ב": 29789, - "##ג": 29790, - "##ד": 29791, - "##ו": 29792, - "##ז": 29793, - "##ח": 29794, - "##ט": 29795, - "##י": 29796, - "##ך": 29797, - "##כ": 29798, - "##ל": 29799, - "##ם": 29800, - "##מ": 29801, - "##ן": 29802, - "##× ": 29803, - "##×”": 29804, - "##×¢": 29805, - "##×£": 29806, - "##פ": 29807, - "##ׄ": 29808, - "##צ": 29809, - "##×§": 29810, - "##ר": 29811, - "##ש": 29812, - "##×Ŗ": 29813, - "##،": 29814, - "##Ų”": 29815, - "##ŲØ": 29816, - "##ŲŖ": 29817, - "##Ų«": 29818, - "##Ų¬": 29819, - "##Ų­": 29820, - "##Ų®": 29821, - "##Ų°": 29822, - "##Ų²": 29823, - "##Ų³": 29824, - "##Ų“": 29825, - "##Ųµ": 29826, - "##Ų¶": 29827, - "##Ų·": 29828, - "##Ųø": 29829, - "##Ų¹": 29830, - "##Ųŗ": 29831, - "##Ł€": 29832, - "##ف": 29833, - "##Ł‚": 29834, - "##ك": 29835, - "##و": 29836, - "##ى": 29837, - "##ٹ": 29838, - "##پ": 29839, - "##چ": 29840, - "##Ś©": 29841, - "##ŚÆ": 29842, - "##Śŗ": 29843, - "##ھ": 29844, - "##ہ": 29845, - "##Ū’": 29846, - "##अ": 29847, - "##आ": 29848, - "##उ": 29849, - "##ą¤": 29850, - "##क": 29851, - "##ख": 29852, - "##ग": 29853, - "##च": 29854, - "##ज": 29855, - "##ट": 29856, - "##औ": 29857, - "##ण": 29858, - "##त": 29859, - "##ऄ": 29860, - "##द": 29861, - "##ध": 29862, - "##न": 29863, - "##प": 29864, - "##ब": 29865, - "##भ": 29866, - "##म": 29867, - "##य": 29868, - "##र": 29869, - "##ल": 29870, - "##व": 29871, - "##श": 29872, - "##ष": 29873, - "##स": 29874, - "##ह": 29875, - "##ा": 29876, - "##ि": 29877, - "##ą„€": 29878, - "##ą„‹": 29879, - "##ą„¤": 29880, - "##ą„„": 29881, - "##ং": 29882, - "##অ": 29883, - "##আ": 29884, - "##ই": 29885, - "##উ": 29886, - "##ą¦": 29887, - "##ও": 29888, - "##ক": 29889, - "##খ": 29890, - "##গ": 29891, - "##চ": 29892, - "##ছ": 29893, - "##জ": 29894, - "##ট": 29895, - "##ঔ": 29896, - "##ণ": 29897, - "##ত": 29898, - "##঄": 29899, - "##দ": 29900, - "##ধ": 29901, - "##ন": 29902, - "##প": 29903, - "##ব": 29904, - "##ভ": 29905, - "##ম": 29906, - "##য": 29907, - "##র": 29908, - "##ল": 29909, - "##শ": 29910, - "##ষ": 29911, - "##স": 29912, - "##হ": 29913, - "##া": 29914, - "##ি": 29915, - "##ą§€": 29916, - "##ে": 29917, - "##க": 29918, - "##ச": 29919, - "##ட": 29920, - "##த": 29921, - "##ந": 29922, - "##ன": 29923, - "##ப": 29924, - "##ą®®": 29925, - "##ய": 29926, - "##ą®°": 29927, - "##ல": 29928, - "##ள": 29929, - "##வ": 29930, - "##ா": 29931, - "##ி": 29932, - "##ு": 29933, - "##ே": 29934, - "##ை": 29935, - "##ನ": 29936, - "##ą²°": 29937, - "##ą²¾": 29938, - "##ක": 29939, - "##ą¶ŗ": 29940, - "##ą¶»": 29941, - "##ą¶½": 29942, - "##ą·€": 29943, - "##ą·": 29944, - "##ก": 29945, - "##ąø‡": 29946, - "##ąø•": 29947, - "##ąø—": 29948, - "##ąø™": 29949, - "##ąøž": 29950, - "##ąø”": 29951, - "##ąø¢": 29952, - "##ąø£": 29953, - "##ąø„": 29954, - "##ąø§": 29955, - "##ąøŖ": 29956, - "##ąø­": 29957, - "##ąø²": 29958, - "##ą¹€": 29959, - "##་": 29960, - "##ą¼": 29961, - "##ག": 29962, - "##ང": 29963, - "##ད": 29964, - "##ན": 29965, - "##ą½”": 29966, - "##ą½–": 29967, - "##མ": 29968, - "##ą½ ": 29969, - "##ą½¢": 29970, - "##ą½£": 29971, - "##ས": 29972, - "##မ": 29973, - "##ა": 29974, - "##įƒ‘": 29975, - "##įƒ’": 29976, - "##įƒ“": 29977, - "##įƒ”": 29978, - "##įƒ•": 29979, - "##įƒ—": 29980, - "##ი": 29981, - "##įƒ™": 29982, - "##ლ": 29983, - "##įƒ›": 29984, - "##ნ": 29985, - "##įƒ": 29986, - "##რ": 29987, - "##ე": 29988, - "##ტ": 29989, - "##უ": 29990, - "##į„€": 29991, - "##į„‚": 29992, - "##į„ƒ": 29993, - "##į„…": 29994, - "##ᄆ": 29995, - "##ᄇ": 29996, - "##ᄉ": 29997, - "##į„Š": 29998, - "##į„‹": 29999, - "##į„Œ": 30000, - "##į„Ž": 30001, - "##į„": 30002, - "##ᄐ": 30003, - "##į„‘": 30004, - "##į„’": 30005, - "##į…”": 30006, - "##į…¢": 30007, - "##į…„": 30008, - "##į…¦": 30009, - "##į…§": 30010, - "##į…©": 30011, - "##į…Ŗ": 30012, - "##į…­": 30013, - "##į…®": 30014, - "##į…Æ": 30015, - "##į…²": 30016, - "##į…³": 30017, - "##į…“": 30018, - "##į…µ": 30019, - "##ᆨ": 30020, - "##ᆫ": 30021, - "##ᆯ": 30022, - "##ᆷ": 30023, - "##ᆸ": 30024, - "##ᆼ": 30025, - "##ᓬ": 30026, - "##į“®": 30027, - "##į“°": 30028, - "##ᓵ": 30029, - "##ᓺ": 30030, - "##įµ€": 30031, - "##ᵃ": 30032, - "##ᵇ": 30033, - "##ᵈ": 30034, - "##ᵉ": 30035, - "##įµ": 30036, - "##įµ": 30037, - "##ᵐ": 30038, - "##įµ’": 30039, - "##įµ–": 30040, - "##įµ—": 30041, - "##ᵘ": 30042, - "##įµ£": 30043, - "##ᵤ": 30044, - "##ᵄ": 30045, - "##ᶜ": 30046, - "##į¶ ": 30047, - "##‐": 30048, - "##‑": 30049, - "##‒": 30050, - "##–": 30051, - "##—": 30052, - "##―": 30053, - "##‖": 30054, - "##ā€˜": 30055, - "##’": 30056, - "##ā€š": 30057, - "##ā€œ": 30058, - "##ā€": 30059, - "##ā€ž": 30060, - "##†": 30061, - "##—": 30062, - "##•": 30063, - "##…": 30064, - "##‰": 30065, - "##′": 30066, - "##″": 30067, - "##›": 30068, - "##‿": 30069, - "##⁄": 30070, - "##⁰": 30071, - "##ⁱ": 30072, - "##⁓": 30073, - "##⁵": 30074, - "##⁶": 30075, - "##⁷": 30076, - "##⁸": 30077, - "##⁹": 30078, - "##⁻": 30079, - "##ⁿ": 30080, - "##ā‚…": 30081, - "##₆": 30082, - "##₇": 30083, - "##ā‚ˆ": 30084, - "##₉": 30085, - "##ā‚Š": 30086, - "##ā‚": 30087, - "##ā‚Ž": 30088, - "##ₐ": 30089, - "##ā‚‘": 30090, - "##ā‚’": 30091, - "##ā‚“": 30092, - "##ā‚•": 30093, - "##ā‚–": 30094, - "##ā‚—": 30095, - "##ā‚˜": 30096, - "##ā‚š": 30097, - "##ā‚›": 30098, - "##ā‚œ": 30099, - "##₤": 30100, - "##ā‚©": 30101, - "##€": 30102, - "##₱": 30103, - "##₹": 30104, - "##ā„“": 30105, - "##ā„–": 30106, - "##ā„": 30107, - "##ā„¢": 30108, - "##ā…“": 30109, - "##ā…”": 30110, - "##←": 30111, - "##↑": 30112, - "##→": 30113, - "##↓": 30114, - "##↔": 30115, - "##↦": 30116, - "##⇄": 30117, - "##ā‡Œ": 30118, - "##⇒": 30119, - "##āˆ‚": 30120, - "##āˆ…": 30121, - "##āˆ†": 30122, - "##āˆ‡": 30123, - "##∈": 30124, - "##āˆ—": 30125, - "##∘": 30126, - "##√": 30127, - "##āˆž": 30128, - "##∧": 30129, - "##∨": 30130, - "##∩": 30131, - "##∪": 30132, - "##ā‰ˆ": 30133, - "##≔": 30134, - "##≤": 30135, - "##≄": 30136, - "##āŠ‚": 30137, - "##āŠ†": 30138, - "##āŠ•": 30139, - "##āŠ—": 30140, - "##ā‹…": 30141, - "##─": 30142, - "##│": 30143, - "##ā– ": 30144, - "##ā–Ŗ": 30145, - "##ā—": 30146, - "##ā˜…": 30147, - "##ā˜†": 30148, - "##ā˜‰": 30149, - "##ā™ ": 30150, - "##♣": 30151, - "##♄": 30152, - "##♦": 30153, - "##♯": 30154, - "##⟨": 30155, - "##⟩": 30156, - "##ā±¼": 30157, - "##āŗ©": 30158, - "##āŗ¼": 30159, - "##⽄": 30160, - "##态": 30161, - "##怂": 30162, - "##怈": 30163, - "##怉": 30164, - "##怊": 30165, - "##怋": 30166, - "##怌": 30167, - "##怍": 30168, - "##怎": 30169, - "##怏": 30170, - "##怜": 30171, - "##恂": 30172, - "##恄": 30173, - "##恆": 30174, - "##恈": 30175, - "##お": 30176, - "##恋": 30177, - "##恍": 30178, - "##恏": 30179, - "##恑": 30180, - "##恓": 30181, - "##恕": 30182, - "##恗": 30183, - "##恙": 30184, - "##恛": 30185, - "##恝": 30186, - "##た": 30187, - "##恔": 30188, - "##っ": 30189, - "##恤": 30190, - "##恦": 30191, - "##と": 30192, - "##な": 30193, - "##恫": 30194, - "##恬": 30195, - "##恭": 30196, - "##恮": 30197, - "##は": 30198, - "##ひ": 30199, - "##恵": 30200, - "##へ": 30201, - "##恻": 30202, - "##ま": 30203, - "##み": 30204, - "##悀": 30205, - "##悁": 30206, - "##悂": 30207, - "##悄": 30208, - "##悆": 30209, - "##悈": 30210, - "##悉": 30211, - "##悊": 30212, - "##悋": 30213, - "##悌": 30214, - "##悍": 30215, - "##悒": 30216, - "##悓": 30217, - "##ć‚”": 30218, - "##ć‚¢": 30219, - "##ć‚£": 30220, - "##悤": 30221, - "##悦": 30222, - "##悧": 30223, - "##エ": 30224, - "##オ": 30225, - "##ć‚«": 30226, - "##悭": 30227, - "##ク": 30228, - "##悱": 30229, - "##コ": 30230, - "##悵": 30231, - "##ć‚·": 30232, - "##ス": 30233, - "##ć‚»": 30234, - "##タ": 30235, - "##惁": 30236, - "##惃": 30237, - "##惄": 30238, - "##惆": 30239, - "##惈": 30240, - "##ナ": 30241, - "##惋": 30242, - "##惎": 30243, - "##惏": 30244, - "##惒": 30245, - "##惕": 30246, - "##惘": 30247, - "##惛": 30248, - "##惞": 30249, - "##ミ": 30250, - "##惠": 30251, - "##惔": 30252, - "##モ": 30253, - "##ャ": 30254, - "##惄": 30255, - "##惧": 30256, - "##惩": 30257, - "##リ": 30258, - "##惫": 30259, - "##惬": 30260, - "##惭": 30261, - "##ワ": 30262, - "##ン": 30263, - "##惻": 30264, - "##ー": 30265, - "##äø€": 30266, - "##äø‰": 30267, - "##上": 30268, - "##äø‹": 30269, - "##äø": 30270, - "##äø–": 30271, - "##äø­": 30272, - "##äø»": 30273, - "##久": 30274, - "##之": 30275, - "##也": 30276, - "##äŗ‹": 30277, - "##二": 30278, - "##äŗ”": 30279, - "##äŗ•": 30280, - "##äŗ¬": 30281, - "##äŗŗ": 30282, - "##äŗ»": 30283, - "##仁": 30284, - "##介": 30285, - "##代": 30286, - "##ä»®": 30287, - "##伊": 30288, - "##会": 30289, - "##佐": 30290, - "##侍": 30291, - "##äæ": 30292, - "##äæ”": 30293, - "##偄": 30294, - "##元": 30295, - "##光": 30296, - "##八": 30297, - "##公": 30298, - "##内": 30299, - "##出": 30300, - "##分": 30301, - "##前": 30302, - "##劉": 30303, - "##力": 30304, - "##加": 30305, - "##勝": 30306, - "##北": 30307, - "##区": 30308, - "##十": 30309, - "##千": 30310, - "##南": 30311, - "##博": 30312, - "##原": 30313, - "##口": 30314, - "##古": 30315, - "##史": 30316, - "##åø": 30317, - "##合": 30318, - "##吉": 30319, - "##同": 30320, - "##名": 30321, - "##和": 30322, - "##囗": 30323, - "##四": 30324, - "##国": 30325, - "##國": 30326, - "##土": 30327, - "##地": 30328, - "##坂": 30329, - "##城": 30330, - "##堂": 30331, - "##å “": 30332, - "##士": 30333, - "##夏": 30334, - "##外": 30335, - "##大": 30336, - "##天": 30337, - "##太": 30338, - "##夫": 30339, - "##儈": 30340, - "##儳": 30341, - "##子": 30342, - "##å­¦": 30343, - "##宀": 30344, - "##宇": 30345, - "##安": 30346, - "##宗": 30347, - "##定": 30348, - "##宣": 30349, - "##å®®": 30350, - "##å®¶": 30351, - "##宿": 30352, - "##寺": 30353, - "##將": 30354, - "##小": 30355, - "##尚": 30356, - "##å±±": 30357, - "##å²”": 30358, - "##å³¶": 30359, - "##哎": 30360, - "##川": 30361, - "##州": 30362, - "##å·æ": 30363, - "##åø": 30364, - "##å¹³": 30365, - "##幓": 30366, - "##å¹ø": 30367, - "##广": 30368, - "##弘": 30369, - "##å¼µ": 30370, - "##å½³": 30371, - "##後": 30372, - "##å¾”": 30373, - "##å¾·": 30374, - "##心": 30375, - "##åæ„": 30376, - "##åæ—": 30377, - "##åæ ": 30378, - "##ꄛ": 30379, - "##ꈐ": 30380, - "##ꈑ": 30381, - "##ꈦ": 30382, - "##戸": 30383, - "##ꉋ": 30384, - "##ꉌ": 30385, - "##政": 30386, - "##ꖇ": 30387, - "##ꖰ": 30388, - "##ę–¹": 30389, - "##ę—„": 30390, - "##꘎": 30391, - "##星": 30392, - "##ꘄ": 30393, - "##꘭": 30394, - "##智": 30395, - "##曲": 30396, - "##書": 30397, - "##月": 30398, - "##꜉": 30399, - "##ꜝ": 30400, - "##木": 30401, - "##本": 30402, - "##Ꝏ": 30403, - "##ꝑ": 30404, - "##ę±": 30405, - "##ę¾": 30406, - "##ꞗ": 30407, - "##森": 30408, - "##愊": 30409, - "##樹": 30410, - "##ę©‹": 30411, - "##歌": 30412, - "##ę­¢": 30413, - "##ę­£": 30414, - "##ę­¦": 30415, - "##比": 30416, - "##갏": 30417, - "##갑": 30418, - "##ę°“": 30419, - "##ę°µ": 30420, - "##ę°·": 30421, - "##ę°ø": 30422, - "##江": 30423, - "##ę²¢": 30424, - "##ę²³": 30425, - "##ę²»": 30426, - "##法": 30427, - "##ęµ·": 30428, - "##ęø…": 30429, - "##ę¼¢": 30430, - "##瀬": 30431, - "##火": 30432, - "##ē‰ˆ": 30433, - "##犬": 30434, - "##ēŽ‹": 30435, - "##ē”Ÿ": 30436, - "##ē”°": 30437, - "##ē”·": 30438, - "##ē–’": 30439, - "##発": 30440, - "##白": 30441, - "##ēš„": 30442, - "##ēš‡": 30443, - "##ē›®": 30444, - "##相": 30445, - "##省": 30446, - "##真": 30447, - "##石": 30448, - "##示": 30449, - "##社": 30450, - "##ē„ž": 30451, - "##ē¦": 30452, - "##禾": 30453, - "##ē§€": 30454, - "##ē§‹": 30455, - "##空": 30456, - "##ē«‹": 30457, - "##ē« ": 30458, - "##竹": 30459, - "##ē³¹": 30460, - "##ē¾Ž": 30461, - "##義": 30462, - "##耳": 30463, - "##良": 30464, - "##艹": 30465, - "##花": 30466, - "##英": 30467, - "##čÆ": 30468, - "##葉": 30469, - "##藤": 30470, - "##蔌": 30471, - "##č”—": 30472, - "##脿": 30473, - "##見": 30474, - "##訁": 30475, - "##čŖž": 30476, - "##č°·": 30477, - "##č²": 30478, - "##貓": 30479, - "##車": 30480, - "##č»": 30481, - "##č¾¶": 30482, - "##道": 30483, - "##郎": 30484, - "##郔": 30485, - "##部": 30486, - "##都": 30487, - "##里": 30488, - "##野": 30489, - "##金": 30490, - "##鈓": 30491, - "##镇": 30492, - "##長": 30493, - "##門": 30494, - "##間": 30495, - "##阝": 30496, - "##阿": 30497, - "##陳": 30498, - "##陽": 30499, - "##雄": 30500, - "##青": 30501, - "##面": 30502, - "##風": 30503, - "##食": 30504, - "##香": 30505, - "##馬": 30506, - "##高": 30507, - "##龍": 30508, - "##é¾ø": 30509, - "##fi": 30510, - "##fl": 30511, - "##!": 30512, - "##(": 30513, - "##)": 30514, - "##,": 30515, - "##ļ¼": 30516, - "##ļ¼Ž": 30517, - "##ļ¼": 30518, - "##:": 30519, - "##?": 30520, - "##ļ½ž": 30521 - } - } -} \ No newline at end of file diff --git a/models-cache/Xenova/all-MiniLM-L6-v2/tokenizer_config.json b/models-cache/Xenova/all-MiniLM-L6-v2/tokenizer_config.json deleted file mode 100644 index 37fca747..00000000 --- a/models-cache/Xenova/all-MiniLM-L6-v2/tokenizer_config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "clean_up_tokenization_spaces": true, - "cls_token": "[CLS]", - "do_basic_tokenize": true, - "do_lower_case": true, - "mask_token": "[MASK]", - "model_max_length": 512, - "never_split": null, - "pad_token": "[PAD]", - "sep_token": "[SEP]", - "strip_accents": null, - "tokenize_chinese_chars": true, - "tokenizer_class": "BertTokenizer", - "unk_token": "[UNK]" -} diff --git a/package-lock.json b/package-lock.json index e812ea45..293b84fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,24 +10,20 @@ "license": "MIT", "dependencies": { "@msgpack/msgpack": "^3.1.2", - "@types/js-yaml": "^4.0.9", "boxen": "^8.0.1", "chalk": "^5.3.0", "chardet": "^2.0.0", "cli-table3": "^0.6.5", "commander": "^11.1.0", "csv-parse": "^6.1.0", - "exifr": "^7.1.3", "inquirer": "^12.9.3", "js-yaml": "^4.1.0", "mammoth": "^1.11.0", "mime": "^4.1.0", "ora": "^8.2.0", "pdfjs-dist": "^4.0.379", - "probe-image-size": "^7.2.3", "prompts": "^2.4.2", "roaring-wasm": "^1.1.0", - "uuid": "^9.0.1", "ws": "^8.18.3", "xlsx": "^0.18.5" }, @@ -40,9 +36,9 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-terser": "^0.4.4", "@testcontainers/redis": "^11.5.1", + "@types/js-yaml": "^4.0.9", "@types/mime": "^3.0.4", "@types/node": "^20.11.30", - "@types/probe-image-size": "^7.2.5", "@types/uuid": "^10.0.0", "@types/ws": "^8.18.1", "@typescript-eslint/eslint-plugin": "^8.0.0", @@ -54,6 +50,7 @@ "testcontainers": "^11.5.1", "tsx": "^4.19.2", "typescript": "^5.4.5", + "uuid": "^9.0.1", "vitest": "^3.2.4" }, "engines": { @@ -2496,6 +2493,7 @@ "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -2520,16 +2518,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/needle": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@types/needle/-/needle-3.3.0.tgz", - "integrity": "sha512-UFIuc1gdyzAqeVUYpSL+cliw2MmU/ZUhVZKE7Zo4wPbgc8hbljeKSnn6ls6iG8r5jpegPXLUIhJ+Wb2kLVs8cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { "version": "20.19.27", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", @@ -2554,17 +2542,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/probe-image-size": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@types/probe-image-size/-/probe-image-size-7.2.5.tgz", - "integrity": "sha512-9Bg6d/GNnjmhMMxadDstwrSlquuuLf0jQuPszbU6n3QUfybif3V/ryD3J2i9iaiC5JB/FU/8E41n88SM/UB+Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/needle": "*", - "@types/node": "*" - } - }, "node_modules/@types/raf": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", @@ -5403,12 +5380,6 @@ "bare-events": "^2.7.0" } }, - "node_modules/exifr": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/exifr/-/exifr-7.1.3.tgz", - "integrity": "sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw==", - "license": "MIT" - }, "node_modules/expect-type": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", @@ -6874,7 +6845,9 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/log-symbols": { "version": "6.0.0", @@ -7447,6 +7420,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/mute-stream": { @@ -7492,44 +7466,6 @@ "dev": true, "license": "MIT" }, - "node_modules/needle": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", - "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", - "license": "MIT", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -7920,17 +7856,6 @@ "node": ">= 0.8.0" } }, - "node_modules/probe-image-size": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", - "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", - "license": "MIT", - "dependencies": { - "lodash.merge": "^4.6.2", - "needle": "^2.5.2", - "stream-parser": "~0.3.1" - } - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -8504,6 +8429,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/semver": { @@ -8934,30 +8860,6 @@ "stream-chain": "^2.2.5" } }, - "node_modules/stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", - "license": "MIT", - "dependencies": { - "debug": "2" - } - }, - "node_modules/stream-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/stream-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/streamx": { "version": "2.23.0", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", @@ -9584,6 +9486,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/package.json b/package.json index eb333393..7df5df52 100644 --- a/package.json +++ b/package.json @@ -98,8 +98,6 @@ "lint:fix": "eslint --ext .ts,.js src/ --fix", "format": "prettier --write \"src/**/*.{ts,js}\"", "format:check": "prettier --check \"src/**/*.{ts,js}\"", - "migrate:logger": "tsx scripts/migrate-to-structured-logger.ts", - "migrate:logger:dry": "tsx scripts/migrate-to-structured-logger.ts --dry-run", "release": "./scripts/release.sh patch", "release:patch": "./scripts/release.sh patch", "release:minor": "./scripts/release.sh minor", @@ -160,9 +158,9 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-terser": "^0.4.4", "@testcontainers/redis": "^11.5.1", + "@types/js-yaml": "^4.0.9", "@types/mime": "^3.0.4", "@types/node": "^20.11.30", - "@types/probe-image-size": "^7.2.5", "@types/uuid": "^10.0.0", "@types/ws": "^8.18.1", "@typescript-eslint/eslint-plugin": "^8.0.0", @@ -174,28 +172,25 @@ "testcontainers": "^11.5.1", "tsx": "^4.19.2", "typescript": "^5.4.5", + "uuid": "^9.0.1", "vitest": "^3.2.4" }, "dependencies": { "@msgpack/msgpack": "^3.1.2", - "@types/js-yaml": "^4.0.9", "boxen": "^8.0.1", "chalk": "^5.3.0", "chardet": "^2.0.0", "cli-table3": "^0.6.5", "commander": "^11.1.0", "csv-parse": "^6.1.0", - "exifr": "^7.1.3", "inquirer": "^12.9.3", "js-yaml": "^4.1.0", "mammoth": "^1.11.0", "mime": "^4.1.0", "ora": "^8.2.0", "pdfjs-dist": "^4.0.379", - "probe-image-size": "^7.2.3", "prompts": "^2.4.2", "roaring-wasm": "^1.1.0", - "uuid": "^9.0.1", "ws": "^8.18.3", "xlsx": "^0.18.5" }, diff --git a/scripts/create-models-release.sh b/scripts/create-models-release.sh deleted file mode 100755 index 74d3ac99..00000000 --- a/scripts/create-models-release.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# Create GitHub release with unarchived model files for direct serving -# This allows transformers.js to download individual files directly - -set -e - -echo "šŸš€ Creating GitHub release with unarchived model files..." - -# Create temporary directory -TEMP_DIR=$(mktemp -d) -cd "$TEMP_DIR" - -echo "šŸ“„ Downloading existing model archive..." -curl -sL https://github.com/soulcraftlabs/brainy/releases/download/models-v1/all-MiniLM-L6-v2.tar.gz -o models.tar.gz - -echo "šŸ“¦ Extracting models..." -tar -xzf models.tar.gz - -echo "šŸ”§ Preparing individual model files for release..." - -# Create properly structured directory -mkdir -p release-files/Xenova/all-MiniLM-L6-v2/onnx - -# Copy files with correct naming for direct serving -cp all-MiniLM-L6-v2/config.json release-files/Xenova/all-MiniLM-L6-v2/ -cp all-MiniLM-L6-v2/tokenizer.json release-files/Xenova/all-MiniLM-L6-v2/ -cp all-MiniLM-L6-v2/tokenizer_config.json release-files/Xenova/all-MiniLM-L6-v2/ -cp all-MiniLM-L6-v2/onnx/model.onnx release-files/Xenova/all-MiniLM-L6-v2/onnx/ - -# Also keep the tar.gz for backward compatibility -cp models.tar.gz release-files/ - -echo "šŸ“‹ Files to upload:" -find release-files -type f -exec ls -lh {} \; - -echo "" -echo "āœ… Files ready for release!" -echo "" -echo "To create the release with individual files:" -echo "" -echo "1. Go to: https://github.com/soulcraftlabs/brainy/releases/new" -echo "2. Tag: models-v2" -echo "3. Title: Model Files v2 - Unarchived" -echo "4. Upload these files from $TEMP_DIR/release-files/:" -echo " - Xenova/all-MiniLM-L6-v2/config.json" -echo " - Xenova/all-MiniLM-L6-v2/tokenizer.json" -echo " - Xenova/all-MiniLM-L6-v2/tokenizer_config.json" -echo " - Xenova/all-MiniLM-L6-v2/onnx/model.onnx" -echo " - all-MiniLM-L6-v2.tar.gz (for compatibility)" -echo "" -echo "Or use GitHub CLI:" -echo " cd $TEMP_DIR/release-files" -echo " gh release create models-v2 --repo soulcraftlabs/brainy \\" -echo " --title 'Model Files v2 - Direct Serving' \\" -echo " --notes 'Unarchived model files for direct HTTP serving' \\" -echo " Xenova/all-MiniLM-L6-v2/config.json \\" -echo " Xenova/all-MiniLM-L6-v2/tokenizer.json \\" -echo " Xenova/all-MiniLM-L6-v2/tokenizer_config.json \\" -echo " Xenova/all-MiniLM-L6-v2/onnx/model.onnx \\" -echo " models.tar.gz" \ No newline at end of file diff --git a/scripts/diagnose-workshop-issue.ts b/scripts/diagnose-workshop-issue.ts deleted file mode 100644 index 332fb8a5..00000000 --- a/scripts/diagnose-workshop-issue.ts +++ /dev/null @@ -1,194 +0,0 @@ -/** - * Diagnostic script for Workshop type filtering issue - * - * This script mimics Workshop's exact import pattern to see what's happening - */ - -import { Brainy, NounType } from '../src/index.js' -import * as fs from 'fs' -import * as path from 'path' - -async function diagnose() { - console.log('\nšŸ”¬ Workshop Type Filtering Diagnostic\n') - console.log('='.repeat(70)) - - // Use temporary directory - const testDir = './test-workshop-data' - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true }) - } - - const brain = new Brainy({ - storage: { - type: 'filesystem', - path: testDir - } - }) - await brain.init() - - console.log('\n1ļøāƒ£ Testing WITHOUT VFS (control group)...\n') - - // Add entities without VFS - console.log('Adding 3 person entities directly...') - await brain.add({ data: 'Person 1', type: NounType.Person, metadata: { name: 'Person 1' } }) - await brain.add({ data: 'Person 2', type: NounType.Person, metadata: { name: 'Person 2' } }) - await brain.add({ data: 'Person 3', type: NounType.Person, metadata: { name: 'Person 3' } }) - - console.log('Adding 2 location entities directly...') - await brain.add({ data: 'Location 1', type: NounType.Location, metadata: { name: 'Location 1' } }) - await brain.add({ data: 'Location 2', type: NounType.Location, metadata: { name: 'Location 2' } }) - - console.log('\nšŸ“Š Testing type filtering on direct entities...\n') - - const allDirect = await brain.find({ limit: 100 }) - console.log(` Total entities: ${allDirect.length}`) - - const peopleDirect = await brain.find({ type: NounType.Person, limit: 100 }) - console.log(` Person filter: ${peopleDirect.length} (expected: 3)`) - - const locationsDirect = await brain.find({ type: NounType.Location, limit: 100 }) - console.log(` Location filter: ${locationsDirect.length} (expected: 2)`) - - if (peopleDirect.length === 3 && locationsDirect.length === 2) { - console.log('\n āœ… Type filtering works on direct entities!') - } else { - console.log('\n āŒ Type filtering BROKEN on direct entities!') - return - } - - console.log('\n' + '='.repeat(70)) - console.log('\n2ļøāƒ£ Testing WITH VFS (Workshop pattern)...\n') - - // Simulate Workshop's pattern: create VFS file entities - console.log('Creating VFS file wrappers (like import does)...') - - const vfs = brain.vfs() - await vfs.init() - - // Create VFS directory - await vfs.mkdir('/imports/test', { recursive: true }) - - // Create VFS files with embedded entity data (mimics import) - console.log('Creating VFS file for Person entity...') - const personEntityData = { - id: 'ent_person_test', - name: 'John Smith', - type: 'person', - metadata: { - source: 'excel', - originalData: { - Name: 'John Smith', - _sheet: 'Characters' - } - } - } - await vfs.writeFile( - '/imports/test/john_smith.json', - Buffer.from(JSON.stringify(personEntityData, null, 2)) - ) - - console.log('Creating VFS file for Location entity...') - const locationEntityData = { - id: 'ent_location_test', - name: 'New York', - type: 'location', - metadata: { - source: 'excel', - originalData: { - Name: 'New York', - _sheet: 'Places' - } - } - } - await vfs.writeFile( - '/imports/test/new_york.json', - Buffer.from(JSON.stringify(locationEntityData, null, 2)) - ) - - console.log('\nšŸ“Š Checking what entities exist now...\n') - - const allWithVfs = await brain.find({ limit: 100 }) - console.log(` Total entities: ${allWithVfs.length}`) - - // Analyze entity types - const typeCounts: Record = {} - for (const result of allWithVfs) { - const type = result.type || 'unknown' - typeCounts[type] = (typeCounts[type] || 0) + 1 - } - - console.log('\n Entity types breakdown:') - for (const [type, count] of Object.entries(typeCounts)) { - console.log(` - ${type}: ${count}`) - } - - console.log('\nšŸ“Š Testing type filtering with VFS entities...\n') - - const peopleWithVfs = await brain.find({ type: NounType.Person, limit: 100 }) - console.log(` Person filter: ${peopleWithVfs.length} (expected: 3 direct + maybe VFS?)`) - - const locationsWithVfs = await brain.find({ type: NounType.Location, limit: 100 }) - console.log(` Location filter: ${locationsWithVfs.length} (expected: 2 direct + maybe VFS?)`) - - const documents = await brain.find({ type: NounType.Document, limit: 100 }) - console.log(` Document filter: ${documents.length} (VFS wrappers?)`) - - console.log('\n' + '='.repeat(70)) - console.log('\n3ļøāƒ£ Analyzing VFS wrapper structure...\n') - - // Get a VFS wrapper entity - const vfsWrapper = allWithVfs.find(e => e.metadata?.vfsType === 'file') - if (vfsWrapper) { - console.log('Found VFS wrapper entity:') - console.log(` - ID: ${vfsWrapper.id}`) - console.log(` - Type: ${vfsWrapper.type}`) - console.log(` - VFS Type: ${vfsWrapper.metadata?.vfsType}`) - console.log(` - Has rawData: ${!!vfsWrapper.metadata?.rawData}`) - console.log(` - Path: ${vfsWrapper.metadata?.path}`) - - if (vfsWrapper.metadata?.rawData) { - console.log('\n Decoding rawData...') - try { - const decoded = Buffer.from(vfsWrapper.metadata.rawData, 'base64').toString() - const entity = JSON.parse(decoded) - console.log(` - Embedded entity name: ${entity.name}`) - console.log(` - Embedded entity type: ${entity.type}`) - console.log(` - Wrapper type: ${vfsWrapper.type}`) - console.log('\n šŸ” KEY INSIGHT:') - console.log(` Wrapper has type="${vfsWrapper.type}"`) - console.log(` But embedded entity has type="${entity.type}"`) - console.log(' When you filter by person, you get the WRAPPER type, not embedded type!') - } catch (err) { - console.log(' āŒ Failed to decode rawData') - } - } - } else { - console.log('No VFS wrapper entities found') - } - - console.log('\n' + '='.repeat(70)) - console.log('\n4ļøāƒ£ DIAGNOSIS\n') - - if (documents.length > 0 && peopleWithVfs.length === 3) { - console.log('āŒ FOUND THE BUG!') - console.log('') - console.log('VFS creates document wrappers with type="document".') - console.log('The actual entity data is stored as base64 in metadata.rawData.') - console.log('When you filter by type="person", you\'re filtering the WRAPPER type.') - console.log('Since wrappers are type="document", you get 0 results.') - console.log('') - console.log('This is a DESIGN ISSUE in how VFS import works!') - } else if (peopleWithVfs.length > 3) { - console.log('āœ… Type filtering works correctly!') - console.log('VFS entities are being created with proper types.') - } else { - console.log('šŸ¤” Unclear - need more investigation') - } - - console.log('\n' + '='.repeat(70) + '\n') - - // Cleanup - fs.rmSync(testDir, { recursive: true }) -} - -diagnose().catch(console.error) diff --git a/scripts/migrate-to-structured-logger.ts b/scripts/migrate-to-structured-logger.ts deleted file mode 100644 index 534ec026..00000000 --- a/scripts/migrate-to-structured-logger.ts +++ /dev/null @@ -1,323 +0,0 @@ -#!/usr/bin/env node - -/** - * Migration script to replace console.log statements with structured logger - * Usage: npm run migrate:logger [--dry-run] [--file=path/to/file.ts] - */ - -import * as fs from 'fs/promises' -import * as path from 'path' -import { glob } from 'glob' -import { fileURLToPath } from 'url' - -interface MigrationOptions { - dryRun: boolean - targetFile?: string - verbose: boolean -} - -interface MigrationResult { - file: string - changes: number - errors: string[] -} - -class LoggerMigrator { - private results: MigrationResult[] = [] - - constructor(private options: MigrationOptions) {} - - async migrate(): Promise { - console.log('šŸ”„ Starting logger migration...') - - const files = await this.getFilesToMigrate() - console.log(`Found ${files.length} TypeScript files to process`) - - for (const file of files) { - await this.migrateFile(file) - } - - this.printSummary() - } - - private async getFilesToMigrate(): Promise { - if (this.options.targetFile) { - return [this.options.targetFile] - } - - // Get all TypeScript files excluding node_modules, dist, and test files - const pattern = 'src/**/*.ts' - const ignore = [ - '**/node_modules/**', - '**/dist/**', - '**/*.test.ts', - '**/*.spec.ts', - '**/logger.ts', - '**/structuredLogger.ts' - ] - - return glob(pattern, { ignore }) - } - - private async migrateFile(filePath: string): Promise { - const result: MigrationResult = { - file: filePath, - changes: 0, - errors: [] - } - - try { - const content = await fs.readFile(filePath, 'utf-8') - const moduleName = this.extractModuleName(filePath) - - let modified = content - let changesMade = false - - // Check if file already imports logger - const hasLoggerImport = /import.*(?:createModuleLogger|structuredLogger).*from/.test(content) - const hasConsoleUsage = /console\.(log|warn|error|info|debug)/.test(content) - - if (!hasConsoleUsage) { - if (this.options.verbose) { - console.log(` ā­ļø ${filePath} - No console statements found`) - } - return - } - - // Add import if needed - if (!hasLoggerImport && hasConsoleUsage) { - modified = this.addLoggerImport(modified) - changesMade = true - } - - // Replace console statements - const patterns = [ - { - // console.log with string literal - pattern: /console\.log\s*\(\s*(['"`])([^'"`]*)\1\s*(?:,\s*(.+?))?\s*\)/g, - replacement: (match: string, quote: string, message: string, args?: string) => { - result.changes++ - return args - ? `logger.info('${message}', ${args})` - : `logger.info('${message}')` - } - }, - { - // console.error with string literal - pattern: /console\.error\s*\(\s*(['"`])([^'"`]*)\1\s*(?:,\s*(.+?))?\s*\)/g, - replacement: (match: string, quote: string, message: string, args?: string) => { - result.changes++ - return args - ? `logger.error('${message}', ${args})` - : `logger.error('${message}')` - } - }, - { - // console.warn with string literal - pattern: /console\.warn\s*\(\s*(['"`])([^'"`]*)\1\s*(?:,\s*(.+?))?\s*\)/g, - replacement: (match: string, quote: string, message: string, args?: string) => { - result.changes++ - return args - ? `logger.warn('${message}', ${args})` - : `logger.warn('${message}')` - } - }, - { - // console.info with string literal - pattern: /console\.info\s*\(\s*(['"`])([^'"`]*)\1\s*(?:,\s*(.+?))?\s*\)/g, - replacement: (match: string, quote: string, message: string, args?: string) => { - result.changes++ - return args - ? `logger.info('${message}', ${args})` - : `logger.info('${message}')` - } - }, - { - // console.debug with string literal - pattern: /console\.debug\s*\(\s*(['"`])([^'"`]*)\1\s*(?:,\s*(.+?))?\s*\)/g, - replacement: (match: string, quote: string, message: string, args?: string) => { - result.changes++ - return args - ? `logger.debug('${message}', ${args})` - : `logger.debug('${message}')` - } - } - ] - - // Apply replacements - for (const { pattern, replacement } of patterns) { - const before = modified - modified = modified.replace(pattern, replacement as any) - if (before !== modified) { - changesMade = true - } - } - - // Handle complex console statements that need manual review - const complexPatterns = [ - /console\.(log|warn|error|info|debug)\s*\([^'"`]/g - ] - - for (const pattern of complexPatterns) { - const matches = modified.match(pattern) - if (matches) { - for (const match of matches) { - result.errors.push(`Complex console statement needs manual review: ${match.substring(0, 50)}...`) - - // Add a TODO comment for manual review - modified = modified.replace( - match, - `// TODO: Migrate to structured logger\n ${match}` - ) - } - } - } - - // Add logger declaration after imports - if (changesMade && !hasLoggerImport) { - const importEndMatch = modified.match(/^((?:import.*\n)+)/m) - if (importEndMatch) { - const afterImports = importEndMatch.index! + importEndMatch[0].length - modified = - modified.slice(0, afterImports) + - `\nconst logger = createModuleLogger('${moduleName}')\n` + - modified.slice(afterImports) - } - } - - // Write changes - if (changesMade && !this.options.dryRun) { - await fs.writeFile(filePath, modified, 'utf-8') - console.log(` āœ… ${filePath} - ${result.changes} changes`) - } else if (changesMade) { - console.log(` šŸ” ${filePath} - ${result.changes} changes (dry run)`) - } - - this.results.push(result) - - } catch (error) { - result.errors.push(`Failed to process file: ${error}`) - this.results.push(result) - } - } - - private addLoggerImport(content: string): string { - // Find the last import statement - const importMatches = [...content.matchAll(/^import.*$/gm)] - - if (importMatches.length > 0) { - const lastImport = importMatches[importMatches.length - 1] - const insertPos = lastImport.index! + lastImport[0].length - - const relativeImportPath = this.getRelativeImportPath() - const importStatement = `\nimport { createModuleLogger } from '${relativeImportPath}'` - - return content.slice(0, insertPos) + importStatement + content.slice(insertPos) - } - - // No imports found, add at the beginning - const relativeImportPath = this.getRelativeImportPath() - return `import { createModuleLogger } from '${relativeImportPath}'\n\n${content}` - } - - private getRelativeImportPath(): string { - // This will be calculated based on the file being processed - // For now, return a placeholder - return '../utils/structuredLogger.js' - } - - private extractModuleName(filePath: string): string { - // Extract module name from file path - const relativePath = path.relative('src', filePath) - const moduleName = relativePath - .replace(/\.ts$/, '') - .replace(/\//g, ':') - .replace(/\\+/g, ':') - - return moduleName - } - - private printSummary(): void { - console.log('\nšŸ“Š Migration Summary:') - console.log('=' .repeat(50)) - - let totalChanges = 0 - let totalErrors = 0 - let filesWithChanges = 0 - let filesWithErrors = 0 - - for (const result of this.results) { - if (result.changes > 0) { - filesWithChanges++ - totalChanges += result.changes - } - if (result.errors.length > 0) { - filesWithErrors++ - totalErrors += result.errors.length - - console.log(`\nāš ļø ${result.file}:`) - for (const error of result.errors) { - console.log(` - ${error}`) - } - } - } - - console.log('\nšŸ“ˆ Statistics:') - console.log(` Files processed: ${this.results.length}`) - console.log(` Files modified: ${filesWithChanges}`) - console.log(` Total changes: ${totalChanges}`) - console.log(` Files with errors: ${filesWithErrors}`) - console.log(` Total errors: ${totalErrors}`) - - if (this.options.dryRun) { - console.log('\nāš ļø This was a dry run. No files were modified.') - console.log('Run without --dry-run to apply changes.') - } - - if (totalErrors > 0) { - console.log('\nāš ļø Some console statements need manual review.') - console.log('Search for "TODO: Migrate to structured logger" in the code.') - } - } -} - -// Parse command line arguments -function parseArgs(): MigrationOptions { - const args = process.argv.slice(2) - const options: MigrationOptions = { - dryRun: false, - verbose: false - } - - for (const arg of args) { - if (arg === '--dry-run') { - options.dryRun = true - } else if (arg === '--verbose' || arg === '-v') { - options.verbose = true - } else if (arg.startsWith('--file=')) { - options.targetFile = arg.split('=')[1] - } - } - - return options -} - -// Main execution -async function main() { - const options = parseArgs() - const migrator = new LoggerMigrator(options) - - try { - await migrator.migrate() - } catch (error) { - console.error('Migration failed:', error) - process.exit(1) - } -} - -// Run if executed directly -if (import.meta.url === `file://${process.argv[1]}`) { - main().catch(console.error) -} - -export { LoggerMigrator, MigrationOptions } \ No newline at end of file diff --git a/scripts/migrate-vfs-storage.ts b/scripts/migrate-vfs-storage.ts deleted file mode 100644 index dd7c8f1f..00000000 --- a/scripts/migrate-vfs-storage.ts +++ /dev/null @@ -1,269 +0,0 @@ -/** - * VFS Storage Migration Script: v5.1.x → v5.2.0 - * - * Converts VFS files from 3-tier storage (inline/reference/chunked) - * to unified BlobStorage (content-addressable with deduplication) - * - * Usage: - * import { migrateVFSStorage } from './scripts/migrate-vfs-storage' - * await migrateVFSStorage(brain) - */ - -import { Brainy } from '../src/brainy.js' -import { VFSMetadata } from '../src/vfs/types.js' - -export interface MigrationStats { - filesProcessed: number - inlineMigrated: number - referenceMigrated: number - chunkedMigrated: number - alreadyMigrated: number - errors: number - deduplicated: number - totalSizeBefore: number - totalSizeAfter: number - durationMs: number -} - -export async function migrateVFSStorage( - brain: Brainy, - options: { - dryRun?: boolean - verbose?: boolean - batchSize?: number - } = {} -): Promise { - const { dryRun = false, verbose = false, batchSize = 100 } = options - - const stats: MigrationStats = { - filesProcessed: 0, - inlineMigrated: 0, - referenceMigrated: 0, - chunkedMigrated: 0, - alreadyMigrated: 0, - errors: 0, - deduplicated: 0, - totalSizeBefore: 0, - totalSizeAfter: 0, - durationMs: 0 - } - - const startTime = Date.now() - - if (verbose) { - console.log('šŸ”„ Starting VFS storage migration (v5.1.x → v5.2.0)') - if (dryRun) console.log(' DRY RUN: No changes will be made') - } - - try { - // Find all VFS file entities - const files = await brain.find({ - where: { 'metadata.vfsType': 'file' }, - limit: 100000 // Large limit to get all files - }) - - if (verbose) { - console.log(`šŸ“ Found ${files.length} VFS files to process`) - } - - // Process in batches - for (let i = 0; i < files.length; i += batchSize) { - const batch = files.slice(i, i + batchSize) - - await Promise.all(batch.map(async (file) => { - try { - stats.filesProcessed++ - - const metadata = file.metadata as VFSMetadata - const storage = metadata.storage - - // Already migrated? - if (storage?.type === 'blob') { - stats.alreadyMigrated++ - if (verbose && stats.filesProcessed % 100 === 0) { - console.log(` āœ“ ${metadata.path} (already migrated)`) - } - return - } - - let buffer: Buffer | null = null - let sizeBefore = 0 - - // Migrate based on old storage type - if (!storage || storage.type === 'inline') { - // Inline storage: content in metadata.rawData - if (metadata.rawData) { - buffer = Buffer.from(metadata.rawData, 'base64') - sizeBefore = buffer.length - stats.inlineMigrated++ - - if (verbose && stats.filesProcessed % 100 === 0) { - console.log(` → ${metadata.path} (inline, ${sizeBefore} bytes)`) - } - } - } else if (storage.type === 'reference') { - // Reference storage: content stored as separate entity - if (storage.key) { - const contentEntity = await brain.get(storage.key) - if (contentEntity && contentEntity.data) { - buffer = Buffer.isBuffer(contentEntity.data) - ? contentEntity.data - : Buffer.from(contentEntity.data as string) - sizeBefore = buffer.length - stats.referenceMigrated++ - - if (verbose && stats.filesProcessed % 100 === 0) { - console.log(` → ${metadata.path} (reference, ${sizeBefore} bytes)`) - } - - // Delete old reference entity (unless dry run) - if (!dryRun) { - await brain.delete(storage.key) - } - } - } - } else if (storage.type === 'chunked') { - // Chunked storage: content split across multiple entities - if (storage.chunks && storage.chunks.length > 0) { - const chunkBuffers = await Promise.all( - storage.chunks.map(async (chunkId) => { - const chunkEntity = await brain.get(chunkId) - if (chunkEntity && chunkEntity.data) { - return Buffer.isBuffer(chunkEntity.data) - ? chunkEntity.data - : Buffer.from(chunkEntity.data as string) - } - return Buffer.alloc(0) - }) - ) - - buffer = Buffer.concat(chunkBuffers) - sizeBefore = buffer.length - stats.chunkedMigrated++ - - if (verbose && stats.filesProcessed % 100 === 0) { - console.log(` → ${metadata.path} (chunked, ${storage.chunks.length} chunks, ${sizeBefore} bytes)`) - } - - // Delete old chunk entities (unless dry run) - if (!dryRun) { - await Promise.all(storage.chunks.map(id => brain.delete(id))) - } - } - } - - // Store in BlobStorage - if (buffer) { - stats.totalSizeBefore += sizeBefore - - if (!dryRun) { - // Write to BlobStorage (content-addressable) - const blobHash = await brain.vfs['blobStorage'].write(buffer) - - // Check if deduplicated - const blobMeta = await brain.vfs['blobStorage'].getMetadata(blobHash) - if (blobMeta && blobMeta.refCount > 1) { - stats.deduplicated++ - } - - // Update VFS metadata - await brain.update(file.id, { - metadata: { - ...metadata, - storage: { - type: 'blob', - hash: blobHash, - size: buffer.length, - compressed: blobMeta?.compressed - } - } - }) - - stats.totalSizeAfter += blobMeta?.compressedSize || buffer.length - } else { - // Dry run: just count sizes - stats.totalSizeAfter += buffer.length - } - } - } catch (error) { - stats.errors++ - if (verbose) { - console.error(` āœ— Error migrating ${file.metadata?.path}: ${error.message}`) - } - } - })) - - if (verbose && i + batchSize < files.length) { - const progress = Math.round(((i + batchSize) / files.length) * 100) - console.log(` Progress: ${progress}% (${i + batchSize}/${files.length})`) - } - } - - stats.durationMs = Date.now() - startTime - - if (verbose) { - console.log('\nāœ… Migration complete!\n') - console.log('šŸ“Š Statistics:') - console.log(` Files processed: ${stats.filesProcessed}`) - console.log(` Inline migrated: ${stats.inlineMigrated}`) - console.log(` Reference migrated: ${stats.referenceMigrated}`) - console.log(` Chunked migrated: ${stats.chunkedMigrated}`) - console.log(` Already migrated: ${stats.alreadyMigrated}`) - console.log(` Deduplicated: ${stats.deduplicated}`) - console.log(` Errors: ${stats.errors}`) - console.log(` Size before: ${formatBytes(stats.totalSizeBefore)}`) - console.log(` Size after: ${formatBytes(stats.totalSizeAfter)}`) - console.log(` Space saved: ${formatBytes(stats.totalSizeBefore - stats.totalSizeAfter)}`) - console.log(` Duration: ${stats.durationMs}ms`) - - if (dryRun) { - console.log('\nāš ļø DRY RUN: No changes were made') - } - } - - return stats - } catch (error) { - if (verbose) { - console.error('āŒ Migration failed:', error) - } - throw error - } -} - -function formatBytes(bytes: number): string { - if (bytes === 0) return '0 Bytes' - - const k = 1024 - const sizes = ['Bytes', 'KB', 'MB', 'GB'] - const i = Math.floor(Math.log(bytes) / Math.log(k)) - - return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i] -} - -/** - * Auto-detect and migrate if needed - * Called automatically on brain.init() if old format detected - */ -export async function autoMigrateIfNeeded(brain: Brainy): Promise { - try { - // Check for old format files - const oldFormatFiles = await brain.find({ - where: { - 'metadata.vfsType': 'file', - 'metadata.storage.type': { $in: ['inline', 'reference', 'chunked'] } - }, - limit: 1 - }) - - if (oldFormatFiles.length > 0) { - console.log('šŸ”„ Detected v5.1.x VFS storage format. Auto-migrating to v5.2.0...') - await migrateVFSStorage(brain, { verbose: true }) - return true - } - - return false - } catch (error) { - console.error('āŒ Auto-migration failed:', error) - return false - } -} diff --git a/scripts/setup-github-models.sh b/scripts/setup-github-models.sh deleted file mode 100644 index 0e0b7b52..00000000 --- a/scripts/setup-github-models.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -# Setup GitHub branch with extracted model files for direct serving -# This creates a 'models' branch with uncompressed files that transformers.js can use directly - -set -e - -echo "šŸš€ Setting up GitHub models branch for reliable model serving..." - -# Create a temporary directory for our work -TEMP_DIR=$(mktemp -d) -cd "$TEMP_DIR" - -echo "šŸ“„ Downloading model tar.gz from release..." -curl -sL https://github.com/soulcraftlabs/brainy/releases/download/models-v1/all-MiniLM-L6-v2.tar.gz -o models.tar.gz - -echo "šŸ“¦ Extracting models..." -tar -xzf models.tar.gz - -echo "šŸ”§ Setting up models branch..." -git clone https://github.com/soulcraftlabs/brainy.git --depth 1 -b main repo -cd repo - -# Create orphan branch for models (no history needed) -git checkout --orphan models -git rm -rf . 2>/dev/null || true - -# Create the proper directory structure for transformers.js -mkdir -p Xenova/all-MiniLM-L6-v2/onnx - -# Copy model files with correct structure -cp ../all-MiniLM-L6-v2/config.json Xenova/all-MiniLM-L6-v2/ -cp ../all-MiniLM-L6-v2/tokenizer.json Xenova/all-MiniLM-L6-v2/ -cp ../all-MiniLM-L6-v2/tokenizer_config.json Xenova/all-MiniLM-L6-v2/ -cp ../all-MiniLM-L6-v2/onnx/model.onnx Xenova/all-MiniLM-L6-v2/onnx/ -cp ../all-MiniLM-L6-v2/onnx/model_quantized.onnx Xenova/all-MiniLM-L6-v2/onnx/ 2>/dev/null || true - -# Add README explaining this branch -cat > README.md << 'EOF' -# Brainy Model Files - -This branch contains extracted model files for direct serving via raw.githubusercontent.com - -## Structure -``` -Xenova/ - all-MiniLM-L6-v2/ - config.json - tokenizer.json - tokenizer_config.json - onnx/ - model.onnx - model_quantized.onnx -``` - -## Usage -These files are automatically loaded by Brainy when models are needed. -The URL pattern is: -`https://raw.githubusercontent.com/soulcraftlabs/brainy/models/Xenova/all-MiniLM-L6-v2/{file}` - -## DO NOT EDIT -This branch is managed automatically. Do not edit files directly. -EOF - -# Create .gitattributes for LFS if needed (for large model files) -cat > .gitattributes << 'EOF' -*.onnx filter=lfs diff=lfs merge=lfs -text -*.bin filter=lfs diff=lfs merge=lfs -text -*.safetensors filter=lfs diff=lfs merge=lfs -text -EOF - -echo "šŸ“ Creating commit..." -git add . -git commit -m "feat: extracted model files for direct GitHub serving - -- Xenova/all-MiniLM-L6-v2 model files -- Proper directory structure for transformers.js -- Direct serving via raw.githubusercontent.com" - -echo "āœ… Models branch ready!" -echo "" -echo "To push this branch to GitHub, run:" -echo " cd $TEMP_DIR/repo" -echo " git push origin models" -echo "" -echo "Once pushed, models will be available at:" -echo " https://raw.githubusercontent.com/soulcraftlabs/brainy/models/Xenova/all-MiniLM-L6-v2/config.json" -echo " https://raw.githubusercontent.com/soulcraftlabs/brainy/models/Xenova/all-MiniLM-L6-v2/tokenizer.json" -echo " etc..." \ No newline at end of file diff --git a/scripts/test-with-memory.sh b/scripts/test-with-memory.sh deleted file mode 100755 index 65c772ee..00000000 --- a/scripts/test-with-memory.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# Run tests with adequate memory for transformer models -echo "🧠 Running Brainy tests with 8GB heap allocation" -echo "This is required for the transformer model (ONNX runtime)" -echo "================================================" - -# Set memory allocation -export NODE_OPTIONS='--max-old-space-size=8192' - -# Run tests based on argument -if [ "$1" = "single" ]; then - echo "Running tests sequentially (memory-safe)..." - npx vitest run --pool=forks --poolOptions.forks.maxForks=1 --reporter=dot -elif [ "$1" = "quick" ]; then - echo "Running quick test..." - node test-quick.js -elif [ "$1" = "core" ]; then - echo "Running core tests only..." - npx vitest run tests/core.test.ts --reporter=verbose -else - echo "Running full test suite..." - echo "Note: This requires 8GB+ RAM available" - npm test -fi - -echo "" -echo "Test complete. Memory was allocated at 8GB for ONNX runtime." \ No newline at end of file diff --git a/scripts/update-augmentations-metadata.sh b/scripts/update-augmentations-metadata.sh deleted file mode 100644 index 3eaf3a82..00000000 --- a/scripts/update-augmentations-metadata.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash - -# Script to update all augmentations with metadata declarations - -echo "šŸ“ Updating augmentations with metadata declarations..." - -# Category 1: No metadata access ('none') -echo "🚫 Updating 'none' metadata augmentations..." - -# RequestDeduplicatorAugmentation -sed -i "/export class RequestDeduplicatorAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'none' as const // Doesn't access metadata" \ - src/augmentations/requestDeduplicatorAugmentation.ts - -# ConnectionPoolAugmentation -sed -i "/export class ConnectionPoolAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'none' as const // Doesn't access metadata" \ - src/augmentations/connectionPoolAugmentation.ts - -# StorageAugmentation (abstract class) -sed -i "/export abstract class StorageAugmentation extends BaseAugmentation/a\\ - readonly metadata = 'none' as const // Storage doesn't directly access metadata" \ - src/augmentations/storageAugmentation.ts - -# Category 2: Read-only access ('readonly') -echo "šŸ‘ Updating 'readonly' metadata augmentations..." - -# WALAugmentation -sed -i "/export class WALAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'readonly' as const // Reads metadata for logging" \ - src/augmentations/walAugmentation.ts - -# IndexAugmentation -sed -i "/export class IndexAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'readonly' as const // Reads metadata to build indexes" \ - src/augmentations/indexAugmentation.ts - -# MonitoringAugmentation -sed -i "/export class MonitoringAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'readonly' as const // Reads metadata for monitoring" \ - src/augmentations/monitoringAugmentation.ts - -# MetricsAugmentation -sed -i "/export class MetricsAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'readonly' as const // Reads metadata for metrics" \ - src/augmentations/metricsAugmentation.ts - -# BatchProcessingAugmentation -sed -i "/export class BatchProcessingAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'readonly' as const // Reads metadata for batching decisions" \ - src/augmentations/batchProcessingAugmentation.ts - -# EntityRegistryAugmentation -sed -i "/export class EntityRegistryAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'readonly' as const // Reads metadata to register entities" \ - src/augmentations/entityRegistryAugmentation.ts - -# AutoRegisterEntitiesAugmentation -sed -i "/export class AutoRegisterEntitiesAugmentation extends BaseAugmentation {/a\\ - readonly metadata = 'readonly' as const // Reads metadata for auto-registration" \ - src/augmentations/entityRegistryAugmentation.ts - -echo "āœ… Done updating augmentations!" \ No newline at end of file diff --git a/src/aggregation/AggregationIndex.ts b/src/aggregation/AggregationIndex.ts index c04d6374..37bd10ee 100644 --- a/src/aggregation/AggregationIndex.ts +++ b/src/aggregation/AggregationIndex.ts @@ -312,7 +312,7 @@ export class AggregationIndex { */ async init(): Promise { // Load persisted definitions - const savedDefs = await this.storage.getMetadata(DEFINITIONS_KEY) as any + const savedDefs = await this.storage.getMetadata(DEFINITIONS_KEY) if (savedDefs && typeof savedDefs === 'object' && savedDefs.definitions) { const defs = savedDefs.definitions as Array @@ -322,7 +322,7 @@ export class AggregationIndex { const savedHash = def._hash || '' // Load persisted state - const stateData = await this.storage.getMetadata(`${STATE_KEY_PREFIX}${def.name}__`) as any + const stateData = await this.storage.getMetadata(`${STATE_KEY_PREFIX}${def.name}__`) if (stateData && stateData.groups && savedHash === currentHash) { // Definition unchanged — load state const groupMap = new Map() @@ -349,11 +349,13 @@ export class AggregationIndex { // Restore native provider state from persistence if (this.nativeProvider?.restoreState) { - const nativeState = await this.storage.getMetadata('__aggregation_native_state__') as any + const nativeState = await this.storage.getMetadata('__aggregation_native_state__') if (nativeState && typeof nativeState === 'string') { this.nativeProvider.restoreState(nativeState) } else if (nativeState && typeof nativeState === 'object' && nativeState.data) { - this.nativeProvider.restoreState(nativeState.data) + // flush() persists `{ data: serializeState() }`, so `data` is the + // provider's serialized state string. + this.nativeProvider.restoreState(nativeState.data as string) } } } @@ -367,7 +369,7 @@ export class AggregationIndex { ...def, _hash: this.definitionHashes.get(def.name) })) - await this.storage.saveMetadata(DEFINITIONS_KEY, { definitions: defsToSave } as any) + await this.storage.saveMetadata(DEFINITIONS_KEY, { definitions: defsToSave }) // Persist dirty states for (const name of this.dirty) { @@ -376,7 +378,7 @@ export class AggregationIndex { const groups = Array.from(stateMap.values()) await this.storage.saveMetadata( `${STATE_KEY_PREFIX}${name}__`, - { groups } as any + { groups } ) } } @@ -386,7 +388,7 @@ export class AggregationIndex { const nativeState = this.nativeProvider.serializeState() await this.storage.saveMetadata( '__aggregation_native_state__', - { data: nativeState } as any + { data: nativeState } ) } @@ -613,7 +615,7 @@ export class AggregationIndex { // Apply where filter on group keys if (params.where && Object.keys(params.where).length > 0) { - if (!matchesMetadataFilter(group.groupKey as any, params.where)) continue + if (!matchesMetadataFilter(group.groupKey, params.where)) continue } // Compute result metrics from running state @@ -664,7 +666,7 @@ export class AggregationIndex { // HAVING: filter groups by computed metric values (post-compute, O(groups), before // sort/pagination). Reuses the where-operator engine over metrics + `count`. if (params.having && Object.keys(params.having).length > 0) { - if (!matchesMetadataFilter({ ...metrics, count: totalCount } as any, params.having)) continue + if (!matchesMetadataFilter({ ...metrics, count: totalCount }, params.having)) continue } results.push({ diff --git a/src/api/ConfigAPI.ts b/src/api/ConfigAPI.ts deleted file mode 100644 index 7e7647c5..00000000 --- a/src/api/ConfigAPI.ts +++ /dev/null @@ -1,262 +0,0 @@ -/** - * Configuration API for Brainy 3.0 - * Provides configuration storage with optional encryption - */ - -import { SecurityAPI } from './SecurityAPI.js' -import { StorageAdapter } from '../coreTypes.js' - -export interface ConfigOptions { - encrypt?: boolean - decrypt?: boolean -} - -export interface ConfigEntry { - key: string - value: any - encrypted: boolean - createdAt: number - updatedAt: number -} - -export class ConfigAPI { - private security: SecurityAPI - private configCache: Map = new Map() - private CONFIG_NOUN_PREFIX = '_config_' - - constructor(private storage: StorageAdapter) { - this.security = new SecurityAPI() - } - - /** - * Set a configuration value with optional encryption - */ - async set(params: { - key: string - value: any - encrypt?: boolean - }): Promise { - const { key, value, encrypt = false } = params - - // Serialize and optionally encrypt the value - let storedValue: any = value - if (typeof value !== 'string') { - storedValue = JSON.stringify(value) - } - - if (encrypt) { - storedValue = await this.security.encrypt(storedValue) - } - - // Create config entry - const entry: ConfigEntry = { - key, - value: storedValue, - encrypted: encrypt, - createdAt: this.configCache.get(key)?.createdAt || Date.now(), - updatedAt: Date.now() - } - - // Store in cache - this.configCache.set(key, entry) - - // Persist to storage as NounMetadata - const configId = this.CONFIG_NOUN_PREFIX + key - const nounMetadata = { - noun: 'config' as any, - ...entry, - service: 'config', - createdAt: entry.createdAt, - updatedAt: entry.updatedAt - } - await this.storage.saveNounMetadata(configId, nounMetadata) - } - - /** - * Get a configuration value with optional decryption - */ - async get(params: { - key: string - decrypt?: boolean - defaultValue?: any - }): Promise { - const { key, decrypt, defaultValue } = params - - // Check cache first - let entry = this.configCache.get(key) - - // If not in cache, load from storage - if (!entry) { - const configId = this.CONFIG_NOUN_PREFIX + key - const metadata = await this.storage.getNounMetadata(configId) - - if (!metadata) { - return defaultValue - } - - // Extract ConfigEntry from NounMetadata - const createdAtVal = typeof metadata.createdAt === 'object' && metadata.createdAt !== null && 'seconds' in metadata.createdAt - ? metadata.createdAt.seconds * 1000 + Math.floor((metadata.createdAt.nanoseconds || 0) / 1000000) - : ((metadata.createdAt as unknown as number) || Date.now()) - - const updatedAtVal = typeof metadata.updatedAt === 'object' && metadata.updatedAt !== null && 'seconds' in metadata.updatedAt - ? metadata.updatedAt.seconds * 1000 + Math.floor((metadata.updatedAt.nanoseconds || 0) / 1000000) - : ((metadata.updatedAt as unknown as number) || createdAtVal) - - entry = { - key: metadata.key as string, - value: metadata.value, - encrypted: metadata.encrypted as boolean, - createdAt: createdAtVal, - updatedAt: updatedAtVal - } - this.configCache.set(key, entry) - } - - let value = entry.value - - // Decrypt if needed - const shouldDecrypt = decrypt !== undefined ? decrypt : entry.encrypted - if (shouldDecrypt && entry.encrypted && typeof value === 'string') { - value = await this.security.decrypt(value) - } - - // Try to parse JSON if it looks like JSON - if (typeof value === 'string' && (value.startsWith('{') || value.startsWith('['))) { - try { - value = JSON.parse(value) - } catch { - // Not JSON, return as string - } - } - - return value - } - - /** - * Delete a configuration value - */ - async delete(key: string): Promise { - // Remove from cache - this.configCache.delete(key) - - // Remove from storage - const configId = this.CONFIG_NOUN_PREFIX + key - await this.storage.deleteNounMetadata(configId) - } - - /** - * List all configuration keys - */ - async list(): Promise { - // Get all nouns and filter for config entries - const result = await this.storage.getNouns({ pagination: { limit: 10000 } }) - - const configKeys: string[] = [] - for (const noun of result.items) { - if (noun.id.startsWith(this.CONFIG_NOUN_PREFIX)) { - configKeys.push(noun.id.substring(this.CONFIG_NOUN_PREFIX.length)) - } - } - - return configKeys - } - - /** - * Check if a configuration key exists - */ - async has(key: string): Promise { - if (this.configCache.has(key)) { - return true - } - - const configId = this.CONFIG_NOUN_PREFIX + key - const metadata = await this.storage.getNounMetadata(configId) - return metadata !== null && metadata !== undefined - } - - /** - * Clear all configuration - */ - async clear(): Promise { - // Clear cache - this.configCache.clear() - - // Clear from storage - const keys = await this.list() - for (const key of keys) { - await this.delete(key) - } - } - - /** - * Export all configuration - */ - async export(): Promise> { - const keys = await this.list() - const config: Record = {} - - for (const key of keys) { - const entry = await this.getEntry(key) - if (entry) { - config[key] = entry - } - } - - return config - } - - /** - * Import configuration - */ - async import(config: Record): Promise { - for (const [key, entry] of Object.entries(config)) { - this.configCache.set(key, entry) - const configId = this.CONFIG_NOUN_PREFIX + key - // Convert ConfigEntry to NounMetadata - const nounMetadata = { - noun: 'config' as any, - ...entry, - service: 'config', - createdAt: entry.createdAt, - updatedAt: entry.updatedAt - } - await this.storage.saveNounMetadata(configId, nounMetadata) - } - } - - /** - * Get raw config entry (without decryption) - */ - private async getEntry(key: string): Promise { - if (this.configCache.has(key)) { - return this.configCache.get(key)! - } - - const configId = this.CONFIG_NOUN_PREFIX + key - const metadata = await this.storage.getNounMetadata(configId) - - if (!metadata) { - return null - } - - // Extract ConfigEntry from NounMetadata - const createdAtVal = typeof metadata.createdAt === 'object' && metadata.createdAt !== null && 'seconds' in metadata.createdAt - ? metadata.createdAt.seconds * 1000 + Math.floor((metadata.createdAt.nanoseconds || 0) / 1000000) - : ((metadata.createdAt as unknown as number) || Date.now()) - - const updatedAtVal = typeof metadata.updatedAt === 'object' && metadata.updatedAt !== null && 'seconds' in metadata.updatedAt - ? metadata.updatedAt.seconds * 1000 + Math.floor((metadata.updatedAt.nanoseconds || 0) / 1000000) - : ((metadata.updatedAt as unknown as number) || createdAtVal) - - const entry: ConfigEntry = { - key: metadata.key as string, - value: metadata.value, - encrypted: metadata.encrypted as boolean, - createdAt: createdAtVal, - updatedAt: updatedAtVal - } - this.configCache.set(key, entry) - return entry - } -} \ No newline at end of file diff --git a/src/api/SecurityAPI.ts b/src/api/SecurityAPI.ts deleted file mode 100644 index d2c52c56..00000000 --- a/src/api/SecurityAPI.ts +++ /dev/null @@ -1,163 +0,0 @@ -/** - * Security API for Brainy 3.0 - * Provides encryption, decryption, hashing, and secure storage - */ - -export class SecurityAPI { - private encryptionKey?: Uint8Array - - constructor(private config?: { encryptionKey?: string }) { - if (config?.encryptionKey) { - // Use provided key (must be 32 bytes hex string) - this.encryptionKey = this.hexToBytes(config.encryptionKey) - } - } - - /** - * Encrypt data using AES-256-CBC - */ - async encrypt(data: string): Promise { - const crypto = await import('../universal/crypto.js') - - // Generate or use existing key - const key = this.encryptionKey || crypto.randomBytes(32) - const iv = crypto.randomBytes(16) - - const cipher = crypto.createCipheriv('aes-256-cbc', key, iv) - let encrypted = cipher.update(data, 'utf8', 'hex') - encrypted += cipher.final('hex') - - // Package encrypted data with metadata - // In production, store keys separately in a key management service - return JSON.stringify({ - encrypted, - key: this.bytesToHex(key), - iv: this.bytesToHex(iv), - algorithm: 'aes-256-cbc', - timestamp: Date.now() - }) - } - - /** - * Decrypt data encrypted with encrypt() - */ - async decrypt(encryptedData: string): Promise { - const crypto = await import('../universal/crypto.js') - - try { - const parsed = JSON.parse(encryptedData) - const { encrypted, key: keyHex, iv: ivHex, algorithm } = parsed - - if (algorithm && algorithm !== 'aes-256-cbc') { - throw new Error(`Unsupported encryption algorithm: ${algorithm}`) - } - - const key = this.hexToBytes(keyHex) - const iv = this.hexToBytes(ivHex) - - const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv) - let decrypted = decipher.update(encrypted, 'hex', 'utf8') - decrypted += decipher.final('utf8') - - return decrypted - } catch (error) { - throw new Error(`Decryption failed: ${(error as Error).message}`) - } - } - - /** - * Create a one-way hash of data (for passwords, etc) - */ - async hash(data: string, algorithm: 'sha256' | 'sha512' = 'sha256'): Promise { - const crypto = await import('../universal/crypto.js') - const hash = crypto.createHash(algorithm) - hash.update(data) - return hash.digest('hex') - } - - /** - * Compare data with a hash (for password verification) - */ - async compare(data: string, hash: string, algorithm: 'sha256' | 'sha512' = 'sha256'): Promise { - const dataHash = await this.hash(data, algorithm) - return this.constantTimeCompare(dataHash, hash) - } - - /** - * Generate a secure random token - */ - async generateToken(bytes: number = 32): Promise { - const crypto = await import('../universal/crypto.js') - const buffer = crypto.randomBytes(bytes) - return this.bytesToHex(buffer) - } - - /** - * Derive a key from a password using PBKDF2 - * Note: Simplified version using hash instead of PBKDF2 which may not be available - */ - async deriveKey(password: string, salt?: string, iterations: number = 100000): Promise<{ - key: string - salt: string - }> { - const crypto = await import('../universal/crypto.js') - const actualSalt = salt || this.bytesToHex(crypto.randomBytes(32)) - - // Simplified key derivation using repeated hashing - // In production, use a proper PBKDF2 implementation - let derived = password + actualSalt - for (let i = 0; i < Math.min(iterations, 1000); i++) { - const hash = crypto.createHash('sha256') - hash.update(derived) - derived = hash.digest('hex') - } - - return { - key: derived, - salt: actualSalt - } - } - - /** - * Sign data with HMAC - */ - async sign(data: string, secret?: string): Promise { - const crypto = await import('../universal/crypto.js') - const actualSecret = secret || (await this.generateToken()) - const hmac = crypto.createHmac('sha256', actualSecret) - hmac.update(data) - return hmac.digest('hex') - } - - /** - * Verify HMAC signature - */ - async verify(data: string, signature: string, secret: string): Promise { - const expectedSignature = await this.sign(data, secret) - return this.constantTimeCompare(signature, expectedSignature) - } - - // Helper methods - - private hexToBytes(hex: string): Uint8Array { - const matches = hex.match(/.{1,2}/g) - if (!matches) throw new Error('Invalid hex string') - return new Uint8Array(matches.map(byte => parseInt(byte, 16))) - } - - private bytesToHex(bytes: Uint8Array | Buffer): string { - return Array.from(bytes) - .map(b => b.toString(16).padStart(2, '0')) - .join('') - } - - private constantTimeCompare(a: string, b: string): boolean { - if (a.length !== b.length) return false - - let result = 0 - for (let i = 0; i < a.length; i++) { - result |= a.charCodeAt(i) ^ b.charCodeAt(i) - } - return result === 0 - } -} \ No newline at end of file diff --git a/src/api/UniversalImportAPI.ts b/src/api/UniversalImportAPI.ts deleted file mode 100644 index d996000c..00000000 --- a/src/api/UniversalImportAPI.ts +++ /dev/null @@ -1,930 +0,0 @@ -/** - * Universal Neural Import API - * - * ALWAYS uses neural matching to map ANY data to our strict NounTypes and VerbTypes - * Never falls back to rules - neural matching is MANDATORY - * - * Handles: - * - Strings (text, JSON, CSV, YAML, Markdown) - * - Files (local paths, any format) - uses MimeTypeDetector for 2000+ types - * - URLs (web pages, APIs, documents) - * - Objects (structured data) - * - Binary data (images, PDFs via extraction) - */ - -import { NounType, VerbType } from '../types/graphTypes.js' -import { Vector } from '../coreTypes.js' -import type { Brainy } from '../brainy.js' -import type { Entity, Relation } from '../types/brainy.types.js' -import { NeuralImportAugmentation } from '../neural/neuralImportAugmentation.js' -import { mimeDetector } from '../vfs/MimeTypeDetector.js' - -export interface ImportSource { - type: 'string' | 'file' | 'url' | 'object' | 'binary' - data: any - format?: string // Optional hint about format - metadata?: any // Additional context -} - -export interface NeuralImportResult { - entities: Array<{ - id: string - type: NounType - data: any - vector: Vector - confidence: number - metadata: any - }> - relationships: Array<{ - id: string - from: string - to: string - type: VerbType - weight: number - confidence: number - metadata?: any - }> - stats: { - totalProcessed: number - entitiesCreated: number - relationshipsCreated: number - averageConfidence: number - processingTimeMs: number - } -} - -export interface NeuralImportProgress { - phase: 'extracting' | 'storing-entities' | 'storing-relationships' | 'complete' - message: string - current: number - total: number - entities?: number - relationships?: number -} - -export class UniversalImportAPI { - private brain: Brainy - private neuralImport: NeuralImportAugmentation - private embedCache = new Map() - - constructor(brain: Brainy) { - this.brain = brain - this.neuralImport = new NeuralImportAugmentation({ - confidenceThreshold: 0.0, // Accept ALL confidence levels - never reject - enableWeights: true, - skipDuplicates: false // Process everything - }) - } - - /** - * Initialize the neural import system - */ - async init(): Promise { - // Neural import initializes itself - } - - /** - * Universal import - handles ANY data source - * ALWAYS uses neural matching, NEVER falls back - */ - async import( - source: ImportSource | string | any, - options?: { onProgress?: (progress: NeuralImportProgress) => void } - ): Promise { - const startTime = Date.now() - - // Normalize source - const normalizedSource = this.normalizeSource(source) - - options?.onProgress?.({ - phase: 'extracting', - message: 'Extracting data from source...', - current: 0, - total: 0 - }) - - // Extract data based on source type - const extractedData = await this.extractData(normalizedSource) - - // Neural processing - MANDATORY - const neuralResults = await this.neuralProcess(extractedData) - - // Store in brain - const result = await this.storeInBrain(neuralResults, options?.onProgress) - - result.stats.processingTimeMs = Date.now() - startTime - - options?.onProgress?.({ - phase: 'complete', - message: 'Import complete', - current: result.stats.entitiesCreated + result.stats.relationshipsCreated, - total: result.stats.totalProcessed, - entities: result.stats.entitiesCreated, - relationships: result.stats.relationshipsCreated - }) - - return result - } - - /** - * Import from URL - fetches and processes - */ - async importFromURL(url: string): Promise { - const response = await fetch(url) - const contentType = response.headers.get('content-type') || 'text/plain' - - let data: any - if (contentType.includes('json')) { - data = await response.json() - } else if (contentType.includes('text') || contentType.includes('html')) { - data = await response.text() - } else { - // Binary data - const buffer = await response.arrayBuffer() - data = new Uint8Array(buffer) - } - - return this.import({ - type: 'url', - data, - format: contentType, - metadata: { url, fetchedAt: Date.now() } - }) - } - - /** - * Import from file - reads and processes - * Note: In browser environment, use File API instead - * - * Uses MimeTypeDetector for comprehensive format detection (2000+ types) - */ - async importFromFile(filePath: string): Promise { - // Read the actual file content - const { readFileSync } = await import('node:fs') - - // Use MimeTypeDetector for comprehensive format detection - const mimeType = mimeDetector.detectMimeType(filePath) - const ext = filePath.split('.').pop()?.toLowerCase() || 'txt' - - try { - const fileContent = readFileSync(filePath, 'utf-8') - - return this.import({ - type: 'file', - data: fileContent, // Actual file content - format: ext, // Keep ext for backward compatibility - metadata: { - path: filePath, - mimeType, // Add detected MIME type - importedAt: Date.now(), - fileSize: fileContent.length - } - }) - } catch (error) { - throw new Error(`Failed to read file ${filePath}: ${(error as Error).message}`) - } - } - - /** - * Normalize any input to ImportSource - */ - private normalizeSource(source: any): ImportSource { - // Already normalized - if (source && typeof source === 'object' && 'type' in source && 'data' in source) { - return source as ImportSource - } - - // String input - if (typeof source === 'string') { - // Check if it's a URL - if (source.startsWith('http://') || source.startsWith('https://')) { - return { type: 'url', data: source } - } - - // Check if it looks like a file path - if (source.includes('/') || source.includes('\\') || source.includes('.')) { - // Assume it's a file path reference - return { type: 'file', data: source } - } - - // Treat as raw string data - return { type: 'string', data: source } - } - - // Object/Array input - if (typeof source === 'object') { - return { type: 'object', data: source } - } - - // Default to string - return { type: 'string', data: String(source) } - } - - /** - * Extract structured data from source - */ - private async extractData(source: ImportSource): Promise { - switch (source.type) { - case 'url': - // URL is in data field, need to fetch - return this.extractFromURL(source.data) - - case 'file': - // File path is in data field, need to read - return this.extractFromFile(source.data) - - case 'string': - return this.extractFromString(source.data, source.format) - - case 'object': - return Array.isArray(source.data) ? source.data : [source.data] - - case 'binary': - return this.extractFromBinary(source.data, source.format) - - default: - // Unknown type, treat as object - return [source.data] - } - } - - /** - * Extract data from URL - */ - private async extractFromURL(url: string): Promise { - const result = await this.importFromURL(url) - return result.entities.map(e => e.data) - } - - /** - * Extract data from file - */ - private async extractFromFile(filePath: string): Promise { - const result = await this.importFromFile(filePath) - return result.entities.map(e => e.data) - } - - /** - * Extract data from string based on format - */ - private extractFromString(data: string, format?: string): any[] { - // Try to detect format if not provided - const detectedFormat = format || this.detectFormat(data) - - switch (detectedFormat) { - case 'json': - try { - const parsed = JSON.parse(data) - return Array.isArray(parsed) ? parsed : [parsed] - } catch { - // Not valid JSON, treat as text - return this.extractFromText(data) - } - - case 'csv': - return this.parseCSV(data) - - case 'yaml': - case 'yml': - return this.parseYAML(data) - - case 'markdown': - case 'md': - return this.parseMarkdown(data) - - case 'xml': - case 'html': - return this.parseHTML(data) - - default: - return this.extractFromText(data) - } - } - - /** - * Extract from binary data (images, PDFs, etc) - */ - private async extractFromBinary(data: Uint8Array, format?: string): Promise { - // For now, create a single entity representing the binary data - // In production, would use OCR, image recognition, PDF extraction, etc. - return [{ - type: 'binary', - format: format || 'unknown', - size: data.length, - hash: await this.hashBinary(data), - extractedAt: Date.now() - }] - } - - /** - * Extract entities from plain text - */ - private extractFromText(text: string): any[] { - // Split into meaningful chunks - const chunks: any[] = [] - - // Split by paragraphs - const paragraphs = text.split(/\n\n+/) - for (const para of paragraphs) { - if (para.trim()) { - chunks.push({ - text: para.trim(), - type: 'paragraph', - length: para.length - }) - } - } - - // If no paragraphs, split by sentences - if (chunks.length === 0) { - const sentences = text.match(/[^.!?]+[.!?]+/g) || [text] - for (const sentence of sentences) { - if (sentence.trim()) { - chunks.push({ - text: sentence.trim(), - type: 'sentence', - length: sentence.length - }) - } - } - } - - return chunks - } - - /** - * Neural processing - CORE of the system - * ALWAYS uses embeddings and neural matching - */ - private async neuralProcess(data: any[]): Promise<{ - entities: Map - relationships: Map - }> { - const entities = new Map() - const relationships = new Map() - - for (const item of data) { - // Generate embedding for the item - const embedding = await this.generateEmbedding(item) - - // Determine noun type from data - const nounType = this.inferNounType(item) - const entityId = this.generateId(item) - - entities.set(entityId, { - id: entityId, - type: nounType, - data: item, - vector: embedding, - confidence: 1.0, - metadata: { - ...item, - _importedAt: Date.now() - } - }) - - // Detect relationships using neural matching - await this.detectNeuralRelationships(item, entityId, entities, relationships) - } - - return { entities, relationships } - } - - /** - * Generate embedding for any data - */ - private async generateEmbedding(data: any): Promise { - // Convert to string for embedding - const text = this.dataToText(data) - - // Check cache - if (this.embedCache.has(text)) { - return this.embedCache.get(text)! - } - - // Generate new embedding - const embedding = await (this.brain as any).embed(text) - - // Cache it - this.embedCache.set(text, embedding) - - return embedding - } - - /** - * Convert any data to text for embedding - */ - private dataToText(data: any): string { - if (typeof data === 'string') return data - - if (typeof data === 'object') { - // Extract meaningful text from object - const parts: string[] = [] - - // Priority fields - const priorityFields = ['name', 'title', 'description', 'text', 'content', 'label', 'value'] - for (const field of priorityFields) { - if (data[field]) { - parts.push(String(data[field])) - } - } - - // Add other fields - for (const [key, value] of Object.entries(data)) { - if (!priorityFields.includes(key) && value) { - if (typeof value === 'string' || typeof value === 'number') { - parts.push(`${key}: ${value}`) - } - } - } - - return parts.join(' ') - } - - return JSON.stringify(data) - } - - /** - * Detect relationships using neural matching - */ - private async detectNeuralRelationships( - item: any, - sourceId: string, - entities: Map, - relationships: Map - ): Promise { - if (typeof item !== 'object') return - - // Look for references to other entities - for (const [key, value] of Object.entries(item)) { - // Check if this looks like a reference - if (this.looksLikeReference(key, value)) { - const targetId = String(value) - const verbType = this.inferVerbType(key) - - const relationId = `${sourceId}_${verbType}_${targetId}` - relationships.set(relationId, { - id: relationId, - from: sourceId, - to: targetId, - type: verbType, - weight: 1.0, - confidence: 1.0, - metadata: { - field: key, - _importedAt: Date.now() - } - }) - } - - // Handle arrays of references - if (Array.isArray(value)) { - for (const arrayItem of value) { - if (this.looksLikeReference(key, arrayItem)) { - const targetId = String(arrayItem) - const verbType = this.inferVerbType(key) - - const relationId = `${sourceId}_${verbType}_${targetId}` - relationships.set(relationId, { - id: relationId, - from: sourceId, - to: targetId, - type: verbType, - weight: 1.0, - confidence: 1.0, - metadata: { - field: key, - array: true, - _importedAt: Date.now() - } - }) - } - } - } - } - } - - /** - * Check if a field looks like a reference - */ - private looksLikeReference(key: string, value: any): boolean { - // Field name patterns that suggest references - const refPatterns = [ - /[Ii]d$/, // ends with Id or id - /_id$/, // ends with _id - /^parent/i, // starts with parent - /^child/i, // starts with child - /^related/i, // starts with related - /^ref/i, // starts with ref - /^link/i, // starts with link - /^target/i, // starts with target - /^source/i, // starts with source - ] - - // Check if field name matches patterns - const fieldLooksLikeRef = refPatterns.some(pattern => pattern.test(key)) - - // Check if value looks like an ID - const valueLooksLikeId = ( - typeof value === 'string' || - typeof value === 'number' - ) && String(value).length > 0 - - return fieldLooksLikeRef && valueLooksLikeId - } - - /** - * Infer noun type from object structure using field heuristics - */ - private inferNounType(obj: any): NounType { - if (typeof obj !== 'object' || obj === null) return NounType.Thing - - // Check for explicit type field - if (obj.type && typeof obj.type === 'string') { - const normalized = obj.type.charAt(0).toUpperCase() + obj.type.slice(1) - if (Object.values(NounType).includes(normalized as NounType)) { - return normalized as NounType - } - } - - // Person heuristics - if (obj.email || obj.firstName || obj.lastName || obj.username || obj.age) { - return NounType.Person - } - // Organization heuristics - if (obj.companyName || obj.organizationId || obj.employees || obj.industry) { - return NounType.Organization - } - // Location heuristics - if (obj.latitude || obj.longitude || obj.address || obj.city || obj.country) { - return NounType.Location - } - // Document heuristics - if ((obj.content && (obj.title || obj.author)) || obj.documentType || obj.pages) { - return NounType.Document - } - // Event heuristics - if (obj.startTime || obj.endTime || obj.date || obj.eventType || obj.attendees) { - return NounType.Event - } - // Product heuristics - if (obj.price || obj.sku || obj.inventory || obj.productId) { - return NounType.Product - } - // Task heuristics - if ((obj.status && (obj.assignee || obj.dueDate)) || obj.priority || obj.completed !== undefined) { - return NounType.Task - } - // Dataset heuristics - if (Array.isArray(obj.data) || obj.rows || obj.columns || obj.schema) { - return NounType.Dataset - } - - return NounType.Thing - } - - /** - * Infer verb type from field name using common patterns - */ - private inferVerbType(fieldName: string): VerbType { - const field = fieldName.toLowerCase() - - if (field.includes('parent') || field.includes('child') || field.includes('contain')) { - return VerbType.Contains - } - if (field.includes('owner') || field.includes('created') || field.includes('author')) { - return VerbType.Creates - } - if (field.includes('member') || field.includes('belong')) { - return VerbType.MemberOf - } - if (field.includes('depend') || field.includes('require')) { - return VerbType.DependsOn - } - if (field.includes('ref') || field.includes('link') || field.includes('source')) { - return VerbType.References - } - - return VerbType.RelatedTo - } - - /** - * Store processed data in brain - */ - private async storeInBrain( - neuralResults: { - entities: Map - relationships: Map - }, - onProgress?: (progress: NeuralImportProgress) => void - ): Promise { - const result: NeuralImportResult = { - entities: [], - relationships: [], - stats: { - totalProcessed: neuralResults.entities.size + neuralResults.relationships.size, - entitiesCreated: 0, - relationshipsCreated: 0, - averageConfidence: 0, - processingTimeMs: 0 - } - } - - let totalConfidence = 0 - - // Store entities - onProgress?.({ - phase: 'storing-entities', - message: 'Storing entities...', - current: 0, - total: neuralResults.entities.size - }) - - let entitiesProcessed = 0 - for (const entity of neuralResults.entities.values()) { - // Subtype precedence: extractor-set → `'extracted'` (this is the universal - // neural-extraction path, so `'extracted'` is the honest provenance label). - // Added 7.30.1 so enforcement consumers don't get rejected on auto-extraction. - const id = await this.brain.add({ - data: entity.data, - type: entity.type, - subtype: (entity as any).subtype ?? 'extracted', - metadata: entity.metadata, - vector: entity.vector - }) - - // Update entity ID for relationship mapping - entity.id = id - - result.entities.push({ - ...entity, - id - }) - - result.stats.entitiesCreated++ - totalConfidence += entity.confidence - entitiesProcessed++ - - // Report progress periodically - if (entitiesProcessed % 10 === 0 || entitiesProcessed === neuralResults.entities.size) { - onProgress?.({ - phase: 'storing-entities', - message: `Storing entities: ${entitiesProcessed}/${neuralResults.entities.size}`, - current: entitiesProcessed, - total: neuralResults.entities.size, - entities: entitiesProcessed - }) - } - } - - // Store relationships using batch processing - if (neuralResults.relationships.size > 0) { - onProgress?.({ - phase: 'storing-relationships', - message: 'Preparing relationships...', - current: 0, - total: neuralResults.relationships.size - }) - - // Collect all relationship parameters. Subtype `extracted` matches the - // entity-side label so consumers can query "everything from this neural pass" - // via `(type, subtype: 'extracted')` (added 7.30.1). - const relationshipParams: Array<{from: string; to: string; type: VerbType; subtype?: string; weight?: number; metadata?: any}> = [] - - for (const relation of neuralResults.relationships.values()) { - // Map to actual entity IDs - const sourceEntity = Array.from(neuralResults.entities.values()) - .find(e => e.id === relation.from) - const targetEntity = Array.from(neuralResults.entities.values()) - .find(e => e.id === relation.to) - - if (sourceEntity && targetEntity) { - relationshipParams.push({ - from: sourceEntity.id, - to: targetEntity.id, - type: relation.type, - subtype: (relation as any).subtype ?? 'extracted', - weight: relation.weight, - metadata: relation.metadata - }) - totalConfidence += relation.confidence - } - } - - // Batch create relationships with progress - if (relationshipParams.length > 0) { - const relationshipIds = await this.brain.relateMany({ - items: relationshipParams, - parallel: true, - chunkSize: 100, - continueOnError: true, - onProgress: (done, total) => { - onProgress?.({ - phase: 'storing-relationships', - message: `Building relationships: ${done}/${total}`, - current: done, - total: total, - entities: result.stats.entitiesCreated, - relationships: done - }) - } - }) - - // Map results back - relationshipIds.forEach((id, index) => { - if (id && relationshipParams[index]) { - result.relationships.push({ - id, - from: relationshipParams[index].from, - to: relationshipParams[index].to, - type: relationshipParams[index].type, - weight: relationshipParams[index].weight || 1, - confidence: 0.5, // Default confidence - metadata: relationshipParams[index].metadata - }) - } - }) - - result.stats.relationshipsCreated = relationshipIds.length - } - } - - // Calculate average confidence - const totalItems = result.stats.entitiesCreated + result.stats.relationshipsCreated - result.stats.averageConfidence = totalItems > 0 ? totalConfidence / totalItems : 0 - - return result - } - - // Helper methods for parsing different formats - - private detectFormat(data: string): string { - const trimmed = data.trim() - - // JSON - if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || - (trimmed.startsWith('[') && trimmed.endsWith(']'))) { - return 'json' - } - - // CSV (has commas and newlines) - if (trimmed.includes(',') && trimmed.includes('\n')) { - return 'csv' - } - - // YAML (has colons and indentation) - if (trimmed.includes(':') && (trimmed.includes('\n ') || trimmed.includes('\n\t'))) { - return 'yaml' - } - - // Markdown (has headers) - if (trimmed.includes('#') || trimmed.includes('```')) { - return 'markdown' - } - - // HTML/XML - if (trimmed.includes('<') && trimmed.includes('>')) { - return trimmed.toLowerCase().includes(' l.trim()) - if (lines.length === 0) return [] - - const headers = lines[0].split(',').map(h => h.trim()) - const results = [] - - for (let i = 1; i < lines.length; i++) { - const values = lines[i].split(',').map(v => v.trim()) - const obj: any = {} - headers.forEach((header, index) => { - obj[header] = values[index] || '' - }) - results.push(obj) - } - - return results - } - - private parseYAML(data: string): any[] { - // Simple YAML parser - const results = [] - const lines = data.split('\n') - let current: any = null - - for (const line of lines) { - const trimmed = line.trim() - if (!trimmed || trimmed.startsWith('#')) continue - - if (trimmed.startsWith('- ')) { - // Array item - const value = trimmed.substring(2) - if (!current) { - results.push(value) - } else { - if (!current._items) current._items = [] - current._items.push(value) - } - } else if (trimmed.includes(':')) { - // Key-value - const [key, ...valueParts] = trimmed.split(':') - const value = valueParts.join(':').trim() - - if (!current) { - current = {} - results.push(current) - } - current[key.trim()] = value - } - } - - return results.length > 0 ? results : [{ text: data }] - } - - private parseMarkdown(data: string): any[] { - const results = [] - const lines = data.split('\n') - - let current: any = null - let inCodeBlock = false - - for (const line of lines) { - if (line.startsWith('```')) { - inCodeBlock = !inCodeBlock - if (inCodeBlock && current) { - current.code = '' - } - continue - } - - if (inCodeBlock && current) { - current.code += line + '\n' - } else if (line.startsWith('#')) { - // Header - const level = line.match(/^#+/)?.[0].length || 1 - const text = line.replace(/^#+\s*/, '') - current = { - type: 'heading', - level, - text - } - results.push(current) - } else if (line.trim()) { - // Paragraph - if (!current || current.type !== 'paragraph') { - current = { - type: 'paragraph', - text: '' - } - results.push(current) - } - current.text += line + ' ' - } - } - - return results - } - - private parseHTML(data: string): any[] { - // Simple HTML text extraction - const text = data - .replace(/)<[^<]*)*<\/script>/gi, '') // Remove scripts - .replace(/)<[^<]*)*<\/style>/gi, '') // Remove styles - .replace(/<[^>]+>/g, ' ') // Remove tags - .replace(/\s+/g, ' ') // Normalize whitespace - .trim() - - return this.extractFromText(text) - } - - private generateId(data: any): string { - // Generate deterministic ID based on content - const text = this.dataToText(data) - const hash = this.simpleHash(text) - return `import_${hash}_${Date.now()}` - } - - private simpleHash(text: string): string { - let hash = 0 - for (let i = 0; i < text.length; i++) { - const char = text.charCodeAt(i) - hash = ((hash << 5) - hash) + char - hash = hash & hash - } - return Math.abs(hash).toString(36) - } - - private async hashBinary(data: Uint8Array): Promise { - // Simple binary hash - let hash = 0 - for (let i = 0; i < Math.min(data.length, 1000); i++) { - hash = ((hash << 5) - hash) + data[i] - hash = hash & hash - } - return Math.abs(hash).toString(36) - } -} \ No newline at end of file diff --git a/src/brainy.ts b/src/brainy.ts index 7cd45eb1..212c5c83 100644 --- a/src/brainy.ts +++ b/src/brainy.ts @@ -10,8 +10,11 @@ import { JsHnswVectorIndex } from './hnsw/hnswIndex.js' // TypeAwareHNSWIndex removed from default path — single unified JsHnswVectorIndex is faster // for the 99% of queries that don't filter by type (avoids searching 42 separate graphs) import { createStorage } from './storage/storageFactory.js' +import type { StorageOptions } from './storage/storageFactory.js' +import type { MetadataWriteBuffer } from './utils/metadataWriteBuffer.js' import { BaseStorage } from './storage/baseStorage.js' import { StorageAdapter, Vector, DistanceFunction, EmbeddingFunction, GraphVerb, STANDARD_ENTITY_FIELDS } from './coreTypes.js' +import type { HNSWNounWithMetadata, HNSWVerbWithMetadata } from './coreTypes.js' import { defaultEmbeddingFunction, cosineDistance, @@ -41,6 +44,7 @@ import type { import { ConnectionsCodec } from './hnsw/connectionsCodec.js' import { TransactionManager } from './transaction/TransactionManager.js' import { RevisionConflictError } from './transaction/RevisionConflictError.js' +import { EntityNotFoundError, RelationNotFoundError } from './errors/notFound.js' import { ValidationConfig, validateAddParams, @@ -86,10 +90,11 @@ import { UpdateRelationParams, FindParams, SimilarParams, - GetRelationsParams, + RelatedParams, GetOptions, AddManyParams, - DeleteManyParams, + RemoveManyParams, + UpdateManyParams, RelateManyParams, BatchResult, BrainyConfig, @@ -105,7 +110,7 @@ import { splitVerbMetadataRecord } from './types/reservedFields.js' import { BrainyInterface } from './types/brainyInterface.js' -import type { IntegrationHub } from './integrations/core/IntegrationHub.js' +import type { IntegrationHub, IntegrationHubConfig } from './integrations/core/IntegrationHub.js' import { MigrationRunner } from './migration/MigrationRunner.js' import type { MigrationPreview, MigrationResult, MigrateOptions } from './migration/types.js' import { AggregationIndex } from './aggregation/AggregationIndex.js' @@ -147,6 +152,71 @@ const STOPWORDS = new Set([ 'what', 'which', 'who', 'whom', 'whose', 'am' ]) +/** + * Optional capabilities a plugin-provided `'vector'` engine may expose beyond + * the built-in {@link JsHnswVectorIndex} surface ({@link VectorIndexProvider} + * declares neither). Every call site feature-detects with + * `typeof x === 'function'` before invoking, so an engine without these hooks + * is fully supported. + */ +interface VectorIndexOptionalHooks { + /** Switch persistence mode at runtime (bulk-ingest optimization). */ + setPersistMode?: (mode: 'immediate' | 'deferred') => void + /** Release engine resources (timers, file handles, native memory). */ + close?: () => Promise | void +} + +/** + * Optional lifecycle hook a plugin-provided `'metadataIndex'` implementation + * may expose beyond the built-in {@link MetadataIndexManager} surface. + * Feature-detected with `typeof x === 'function'` before invoking. + */ +interface MetadataIndexOptionalHooks { + /** Release index resources (timers, native memory). */ + close?: () => Promise | void +} + +/** + * Optional progressive-initialization surface implemented by cloud storage + * adapters (plugin-provided in 8.0 — the built-in filesystem/memory adapters + * complete their full init synchronously inside `init()` and don't expose + * these). Feature-detected with `typeof x === 'function'` before invoking. + */ +interface StorageBackgroundInitHooks { + /** Whether all background init tasks (bucket validation, count sync) finished. */ + isBackgroundInitComplete?: () => boolean + /** Resolves when all background init tasks complete. */ + awaitBackgroundInit?: () => Promise +} + +/** + * Brainy's internal resolved configuration. `normalizeConfig()` defaults every + * field at construction except the genuinely-optional ones listed in the + * `Pick`, which legitimately stay `undefined` when the consumer omitted them — + * every read site handles that explicitly (`?.` chains and + * `!== undefined` guards). + */ +type ResolvedBrainyConfig = Required< + Omit< + BrainyConfig, + | 'distributed' + | 'maxQueryLimit' + | 'reservedQueryMemory' + | 'vector' + | 'plugins' + | 'integrations' + > +> & + Pick< + BrainyConfig, + | 'distributed' + | 'maxQueryLimit' + | 'reservedQueryMemory' + | 'vector' + | 'plugins' + | 'integrations' + > + /** * Result type for brain.diagnostics() */ @@ -242,7 +312,7 @@ export class Brainy implements BrainyInterface { }> private embedder: EmbeddingFunction private distance: DistanceFunction - private config: Required + private config: ResolvedBrainyConfig /** * Bounded warm cache for verb-int → verb-id resolution (8.0 u64 contract). @@ -382,7 +452,7 @@ export class Brainy implements BrainyInterface { * - Does NOT acquire the writer lock — coexists with a live writer process * and with any number of other readers on the same data directory. * - Throws `Cannot mutate a read-only Brainy instance` from every mutation - * method (`add`, `addMany`, `update`, `delete`, `deleteMany`, `relate`, + * method (`add`, `addMany`, `update`, `remove`, `removeMany`, `relate`, * `unrelate`, `transact`, `restore`). * - Reflects the state of the writer's last successful `flush()`. To force * the writer to flush before opening, call `requestFlush()` on a separate @@ -554,11 +624,11 @@ export class Brainy implements BrainyInterface { // methods. We feature-detect each one rather than fail boot. if (this.config.mode !== 'reader') { const canLock = this.hasStorageMethod('supportsMultiProcessLocking') && - (this.storage as any).supportsMultiProcessLocking() + this.storage.supportsMultiProcessLocking() if (canLock && this.hasStorageMethod('acquireWriterLock')) { - await (this.storage as any).acquireWriterLock({ force: this.config.force }) + await this.storage.acquireWriterLock({ force: this.config.force }) if (this.hasStorageMethod('startFlushRequestWatcher')) { - (this.storage as any).startFlushRequestWatcher(async () => { + this.storage.startFlushRequestWatcher(async () => { if (this.initialized) { await this.flush() } @@ -567,7 +637,7 @@ export class Brainy implements BrainyInterface { } else if (!this.config.silent) { // Older adapter OR a backend that doesn't enforce locking (cloud / memory). // Surface this so operators know the multi-process protections aren't active. - const backendName = (this.storage.constructor as any).name || 'storage' + const backendName = this.storage.constructor.name || 'storage' if (backendName === 'MemoryStorage') { // Memory is single-process by construction — no warning needed. } else if (!this.hasStorageMethod('supportsMultiProcessLocking')) { @@ -701,7 +771,7 @@ export class Brainy implements BrainyInterface { } else { const [, graphIndex] = await Promise.all([ this.metadataIndex.init(), - (this.storage as any).getGraphIndex() + this.storage.getGraphIndex() ]) this.graphIndex = graphIndex } @@ -774,8 +844,8 @@ export class Brainy implements BrainyInterface { // Initialize the content-addressed blob store before VFS — the VFS // stores all file content through it. - if (typeof (this.storage as any).initializeBlobStorage === 'function') { - await (this.storage as any).initializeBlobStorage() + if (typeof this.storage.initializeBlobStorage === 'function') { + await this.storage.initializeBlobStorage() } // Log provider summary after all wiring is complete @@ -828,7 +898,14 @@ export class Brainy implements BrainyInterface { this._hub = await IntegrationHub.create(this, { basePath: hubConfig.basePath, enable: hubConfig.enable, - config: hubConfig.config as any // Type flexibility for user config + // Boundary: the public `IntegrationsConfig['config']` (docs-facing, + // src/types/brainy.types.ts) and the hub's internal + // `IntegrationHubConfig['config']` evolved as separate declarations. + // The hub passes per-integration overrides through verbatim, so the + // shapes are runtime-compatible, but TypeScript's weak-type check + // rejects the bridge (e.g. `webhooks.maxRetries` exists only on the + // public side). + config: hubConfig.config as unknown as IntegrationHubConfig['config'] }) } @@ -868,8 +945,8 @@ export class Brainy implements BrainyInterface { // Flush all buffered data, then close to release resources (timers, handles) await Promise.all([ (async () => { - if (instance.storage && typeof (instance.storage as any).flushCounts === 'function') { - await (instance.storage as any).flushCounts() + if (instance.storage && typeof instance.storage.flushCounts === 'function') { + await instance.storage.flushCounts() } })(), (async () => { @@ -883,8 +960,8 @@ export class Brainy implements BrainyInterface { } })(), (async () => { - if (instance.index && typeof (instance.index as any).flush === 'function') { - await (instance.index as any).flush() + if (instance.index && typeof instance.index.flush === 'function') { + await instance.index.flush() } })() ]) @@ -896,13 +973,15 @@ export class Brainy implements BrainyInterface { } })(), (async () => { - if (instance.index && typeof (instance.index as any).close === 'function') { - await (instance.index as any).close() + const index = instance.index as JsHnswVectorIndex & VectorIndexOptionalHooks + if (index && typeof index.close === 'function') { + await index.close() } })(), (async () => { - if (instance.metadataIndex && typeof (instance.metadataIndex as any).close === 'function') { - await (instance.metadataIndex as any).close() + const metadataIndex = instance.metadataIndex as MetadataIndexManager & MetadataIndexOptionalHooks + if (metadataIndex && typeof metadataIndex.close === 'function') { + await metadataIndex.close() } })(), // Release the writer lock so a successor process can take over. @@ -1034,7 +1113,7 @@ export class Brainy implements BrainyInterface { if (!this.initialized) return false // Check if storage has background init methods (cloud storage adapters) - const storage = this.storage as any + const storage = this.storage as BaseStorage & StorageBackgroundInitHooks if (typeof storage?.isBackgroundInitComplete === 'function') { return storage.isBackgroundInitComplete() } @@ -1076,7 +1155,7 @@ export class Brainy implements BrainyInterface { await this.ready // Check if storage has background init methods (cloud storage adapters) - const storage = this.storage as any + const storage = this.storage as BaseStorage & StorageBackgroundInitHooks if (typeof storage?.awaitBackgroundInit === 'function') { await storage.awaitBackgroundInit() } @@ -1274,7 +1353,7 @@ export class Brainy implements BrainyInterface { // Operation 3: Add to HNSW index (after entity saved) tx.addOperation( - new AddToHNSWOperation(this.index as any, id, vector) + new AddToHNSWOperation(this.index, id, vector) ) // Operation 4: Add to metadata index @@ -1387,7 +1466,7 @@ export class Brainy implements BrainyInterface { * - VFS operations (readFile, stat, readdir) - 100% of cases * - Existence checks: `if (await brain.get(id))` * - Metadata inspection: `entity.metadata`, `entity.data`, `entity.type` - * - Relationship traversal: `brain.getRelations({ from: id })` + * - Relationship traversal: `brain.related({ from: id })` * * **When to include vectors**: * - Computing similarity on this specific entity: `brain.similar({ to: entity.vector })` @@ -1964,7 +2043,7 @@ export class Brainy implements BrainyInterface { // 2. HNSW reindexing operations need the original vector const existing = await this.get(params.id, { includeVectors: true }) if (!existing) { - throw new Error(`Entity ${params.id} not found`) + throw new EntityNotFoundError(params.id) } // ifRev (7.31.0) — optimistic concurrency. If caller supplied ifRev, the persisted @@ -2057,10 +2136,10 @@ export class Brainy implements BrainyInterface { // Operation 3-4: Update HNSW index (remove and re-add if reindexing needed) if (needsReindexing) { tx.addOperation( - new RemoveFromHNSWOperation(this.index as any, params.id, existing.vector) + new RemoveFromHNSWOperation(this.index, params.id, existing.vector) ) tx.addOperation( - new AddToHNSWOperation(this.index as any, params.id, vector) + new AddToHNSWOperation(this.index, params.id, vector) ) } @@ -2110,22 +2189,25 @@ export class Brainy implements BrainyInterface { } /** - * Delete an entity and all its relationships + * Remove an entity and all its relationships * * Removes the entity from all indexes (HNSW vector index, MetadataIndex, * GraphAdjacencyIndex) and deletes all relationships where this entity * is the source or target. All operations are executed atomically. * - * @param id - UUID of the entity to delete. Silently returns for invalid/null IDs. + * Named `remove` to match the transact operation vocabulary + * (`{add, update, remove, relate, unrelate}`). + * + * @param id - UUID of the entity to remove. Silently returns for invalid/null IDs. * * @example * ```typescript - * await brain.delete(entityId) + * await brain.remove(entityId) * const entity = await brain.get(entityId) // null * ``` */ - async delete(id: string): Promise { - this.assertWritable('delete') + async remove(id: string): Promise { + this.assertWritable('remove') // Handle invalid IDs gracefully if (!id || typeof id !== 'string') { return // Silently return for invalid IDs @@ -2145,7 +2227,7 @@ export class Brainy implements BrainyInterface { // Operation 1: Remove from vector index if (noun) { tx.addOperation( - new RemoveFromHNSWOperation(this.index as any, id, noun.vector) + new RemoveFromHNSWOperation(this.index, id, noun.vector) ) } @@ -2435,8 +2517,8 @@ export class Brainy implements BrainyInterface { * type: VerbType.RelatedTo * }) * } catch (error) { - * if (error.message.includes('not found')) { - * console.log('One or both entities do not exist') + * if (error instanceof EntityNotFoundError) { + * console.log(`Entity does not exist: ${error.id}`) * // Handle missing entities... * } * } @@ -2463,10 +2545,10 @@ export class Brainy implements BrainyInterface { const toEntity = await this.get(params.to) if (!fromEntity) { - throw new Error(`Source entity ${params.from} not found`) + throw new EntityNotFoundError(params.from, `Source entity ${params.from} not found`) } if (!toEntity) { - throw new Error(`Target entity ${params.to} not found`) + throw new EntityNotFoundError(params.to, `Target entity ${params.to} not found`) } // CRITICAL FIX: Check for duplicate relationships @@ -2663,7 +2745,7 @@ export class Brainy implements BrainyInterface { * consistent. The relationship ID is preserved across the type change. * * @param params - Update parameters (`id` required; at least one field to change) - * @throws If the relationship doesn't exist + * @throws RelationNotFoundError if the relationship doesn't exist * * @example Change subtype * await brain.updateRelation({ id: relId, subtype: 'dotted-line' }) @@ -2686,11 +2768,13 @@ export class Brainy implements BrainyInterface { const existing = await this.storage.getVerb(params.id) if (!existing) { - throw new Error(`Relation ${params.id} not found`) + throw new RelationNotFoundError(params.id) } - const existingAny = existing as any - const newVerbType = params.type ?? existingAny.verb ?? existingAny.type + // Legacy stored shapes carried the verb type under `type` instead of the + // canonical `verb` field — read both, canonical first. + const existingRec: HNSWVerbWithMetadata & { type?: VerbType } = existing + const newVerbType = params.type ?? existingRec.verb ?? existingRec.type // Subtype pairing enforcement on update (7.30.0). The effective verb type after // the update may have changed; we check against the new type and the resulting @@ -2698,16 +2782,16 @@ export class Brainy implements BrainyInterface { if (params.subtype !== undefined || params.type !== undefined) { const effectiveSubtype = params.subtype !== undefined ? params.subtype - : (existingAny.subtype as string | undefined) - const effectiveMetadata = params.metadata ?? (existingAny.metadata as unknown) - this.enforceSubtypeOnRelate('updateRelation', newVerbType as VerbType, effectiveSubtype, effectiveMetadata) + : existingRec.subtype + const effectiveMetadata = params.metadata ?? existingRec.metadata + this.enforceSubtypeOnRelate('updateRelation', newVerbType, effectiveSubtype, effectiveMetadata) } - const typeChanged = params.type !== undefined && params.type !== (existingAny.verb ?? existingAny.type) + const typeChanged = params.type !== undefined && params.type !== (existingRec.verb ?? existingRec.type) // Merge metadata (mirror of update() for nouns) const newMetadata = params.merge !== false - ? { ...(existingAny.metadata || {}), ...(params.metadata || {}) } - : (params.metadata as any) || existingAny.metadata + ? { ...(existingRec.metadata || {}), ...(params.metadata || {}) } + : params.metadata || existingRec.metadata // Build updated stored metadata. System fields ALWAYS win — same shape as relate(). const updatedMetadata = { @@ -2715,37 +2799,37 @@ export class Brainy implements BrainyInterface { verb: newVerbType, ...(params.subtype !== undefined ? { subtype: params.subtype } - : existingAny.subtype !== undefined && { subtype: existingAny.subtype }), - weight: params.weight ?? existingAny.weight ?? 1.0, + : existingRec.subtype !== undefined && { subtype: existingRec.subtype }), + weight: params.weight ?? existingRec.weight ?? 1.0, ...(params.confidence !== undefined ? { confidence: params.confidence } - : existingAny.confidence !== undefined && { confidence: existingAny.confidence }), + : existingRec.confidence !== undefined && { confidence: existingRec.confidence }), // service/createdBy are fixed at relate() time — always carried forward // (omitting them here silently erased them on every updateRelation()). - ...(existingAny.service !== undefined && { service: existingAny.service }), - ...(existingAny.createdBy !== undefined && { createdBy: existingAny.createdBy }), - createdAt: existingAny.createdAt, + ...(existingRec.service !== undefined && { service: existingRec.service }), + ...(existingRec.createdBy !== undefined && { createdBy: existingRec.createdBy }), + createdAt: existingRec.createdAt, updatedAt: Date.now(), ...(params.data !== undefined ? { data: params.data } - : existingAny.data !== undefined && { data: existingAny.data }) + : existingRec.data !== undefined && { data: existingRec.data }) } // Build the verb view used by the graph index — top-level fields mirror relate()'s. const verbForIndex: GraphVerb = { id: params.id, - vector: existingAny.vector, - sourceId: existingAny.sourceId, - targetId: existingAny.targetId, + vector: existingRec.vector, + sourceId: existingRec.sourceId, + targetId: existingRec.targetId, verb: newVerbType, type: newVerbType, ...(params.subtype !== undefined ? { subtype: params.subtype } - : existingAny.subtype !== undefined && { subtype: existingAny.subtype }), + : existingRec.subtype !== undefined && { subtype: existingRec.subtype }), weight: updatedMetadata.weight, metadata: newMetadata, data: updatedMetadata.data, - createdAt: existingAny.createdAt + createdAt: existingRec.createdAt } // 8.0 BigInt boundary: endpoints are unchanged across a type swap, so one @@ -2786,31 +2870,34 @@ export class Brainy implements BrainyInterface { * @param paramsOrId - Optional string ID or parameters object * @returns Promise resolving to array of relationships * + * Named `related` to match the `Db.related()` surface — the same call works + * on a live brain and on a pinned `Db` view. + * * @example * ```typescript * // Get all relationships (first 100) - * const all = await brain.getRelations() + * const all = await brain.related() * * // Get relationships from specific entity (shorthand syntax) - * const fromEntity = await brain.getRelations(entityId) + * const fromEntity = await brain.related(entityId) * * // Get relationships with filters - * const filtered = await brain.getRelations({ + * const filtered = await brain.related({ * type: VerbType.FriendOf, * limit: 50 * }) * * // Pagination - * const page2 = await brain.getRelations({ offset: 100, limit: 100 }) + * const page2 = await brain.related({ offset: 100, limit: 100 }) * ``` * */ - async getRelations( - paramsOrId?: string | GetRelationsParams + async related( + paramsOrId?: string | RelatedParams ): Promise[]> { await this.ensureInitialized() - // Handle string ID shorthand: getRelations(id) -> getRelations({ from: id }) + // Handle string ID shorthand: related(id) -> related({ from: id }) const params = typeof paramsOrId === 'string' ? { from: paramsOrId } : (paramsOrId || {}) @@ -2821,7 +2908,7 @@ export class Brainy implements BrainyInterface { // Production safety: warn for large unfiltered queries if (!params.from && !params.to && !params.type && limit > 10000) { console.warn( - `[Brainy] getRelations(): Fetching ${limit} relationships without filters. ` + + `[Brainy] related(): Fetching ${limit} relationships without filters. ` + `Consider adding 'from', 'to', or 'type' filter for better performance.` ) } @@ -2863,7 +2950,7 @@ export class Brainy implements BrainyInterface { }) // Convert to Relation format - return this.verbsToRelations(result.items as any) + return this.verbsToRelations(result.items) } // ============= SEARCH & DISCOVERY ============= @@ -3224,9 +3311,9 @@ export class Brainy implements BrainyInterface { if (!flag) return false if (flag === true) return true // { except: [...] } form — strict except for listed types - if (typeof flag === 'object' && Array.isArray((flag as any).except)) { + if (typeof flag === 'object' && Array.isArray(flag.except)) { if (type === undefined || type === null) return true - return !(flag as any).except.includes(type) + return !flag.except.includes(type) } return false } @@ -4054,8 +4141,8 @@ export class Brainy implements BrainyInterface { * limit: 5 * }) * } catch (error) { - * if (error.message.includes('not found')) { - * console.log('Source entity does not exist') + * if (error instanceof EntityNotFoundError) { + * console.log(`Source entity does not exist: ${error.id}`) * // Handle missing source entity * } * } @@ -4070,7 +4157,7 @@ export class Brainy implements BrainyInterface { // Need vector for similarity, so use includeVectors: true const entity = await this.get(params.to, { includeVectors: true }) if (!entity) { - throw new Error(`Entity ${params.to} not found`) + throw new EntityNotFoundError(params.to) } targetVector = entity.vector } else if (Array.isArray(params.to)) { @@ -4194,7 +4281,7 @@ export class Brainy implements BrainyInterface { const { index } = itemsNeedingEmbedding[i] // Mutate the item to include the pre-computed vector // This way add() will skip embedding (vector already provided) - ;(params.items[index] as any).vector = vectors[i] + params.items[index].vector = vectors[i] } } @@ -4203,7 +4290,7 @@ export class Brainy implements BrainyInterface { // (each a read→gzip→atomic-write cycle). For 450 items that's ~8,100 // individual storage writes. Deferred mode collects dirty node IDs and // flushes once at the end — deduplicating repeated neighbor updates. - const index = this.index as any + const index = this.index as JsHnswVectorIndex & VectorIndexOptionalHooks const prevPersistMode = typeof index.getPersistMode === 'function' ? index.getPersistMode() : null @@ -4212,7 +4299,8 @@ export class Brainy implements BrainyInterface { && typeof index.flush === 'function' if (canDefer) { - index.setPersistMode('deferred') + // canDefer verified setPersistMode is a function just above. + index.setPersistMode!('deferred') } try { @@ -4273,10 +4361,13 @@ export class Brainy implements BrainyInterface { } } } finally { - // Restore persist mode and flush all dirty nodes in one pass - if (canDefer) { + // Restore persist mode and flush all dirty nodes in one pass. + // canDefer implies prevPersistMode === 'immediate', so the null re-check + // never fires at runtime — it narrows the type for the restore call. + if (canDefer && prevPersistMode !== null) { await index.flush() - index.setPersistMode(prevPersistMode) + // canDefer verified setPersistMode is a function before the try block. + index.setPersistMode!(prevPersistMode) } } @@ -4285,10 +4376,10 @@ export class Brainy implements BrainyInterface { } /** - * Delete multiple entities + * Remove multiple entities */ - async deleteMany(params: DeleteManyParams): Promise> { - this.assertWritable('deleteMany') + async removeMany(params: RemoveManyParams): Promise> { + this.assertWritable('removeMany') await this.ensureInitialized() // Determine what to delete @@ -4344,7 +4435,7 @@ export class Brainy implements BrainyInterface { // Add delete operations to transaction if (noun) { tx.addOperation( - new RemoveFromHNSWOperation(this.index as any, id, noun.vector) + new RemoveFromHNSWOperation(this.index, id, noun.vector) ) } @@ -4415,13 +4506,7 @@ export class Brainy implements BrainyInterface { /** * Update multiple entities with batch processing */ - async updateMany(params: { - items: UpdateParams[] - chunkSize?: number - parallel?: boolean - continueOnError?: boolean - onProgress?: (completed: number, total: number) => void - }): Promise> { + async updateMany(params: UpdateManyParams): Promise> { await this.ensureInitialized() const result: BatchResult = { @@ -4616,8 +4701,8 @@ export class Brainy implements BrainyInterface { // The index has LSMTree data and verbIdSet pointing to deleted entities. // Without this, relate()'s duplicate check uses stale data, potentially // allowing duplicate relationships or missing valid duplicates. - if (typeof (this.storage as any).invalidateGraphIndex === 'function') { - ;(this.storage as any).invalidateGraphIndex() + if (typeof this.storage.invalidateGraphIndex === 'function') { + this.storage.invalidateGraphIndex() } // Reset index @@ -4652,7 +4737,7 @@ export class Brainy implements BrainyInterface { this.graphIndex = clearGraphFactory(this.storage) this.storage.setGraphIndex(this.graphIndex) } else { - this.graphIndex = await (this.storage as any).getGraphIndex() + this.graphIndex = await this.storage.getGraphIndex() } this.wireGraphIdResolver() @@ -4667,16 +4752,22 @@ export class Brainy implements BrainyInterface { // Re-initialize the content-addressed blob store after storage.clear() // (clear() drops the BlobStorage instance). The VFS stores all file // content through it, so this must happen BEFORE VFS reinitialization. - if (typeof (this.storage as any).initializeBlobStorage === 'function') { - await (this.storage as any).initializeBlobStorage() + if (typeof this.storage.initializeBlobStorage === 'function') { + await this.storage.initializeBlobStorage() } // Reset VFS state - root entity was deleted by storage.clear() // Bug: VFS instance remained in memory pointing to deleted root entity if (this._vfs) { - // Clear PathResolver caches (including UnifiedCache VFS entries) - if ((this._vfs as any).pathResolver?.invalidateAllCaches) { - (this._vfs as any).pathResolver.invalidateAllCaches() + // Clear PathResolver caches (including UnifiedCache VFS entries). + // Boundary: peeks at VirtualFileSystem's private `pathResolver` member — + // VFS exposes no public cache-invalidation surface, and the resolver is + // about to be discarded with the VFS instance recreated below. + const vfsInternals = this._vfs as unknown as { + pathResolver?: { invalidateAllCaches?: () => void } + } + if (vfsInternals.pathResolver?.invalidateAllCaches) { + vfsInternals.pathResolver.invalidateAllCaches() } // Recreate and reinitialize VFS so it's ready for use this._vfs = new VirtualFileSystem(this) @@ -4807,7 +4898,7 @@ export class Brainy implements BrainyInterface { /** * @description The store's current generation — a monotonic u64 watermark * bumped once per committed `transact()` batch and once per - * single-operation write batch (`add`/`update`/`delete`/`relate`/…). + * single-operation write batch (`add`/`update`/`remove`/`relate`/…). * Persisted in `_system/generation.json`; never reused, including across * restarts and `restore()`. * @@ -4828,7 +4919,7 @@ export class Brainy implements BrainyInterface { * `transact()` batch, carrying the committed generation, the commit * timestamp, and the `meta` the transaction was submitted with. Entries * are returned newest first. Single-operation writes - * (`add`/`update`/`delete`/`relate`/…) advance the generation counter but + * (`add`/`update`/`remove`/`relate`/…) advance the generation counter but * do not append log entries (the documented 8.0 history granularity), and * `compactHistory()` never rewrites the log — entries may reference * generations whose record-sets were already reclaimed. @@ -4887,7 +4978,7 @@ export class Brainy implements BrainyInterface { * every operation applies and the store advances exactly ONE generation, * or none apply and the store is byte-identical to its pre-transaction * state. The semantics of each operation mirror the corresponding - * single-operation method (`add`/`update`/`delete`/`relate`/`unrelate`), + * single-operation method (`add`/`update`/`remove`/`relate`/`unrelate`), * including validation, subtype enforcement, per-entity `ifRev` CAS, * relationship deduplication, and delete cascades. Operations may * reference ids created by earlier operations of the same batch. @@ -5196,7 +5287,7 @@ export class Brainy implements BrainyInterface { store: this.generationStore, get: (id, options) => this.get(id, options), find: (query) => this.find(query), - getRelations: (paramsOrId) => this.getRelations(paramsOrId), + related: (paramsOrId) => this.related(paramsOrId), entityFromRecord: (id, record, includeVectors) => this.entityFromGenerationRecord(id, record, includeVectors), relationFromRecord: (id, record) => this.relationFromGenerationRecord(id, record), @@ -5515,7 +5606,7 @@ export class Brainy implements BrainyInterface { let closed = false return { find: (query) => reader.find(query), - getRelations: (paramsOrId) => reader.getRelations(paramsOrId), + related: (paramsOrId) => reader.related(paramsOrId), close: async () => { if (closed) return closed = true @@ -5677,7 +5768,7 @@ export class Brainy implements BrainyInterface { plan.operations.push( new SaveNounMetadataOperation(this.storage, id, storageMetadata, isNew), new SaveNounOperation(this.storage, { id, vector, connections: new Map(), level: 0 }, isNew), - new AddToHNSWOperation(this.index as any, id, vector), + new AddToHNSWOperation(this.index, id, vector), new AddToMetadataIndexOperation(this.metadataIndex, id, entityForIndexing) ) plan.touchedNouns.push(id) @@ -5711,7 +5802,7 @@ export class Brainy implements BrainyInterface { const existing = await this.planGetEntity(state, params.id, { includeVectors: true }) if (!existing) { - throw new Error(`Entity ${params.id} not found`) + throw new EntityNotFoundError(params.id) } if (params.subtype !== undefined || params.type !== undefined) { @@ -5807,8 +5898,8 @@ export class Brainy implements BrainyInterface { ) if (needsReindexing) { plan.operations.push( - new RemoveFromHNSWOperation(this.index as any, params.id, existing.vector), - new AddToHNSWOperation(this.index as any, params.id, vector) + new RemoveFromHNSWOperation(this.index, params.id, existing.vector), + new AddToHNSWOperation(this.index, params.id, vector) ) } plan.operations.push( @@ -5834,7 +5925,7 @@ export class Brainy implements BrainyInterface { } /** - * Plan one `{ op: 'remove' }` — mirror of `delete()`, including the + * Plan one `{ op: 'remove' }` — mirror of `remove()`, including the * relationship cascade (every edge where the entity is source or target, * plus edges created earlier in this batch). Returns the entity id. */ @@ -5876,7 +5967,7 @@ export class Brainy implements BrainyInterface { } if (noun) { - plan.operations.push(new RemoveFromHNSWOperation(this.index as any, id, noun.vector)) + plan.operations.push(new RemoveFromHNSWOperation(this.index, id, noun.vector)) } if (metadata) { plan.operations.push(new RemoveFromMetadataIndexOperation(this.metadataIndex, id, metadata)) @@ -5895,7 +5986,7 @@ export class Brainy implements BrainyInterface { plan.touchedNouns.push(id) if (metadata) { - // Canonical reserved/custom split — mirror of delete()'s aggregation hook. + // Canonical reserved/custom split — mirror of remove()'s aggregation hook. const { reserved, custom } = splitNounMetadataRecord(metadata) const entityForAgg = { type: reserved.noun, @@ -5935,10 +6026,10 @@ export class Brainy implements BrainyInterface { const fromEntity = await this.planGetEntity(state, params.from) const toEntity = await this.planGetEntity(state, params.to) if (!fromEntity) { - throw new Error(`Source entity ${params.from} not found`) + throw new EntityNotFoundError(params.from, `Source entity ${params.from} not found`) } if (!toEntity) { - throw new Error(`Target entity ${params.to} not found`) + throw new EntityNotFoundError(params.to, `Target entity ${params.to} not found`) } // Dedupe against earlier operations of this batch first… @@ -6216,7 +6307,7 @@ export class Brainy implements BrainyInterface { */ neural(): ImprovedNeuralAPI { if (!this._neural) { - this._neural = new ImprovedNeuralAPI(this as any) + this._neural = new ImprovedNeuralAPI(this) } return this._neural } @@ -6744,8 +6835,8 @@ export class Brainy implements BrainyInterface { await Promise.all([ // 1. Flush storage adapter counts (entity/verb counts by type) (async () => { - if (this.storage && typeof (this.storage as any).flushCounts === 'function') { - await (this.storage as any).flushCounts() + if (this.storage && typeof this.storage.flushCounts === 'function') { + await this.storage.flushCounts() } })(), @@ -6757,8 +6848,8 @@ export class Brainy implements BrainyInterface { // 4. Flush HNSW dirty nodes (deferred persistence mode) (async () => { - if (this.index && typeof (this.index as any).flush === 'function') { - await (this.index as any).flush() + if (this.index && typeof this.index.flush === 'function') { + await this.index.flush() } })(), @@ -6809,10 +6900,10 @@ export class Brainy implements BrainyInterface { return true } - if (typeof (this.storage as any).requestFlushOverFilesystem !== 'function') { + if (typeof this.storage.requestFlushOverFilesystem !== 'function') { return false } - return (this.storage as any).requestFlushOverFilesystem(timeoutMs) + return this.storage.requestFlushOverFilesystem(timeoutMs) } /** @@ -6942,9 +7033,9 @@ export class Brainy implements BrainyInterface { // 2. Field registry sanity. Empty field set + non-zero entities = stale reader. let fieldCount = 0 try { - if (typeof (this.metadataIndex as any).getFieldStatistics === 'function') { - const fs = await (this.metadataIndex as any).getFieldStatistics() as Map - fieldCount = fs.size + if (typeof this.metadataIndex.getFieldStatistics === 'function') { + const fieldStats = await this.metadataIndex.getFieldStatistics() + fieldCount = fieldStats.size } } catch { // ignore — metadata index doesn't expose stats @@ -7048,7 +7139,7 @@ export class Brainy implements BrainyInterface { const fieldPlan: Array<{ field: string; path: 'column-store' | 'sparse-chunked' | 'none'; notes?: string }> = [] const warnings: string[] = [] - const where = (params as any)?.where + const where = params?.where if (where && typeof where === 'object') { for (const field of Object.keys(where)) { const result = await this.metadataIndex.explainField(field) @@ -7088,11 +7179,11 @@ export class Brainy implements BrainyInterface { await this.ensureInitialized() const { NounTypeEnum, VerbTypeEnum } = await import('./types/graphTypes.js') - const nounCounts = typeof (this.storage as any).getNounCountsByType === 'function' - ? (this.storage as any).getNounCountsByType() as Uint32Array + const nounCounts = typeof this.storage.getNounCountsByType === 'function' + ? this.storage.getNounCountsByType() : new Uint32Array(0) - const verbCounts = typeof (this.storage as any).getVerbCountsByType === 'function' - ? (this.storage as any).getVerbCountsByType() as Uint32Array + const verbCounts = typeof this.storage.getVerbCountsByType === 'function' + ? this.storage.getVerbCountsByType() : new Uint32Array(0) const entitiesByType: Record = {} @@ -7116,8 +7207,8 @@ export class Brainy implements BrainyInterface { const metadataStats = await this.metadataIndex.getStats() let fieldRegistry: string[] = [] try { - if (typeof (this.metadataIndex as any).getFieldStatistics === 'function') { - const fieldStats = await (this.metadataIndex as any).getFieldStatistics() as Map + if (typeof this.metadataIndex.getFieldStatistics === 'function') { + const fieldStats = await this.metadataIndex.getFieldStatistics() fieldRegistry = Array.from(fieldStats.keys()).sort() } } catch { @@ -7129,7 +7220,9 @@ export class Brainy implements BrainyInterface { : null const storageBackend = this.storage.constructor.name - const rootDir = (this.storage as any).rootDir + // FileSystemStorage keeps its root directory in a `rootDir` member that + // BaseStorage doesn't declare; surfaced opportunistically for operators. + const rootDir = (this.storage as BaseStorage & { rootDir?: unknown }).rootDir return { mode: this.isReadOnly ? 'reader' : 'writer', @@ -7181,7 +7274,13 @@ export class Brainy implements BrainyInterface { const hnswSize = this.index.size() const metadataInitialized = !!this.metadataIndex const graphInitialized = !!this.graphIndex - const storageGraphIndex = (this.storage as any).graphIndex + // Boundary: identity-compares against BaseStorage's protected `graphIndex` + // member to report whether the live graph index is the storage-wired one. + // Diagnostics-only peek — the public accessor (`getGraphIndex()`) is async + // and lazily *creates* the index, which would defeat the wiring check. + const storageGraphIndex = (this.storage as unknown as { + graphIndex?: GraphAdjacencyIndex + }).graphIndex return { version: getBrainyVersion(), @@ -7562,8 +7661,8 @@ export class Brainy implements BrainyInterface { * // → 56 */ bySubtype: (type: NounType, subtype?: string): number | Record => { - const subtypeMap = typeof (this.storage as any).getSubtypeCountsByType === 'function' - ? (this.storage as any).getSubtypeCountsByType() as Map> + const subtypeMap = typeof this.storage.getSubtypeCountsByType === 'function' + ? this.storage.getSubtypeCountsByType() : null if (!subtypeMap) { return subtype !== undefined ? 0 : {} @@ -7593,8 +7692,8 @@ export class Brainy implements BrainyInterface { * // → [['customer', 847], ['employee', 56], ['vendor', 34]] */ topSubtypes: (type: NounType, n: number = 10): Array<[string, number]> => { - const subtypeMap = typeof (this.storage as any).getSubtypeCountsByType === 'function' - ? (this.storage as any).getSubtypeCountsByType() as Map> + const subtypeMap = typeof this.storage.getSubtypeCountsByType === 'function' + ? this.storage.getSubtypeCountsByType() : null if (!subtypeMap) return [] const typeIdx = TypeUtils.getNounIndex(type) @@ -7646,8 +7745,8 @@ export class Brainy implements BrainyInterface { * // → 12 */ byRelationshipSubtype: (verb: VerbType, subtype?: string): number | Record => { - const verbSubtypeMap = typeof (this.storage as any).getVerbSubtypeCountsByType === 'function' - ? (this.storage as any).getVerbSubtypeCountsByType() as Map> + const verbSubtypeMap = typeof this.storage.getVerbSubtypeCountsByType === 'function' + ? this.storage.getVerbSubtypeCountsByType() : null if (!verbSubtypeMap) { return subtype !== undefined ? 0 : {} @@ -7674,8 +7773,8 @@ export class Brainy implements BrainyInterface { * // → [['direct', 12], ['dotted-line', 3]] */ topRelationshipSubtypes: (verb: VerbType, n: number = 10): Array<[string, number]> => { - const verbSubtypeMap = typeof (this.storage as any).getVerbSubtypeCountsByType === 'function' - ? (this.storage as any).getVerbSubtypeCountsByType() as Map> + const verbSubtypeMap = typeof this.storage.getVerbSubtypeCountsByType === 'function' + ? this.storage.getVerbSubtypeCountsByType() : null if (!verbSubtypeMap) return [] const verbIdx = TypeUtils.getVerbIndex(verb) @@ -7822,8 +7921,8 @@ export class Brainy implements BrainyInterface { * // → ['customer', 'employee', 'vendor'] */ subtypesOf(type: NounType): string[] { - const subtypeMap = typeof (this.storage as any).getSubtypeCountsByType === 'function' - ? (this.storage as any).getSubtypeCountsByType() as Map> + const subtypeMap = typeof this.storage.getSubtypeCountsByType === 'function' + ? this.storage.getSubtypeCountsByType() : null if (!subtypeMap) return [] const typeIdx = TypeUtils.getNounIndex(type) @@ -7846,8 +7945,8 @@ export class Brainy implements BrainyInterface { * // → ['direct', 'dotted-line'] */ relationshipSubtypesOf(verb: VerbType): string[] { - const verbSubtypeMap = typeof (this.storage as any).getVerbSubtypeCountsByType === 'function' - ? (this.storage as any).getVerbSubtypeCountsByType() as Map> + const verbSubtypeMap = typeof this.storage.getVerbSubtypeCountsByType === 'function' + ? this.storage.getVerbSubtypeCountsByType() : null if (!verbSubtypeMap) return [] const verbIdx = TypeUtils.getVerbIndex(verb) @@ -7923,7 +8022,8 @@ export class Brainy implements BrainyInterface { if (page.items.length === 0) break for (const noun of page.items) { scanned++ - const n = noun as any + // Legacy stored shapes carried the entity type under `noun` — read both. + const n: HNSWNounWithMetadata & { noun?: NounType } = noun // Skip VFS infrastructure entities unless includeVFS is set — they // bypass enforcement via the isVFSEntity marker anyway, so listing // them in the report would mislead consumers into thinking they have @@ -7948,7 +8048,8 @@ export class Brainy implements BrainyInterface { if (page.items.length === 0) break for (const verb of page.items) { scanned++ - const v = verb as any + // Legacy stored shapes carried the verb type under `type` — read both. + const v: HNSWVerbWithMetadata & { type?: VerbType } = verb if (!includeVFS && (v.metadata?.isVFSEntity === true || v.metadata?.isVFS === true)) continue const subtype = typeof v.subtype === 'string' ? v.subtype : undefined if (!subtype || subtype.length === 0) { @@ -8330,7 +8431,7 @@ export class Brainy implements BrainyInterface { for (const noun of page.items) { scanned++ try { - const entity = await this.convertNounToEntity(noun as any) + const entity = await this.convertNounToEntity(noun) const sourceValue = this.readPath(entity, fromPath) if (sourceValue === undefined || sourceValue === null) { skipped++ @@ -8346,7 +8447,7 @@ export class Brainy implements BrainyInterface { migrated++ } catch (err) { errors.push({ - id: (noun as any).id ?? '', + id: noun.id ?? '', error: err instanceof Error ? err.message : String(err) }) } @@ -8371,7 +8472,7 @@ export class Brainy implements BrainyInterface { for (const verb of page.items) { scanned++ try { - const edge = this.verbToRelationLike(verb as any) + const edge = this.verbToRelationLike(verb) const sourceValue = this.readPath(edge, fromPath) if (sourceValue === undefined || sourceValue === null) { skipped++ @@ -8387,7 +8488,7 @@ export class Brainy implements BrainyInterface { migrated++ } catch (err) { errors.push({ - id: (verb as any).id ?? '', + id: verb.id ?? '', error: err instanceof Error ? err.message : String(err) }) } @@ -8411,7 +8512,9 @@ export class Brainy implements BrainyInterface { return { id: verb.id, vector: verb.vector, - type: (verb.verb ?? verb.type) as any, + // Deliberate projection: the edge's VerbType occupies Entity.type so the + // noun-oriented path helpers (readPath/pathExists) work unchanged. + type: (verb.verb ?? verb.type) as NounType, subtype: verb.subtype, data: verb.data, metadata: verb.metadata as T, @@ -8437,17 +8540,19 @@ export class Brainy implements BrainyInterface { readBoth: boolean ): UpdateRelationParams { const id = edge.id - const update: UpdateRelationParams = { id } + // Record intersection: `to.kind === 'top'` writes a dynamically-named + // standard field (subtype/weight/confidence/...) onto the update payload. + const update: UpdateRelationParams & Record = { id } if (to.kind === 'top') { - ;(update as any)[to.field] = value + update[to.field] = value } else if (to.kind === 'metadata') { const base = (edge.metadata as unknown as Record) ?? {} const nextMeta: Record = { ...base, [to.field]: value } if (!readBoth && from.kind === 'metadata') { delete nextMeta[from.field] } - update.metadata = nextMeta as any + update.metadata = nextMeta as UpdateRelationParams['metadata'] update.merge = false } else { const base = (edge.data && typeof edge.data === 'object') ? { ...(edge.data as Record) } : {} @@ -8463,7 +8568,7 @@ export class Brainy implements BrainyInterface { const base = (edge.metadata as unknown as Record) ?? {} const nextMeta: Record = { ...base } delete nextMeta[from.field] - update.metadata = nextMeta as any + update.metadata = nextMeta as UpdateRelationParams['metadata'] update.merge = false } else if (from.kind === 'data' && to.kind !== 'data') { const base = (edge.data && typeof edge.data === 'object') ? { ...(edge.data as Record) } : null @@ -8472,7 +8577,7 @@ export class Brainy implements BrainyInterface { update.data = base } } else if (from.kind === 'top' && from.field === 'subtype') { - ;(update as any).subtype = undefined + update.subtype = undefined } } @@ -8502,7 +8607,7 @@ export class Brainy implements BrainyInterface { /** Read the value at a parsed migration path. Returns `undefined` if absent. */ private readPath(entity: Entity, path: { kind: 'top' | 'metadata' | 'data'; field: string }): unknown { - if (path.kind === 'top') return (entity as any)[path.field] + if (path.kind === 'top') return (entity as Entity & Record)[path.field] if (path.kind === 'metadata') { const bag = entity.metadata as unknown as Record | undefined return bag?.[path.field] @@ -8533,11 +8638,13 @@ export class Brainy implements BrainyInterface { readBoth: boolean ): UpdateParams { const id = entity.id - const update: UpdateParams = { id } + // Record intersection: `to.kind === 'top'` writes a dynamically-named + // standard field (subtype/weight/confidence/...) onto the update payload. + const update: UpdateParams & Record = { id } // Apply destination write. if (to.kind === 'top') { - ;(update as any)[to.field] = value + update[to.field] = value } else if (to.kind === 'metadata') { const base = (entity.metadata as unknown as Record) ?? {} const nextMeta: Record = { ...base, [to.field]: value } @@ -8573,7 +8680,7 @@ export class Brainy implements BrainyInterface { } else if (from.kind === 'top' && (from.field === 'subtype')) { // Only subtype currently supports clearing at the top level via UpdateParams. // Other standard fields aren't user-mutable through this path. - ;(update as any).subtype = undefined + update.subtype = undefined } } @@ -9308,7 +9415,7 @@ export class Brainy implements BrainyInterface { private async parseNaturalQuery(query: string): Promise> { // Initialize NLP processor if needed (lazy loading) if (!this._nlp) { - this._nlp = new NaturalLanguageProcessor(this as any) + this._nlp = new NaturalLanguageProcessor(this) await this._nlp.init() // Ensure pattern library is loaded } @@ -9337,7 +9444,7 @@ export class Brainy implements BrainyInterface { params.connected = { to: Array.isArray(tripleQuery.connected.to) ? tripleQuery.connected.to[0] : tripleQuery.connected.to, from: Array.isArray(tripleQuery.connected.from) ? tripleQuery.connected.from[0] : tripleQuery.connected.from, - via: tripleQuery.connected.type as any, + via: tripleQuery.connected.type as VerbType | undefined, depth: tripleQuery.connected.depth, direction: tripleQuery.connected.direction } @@ -9533,14 +9640,14 @@ export class Brainy implements BrainyInterface { if (walk === 'in' || walk === 'both') dirs.push('to') for (const dir of dirs) { - const edges = await this.getRelations({ + const edges = await this.related({ ...(dir === 'from' ? { from: node } : { to: node }), ...(via && { type: via as VerbType | VerbType[] }), subtype: subtypeArr, limit: 10000 }) for (const edge of edges) { - // Defensive: getRelations honors the subtype filter, but check + // Defensive: related() honors the subtype filter, but check // again in case a future impl widens it. if (edge.subtype !== undefined && !subtypeSet.has(edge.subtype)) continue const neighbor = dir === 'from' ? edge.to : edge.from @@ -9875,20 +9982,19 @@ export class Brainy implements BrainyInterface { */ private verbsToRelations(verbs: GraphVerb[]): Relation[] { return verbs.map((v) => { - const va = v as any return { id: v.id, from: v.sourceId, to: v.targetId, type: (v.verb || v.type) as VerbType, - ...(va.subtype !== undefined && { subtype: va.subtype as string }), + ...(v.subtype !== undefined && { subtype: v.subtype }), weight: v.weight ?? 1.0, - ...(typeof va.confidence === 'number' && { confidence: va.confidence as number }), + ...(typeof v.confidence === 'number' && { confidence: v.confidence }), data: v.data, metadata: v.metadata, service: v.service as string, createdAt: typeof v.createdAt === 'number' ? v.createdAt : Date.now(), - ...(typeof va.updatedAt === 'number' && { updatedAt: va.updatedAt as number }) + ...(typeof v.updatedAt === 'number' && { updatedAt: v.updatedAt }) } }) } @@ -10147,8 +10253,12 @@ export class Brainy implements BrainyInterface { return this.config.storage as BaseStorage } - const storageConfig = (this.config.storage || {}) as Record - const storageType = (storageConfig.type as string) || 'auto' + // The config-object branch of `BrainyConfig['storage']` is a structural + // subset of the factory's `StorageOptions`; the Record view serves the + // plugin factory contract (`create(config: Record)`). + const storageConfig = (this.config.storage || {}) as StorageOptions & + Record + const storageType = storageConfig.type || 'auto' // Check plugin-provided storage factories (e.g., 'filesystem' override from cortex) const pluginFactory = this.pluginRegistry.getStorageFactory(storageType) @@ -10158,7 +10268,7 @@ export class Brainy implements BrainyInterface { } // Fall through to built-in storage types - const storage = await createStorage(storageConfig as any) + const storage = await createStorage(storageConfig) return storage as BaseStorage } @@ -10214,7 +10324,7 @@ export class Brainy implements BrainyInterface { const persistMode = this.resolveHNSWPersistMode() - return new JsHnswVectorIndex(indexConfig as any, this.distance, { + return new JsHnswVectorIndex(indexConfig, this.distance, { storage: this.storage, useParallelization: true, persistMode @@ -10260,7 +10370,7 @@ export class Brainy implements BrainyInterface { /** * Normalize and validate configuration */ - private normalizeConfig(config?: BrainyConfig): Required { + private normalizeConfig(config?: BrainyConfig): ResolvedBrainyConfig { // Validate storage configuration. Brainy 8.0 ships two adapters only — // FileSystemStorage and MemoryStorage (cloud + OPFS adapters were removed). // Cloud backup remains supported via operator tooling (db.persist() + @@ -10300,7 +10410,7 @@ export class Brainy implements BrainyInterface { storage: config?.storage || { type: 'auto' }, index: config?.index || {}, cache: config?.cache ?? true, - distributed: distributedConfig as any, // Type will be fixed when used + distributed: distributedConfig, warmup: config?.warmup ?? false, realtime: config?.realtime ?? false, multiTenancy: config?.multiTenancy ?? false, @@ -10314,18 +10424,18 @@ export class Brainy implements BrainyInterface { batchWrites: config?.batchWrites ?? true, maxConcurrentOperations: config?.maxConcurrentOperations ?? 10, // Memory management options - maxQueryLimit: config?.maxQueryLimit ?? undefined as any, - reservedQueryMemory: config?.reservedQueryMemory ?? undefined as any, + maxQueryLimit: config?.maxQueryLimit ?? undefined, + reservedQueryMemory: config?.reservedQueryMemory ?? undefined, // Vector index configuration (8.0) — algorithm-neutral surface with // `recall` preset + `persistMode` (folded in from 7.x's hnswPersistMode). // See BRAINY-8.0-RENAME-COORDINATION § A.2 + § G.2. - vector: config?.vector ?? undefined as any, + vector: config?.vector ?? undefined, // Embedding initialization - false = lazy init on first embed() eagerEmbeddings: config?.eagerEmbeddings ?? false, // Plugin configuration - undefined = auto-detect - plugins: config?.plugins ?? undefined as any, + plugins: config?.plugins ?? undefined, // Integration Hub - undefined/false = disabled - integrations: config?.integrations ?? undefined as any, + integrations: config?.integrations ?? undefined, // Migration — disabled by default, opt-in for automatic migration autoMigrate: config?.autoMigrate ?? false, // Subtype pairing enforcement (7.30.0) — opt-in. @@ -10821,8 +10931,8 @@ export class Brainy implements BrainyInterface { await Promise.all([ // Flush HNSW dirty nodes (deferred persistence mode) (async () => { - if (this.index && typeof (this.index as any).flush === 'function') { - await (this.index as any).flush() + if (this.index && typeof this.index.flush === 'function') { + await this.index.flush() } })(), // Flush metadata index (field indexes + EntityIdMapper) @@ -10839,8 +10949,8 @@ export class Brainy implements BrainyInterface { })(), // Flush storage adapter counts (async () => { - if (this.storage && typeof (this.storage as any).flushCounts === 'function') { - await (this.storage as any).flushCounts() + if (this.storage && typeof this.storage.flushCounts === 'function') { + await this.storage.flushCounts() } })(), // Flush aggregation index state @@ -10866,13 +10976,15 @@ export class Brainy implements BrainyInterface { } })(), (async () => { - if (this.index && typeof (this.index as any).close === 'function') { - await (this.index as any).close() + const index = this.index as JsHnswVectorIndex & VectorIndexOptionalHooks + if (index && typeof index.close === 'function') { + await index.close() } })(), (async () => { - if (this.metadataIndex && typeof (this.metadataIndex as any).close === 'function') { - await (this.metadataIndex as any).close() + const metadataIndex = this.metadataIndex as MetadataIndexManager & MetadataIndexOptionalHooks + if (metadataIndex && typeof metadataIndex.close === 'function') { + await metadataIndex.close() } })(), (async () => { @@ -10896,7 +11008,13 @@ export class Brainy implements BrainyInterface { // Drain the metadata write buffer if the storage adapter has one if (this.storage && 'metadataWriteBuffer' in this.storage) { - const buffer = (this.storage as any).metadataWriteBuffer + // Boundary: drains BaseStorage's protected `metadataWriteBuffer` member + // (cloud adapters initialize it in their init()). No public drain hook + // exists on the adapter surface, and close() must not leave a pending + // write to land after a successor writer claims the lock. + const buffer = (this.storage as unknown as { + metadataWriteBuffer?: MetadataWriteBuffer | null + }).metadataWriteBuffer if (buffer && typeof buffer.destroy === 'function') { await buffer.destroy() } @@ -10942,8 +11060,8 @@ export class Brainy implements BrainyInterface { coordinatorUrl: process.env.BRAINY_COORDINATOR || undefined, shardCount: parseInt(process.env.BRAINY_SHARDS || '64'), replicationFactor: parseInt(process.env.BRAINY_REPLICAS || '3'), - consensus: process.env.BRAINY_CONSENSUS as any || 'raft', - transport: process.env.BRAINY_TRANSPORT as any || 'http' + consensus: (process.env.BRAINY_CONSENSUS as 'raft' | 'none' | undefined) || 'raft', + transport: (process.env.BRAINY_TRANSPORT as 'tcp' | 'http' | 'udp' | undefined) || 'http' } } @@ -10996,7 +11114,7 @@ export class Brainy implements BrainyInterface { this.cacheSync = new CacheSync({ nodeId: distConfig.nodeId!, syncInterval: 1000 - } as any) + }) // Initialize read/write separation if we have replicas // Note: Will be properly initialized after coordinator starts @@ -11024,9 +11142,18 @@ export class Brainy implements BrainyInterface { private async connectDistributedStorage(): Promise { if (!this.config.distributed?.enabled) return - // Check if storage supports distributed operations + // Check if storage supports distributed operations. No in-repo adapter + // implements this hook — it exists for external/plugin adapters, so the + // `in` guard above is the contract and this cast just names its shape. if ('setDistributedComponents' in this.storage) { - (this.storage as any).setDistributedComponents({ + (this.storage as BaseStorage & { + setDistributedComponents(components: { + coordinator?: DistributedCoordinator + shardManager?: ShardManager + cacheSync?: CacheSync + readWriteSeparation?: ReadWriteSeparation + }): void + }).setDistributedComponents({ coordinator: this.coordinator, shardManager: this.shardManager, cacheSync: this.cacheSync, diff --git a/src/cli/commands/core.ts b/src/cli/commands/core.ts index 398c301c..5e434ee2 100644 --- a/src/cli/commands/core.ts +++ b/src/cli/commands/core.ts @@ -7,10 +7,11 @@ */ import chalk from 'chalk' -import ora from 'ora' +import ora, { type Ora } from 'ora' import inquirer from 'inquirer' import { Brainy } from '../../brainy.js' import { BrainyTypes, NounType, VerbType } from '../../index.js' +import type { Entity, Result } from '../../types/brainy.types.js' interface CoreOptions { verbose?: boolean @@ -87,7 +88,7 @@ export const coreCommands = { * Add data to the neural database */ async add(text: string | undefined, options: AddOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no text provided if (!text) { @@ -222,7 +223,7 @@ export const coreCommands = { * Search the neural database with Triple Intelligenceā„¢ */ async search(query: string | undefined, options: SearchOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no query provided if (!query) { @@ -407,8 +408,13 @@ export const coreCommands = { if (result.score !== undefined) { console.log(chalk.green(` Score: ${(result.score * 100).toFixed(1)}%`)) - if (options.explain && (result as any).scores) { - const scores = (result as any).scores + // Per-intelligence sub-scores aren't part of the public Result + // contract (the typed breakdown lives on `explanation`) — read + // defensively so --explain degrades to no breakdown when absent. + const scores = (result as Result & { + scores?: { vector?: number; graph?: number; field?: number } + }).scores + if (options.explain && scores) { if (scores.vector !== undefined) { console.log(chalk.dim(` Vector: ${(scores.vector * 100).toFixed(1)}%`)) } @@ -422,24 +428,28 @@ export const coreCommands = { } // Show type - if ((entity as any).type) { - console.log(chalk.dim(` Type: ${(entity as any).type}`)) + if (entity.type) { + console.log(chalk.dim(` Type: ${entity.type}`)) } - // Show content preview - if ((entity as any).content) { - const preview = (entity as any).content.substring(0, 80) - console.log(chalk.dim(` Content: ${preview}${(entity as any).content.length > 80 ? '...' : ''}`)) + // Show content preview. `content` is not a standard Entity field — + // surfaced defensively for records that carry flattened text content. + const content = (entity as Entity & { content?: string }).content + if (content) { + const preview = content.substring(0, 80) + console.log(chalk.dim(` Content: ${preview}${content.length > 80 ? '...' : ''}`)) } // Show metadata - if ((entity as any).metadata && Object.keys((entity as any).metadata).length > 0) { - console.log(chalk.dim(` Metadata: ${JSON.stringify((entity as any).metadata)}`)) + if (entity.metadata && Object.keys(entity.metadata).length > 0) { + console.log(chalk.dim(` Metadata: ${JSON.stringify(entity.metadata)}`)) } - // Show relationships - if (options.includeRelations && (result as any).relations) { - const relations = (result as any).relations + // Show relationships. `relations` isn't part of the public Result + // contract — read defensively so --include-relations degrades to + // no output when find() doesn't attach it. + const relations = (result as Result & { relations?: unknown[] }).relations + if (options.includeRelations && relations) { if (relations.length > 0) { console.log(chalk.dim(` Relations: ${relations.length} connections`)) } @@ -487,7 +497,7 @@ export const coreCommands = { * Get item by ID */ async get(id: string | undefined, options: GetOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no ID provided if (!id) { @@ -527,18 +537,25 @@ export const coreCommands = { if (!options.json) { console.log(chalk.cyan('\nItem Details:')) console.log(` ID: ${item.id}`) - console.log(` Content: ${(item as any).content || 'N/A'}`) + // `content` is not a standard Entity field — see the search() note. + console.log(` Content: ${(item as Entity & { content?: string }).content || 'N/A'}`) if (item.metadata) { console.log(` Metadata: ${JSON.stringify(item.metadata, null, 2)}`) } if (options.withConnections) { - // Get verbs/relationships - // Get connections if method exists - const connections = (brain as any).getConnections ? await (brain as any).getConnections(id) : [] + // Brainy's public API has no getConnections() — this optional probe + // predates related() and resolves to an empty list on current + // builds. Typed to match the legacy edge shape it rendered. + const legacyBrain = brain as Brainy & { + getConnections?: (id: string | undefined) => Promise< + Array<{ source: string; type: string; target: string }> + > + } + const connections = legacyBrain.getConnections ? await legacyBrain.getConnections(id) : [] if (connections && connections.length > 0) { console.log(chalk.cyan('\nConnections:')) - connections.forEach((conn: any) => { + connections.forEach((conn) => { console.log(` ${conn.source} --[${conn.type}]--> ${conn.target}`) }) } @@ -561,7 +578,7 @@ export const coreCommands = { * Create relationship between items */ async relate(source: string | undefined, verb: string | undefined, target: string | undefined, options: RelateOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if parameters missing if (!source || !verb || !target) { @@ -630,10 +647,12 @@ export const coreCommands = { // `--subtype ` → Brainy default `'cli-relate'`. Same rationale // as `brainy add` — guarantees CLI works under strict-mode brains // (added 7.30.1). + // The verb arrives as a raw CLI string; relate() validates it against + // the VerbType vocabulary at runtime. const result = await brain.relate({ from: source, to: target, - type: verb as any, + type: verb as VerbType, subtype: options.subtype ?? 'cli-relate', metadata }) @@ -664,7 +683,7 @@ export const coreCommands = { * Update an existing entity */ async update(id: string | undefined, options: AddOptions & { content?: string }) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no ID provided if (!id) { @@ -770,10 +789,10 @@ export const coreCommands = { }, /** - * Delete an entity + * Remove an entity */ - async deleteEntity(id: string | undefined, options: CoreOptions & { force?: boolean }) { - let spinner: any = null + async removeEntity(id: string | undefined, options: CoreOptions & { force?: boolean }) { + let spinner: Ora | null = null try { // Interactive mode if no ID provided if (!id) { @@ -781,7 +800,7 @@ export const coreCommands = { { type: 'input', name: 'id', - message: 'Entity ID to delete:', + message: 'Entity ID to remove:', validate: (input: string) => input.trim().length > 0 || 'ID cannot be empty' }, { @@ -793,7 +812,7 @@ export const coreCommands = { ]) if (!answers.confirm) { - console.log(chalk.yellow('Delete cancelled')) + console.log(chalk.yellow('Operation cancelled')) return } @@ -803,36 +822,36 @@ export const coreCommands = { const answer = await inquirer.prompt([{ type: 'confirm', name: 'confirm', - message: `Delete entity ${id}? This cannot be undone.`, + message: `Remove entity ${id}? This cannot be undone.`, default: false }]) if (!answer.confirm) { - console.log(chalk.yellow('Delete cancelled')) + console.log(chalk.yellow('Operation cancelled')) return } } - spinner = ora('Deleting entity...').start() + spinner = ora('Removing entity...').start() const brain = getBrainy() await brain.init() - await brain.delete(id) + await brain.remove(id) - spinner.succeed('Entity deleted successfully') + spinner.succeed('Entity removed successfully') if (!options.json) { - console.log(chalk.green(`āœ“ Deleted entity: ${id}`)) + console.log(chalk.green(`āœ“ Removed entity: ${id}`)) } else { - formatOutput({ id, deleted: true }, options) + formatOutput({ id, removed: true }, options) } // One-shot command — see add() for why the explicit close + exit. await brain.close() process.exit(0) } catch (error: any) { - if (spinner) spinner.fail('Failed to delete entity') - console.error(chalk.red('Delete failed:', error.message)) + if (spinner) spinner.fail('Failed to remove entity') + console.error(chalk.red('Remove failed:', error.message)) process.exit(1) } }, @@ -841,7 +860,7 @@ export const coreCommands = { * Remove a relationship */ async unrelate(id: string | undefined, options: CoreOptions & { force?: boolean }) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no ID provided if (!id) { diff --git a/src/cli/commands/data.ts b/src/cli/commands/data.ts index 60e01462..a254c15b 100644 --- a/src/cli/commands/data.ts +++ b/src/cli/commands/data.ts @@ -10,7 +10,7 @@ * The legacy backup/import/export facade that used to live behind this * command was superseded in 8.0: snapshots are `brainy snapshot` / `brainy * restore` (the Db API's `persist()`/`restore()`), and data ingestion is - * `brainy import` (UniversalImportAPI). + * `brainy import` (`brain.import()`). */ import chalk from 'chalk' diff --git a/src/cli/commands/import.ts b/src/cli/commands/import.ts index 7f6c2696..fdb30f3c 100644 --- a/src/cli/commands/import.ts +++ b/src/cli/commands/import.ts @@ -3,7 +3,7 @@ * @description Import commands — neural import and data import. * * Complete import system exposing ALL Brainy import capabilities: - * - UniversalImportAPI: Neural import with AI type matching + * - `brain.import()`: universal ingestion with neural type matching * - DirectoryImporter: VFS directory imports * * Supports: files, directories, URLs, all formats. Backup/restore is the @@ -11,19 +11,23 @@ */ import chalk from 'chalk' -import ora from 'ora' +import ora, { type Ora } from 'ora' import inquirer from 'inquirer' import { readFileSync, statSync, existsSync } from 'node:fs' import { Brainy } from '../../brainy.js' import { NounType } from '../../types/graphTypes.js' +import type { SupportedFormat } from '../../import/FormatDetector.js' interface ImportOptions { verbose?: boolean json?: boolean pretty?: boolean quiet?: boolean - // Format options - format?: 'json' | 'csv' | 'jsonl' | 'yaml' | 'markdown' | 'html' | 'xml' | 'text' + // Format options. Populated by commander straight from `--format` with no + // validation, so the runtime value is whatever the user typed — kept as a + // plain string and narrowed to brain.import()'s SupportedFormat at the call + // boundary (the import extractor rejects unsupported values at runtime). + format?: string // Import behavior recursive?: boolean batchSize?: string @@ -60,11 +64,11 @@ const formatOutput = (data: any, options: ImportOptions): void => { export const importCommands = { /** - * Enhanced import using UniversalImportAPI - * Supports files, directories, URLs, all formats + * Enhanced import via `brain.import()`. + * Supports files, directories, URLs, all formats. */ async import(source: string | undefined, options: ImportOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no source provided if (!source) { @@ -260,7 +264,8 @@ export const importCommands = { } else { // File import with progress result = await brain.import(source, { - format: options.format as any, + // Raw CLI string → SupportedFormat (see ImportOptions.format note). + format: options.format as SupportedFormat | undefined, enableNeuralExtraction: options.extractEntities !== false, enableRelationshipInference: options.detectRelationships !== false, enableConceptExtraction: options.extractConcepts || false, @@ -422,7 +427,7 @@ export const importCommands = { * VFS-specific import (files/directories into VFS) */ async vfsImport(source: string | undefined, options: ImportOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no source provided if (!source) { diff --git a/src/cli/commands/insights.ts b/src/cli/commands/insights.ts index 218ab4c2..fa35e1a1 100644 --- a/src/cli/commands/insights.ts +++ b/src/cli/commands/insights.ts @@ -5,7 +5,7 @@ */ import chalk from 'chalk' -import ora from 'ora' +import ora, { type Ora } from 'ora' import inquirer from 'inquirer' import Table from 'cli-table3' import { Brainy } from '../../brainy.js' @@ -192,7 +192,7 @@ export const insightsCommands = { * Get field values for a specific field */ async fieldValues(field: string | undefined, options: InsightsOptions & { limit?: string }) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no field provided if (!field) { @@ -274,7 +274,7 @@ export const insightsCommands = { * Get optimal query plan for filters */ async queryPlan(options: InsightsOptions & { filters?: string }) { - let spinner: any = null + let spinner: Ora | null = null try { let filters: Record = {} diff --git a/src/cli/commands/inspect.ts b/src/cli/commands/inspect.ts index 6ee48404..55f3d845 100644 --- a/src/cli/commands/inspect.ts +++ b/src/cli/commands/inspect.ts @@ -15,6 +15,8 @@ import chalk from 'chalk' import ora from 'ora' import { Brainy } from '../../brainy.js' +import type { RelatedParams } from '../../types/brainy.types.js' +import type { NounType, VerbType } from '../../types/graphTypes.js' interface InspectOptions { fresh?: boolean @@ -109,8 +111,10 @@ export const inspectCommands = { const where = options.where ? JSON.parse(options.where) : undefined const limit = options.limit ? parseInt(options.limit, 10) : 20 const offset = options.offset ? parseInt(options.offset, 10) : 0 + // --type arrives as a raw CLI string; find() resolves it against the + // NounType vocabulary at runtime. const results = await brain.find({ - type: options.type as any, + type: options.type as NounType | undefined, where, limit, offset @@ -158,12 +162,16 @@ export const inspectCommands = { if (spinner) spinner.text = 'Walking graph…' const direction = options.direction ?? 'both' const limit = options.limit ? parseInt(options.limit, 10) : 50 - const rels = await brain.getRelations({ + // `direction` is accepted by the CLI surface but RelatedParams has + // no such filter — related() reads from/to/type/limit and ignores + // extras, so the assertion only admits the extra key, it doesn't change + // what the query does. --type arrives as a raw CLI string. + const rels = await brain.related({ from: id, direction, - type: options.type as any, + type: options.type as VerbType | undefined, limit - } as any) + } as RelatedParams) spinner?.succeed(`Found ${rels.length} relationship(s)`) emit(rels, options) await brain.close() @@ -185,7 +193,7 @@ export const inspectCommands = { const brain = await openReader(path, options) if (spinner) spinner.text = 'Planning query…' const where = options.where ? JSON.parse(options.where) : {} - const plan = await brain.explain({ type: options.type as any, where }) + const plan = await brain.explain({ type: options.type as NounType | undefined, where }) spinner?.succeed('Plan ready') emit(plan, options) await brain.close() @@ -228,7 +236,7 @@ export const inspectCommands = { // dedicated random-sample API in Brainy core for this v1. const window = Math.min(Math.max(n * 10, 50), 1000) const pool = await brain.find({ - type: options.type as any, + type: options.type as NounType | undefined, limit: window }) const sample = pool @@ -275,7 +283,7 @@ export const inspectCommands = { let offset = 0 while (true) { const page = await brain.find({ - type: options.type as any, + type: options.type as NounType | undefined, limit: batch, offset }) @@ -310,7 +318,7 @@ export const inspectCommands = { try { const brain = await openReader(path, { ...options, quiet: true }) const page = await brain.find({ - type: options.type as any, + type: options.type as NounType | undefined, limit: 200 }) for (const e of page) { diff --git a/src/cli/commands/neural.ts b/src/cli/commands/neural.ts index be334a4c..0f4c50cb 100644 --- a/src/cli/commands/neural.ts +++ b/src/cli/commands/neural.ts @@ -10,10 +10,11 @@ import inquirer from 'inquirer' import chalk from 'chalk' -import ora from 'ora' +import ora, { type Ora } from 'ora' import fs from 'node:fs' import path from 'node:path' import { Brainy } from '../../brainy.js' +import type { NeuralClusterParams } from '../../types/brainy.types.js' interface CommandArguments { action?: string; @@ -113,10 +114,12 @@ async function handleSimilarCommand(neural: any, argv: CommandArguments): Promis } async function handleClustersCommand(neural: any, argv: CommandArguments): Promise { - let spinner: any = null + let spinner: Ora | null = null try { let options: any = { - algorithm: argv.algorithm as any, + // --algorithm arrives as a raw CLI string; the interactive prompt below + // and neural.clusters() constrain it to the supported algorithms. + algorithm: argv.algorithm as NeuralClusterParams['algorithm'], threshold: argv.threshold, maxClusters: argv.limit } diff --git a/src/cli/commands/nlp.ts b/src/cli/commands/nlp.ts index 8b7547da..42d52f56 100644 --- a/src/cli/commands/nlp.ts +++ b/src/cli/commands/nlp.ts @@ -5,7 +5,7 @@ */ import chalk from 'chalk' -import ora from 'ora' +import ora, { type Ora } from 'ora' import inquirer from 'inquirer' import Table from 'cli-table3' import { Brainy } from '../../brainy.js' @@ -37,7 +37,7 @@ export const nlpCommands = { * Extract entities from text */ async extract(text: string | undefined, options: NLPOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no text provided if (!text) { @@ -126,7 +126,7 @@ export const nlpCommands = { * Extract concepts from text */ async extractConcepts(text: string | undefined, options: NLPOptions & { threshold?: string }) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no text provided if (!text) { @@ -197,7 +197,7 @@ export const nlpCommands = { * Analyze text with full NLP pipeline */ async analyze(text: string | undefined, options: NLPOptions) { - let spinner: any = null + let spinner: Ora | null = null try { // Interactive mode if no text provided if (!text) { diff --git a/src/cli/commands/storage.ts b/src/cli/commands/storage.ts index 8d7889bd..a2dde017 100644 --- a/src/cli/commands/storage.ts +++ b/src/cli/commands/storage.ts @@ -6,7 +6,7 @@ * - `storage status` — backend, root directory, entity/relationship counts, * writer-lock holder, and operational mode (rendered from `brain.stats()`). * - `storage batch-delete ` — delete a newline-separated list of entity - * IDs through the public `brain.delete()` path (vectors, metadata, indexes, + * IDs through the public `brain.remove()` path (vectors, metadata, indexes, * and statistics all stay consistent), with per-ID retry and an optional * continue-on-error mode. * @@ -144,7 +144,7 @@ export const storageCommands = { /** * @description Delete a list of entity IDs (one per line in a file) through - * the public `brain.delete()` path so vectors, metadata, graph edges, + * the public `brain.remove()` path so vectors, metadata, graph edges, * indexes, and statistics all stay consistent. Asks for confirmation before * deleting; failed IDs are retried up to `--max-retries` times, and * `--continue-on-error` keeps going past IDs that still fail. @@ -204,7 +204,7 @@ export const storageCommands = { for (let attempt = 0; attempt <= maxRetries; attempt++) { try { - await brain.delete(id) + await brain.remove(id) succeeded = true break } catch (error) { diff --git a/src/cli/commands/utility.ts b/src/cli/commands/utility.ts index 41fd5e18..09b0246a 100644 --- a/src/cli/commands/utility.ts +++ b/src/cli/commands/utility.ts @@ -30,6 +30,15 @@ interface BenchmarkOptions extends UtilityOptions { iterations?: string } +/** Per-operation timing summary produced by `brainy benchmark`. */ +interface BenchmarkOperationStats { + avg: string + min: number + max: number + median: number + ops: string +} + let brainyInstance: Brainy | null = null const getBrainy = (): Brainy => { @@ -188,7 +197,10 @@ export const utilityCommands = { console.log(chalk.cyan(`\nšŸš€ Running Benchmarks (${iterations} iterations)\n`)) - const results: any = { + const results: { + operations: Record + summary: { totalOperations?: number; averageOpsPerSec?: string } + } = { operations: {}, summary: {} } @@ -253,7 +265,7 @@ export const utilityCommands = { } // Calculate summary - const totalOps: number = (Object.values(results.operations) as any[]).reduce((sum: number, op: any) => + const totalOps: number = Object.values(results.operations).reduce((sum: number, op) => sum + parseFloat(op.ops), 0) results.summary = { @@ -277,7 +289,7 @@ export const utilityCommands = { style: { head: [], border: [] } }) - Object.entries(results.operations).forEach(([op, stats]: [string, any]) => { + Object.entries(results.operations).forEach(([op, stats]) => { table.push([ op, stats.avg, diff --git a/src/cli/commands/vfs.ts b/src/cli/commands/vfs.ts index e07f1198..94b7c469 100644 --- a/src/cli/commands/vfs.ts +++ b/src/cli/commands/vfs.ts @@ -9,6 +9,7 @@ import ora from 'ora' import Table from 'cli-table3' import { readFileSync, writeFileSync } from 'node:fs' import { Brainy } from '../../brainy.js' +import type { SearchResult, VFSDirent } from '../../vfs/types.js' interface VFSOptions { verbose?: boolean @@ -54,8 +55,9 @@ export const vfsCommands = { try { const brain = await getBrainy() // Await async getBrainy // VFS auto-initialized, no need for vfs.init() + // --encoding arrives as a raw CLI string (Node validates it at use time). const buffer = await brain.vfs.readFile(path, { - encoding: options.encoding as any + encoding: options.encoding as BufferEncoding | undefined }) spinner.succeed('File read successfully') @@ -103,8 +105,9 @@ export const vfsCommands = { process.exit(1) } + // --encoding arrives as a raw CLI string (Node validates it at use time). await brain.vfs.writeFile(path, data, { - encoding: options.encoding as any + encoding: options.encoding as BufferEncoding | undefined }) spinner.succeed('File written successfully') @@ -135,7 +138,9 @@ export const vfsCommands = { try { const brain = await getBrainy() - const entries = await brain.vfs.readdir(path, { withFileTypes: true }) + // withFileTypes: true selects the VFSDirent[] branch of readdir's + // `string[] | VFSDirent[]` union return type. + const entries = await brain.vfs.readdir(path, { withFileTypes: true }) as VFSDirent[] spinner.succeed(`Found ${Array.isArray(entries) ? entries.length : 0} items`) @@ -154,13 +159,14 @@ export const vfsCommands = { style: { head: [], border: [] } }) - for (const entry of entries as any[]) { + for (const entry of entries) { if (!options.all && entry.name.startsWith('.')) continue + const isDirectory = entry.type === 'directory' const stat = await brain.vfs.stat(`${path}/${entry.name}`) table.push([ - entry.isDirectory() ? chalk.blue('DIR') : 'FILE', - entry.isDirectory() ? '-' : formatBytes(stat.size), + isDirectory ? chalk.blue('DIR') : 'FILE', + isDirectory ? '-' : formatBytes(stat.size), formatDate(stat.mtime), entry.name ]) @@ -170,10 +176,10 @@ export const vfsCommands = { } else { // Simple format console.log() - for (const entry of entries as any[]) { + for (const entry of entries) { if (!options.all && entry.name.startsWith('.')) continue - if (entry.isDirectory()) { + if (entry.type === 'directory') { console.log(chalk.blue(entry.name + '/')) } else { console.log(entry.name) @@ -322,8 +328,11 @@ export const vfsCommands = { if (result.score) { console.log(chalk.dim(` Score: ${(result.score * 100).toFixed(1)}%`)) } - if ((result as any).excerpt) { - console.log(chalk.dim(` ${(result as any).excerpt}`)) + // `excerpt` isn't part of the VFS SearchResult contract — search() + // doesn't attach it today; read defensively. + const excerpt = (result as SearchResult & { excerpt?: string }).excerpt + if (excerpt) { + console.log(chalk.dim(` ${excerpt}`)) } console.log() }) diff --git a/src/cli/index.ts b/src/cli/index.ts index 6c371bff..8f0a00c3 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -46,7 +46,7 @@ ${chalk.cyan('Examples:')} $ brainy add "React is a JavaScript library" $ brainy find "JavaScript frameworks" $ brainy update --content "Updated content" - $ brainy delete ${chalk.dim('# Requires confirmation')} + $ brainy remove ${chalk.dim('# Requires confirmation')} $ brainy search "react" --type Component --where '{"tested":true}' ${chalk.dim('# Neural API')} @@ -143,10 +143,10 @@ program .action(coreCommands.update) program - .command('delete [id]') - .description('Delete an entity (interactive if no ID, requires confirmation)') + .command('remove [id]') + .description('Remove an entity (interactive if no ID, requires confirmation)') .option('-f, --force', 'Skip confirmation prompt') - .action(coreCommands.deleteEntity) + .action(coreCommands.removeEntity) program .command('unrelate [id]') @@ -472,7 +472,7 @@ program .addCommand( new Command('batch-delete') .argument('', 'File containing entity IDs (one per line)') - .description('Delete a list of entities through the public delete path (with retry)') + .description('Delete a list of entities through the public remove() path (with retry)') .option('--max-retries ', 'Maximum retry attempts per ID', '3') .option('--continue-on-error', 'Continue past IDs that still fail after retries') .action((file, options) => { diff --git a/src/config/extensibleConfig.ts b/src/config/extensibleConfig.ts index 3e050688..4cc33122 100644 --- a/src/config/extensibleConfig.ts +++ b/src/config/extensibleConfig.ts @@ -126,7 +126,10 @@ class ConfigurationRegistry { if (await provider.detect()) { const config = await provider.getConfig() return { - type: provider.type as any, + // Registered providers deliberately extend the built-in storage + // vocabulary ('redis', 'mongodb', ...) — the registry contract is + // open, so narrow the provider's free-form type string here. + type: provider.type as StorageConfigResult['type'], config, reason: `Auto-detected ${provider.name}`, autoSelected: true @@ -313,7 +316,11 @@ export function registerPresetAugmentation(name: string, config: PresetConfig): * Example preset for Redis-based caching service */ export const redisCachePreset: PresetConfig = { - storage: 'redis' as any, // Extended storage type + // 'redis' is an extended storage type outside the built-in StorageOption + // enum — extension presets resolve it at runtime through the provider + // registry, so this is a genuine typed boundary (hence the double + // assertion: the literal has no overlap with the enum). + storage: 'redis' as unknown as StorageOption, model: ModelPrecision.Q8, features: ['core', 'cache', 'search'], distributed: true, diff --git a/src/config/zeroConfig.ts b/src/config/zeroConfig.ts index 439122a1..b55b478c 100644 --- a/src/config/zeroConfig.ts +++ b/src/config/zeroConfig.ts @@ -149,7 +149,9 @@ export async function processZeroConfig(input?: string | BrainyZeroConfig): Prom // Handle string shorthand (preset name) if (typeof input === 'string') { if (input in PRESETS) { - config = { mode: input as any } + // The `in` guard above proved the string is a preset key, which is + // exactly the BrainyZeroConfig mode union. + config = { mode: input as keyof typeof PRESETS } } else { throw new Error(`Unknown preset: ${input}. Valid presets: ${Object.keys(PRESETS).join(', ')}`) } @@ -263,7 +265,17 @@ export async function processZeroConfig(input?: string | BrainyZeroConfig): Prom // Apply distributed preset settings if applicable if (config.mode === 'writer' || config.mode === 'reader') { - const presetSettings = PRESETS[config.mode] as any // Cast to any since we know these presets have additional properties + // The writer/reader presets each carry their own subset of the + // distributed flags beyond the base preset shape — widen to the union of + // those flags so both branches read uniformly. + const presetSettings: { + distributed: boolean + role: 'writer' | 'reader' + readOnly?: boolean + writeOnly?: boolean + allowDirectReads?: boolean + lazyLoadInReadOnlyMode?: boolean + } = PRESETS[config.mode] // Apply distributed-specific settings finalConfig.distributed = presetSettings.distributed diff --git a/src/coreTypes.ts b/src/coreTypes.ts index 58753345..17dd4f3a 100644 --- a/src/coreTypes.ts +++ b/src/coreTypes.ts @@ -389,7 +389,7 @@ export interface HNSWVerbWithMetadata { // `ReportsTo` relationship might have subtype 'direct' vs 'dotted-line'; a `RelatedTo` // edge might carry 'spouse' / 'sibling' / 'colleague'). Flat string (no hierarchy) — // consumers decide the vocabulary. Indexed and rolled up into per-VerbType statistics - // so it's queryable (`getRelations({ verb, subtype })`) and aggregable + // so it's queryable (`related({ verb, subtype })`) and aggregable // (`groupBy:['subtype']`) on the standard-field fast path, never falling through to // the metadata fallback. subtype?: string @@ -417,7 +417,7 @@ export interface HNSWVerbWithMetadata { * Verb representing a relationship between nouns * Stored separately from the HNSW vector index for lightweight performance. * This is the canonical verb shape — Brainy's internal graph engine, the public - * `relate()` / `getRelations()` surface, and storage adapters all speak it. + * `relate()` / `related()` surface, and storage adapters all speak it. */ export interface GraphVerb { id: string // Unique identifier — always a UUID (8.0 contract: brainy generates every verb id, so providers may key verb-int interning on the raw UUID bytes) diff --git a/src/critical/model-guardian.ts b/src/critical/model-guardian.ts deleted file mode 100644 index f2f3da1e..00000000 --- a/src/critical/model-guardian.ts +++ /dev/null @@ -1,140 +0,0 @@ -/** - * MODEL GUARDIAN - CRITICAL PATH - * - * THIS IS THE MOST CRITICAL COMPONENT OF BRAINY - * Without the exact model, users CANNOT access their data - * - * Requirements: - * 1. Model MUST be all-MiniLM-L6-v2-q8 (bundled in package) - * 2. Model MUST be available at runtime (embedded in npm package) - * 3. Model MUST produce consistent 384-dim embeddings - * 4. System MUST fail fast if model unavailable in production - */ - -import { WASMEmbeddingEngine } from '../embeddings/wasm/index.js' - -// CRITICAL: These values MUST NEVER CHANGE -const CRITICAL_MODEL_CONFIG = { - modelName: 'all-MiniLM-L6-v2-q8', - embeddingDimensions: 384, - // Model is bundled in package - no external downloads needed - bundled: true -} - -export class ModelGuardian { - private static instance: ModelGuardian - private isVerified = false - private lastVerification: Date | null = null - - private constructor() { - // Model is bundled - no path detection needed - } - - static getInstance(): ModelGuardian { - if (!ModelGuardian.instance) { - ModelGuardian.instance = new ModelGuardian() - } - return ModelGuardian.instance - } - - /** - * CRITICAL: Verify model availability and integrity - * This MUST be called before any embedding operations - */ - async ensureCriticalModel(): Promise { - // Check if already verified in this session - if (this.isVerified && this.lastVerification) { - const hoursSinceVerification = - (Date.now() - this.lastVerification.getTime()) / (1000 * 60 * 60) - - if (hoursSinceVerification < 24) { - return - } - } - - // Verify the bundled WASM model works - const modelWorks = await this.verifyBundledModel() - - if (modelWorks) { - this.isVerified = true - this.lastVerification = new Date() - return - } - - // CRITICAL FAILURE - throw new Error( - '🚨 CRITICAL FAILURE: Bundled transformer model not working!\n' + - 'The model is REQUIRED for Brainy to function.\n' + - 'Users CANNOT access their data without it.\n' + - 'This indicates a package installation issue.' - ) - } - - /** - * Verify the bundled WASM model works correctly - */ - private async verifyBundledModel(): Promise { - try { - const engine = WASMEmbeddingEngine.getInstance() - - // Initialize the engine (loads bundled model) - await engine.initialize() - - // Test embedding generation - const testEmbedding = await engine.embed('test verification') - - // Verify dimensions - if (testEmbedding.length !== CRITICAL_MODEL_CONFIG.embeddingDimensions) { - console.error( - `āŒ CRITICAL: Model dimension mismatch!\n` + - `Expected: ${CRITICAL_MODEL_CONFIG.embeddingDimensions}\n` + - `Got: ${testEmbedding.length}` - ) - return false - } - - // Verify normalization (should be unit length) - const norm = Math.sqrt(testEmbedding.reduce((sum, v) => sum + v * v, 0)) - if (Math.abs(norm - 1.0) > 0.01) { - console.error(`āŒ CRITICAL: Embeddings not normalized! Norm: ${norm}`) - return false - } - - return true - } catch (error) { - console.error('āŒ Model verification failed:', error) - return false - } - } - - /** - * Get model status for diagnostics - */ - async getStatus(): Promise<{ - verified: boolean - lastVerification: Date | null - modelName: string - dimensions: number - bundled: boolean - }> { - return { - verified: this.isVerified, - lastVerification: this.lastVerification, - modelName: CRITICAL_MODEL_CONFIG.modelName, - dimensions: CRITICAL_MODEL_CONFIG.embeddingDimensions, - bundled: CRITICAL_MODEL_CONFIG.bundled - } - } - - /** - * Force re-verification (for testing) - */ - async forceReverify(): Promise { - this.isVerified = false - this.lastVerification = null - await this.ensureCriticalModel() - } -} - -// Export singleton instance -export const modelGuardian = ModelGuardian.getInstance() diff --git a/src/data/expandedKeywordDictionary.ts b/src/data/expandedKeywordDictionary.ts deleted file mode 100644 index 2a9b6c81..00000000 --- a/src/data/expandedKeywordDictionary.ts +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Expanded Keyword Dictionary for Semantic Type Inference - * - * Comprehensive keyword-to-type mappings including: - * - Canonical keywords (primary terms) - * - Synonyms (alternative terms with slightly lower confidence) - * - Domain-specific variations - * - Common abbreviations - * - * Expanded from 767 → 1500+ keywords for better semantic coverage - */ - -import { NounType } from '../types/graphTypes.js' - -export interface KeywordDefinition { - keyword: string - type: NounType - confidence: number // 0.7-0.95 (higher = more canonical) - isCanonical: boolean // True for primary terms, false for synonyms -} - -/** - * Expanded keyword dictionary (1500+ keywords for 31 NounTypes) - */ -export const EXPANDED_KEYWORD_DICTIONARY: KeywordDefinition[] = [ - // ========== Person - Medical Professions ========== - // Canonical - { keyword: 'doctor', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'physician', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'surgeon', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'nurse', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'cardiologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'oncologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'neurologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'psychiatrist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'psychologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'radiologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'pathologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'anesthesiologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'dermatologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'pediatrician', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'obstetrician', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'gynecologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'ophthalmologist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'dentist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'orthodontist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'pharmacist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'paramedic', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'therapist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - - // Synonyms - { keyword: 'medic', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'practitioner', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'clinician', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'medical professional', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'healthcare worker', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'medical doctor', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'registered nurse', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'emt', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'counselor', type: NounType.Person, confidence: 0.85, isCanonical: false }, - - // ========== Person - Engineering & Tech ========== - // Canonical - { keyword: 'engineer', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'developer', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'programmer', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'architect', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'designer', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'technician', type: NounType.Person, confidence: 0.90, isCanonical: true }, - - // Synonyms - { keyword: 'coder', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'software engineer', type: NounType.Person, confidence: 0.95, isCanonical: false }, - { keyword: 'software developer', type: NounType.Person, confidence: 0.95, isCanonical: false }, - { keyword: 'web developer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'frontend developer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'backend developer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'full stack developer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'devops engineer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'data engineer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'ml engineer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'machine learning engineer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'data scientist', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'ux designer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'ui designer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'graphic designer', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'systems architect', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'solutions architect', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'tech lead', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'techie', type: NounType.Person, confidence: 0.80, isCanonical: false }, - - // ========== Person - Management & Leadership ========== - // Canonical - { keyword: 'manager', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'director', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'executive', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'leader', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'ceo', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'cto', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'cfo', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'coo', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'president', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'founder', type: NounType.Person, confidence: 0.95, isCanonical: true }, - - // Synonyms - { keyword: 'supervisor', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'coordinator', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'vp', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'vice president', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'owner', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'product manager', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'project manager', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'engineering manager', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'team lead', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'chief executive officer', type: NounType.Person, confidence: 0.95, isCanonical: false }, - { keyword: 'chief technology officer', type: NounType.Person, confidence: 0.95, isCanonical: false }, - { keyword: 'chief financial officer', type: NounType.Person, confidence: 0.95, isCanonical: false }, - - // ========== Person - Professional Services ========== - // Canonical - { keyword: 'analyst', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'consultant', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'specialist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'expert', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'professional', type: NounType.Person, confidence: 0.85, isCanonical: true }, - { keyword: 'lawyer', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'attorney', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'accountant', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'auditor', type: NounType.Person, confidence: 0.90, isCanonical: true }, - - // Synonyms - { keyword: 'advisor', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'counselor', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'paralegal', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'legal counsel', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'business analyst', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'financial analyst', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'data analyst', type: NounType.Person, confidence: 0.90, isCanonical: false }, - - // ========== Person - Education & Research ========== - // Canonical - { keyword: 'teacher', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'professor', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'researcher', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'scientist', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'student', type: NounType.Person, confidence: 0.95, isCanonical: true }, - - // Synonyms - { keyword: 'instructor', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'educator', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'tutor', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'scholar', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'academic', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'pupil', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'learner', type: NounType.Person, confidence: 0.80, isCanonical: false }, - { keyword: 'trainee', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'intern', type: NounType.Person, confidence: 0.85, isCanonical: false }, - - // ========== Person - Creative Professions ========== - // Canonical - { keyword: 'artist', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'musician', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'writer', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'author', type: NounType.Person, confidence: 0.90, isCanonical: true }, - - // Synonyms - { keyword: 'painter', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'sculptor', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'performer', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'journalist', type: NounType.Person, confidence: 0.90, isCanonical: false }, - { keyword: 'editor', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'reporter', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'content creator', type: NounType.Person, confidence: 0.80, isCanonical: false }, - { keyword: 'blogger', type: NounType.Person, confidence: 0.80, isCanonical: false }, - - // ========== Person - General ========== - { keyword: 'person', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'people', type: NounType.Person, confidence: 0.95, isCanonical: true }, - { keyword: 'individual', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'human', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'employee', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'worker', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'staff', type: NounType.Person, confidence: 0.90, isCanonical: true }, - { keyword: 'personnel', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'member', type: NounType.Person, confidence: 0.85, isCanonical: false }, - { keyword: 'team', type: NounType.Person, confidence: 0.80, isCanonical: false }, - - // Continuing with the rest... (this is getting long, so I'll create a comprehensive version) - // Let me structure this better by importing from the existing typeInference and expanding it -] - -// Note: This file will be completed with all 1500+ keywords in the actual implementation -// For now, this shows the structure and approach diff --git a/src/db/db.ts b/src/db/db.ts index 39df27a0..82aff289 100644 --- a/src/db/db.ts +++ b/src/db/db.ts @@ -52,7 +52,7 @@ import type { Entity, FindParams, GetOptions, - GetRelationsParams, + RelatedParams, Relation, Result } from '../types/brainy.types.js' @@ -61,6 +61,7 @@ import { splitVerbMetadataRecord } from '../types/reservedFields.js' import { v4 as uuidv4 } from '../universal/uuid.js' +import { EntityNotFoundError } from '../errors/notFound.js' import { SpeculativeOverlayError } from './errors.js' import type { GenerationStore } from './generationStore.js' import type { ChangedIds, TransactReceipt, TxOperation } from './types.js' @@ -76,8 +77,8 @@ import { entityMatchesFind, resolveEntityField, UnsupportedWhereOperatorError } export interface HistoricalQueryHandle { /** Full `find()` surface (vector/semantic/graph/cursor/aggregate) at the pinned generation. */ find(query: string | FindParams): Promise[]> - /** Full `getRelations()` surface (including cursor pagination) at the pinned generation. */ - getRelations(paramsOrId?: string | GetRelationsParams): Promise[]> + /** Full `related()` surface (including cursor pagination) at the pinned generation. */ + related(paramsOrId?: string | RelatedParams): Promise[]> /** Free the materialized indexes (closes the ephemeral reader). Idempotent. */ close(): Promise } @@ -108,8 +109,8 @@ export interface DbHost { get(id: string, options?: GetOptions): Promise | null> /** Live `brain.find()` (current-generation fast path). */ find(query: string | FindParams): Promise[]> - /** Live `brain.getRelations()` (current-generation fast path). */ - getRelations(paramsOrId?: string | GetRelationsParams): Promise[]> + /** Live `brain.related()` (current-generation fast path). */ + related(paramsOrId?: string | RelatedParams): Promise[]> /** Materialize an entity from a generation record's raw stored objects. */ entityFromRecord( id: string, @@ -410,7 +411,7 @@ export class Db { /** * @description Relationships **as of this view's generation** — the `Db` - * counterpart of `brain.getRelations()` (same string-id shorthand and + * counterpart of `brain.related()` (same string-id shorthand and * filter surface). Relations whose edges changed after the pin are * resolved from generation records; overlay relations (speculative * `relate`/`unrelate`) and cascade tombstones (relations touching a @@ -420,18 +421,18 @@ export class Db { * speculative overlay it throws {@link SpeculativeOverlayError}. * * @param paramsOrId - An entity id (shorthand for `{ from: id }`) or a - * `GetRelationsParams` filter object. + * `RelatedParams` filter object. * @returns Relations as of this generation. */ - async related(paramsOrId?: string | GetRelationsParams): Promise[]> { + async related(paramsOrId?: string | RelatedParams): Promise[]> { this.assertUsable('related') - const params: GetRelationsParams = + const params: RelatedParams = typeof paramsOrId === 'string' ? { from: paramsOrId } : (paramsOrId ?? {}) const historical = this.isHistorical() if (!historical && !this.overlay) { - return this.host.getRelations(paramsOrId) + return this.host.related(paramsOrId) } if (params.cursor !== undefined) { @@ -439,7 +440,7 @@ export class Db { throw new SpeculativeOverlayError('cursor pagination on related()', this.gen) } const materialized = await this.materialize() - return materialized.getRelations(params) + return materialized.related(params) } const limit = params.limit ?? 100 @@ -451,7 +452,7 @@ export class Db { const overlayVerbs = this.overlay?.verbs ?? new Map | null>() const excluded = new Set([...changedVerbs, ...overlayVerbs.keys()]) - const base = await this.host.getRelations({ + const base = await this.host.related({ ...params, limit: limit + offset + excluded.size, offset: 0 @@ -480,7 +481,7 @@ export class Db { // Cascade semantics for speculative deletes: a relation whose endpoint // is tombstoned in the overlay is gone in this view, exactly as - // brain.delete() cascades on the durable path. + // brain.remove() cascades on the durable path. if (this.overlay) { const tombstoned = new Set() for (const [id, entity] of this.overlay.nouns) { @@ -524,8 +525,8 @@ export class Db { * * @param ops - The same declarative operations `brain.transact()` accepts. * @returns A new speculative `Db` over this view. - * @throws Error when an operation references a missing entity/relation, - * mirroring the durable path's planning errors. + * @throws EntityNotFoundError when an operation references a missing + * entity, mirroring the durable path's planning errors. */ async with(ops: TxOperation[]): Promise> { this.assertUsable('with') @@ -587,7 +588,10 @@ export class Db { case 'update': { const base = await speculativeGet(op.id) if (!base) { - throw new Error(`with(): entity ${op.id} not found at generation ${this.gen}`) + throw new EntityNotFoundError( + op.id, + `with(): entity ${op.id} not found at generation ${this.gen}` + ) } // Same reserved-field normalization as the committed update path. const { reserved, custom } = splitNounMetadataRecord( @@ -631,8 +635,12 @@ export class Db { case 'relate': { const from = await speculativeGet(op.from) const to = await speculativeGet(op.to) - if (!from) throw new Error(`with(): source entity ${op.from} not found`) - if (!to) throw new Error(`with(): target entity ${op.to} not found`) + if (!from) { + throw new EntityNotFoundError(op.from, `with(): source entity ${op.from} not found`) + } + if (!to) { + throw new EntityNotFoundError(op.to, `with(): target entity ${op.to} not found`) + } // Dedupe against the view (overlay first, then the edges visible // at this generation via the record layer) — mirror of relate(). @@ -934,11 +942,11 @@ function sortResultsBy(results: Result[], orderBy: string, order: 'asc' | } /** - * @description Filter one relation against `GetRelationsParams`, mirroring - * the storage-level filter `brain.getRelations()` builds (`from` → sourceId, + * @description Filter one relation against `RelatedParams`, mirroring + * the storage-level filter `brain.related()` builds (`from` → sourceId, * `to` → targetId, type/subtype set membership, service equality). */ -function relationMatchesParams(relation: Relation, params: GetRelationsParams): boolean { +function relationMatchesParams(relation: Relation, params: RelatedParams): boolean { if (params.from !== undefined && relation.from !== params.from) return false if (params.to !== undefined && relation.to !== params.to) return false if (params.type !== undefined) { diff --git a/src/db/types.ts b/src/db/types.ts index 26d19a27..041729dd 100644 --- a/src/db/types.ts +++ b/src/db/types.ts @@ -53,14 +53,14 @@ export interface TxUpdateOperation extends UpdateParams { } /** - * @description Delete an entity (and, exactly like `brain.delete()`, every + * @description Remove an entity (and, exactly like `brain.remove()`, every * relationship where it is source or target — the cascade is part of the * same atomic batch). */ export interface TxRemoveOperation { /** Discriminator. */ op: 'remove' - /** Id of the entity to delete. */ + /** Id of the entity to remove. */ id: string } diff --git a/src/distributed/coordinator.ts b/src/distributed/coordinator.ts index dfb2eecc..5aff6ebc 100644 --- a/src/distributed/coordinator.ts +++ b/src/distributed/coordinator.ts @@ -123,12 +123,13 @@ export class DistributedCoordinator extends EventEmitter { */ private setupNetworkHandlers(): void { if (!this.networkTransport) return - - // Register message handlers directly on the messageHandlers map - const handlers = (this.networkTransport as any).messageHandlers as Map Promise> - + + // Register handlers through the transport's public onMessage(), which + // writes to the same messageHandlers map this code used to reach into. + const transport = this.networkTransport + // Handle vote requests - handlers.set('requestVote', async (msg: NetworkMessage) => { + transport.onMessage('requestVote', async (msg: NetworkMessage) => { const response = await this.handleVoteRequest(msg) // Send response back if (this.networkTransport) { @@ -138,12 +139,12 @@ export class DistributedCoordinator extends EventEmitter { }) // Handle vote responses - handlers.set('voteResponse', async (msg: NetworkMessage) => { + transport.onMessage('voteResponse', async (msg: NetworkMessage) => { this.handleVoteResponse(msg) }) // Handle heartbeats/append entries - handlers.set('appendEntries', async (msg: NetworkMessage) => { + transport.onMessage('appendEntries', async (msg: NetworkMessage) => { const response = await this.handleAppendEntries(msg) // Send response back if (this.networkTransport) { @@ -153,7 +154,7 @@ export class DistributedCoordinator extends EventEmitter { }) // Handle append responses - handlers.set('appendResponse', async (msg: NetworkMessage) => { + transport.onMessage('appendResponse', async (msg: NetworkMessage) => { this.handleAppendResponse(msg) }) } diff --git a/src/distributed/networkTransport.ts b/src/distributed/networkTransport.ts index f18cc9cf..9f16be7a 100644 --- a/src/distributed/networkTransport.ts +++ b/src/distributed/networkTransport.ts @@ -75,7 +75,12 @@ export class NetworkTransport extends EventEmitter { if (this.isRunning) return const ws = await import('ws') - WebSocketServer = (ws as any).WebSocketServer || (ws as any).Server || ws.default + // The ws package has exported its server class as `WebSocketServer` + // (v8+), `Server` (older releases) and via the default export — and the + // available type declarations disagree on which of those are value + // exports, so probe all three through an optional-keyed module view. + const wsModule = ws as typeof ws & { WebSocketServer?: unknown; Server?: unknown } + WebSocketServer = wsModule.WebSocketServer || wsModule.Server || ws.default await this.startHTTPServer() await this.startWebSocketServer() diff --git a/src/distributed/storageDiscovery.ts b/src/distributed/storageDiscovery.ts index 930ce1f1..07329432 100644 --- a/src/distributed/storageDiscovery.ts +++ b/src/distributed/storageDiscovery.ts @@ -6,7 +6,7 @@ import { EventEmitter } from 'node:events' import * as os from 'node:os' -import { StorageAdapter } from '../coreTypes.js' +import { NounMetadata, StorageAdapter } from '../coreTypes.js' export interface NodeInfo { id: string @@ -357,7 +357,11 @@ export class StorageDiscovery extends EventEmitter { */ private async loadNodeRegistry(): Promise { try { - const registry = await this.storage.getMetadata(`${this.CLUSTER_PATH}/registry.json`) as any + // The registry document is written by updateNodeRegistry() below with a + // `nodes` string-ID array on top of the base NounMetadata shape. + const registry = await this.storage.getMetadata( + `${this.CLUSTER_PATH}/registry.json` + ) as (NounMetadata & { nodes?: string[] }) | null return registry?.nodes || [] } catch (err) { return [] diff --git a/src/embeddings/EmbeddingManager.ts b/src/embeddings/EmbeddingManager.ts index e2020d4d..49cea154 100644 --- a/src/embeddings/EmbeddingManager.ts +++ b/src/embeddings/EmbeddingManager.ts @@ -15,6 +15,17 @@ import { Vector, EmbeddingFunction } from '../coreTypes.js' import { WASMEmbeddingEngine } from './wasm/index.js' +declare global { + /** + * Unit-test escape hatch set by the test harness (tests/setup-unit.ts): + * when truthy, EmbeddingManager serves deterministic mock embeddings + * instead of loading the real model. Guarded against production use in + * init()/embed()/embedBatch(). Ambient `var` is required here — `let`/ + * `const` in `declare global` do not attach to `globalThis`. + */ + var __BRAINY_UNIT_TEST__: boolean | undefined +} + // Types export type ModelPrecision = 'q8' | 'fp32' @@ -68,7 +79,7 @@ export class EmbeddingManager { // In unit test mode, skip real model initialization const isTestMode = process.env.BRAINY_UNIT_TEST === 'true' || - (globalThis as any).__BRAINY_UNIT_TEST__ + globalThis.__BRAINY_UNIT_TEST__ if (isTestMode) { // Production safeguard @@ -142,7 +153,7 @@ export class EmbeddingManager { // Check for unit test environment const isTestMode = process.env.BRAINY_UNIT_TEST === 'true' || - (globalThis as any).__BRAINY_UNIT_TEST__ + globalThis.__BRAINY_UNIT_TEST__ if (isTestMode) { if (process.env.NODE_ENV === 'production') { @@ -224,7 +235,7 @@ export class EmbeddingManager { const isTestMode = process.env.BRAINY_UNIT_TEST === 'true' || - (globalThis as any).__BRAINY_UNIT_TEST__ + globalThis.__BRAINY_UNIT_TEST__ if (isTestMode) { if (process.env.NODE_ENV === 'production') { diff --git a/src/errors/notFound.ts b/src/errors/notFound.ts new file mode 100644 index 00000000..8eca9b2e --- /dev/null +++ b/src/errors/notFound.ts @@ -0,0 +1,79 @@ +/** + * @module errors/notFound + * @description Named not-found errors for Brainy's public contract. + * + * Operations that require an existing record — `update()`, `relate()`, + * `updateRelation()`, `similar({ to: id })`, `transact()` planning, and + * speculative `db.with()` planning — throw these instead of a generic + * `Error`, so callers can branch with `instanceof` and read the missing + * `id` programmatically instead of parsing message strings: + * + * - {@link EntityNotFoundError} — a referenced entity (noun) does not exist + * in the store (or, for `db.with()`, is not visible at the pinned + * generation). + * - {@link RelationNotFoundError} — a referenced relationship (verb) does + * not exist. + * + * Both are exported from the package root (`@soulcraft/brainy`). + */ + +/** + * @description Thrown when an operation references an entity id that does + * not exist. Carries the missing {@link EntityNotFoundError.id} so callers + * can recover (re-create, skip, or surface it) without string matching. + * + * @example + * try { + * await brain.update({ id, metadata: { status: 'active' } }) + * } catch (err) { + * if (err instanceof EntityNotFoundError) { + * console.log(`missing entity: ${err.id}`) + * } + * } + */ +export class EntityNotFoundError extends Error { + /** The entity id that could not be found. */ + public readonly id: string + + /** + * @param id - The entity id that could not be found. + * @param message - Optional message override for call sites that add + * context (e.g. source/target role, pinned generation). Defaults to + * `Entity not found`. + */ + constructor(id: string, message?: string) { + super(message ?? `Entity ${id} not found`) + this.name = 'EntityNotFoundError' + this.id = id + } +} + +/** + * @description Thrown when an operation references a relationship id that + * does not exist. Carries the missing {@link RelationNotFoundError.id} so + * callers can recover without string matching. + * + * @example + * try { + * await brain.updateRelation({ id: relId, subtype: 'dotted-line' }) + * } catch (err) { + * if (err instanceof RelationNotFoundError) { + * console.log(`missing relation: ${err.id}`) + * } + * } + */ +export class RelationNotFoundError extends Error { + /** The relationship id that could not be found. */ + public readonly id: string + + /** + * @param id - The relationship id that could not be found. + * @param message - Optional message override for call sites that add + * context. Defaults to `Relation not found`. + */ + constructor(id: string, message?: string) { + super(message ?? `Relation ${id} not found`) + this.name = 'RelationNotFoundError' + this.id = id + } +} diff --git a/src/graph/graphAdjacencyIndex.ts b/src/graph/graphAdjacencyIndex.ts index d0e21b6c..22dfadfd 100644 --- a/src/graph/graphAdjacencyIndex.ts +++ b/src/graph/graphAdjacencyIndex.ts @@ -570,9 +570,9 @@ export class GraphAdjacencyIndex implements GraphIndexProvider { for (const [verbId, verb] of loadedVerbs.entries()) { const cacheKey = `graph:verb:${verbId}` // Cache the loaded verb with metadata - // Note: HNSWVerbWithMetadata is compatible with GraphVerb (both interfaces) - this.unifiedCache.set(cacheKey, verb as any, 'other', 128, 50) // 128 bytes estimated size, 50ms rebuild cost - results.set(verbId, verb as any) + // Note: HNSWVerbWithMetadata is structurally assignable to GraphVerb + this.unifiedCache.set(cacheKey, verb, 'other', 128, 50) // 128 bytes estimated size, 50ms rebuild cost + results.set(verbId, verb) } } diff --git a/src/graph/lsm/LSMTree.ts b/src/graph/lsm/LSMTree.ts index 20933769..32f941bb 100644 --- a/src/graph/lsm/LSMTree.ts +++ b/src/graph/lsm/LSMTree.ts @@ -145,6 +145,26 @@ class MemTable { /** * Manifest - Tracks all SSTables and their levels */ +/** + * Persisted manifest payload as written by `saveManifest()` (the `data` field + * of the manifest metadata record, after a JSON round-trip). + */ +type PersistedManifestData = { + sstables?: Record + lastCompaction?: number + totalRelationships?: number +} + +/** + * Persisted SSTable payload as written by `flushMemTable()`/`compact()` (the + * `data` field of an SSTable metadata record): serialized bytes stored as a + * plain number array so they survive JSON round-trips. + */ +type PersistedSSTableData = { + type: string + data: number[] +} + interface Manifest { /** * Map of SSTable ID to level @@ -512,10 +532,12 @@ export class LSMTree { const metadata = await this.storage.getMetadata(`${this.config.storagePrefix}-manifest`) if (metadata && metadata.data) { - const data = metadata.data as any + // Storage boundary: `data` is the JSON manifest payload written by + // saveManifest(); re-typed from the metadata channel's `unknown`. + const data = metadata.data as PersistedManifestData this.manifest.sstables = new Map(Object.entries(data.sstables || {})) - this.manifest.lastCompaction = (data.lastCompaction as number) || Date.now() - this.manifest.totalRelationships = (data.totalRelationships as number) || 0 + this.manifest.lastCompaction = data.lastCompaction || Date.now() + this.manifest.totalRelationships = data.totalRelationships || 0 // Load SSTables from storage await this.loadSSTables() @@ -538,7 +560,9 @@ export class LSMTree { const metadata = await this.storage.getMetadata(storageKey) if (metadata && metadata.data) { - const data = metadata.data as any + // Storage boundary: `data` is the JSON SSTable payload written by + // flushMemTable()/compact(); re-typed from `unknown`. + const data = metadata.data as PersistedSSTableData if (data.type === 'lsm-sstable') { // Convert number[] back to Uint8Array const uint8Data = new Uint8Array(data.data) diff --git a/src/hnsw/hnswIndex.ts b/src/hnsw/hnswIndex.ts index 742b088d..b5a7468f 100644 --- a/src/hnsw/hnswIndex.ts +++ b/src/hnsw/hnswIndex.ts @@ -1228,7 +1228,7 @@ export class JsHnswVectorIndex implements VectorIndexProvider { this.clear() // Step 2: Load system data (entry point, max level) - const systemData = await (this.storage as any).getHNSWSystem() + const systemData = await this.storage.getHNSWSystem() if (systemData) { this.entryPointId = systemData.entryPointId this.maxLevel = systemData.maxLevel @@ -1270,13 +1270,9 @@ export class JsHnswVectorIndex implements VectorIndexProvider { { prodLog.info(`HNSW: Load all nodes at once (${storageType})`) - const result: { - items: HNSWNoun[] - totalCount?: number - hasMore: boolean - nextCursor?: string - } = await (this.storage as any).getNounsWithPagination({ - limit: 10000000 // Effectively unlimited for local development + const result = await this.storage.getNounsWithPagination({ + limit: 10000000, // Effectively unlimited for local development + offset: 0 }) totalCount = result.totalCount || result.items.length @@ -1285,7 +1281,7 @@ export class JsHnswVectorIndex implements VectorIndexProvider { for (const nounData of result.items) { try { // Load HNSW graph data for this entity - const hnswData = await (this.storage as any).getVectorIndexData(nounData.id) + const hnswData = await this.storage.getVectorIndexData(nounData.id) if (!hnswData) { // No HNSW data - skip (might be entity added before persistence) diff --git a/src/import/BackgroundDeduplicator.ts b/src/import/BackgroundDeduplicator.ts index 70b93d46..53b28262 100644 --- a/src/import/BackgroundDeduplicator.ts +++ b/src/import/BackgroundDeduplicator.ts @@ -123,7 +123,7 @@ export class BackgroundDeduplicator { try { // Get all entities from this import using brain.find() const results = await this.brain.find({ - where: { importId } as any, + where: { importId }, limit: 100000 // Large limit to get all entities from import }) @@ -298,7 +298,7 @@ export class BackgroundDeduplicator { return this.brain.find({ query, limit: 5, - where: { type: entity.type } as any // Type-aware search + where: { type: entity.type } // Type-aware search }) }) @@ -318,8 +318,11 @@ export class BackgroundDeduplicator { // Check if not already merged const stillExists = await this.brain.get(entity.id) if (stillExists) { - // Cast match.entity to HNSWNounWithMetadata (it comes from brain.find results) - const matchEntity = match.entity as any as HNSWNounWithMetadata + // Typed boundary: bridge the public Entity result shape from + // brain.find() to the storage-layer HNSWNounWithMetadata record + // (same structural bridge as the results.map above). The merge + // path only reads id/type/metadata, present in both shapes. + const matchEntity = match.entity as unknown as HNSWNounWithMetadata await this.mergeEntities([entity, matchEntity], 'Similarity') merged++ break // Only merge with first high-similarity match @@ -388,7 +391,7 @@ export class BackgroundDeduplicator { for (const entity of entities) { if (entity.id !== primary.id) { try { - await this.brain.delete(entity.id) + await this.brain.remove(entity.id) } catch (error) { // Entity might already be deleted, continue prodLog.debug(`[BackgroundDedup] Could not delete ${entity.id}:`, error) diff --git a/src/import/EntityDeduplicator.ts b/src/import/EntityDeduplicator.ts index 08247695..306e349a 100644 --- a/src/import/EntityDeduplicator.ts +++ b/src/import/EntityDeduplicator.ts @@ -88,7 +88,7 @@ export class EntityDeduplicator { const results = await this.brain.find({ query: searchText, limit: 5, - where: opts.strictTypeMatching ? { type: candidate.type } as any : undefined + where: opts.strictTypeMatching ? { type: candidate.type } : undefined }) // Check each result for potential duplicates @@ -227,7 +227,9 @@ export class EntityDeduplicator { const entityId = await this.brain.add({ data: candidate.description || candidate.name, type: candidate.type, - subtype: (candidate as any).subtype ?? 'imported', + subtype: + (candidate as EntityCandidate & { subtype?: string }).subtype ?? + 'imported', confidence: candidate.confidence, metadata: { ...candidate.metadata, diff --git a/src/import/ImportCoordinator.ts b/src/import/ImportCoordinator.ts index 8adee43c..60f4b21e 100644 --- a/src/import/ImportCoordinator.ts +++ b/src/import/ImportCoordinator.ts @@ -12,7 +12,7 @@ import { Brainy } from '../brainy.js' import { FormatDetector, SupportedFormat } from './FormatDetector.js' -import { ImportHistory } from './ImportHistory.js' +import { ImportHistory, type ImportHistoryEntry } from './ImportHistory.js' import { BackgroundDeduplicator } from './BackgroundDeduplicator.js' import { SmartExcelImporter } from '../importers/SmartExcelImporter.js' import { SmartPDFImporter } from '../importers/SmartPDFImporter.js' @@ -489,7 +489,13 @@ export class ImportCoordinator { await this.history.recordImport( importId, { - type: normalizedSource.type === 'path' ? 'file' : normalizedSource.type as any, + // 'url' sources were already converted to 'buffer' by + // normalizeSource() → fetchUrl(), so only history-recordable + // source types remain here after the 'path' → 'file' mapping. + type: + normalizedSource.type === 'path' + ? 'file' + : (normalizedSource.type as ImportHistoryEntry['source']['type']), filename: normalizedSource.filename, format: detection.format }, @@ -699,11 +705,25 @@ export class ImportCoordinator { format: SupportedFormat, options: ImportOptions ): Promise { - // Check if IntelligentImportAugmentation already extracted data - if ((options as any)._intelligentImport && (options as any)._extractedData) { - const extractedData = (options as any)._extractedData + // Check if IntelligentImportAugmentation already extracted data. + // Typed boundary: the intelligent-import pre-processing path smuggles its + // results onto ImportOptions via these underscore-prefixed private fields — + // they are not part of the public ImportOptions contract. + const intelligentOptions = options as ImportOptions & { + _intelligentImport?: boolean + _extractedData?: Array<{ + id?: string + name?: string + type?: string + description?: string + metadata?: Record + }> + _metadata?: { intelligentImport?: Record } + } + if (intelligentOptions._intelligentImport && intelligentOptions._extractedData) { + const extractedData = intelligentOptions._extractedData // Convert extracted data to ExtractedRow format - const rows = extractedData.map((item: any) => ({ + const rows = extractedData.map((item) => ({ entity: { id: item.id || `entity-${Date.now()}-${Math.random()}`, name: item.name || item.type || 'Unnamed', @@ -719,7 +739,7 @@ export class ImportCoordinator { rows, entities: extractedData, relationships: [], - metadata: (options as any)._metadata?.intelligentImport || {}, + metadata: intelligentOptions._metadata?.intelligentImport || {}, stats: { byType: {}, byConfidence: {} @@ -811,7 +831,7 @@ export class ImportCoordinator { entity: { id: imageId, name: imageName, - type: 'media' as any, + type: 'media', description: '', confidence: 1.0, metadata: { subtype: 'image' } @@ -864,7 +884,18 @@ export class ImportCoordinator { provenanceCount?: number }> { const entities: Array<{ id: string; name: string; type: NounType; vfsPath?: string; metadata?: Record }> = [] - const relationships: Array<{ id: string; from: string; to: string; type: VerbType }> = [] + // Wider than the declared return type: confidence/weight/metadata are + // collected per relationship for the relateMany() batch below; callers of + // createGraphEntities() only see the narrower {id, from, to, type} rows. + const relationships: Array<{ + id: string + from: string + to: string + type: VerbType + confidence?: number + weight?: number + metadata?: { evidence?: string; [key: string]: unknown } + }> = [] let mergedCount = 0 let newCount = 0 @@ -1227,7 +1258,7 @@ export class ImportCoordinator { ...trackingContext.customMetadata }) } - } as any) + }) } catch (error) { // Skip relationship collection errors (entity might not exist, etc.) continue @@ -1314,7 +1345,7 @@ export class ImportCoordinator { verbType = this.inferRelationshipType( sourceEntity.type, targetEntity.type, - (rel as any).metadata?.evidence + rel.metadata?.evidence ) } @@ -1323,7 +1354,7 @@ export class ImportCoordinator { to: rel.to, type: verbType, // Enhanced type metadata: { - ...((rel as any).metadata || {}), + ...(rel.metadata || {}), relationshipType: 'semantic', // Distinguish from VFS/provenance inferredType: verbType !== rel.type, // Track if type was enhanced originalType: rel.type diff --git a/src/import/ImportHistory.ts b/src/import/ImportHistory.ts index c3fe7439..7fac83e1 100644 --- a/src/import/ImportHistory.ts +++ b/src/import/ImportHistory.ts @@ -165,7 +165,7 @@ export class ImportHistory { // Delete entities for (const entityId of entry.entities) { try { - await this.brain.delete(entityId) + await this.brain.remove(entityId) result.entitiesDeleted++ } catch (error) { result.errors.push(`Failed to delete entity ${entityId}: ${error instanceof Error ? error.message : String(error)}`) diff --git a/src/importers/SmartCSVImporter.ts b/src/importers/SmartCSVImporter.ts index 7de6c0dd..ab133487 100644 --- a/src/importers/SmartCSVImporter.ts +++ b/src/importers/SmartCSVImporter.ts @@ -164,7 +164,9 @@ export class SmartCSVImporter { relatedColumn: 'related|see also|links|references', csvDelimiter: undefined as string | undefined, csvHeaders: true, - onProgress: () => {}, + // Annotated with the full callback signature so the merged opts type has + // a single callable shape (the no-op default narrowed the union). + onProgress: (() => {}) as NonNullable, ...options } @@ -379,7 +381,7 @@ export class SmartCSVImporter { throughput: Math.round(rowsPerSecond * 10) / 10, eta: Math.round(estimatedTimeRemaining), phase: 'extracting' - } as any) + }) } return { diff --git a/src/importers/SmartExcelImporter.ts b/src/importers/SmartExcelImporter.ts index 83f47cf2..2020b3b6 100644 --- a/src/importers/SmartExcelImporter.ts +++ b/src/importers/SmartExcelImporter.ts @@ -161,15 +161,9 @@ export class SmartExcelImporter { const opts = { enableNeuralExtraction: true, enableRelationshipInference: true, - // CONCEPT EXTRACTION PRODUCTION-READY: - // Type embeddings are now pre-computed at build time - zero runtime cost! - // All 42 noun types + 127 verb types instantly available - // - // Performance profile: - // - Type embeddings: INSTANT (pre-computed at build time, ~100KB in-memory) - // - Model loading: ~2-5 seconds (one-time, cached after first use) - // - Per-row extraction: ~50-200ms depending on definition length - // - 100 rows: ~5-20 seconds total (production ready) + // Type embeddings are pre-computed at build time (~100KB in-memory), + // so concept extraction costs no runtime embedding calls: model loading + // is a one-time ~2-5s, then ~50-200ms per row. // - 1000 rows: ~50-200 seconds (disable if needed via enableConceptExtraction: false) // // Enabled by default for production use. @@ -179,7 +173,9 @@ export class SmartExcelImporter { definitionColumn: 'definition|description|desc|details', typeColumn: 'type|category|kind', relatedColumn: 'related|see also|links', - onProgress: () => {}, + // Annotated with the full callback signature so the merged opts type has + // a single callable shape (the no-op default narrowed the union). + onProgress: (() => {}) as NonNullable, ...options } @@ -489,7 +485,7 @@ export class SmartExcelImporter { throughput: Math.round(rowsPerSecond * 10) / 10, eta: Math.round(estimatedTimeRemaining), phase: 'extracting' - } as any) + }) } // Group rows by sheet for VFS extraction diff --git a/src/importers/SmartImportOrchestrator.ts b/src/importers/SmartImportOrchestrator.ts index 962476e4..d9157852 100644 --- a/src/importers/SmartImportOrchestrator.ts +++ b/src/importers/SmartImportOrchestrator.ts @@ -133,7 +133,10 @@ export class SmartImportOrchestrator { const startTime = Date.now() const result: SmartImportResult = { success: false, - extraction: null as any, + // Typed boundary: populated in the extraction phase below. If extraction + // throws, the error path returns with this still null (pre-existing + // contract — consumers check `success`/`errors` before reading it). + extraction: null as unknown as SmartExcelResult, entityIds: [], relationshipIds: [], stats: { @@ -193,7 +196,9 @@ export class SmartImportOrchestrator { const entityId = await this.brain.add({ data: extracted.entity.description, type: extracted.entity.type, - subtype: (extracted.entity as any).subtype ?? options.defaultSubtype ?? 'imported', + subtype: + (extracted.entity as typeof extracted.entity & { subtype?: string }) + .subtype ?? options.defaultSubtype ?? 'imported', confidence: extracted.entity.confidence, // reserved field — dedicated param, not metadata metadata: { ...extracted.entity.metadata, @@ -280,7 +285,9 @@ export class SmartImportOrchestrator { from: extracted.entity.id, to: toEntityId, type: rel.type, - subtype: (rel as any).subtype ?? options.defaultSubtype ?? 'imported', + subtype: + (rel as typeof rel & { subtype?: string }).subtype ?? + options.defaultSubtype ?? 'imported', metadata: { confidence: rel.confidence, evidence: rel.evidence @@ -393,7 +400,8 @@ export class SmartImportOrchestrator { const startTime = Date.now() const result: SmartImportResult = { success: false, - extraction: null as any, + // Typed boundary: populated after extraction (see importExcel). + extraction: null as unknown as SmartExcelResult, entityIds: [], relationshipIds: [], stats: { @@ -413,7 +421,7 @@ export class SmartImportOrchestrator { const pdfResult = await this.pdfImporter.extract(buffer, options) // Convert PDF result to Excel-like format for processing - result.extraction = this.convertPDFToExcelFormat(pdfResult) as any + result.extraction = this.convertPDFToExcelFormat(pdfResult) result.stats.rowsProcessed = pdfResult.sectionsProcessed // Phase 2 & 3: Create entities and relationships @@ -470,7 +478,8 @@ export class SmartImportOrchestrator { const startTime = Date.now() const result: SmartImportResult = { success: false, - extraction: null as any, + // Typed boundary: populated after extraction (see importExcel). + extraction: null as unknown as SmartExcelResult, entityIds: [], relationshipIds: [], stats: { @@ -488,7 +497,7 @@ export class SmartImportOrchestrator { const jsonResult = await this.jsonImporter.extract(data, options) - result.extraction = this.convertJSONToExcelFormat(jsonResult) as any + result.extraction = this.convertJSONToExcelFormat(jsonResult) result.stats.rowsProcessed = jsonResult.nodesProcessed await this.createEntitiesAndRelationships(result, options, onProgress) @@ -532,7 +541,8 @@ export class SmartImportOrchestrator { const startTime = Date.now() const result: SmartImportResult = { success: false, - extraction: null as any, + // Typed boundary: populated after extraction (see importExcel). + extraction: null as unknown as SmartExcelResult, entityIds: [], relationshipIds: [], stats: { @@ -550,7 +560,7 @@ export class SmartImportOrchestrator { const mdResult = await this.markdownImporter.extract(markdown, options) - result.extraction = this.convertMarkdownToExcelFormat(mdResult) as any + result.extraction = this.convertMarkdownToExcelFormat(mdResult) result.stats.rowsProcessed = mdResult.sectionsProcessed await this.createEntitiesAndRelationships(result, options, onProgress) @@ -601,7 +611,9 @@ export class SmartImportOrchestrator { const entityId = await this.brain.add({ data: extracted.entity.description, type: extracted.entity.type, - subtype: (extracted.entity as any).subtype ?? options.defaultSubtype ?? 'imported', + subtype: + (extracted.entity as typeof extracted.entity & { subtype?: string }) + .subtype ?? options.defaultSubtype ?? 'imported', confidence: extracted.entity.confidence, // reserved field — dedicated param, not metadata metadata: { ...extracted.entity.metadata, name: extracted.entity.name, importedFrom: 'smart-import' } }) @@ -637,7 +649,7 @@ export class SmartImportOrchestrator { } // Relationship subtype precedence: extractor → caller default → `'imported'` (7.30.1). // `confidence` is a reserved top-level field — dedicated relate() param, not metadata - relationshipParams.push({ from: extracted.entity.id, to: toEntityId, type: rel.type, subtype: (rel as any).subtype ?? options.defaultSubtype ?? 'imported', confidence: rel.confidence, metadata: { evidence: rel.evidence } }) + relationshipParams.push({ from: extracted.entity.id, to: toEntityId, type: rel.type, subtype: (rel as typeof rel & { subtype?: string }).subtype ?? options.defaultSubtype ?? 'imported', confidence: rel.confidence, metadata: { evidence: rel.evidence } }) } catch (error: any) { result.errors.push(`Failed to prepare relationship: ${error.message}`) } @@ -688,7 +700,7 @@ export class SmartImportOrchestrator { rows, entityMap: pdfResult.entityMap, processingTime: pdfResult.processingTime, - stats: pdfResult.stats as any + stats: pdfResult.stats } } @@ -710,7 +722,7 @@ export class SmartImportOrchestrator { rows, entityMap: jsonResult.entityMap, processingTime: jsonResult.processingTime, - stats: jsonResult.stats as any + stats: jsonResult.stats } } @@ -734,7 +746,7 @@ export class SmartImportOrchestrator { rows, entityMap: mdResult.entityMap, processingTime: mdResult.processingTime, - stats: mdResult.stats as any + stats: mdResult.stats } } diff --git a/src/importers/SmartPDFImporter.ts b/src/importers/SmartPDFImporter.ts index d4dfd93d..9e0af07c 100644 --- a/src/importers/SmartPDFImporter.ts +++ b/src/importers/SmartPDFImporter.ts @@ -176,7 +176,9 @@ export class SmartPDFImporter { minParagraphLength: 50, extractFromTables: true, groupBy: 'document' as const, - onProgress: () => {}, + // Annotated with the full callback signature so the merged opts type has + // a single callable shape (the no-op default narrowed the union). + onProgress: (() => {}) as NonNullable, ...options } @@ -274,7 +276,7 @@ export class SmartPDFImporter { throughput: Math.round(sectionsPerSecond * 10) / 10, eta: Math.round(estimatedTimeRemaining), phase: 'extracting' - } as any) + }) } const pagesProcessed = new Set(data.map(d => d._page)).size @@ -338,7 +340,7 @@ export class SmartPDFImporter { * Process a single section */ private async processSection( - group: { id: string, type: string, items: Array> }, + group: { id: string, type: 'page' | 'paragraph' | 'table', items: Array> }, options: SmartPDFOptions, stats: SmartPDFResult['stats'], entityMap: Map @@ -444,7 +446,7 @@ export class SmartPDFImporter { return { sectionId: group.id, - sectionType: group.type as any, + sectionType: group.type, entities, relationships, concepts, diff --git a/src/importers/handlers/excelHandler.ts b/src/importers/handlers/excelHandler.ts index 42ea59d8..b4dbf10e 100644 --- a/src/importers/handlers/excelHandler.ts +++ b/src/importers/handlers/excelHandler.ts @@ -69,13 +69,14 @@ export class ExcelHandler extends BaseFormatHandler { const sheet = workbook.Sheets[sheetName] if (!sheet) continue - // Convert sheet to JSON with headers - const sheetData = XLSX.utils.sheet_to_json(sheet, { + // Convert sheet to JSON with headers. `header: 1` makes xlsx return + // rows as arrays of raw cell values, typed via the generic overload. + const sheetData = XLSX.utils.sheet_to_json(sheet, { header: 1, // Get as array of arrays first defval: null, blankrows: false, raw: false // Convert to formatted strings - }) as any[][] + }) if (sheetData.length === 0) continue diff --git a/src/importers/handlers/pdfHandler.ts b/src/importers/handlers/pdfHandler.ts index fcc00b9e..0d1deb81 100644 --- a/src/importers/handlers/pdfHandler.ts +++ b/src/importers/handlers/pdfHandler.ts @@ -70,8 +70,20 @@ export class PDFHandler extends BaseFormatHandler { const pdfDoc = await loadingTask.promise - // Extract metadata + // Extract metadata. pdfjs-dist types getMetadata().info as the bare + // `Object` type, so the well-known PDF document-information dictionary + // keys (PDF 32000-1:2008 §14.3.3) are surfaced via a structural type at + // this library boundary. const metadata = await pdfDoc.getMetadata() + const documentInfo = metadata.info as { + Title?: string + Author?: string + Subject?: string + Creator?: string + Producer?: string + CreationDate?: string + ModDate?: string + } | undefined const numPages = pdfDoc.numPages // Report document loaded @@ -177,13 +189,13 @@ export class PDFHandler extends BaseFormatHandler { textLength: totalTextLength, tableCount: detectedTables, pdfMetadata: { - title: (metadata.info as any)?.Title || null, - author: (metadata.info as any)?.Author || null, - subject: (metadata.info as any)?.Subject || null, - creator: (metadata.info as any)?.Creator || null, - producer: (metadata.info as any)?.Producer || null, - creationDate: (metadata.info as any)?.CreationDate || null, - modificationDate: (metadata.info as any)?.ModDate || null + title: documentInfo?.Title || null, + author: documentInfo?.Author || null, + subject: documentInfo?.Subject || null, + creator: documentInfo?.Creator || null, + producer: documentInfo?.Producer || null, + creationDate: documentInfo?.CreationDate || null, + modificationDate: documentInfo?.ModDate || null } } ), diff --git a/src/index.ts b/src/index.ts index 8fded6e1..24676498 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,16 @@ /** - * Brainy 3.0 - Your AI-Powered Second Brain + * Brainy 8.0 - Your AI-Powered Second Brain * šŸ§ āš›ļø A multi-dimensional database with vector, graph, and relational storage - * + * * Core Components: * - Brainy: The unified database with Triple Intelligence * - Triple Intelligence: Seamless fusion of vector + graph + field search + * - Db: Immutable, generation-pinned database values (now/transact/asOf/with) * - Plugins: Extensible plugin system (cortex, storage adapters) * - Neural API: AI-powered clustering and analysis */ -// Export main Brainy class - the modern, clean API for Brainy 3.0 +// Export main Brainy class import { Brainy } from './brainy.js' export { Brainy } @@ -28,6 +29,14 @@ export type { RelateParams, UpdateRelationParams, FindParams, + SimilarParams, + GetOptions, + RelatedParams, + AddManyParams, + UpdateManyParams, + RemoveManyParams, + RelateManyParams, + BatchResult, SubtypeRegistry, FillSubtypeRule, FillSubtypeRules, @@ -152,6 +161,10 @@ export type { Migration, MigrationState, MigrationPreview, MigrationResult, Migr // Export optimistic-concurrency types (7.31.0) export { RevisionConflictError } from './transaction/RevisionConflictError.js' +// Named not-found errors — thrown by update/relate/updateRelation/similar/ +// transact/with() when a referenced entity or relation does not exist. +export { EntityNotFoundError, RelationNotFoundError } from './errors/notFound.js' + // ============= 8.0 Db API — generational MVCC ============= // Immutable database values: brain.now() / brain.transact() / brain.asOf() / // db.with() / db.persist() / Brainy.load(). See src/db/ for the record layer. diff --git a/src/indexes/columnStore/ColumnManifest.ts b/src/indexes/columnStore/ColumnManifest.ts index c77098f9..64ac218e 100644 --- a/src/indexes/columnStore/ColumnManifest.ts +++ b/src/indexes/columnStore/ColumnManifest.ts @@ -59,9 +59,15 @@ export class ColumnManifest { async load(storage: StorageAdapter): Promise { try { const path = this.manifestPath() - const data = await (storage as any).readObjectFromPath(path) + // readObjectFromPath is a BaseStorage primitive (protected on the + // class, not part of the StorageAdapter interface) — the column store + // owns everything under its base path, and the field-name check below + // validates the manifest before it is adopted. + const data = await (storage as unknown as { + readObjectFromPath: (path: string) => Promise + }).readObjectFromPath(path) if (data && data.field === this.fieldName) { - this.data = data as ManifestData + this.data = data } } catch { // Not found — start fresh (data is already initialized in constructor) @@ -76,7 +82,12 @@ export class ColumnManifest { async save(storage: StorageAdapter): Promise { this.data.version++ const path = this.manifestPath() - await (storage as any).writeObjectToPath(path, this.data) + // writeObjectToPath is a BaseStorage primitive (protected on the class, + // not part of the StorageAdapter interface) — same typed boundary as + // load() above. + await (storage as unknown as { + writeObjectToPath: (path: string, data: ManifestData) => Promise + }).writeObjectToPath(path, this.data) } /** diff --git a/src/indexes/columnStore/ColumnStore.ts b/src/indexes/columnStore/ColumnStore.ts index e47af77e..0ef955f7 100644 --- a/src/indexes/columnStore/ColumnStore.ts +++ b/src/indexes/columnStore/ColumnStore.ts @@ -120,7 +120,12 @@ export class ColumnStore implements ColumnStoreProvider { // Discover fields by listing manifest files try { - const paths = await (storage as any).listObjectsUnderPath(this.basePath + '/') + // listObjectsUnderPath is a BaseStorage primitive (protected on the + // class, not part of the StorageAdapter interface) — same typed + // boundary as the blob reads below. + const paths = await (storage as unknown as { + listObjectsUnderPath: (prefix: string) => Promise + }).listObjectsUnderPath(this.basePath + '/') for (const path of paths) { if (path.endsWith('/MANIFEST.json')) { const fieldName = path.replace(this.basePath + '/', '').replace('/MANIFEST.json', '') @@ -637,8 +642,12 @@ export class ColumnStore implements ColumnStoreProvider { if (!buffer || buffer.size === 0) return null const valueType = this.fieldTypes.get(field) ?? ValueType.String - // Drain a COPY for querying — don't clear the buffer - const entries = (buffer as any).entries as Array<{ value: number | string, entityIntId: number }> + // Drain a COPY for querying — don't clear the buffer. This reads the + // buffer's private accumulator directly (drain() is the only public + // accessor and it clears the buffer, which queries must not do). + const entries = (buffer as unknown as { + entries: Array<{ value: number | string, entityIntId: number }> + }).entries if (!entries || entries.length === 0) return null // Sort a copy for the cursor diff --git a/src/integrations/core/IntegrationBase.ts b/src/integrations/core/IntegrationBase.ts index 2bba38d8..8646e826 100644 --- a/src/integrations/core/IntegrationBase.ts +++ b/src/integrations/core/IntegrationBase.ts @@ -265,7 +265,7 @@ export abstract class IntegrationBase { } /** - * Query relations using Brainy getRelations() + * Query relations using Brainy related() */ protected async queryRelations(params?: { from?: string @@ -278,7 +278,7 @@ export abstract class IntegrationBase { throw new Error('Integration not initialized') } - return this.context.brain.getRelations(params) + return this.context.brain.related(params) } /** diff --git a/src/integrations/core/IntegrationHub.ts b/src/integrations/core/IntegrationHub.ts index 3fee573f..7f5f17e0 100644 --- a/src/integrations/core/IntegrationHub.ts +++ b/src/integrations/core/IntegrationHub.ts @@ -82,7 +82,12 @@ export interface IntegrationResponse { export class IntegrationHub { private integrations: Map = new Map() private config: Required - private _endpoints: Record = {} as any + /** + * Endpoint paths keyed by integration type. Starts empty and gains one key + * per integration enabled in initialize() — disabled integrations have no + * entry, hence the sparse-record assertion on the initializer. + */ + private _endpoints: Record = {} as Record /** * Create and initialize the Integration Hub @@ -168,7 +173,7 @@ export class IntegrationHub { private getBasePath(type: IntegrationType): string { const basePath = this.config.basePath - const cfg = this.config.config?.[type] as any + const cfg = this.config.config?.[type] switch (type) { case 'odata': @@ -222,7 +227,13 @@ export class IntegrationHub { if (path.startsWith(basePath) || path === basePath) { const integration = this.integrations.get(type as IntegrationType) if (integration && 'handleRequest' in integration) { - const handler = integration as any + // The `in` guard proved the integration exposes an HTTP handler. + // Each integration declares its own structurally-compatible + // request/response shapes (e.g. the OData request/response pair), + // so the hub dispatches through this minimal common signature. + const handler = integration as IntegrationBase & { + handleRequest(request: IntegrationRequest): Promise + } const relativePath = path.slice(basePath.length) || '/' return handler.handleRequest({ diff --git a/src/integrations/core/IntegrationLoader.ts b/src/integrations/core/IntegrationLoader.ts index c73d6b79..519948b7 100644 --- a/src/integrations/core/IntegrationLoader.ts +++ b/src/integrations/core/IntegrationLoader.ts @@ -76,20 +76,29 @@ export const INTEGRATION_CATALOG: Record = { * Detect current runtime environment */ export function detectEnvironment(): RuntimeEnvironment { + // Runtime-detection boundary: these globals exist only in specific runtimes + // (Deno, Bun, Cloudflare Workers), so they aren't on TypeScript's view of + // globalThis — probe them through an optional-keyed view. + const runtimeGlobals = globalThis as typeof globalThis & { + Deno?: unknown + Bun?: unknown + HTMLRewriter?: unknown + } + // Deno - if (typeof (globalThis as any).Deno !== 'undefined') { + if (typeof runtimeGlobals.Deno !== 'undefined') { return 'deno' } // Bun - if (typeof (globalThis as any).Bun !== 'undefined') { + if (typeof runtimeGlobals.Bun !== 'undefined') { return 'bun' } // Cloudflare Workers if ( - typeof (globalThis as any).caches !== 'undefined' && - typeof (globalThis as any).HTMLRewriter !== 'undefined' + typeof runtimeGlobals.caches !== 'undefined' && + typeof runtimeGlobals.HTMLRewriter !== 'undefined' ) { return 'cloudflare' } diff --git a/src/integrations/core/TabularExporter.ts b/src/integrations/core/TabularExporter.ts index e7e48625..3d2b5eed 100644 --- a/src/integrations/core/TabularExporter.ts +++ b/src/integrations/core/TabularExporter.ts @@ -6,6 +6,7 @@ */ import { Entity, Relation } from '../../types/brainy.types.js' +import { NounType } from '../../types/graphTypes.js' import { TabularRow, RelationTabularRow, @@ -462,9 +463,11 @@ export class TabularExporter { private rowToEntity(row: Record): Partial { const entity: Partial = {} - // Map standard columns + // Map standard columns. Imported rows are an untrusted boundary — the + // Type cell is taken at its word here; Brainy validates the NounType + // vocabulary when the partial entity is written. if (row.Id) entity.id = row.Id - if (row.Type) entity.type = row.Type as any + if (row.Type) entity.type = row.Type as NounType if (row.Service) entity.service = row.Service if (row.Confidence) entity.confidence = parseFloat(row.Confidence) if (row.Weight) entity.weight = parseFloat(row.Weight) diff --git a/src/integrations/odata/ODataIntegration.ts b/src/integrations/odata/ODataIntegration.ts index dd53d91a..cd6a0cfd 100644 --- a/src/integrations/odata/ODataIntegration.ts +++ b/src/integrations/odata/ODataIntegration.ts @@ -14,7 +14,12 @@ import { IntegrationBase, HTTPIntegration } from '../core/IntegrationBase.js' -import { IntegrationConfig, ODataQueryOptions } from '../core/types.js' +import { + IntegrationConfig, + ODataQueryOptions, + RelationTabularRow, + TabularRow +} from '../core/types.js' import { Entity, Relation, FindParams } from '../../types/brainy.types.js' import { NounType } from '../../types/graphTypes.js' import { @@ -387,12 +392,13 @@ export class ODataIntegration extends IntegrationBase implements HTTPIntegration entities = entities.slice(0, pageSize) } - // Convert to tabular format - let rows = this.exporter.entitiesToRows(entities) + // Convert to tabular format. $select projects rows down to a subset of + // columns, so the working type is Partial from the start. + let rows: Array> = this.exporter.entitiesToRows(entities) // Apply $select if (options.select && options.select.length > 0) { - rows = applySelect(rows, options.select) as any + rows = applySelect(rows, options.select) } // Apply $orderby (if not handled by storage) @@ -528,7 +534,7 @@ export class ODataIntegration extends IntegrationBase implements HTTPIntegration return this.errorResponse(400, 'Invalid entity ID') } - await this.context.brain.delete(idMatch[1]) + await this.context.brain.remove(idMatch[1]) return { status: 204, @@ -566,16 +572,18 @@ export class ODataIntegration extends IntegrationBase implements HTTPIntegration offset: options.skip }) - let rows = this.exporter.relationsToRows(relations) + // $select projects rows down to a subset of columns, so the working type + // is Partial from the start. + let rows: Array> = this.exporter.relationsToRows(relations) // Apply $filter if (options.filter) { - rows = applyFilter(rows, options.filter) as any + rows = applyFilter(rows, options.filter) } // Apply $select if (options.select && options.select.length > 0) { - rows = applySelect(rows, options.select) as any + rows = applySelect(rows, options.select) } // Apply $orderby diff --git a/src/integrations/sheets/GoogleSheetsIntegration.ts b/src/integrations/sheets/GoogleSheetsIntegration.ts index cefa109b..2e368fcf 100644 --- a/src/integrations/sheets/GoogleSheetsIntegration.ts +++ b/src/integrations/sheets/GoogleSheetsIntegration.ts @@ -552,7 +552,7 @@ export class GoogleSheetsIntegration return this.errorResponse(400, 'Missing required field: id') } - await this.context.brain.delete(body.id) + await this.context.brain.remove(body.id) return this.jsonResponse({ success: true, deleted: body.id }) } @@ -595,7 +595,7 @@ export class GoogleSheetsIntegration break case 'delete': - await this.context.brain.delete(op.id) + await this.context.brain.remove(op.id) results.push({ success: true, id: op.id, action: 'delete' }) break diff --git a/src/integrations/sse/SSEIntegration.ts b/src/integrations/sse/SSEIntegration.ts index 60d7a6a8..d0d347f8 100644 --- a/src/integrations/sse/SSEIntegration.ts +++ b/src/integrations/sse/SSEIntegration.ts @@ -338,20 +338,23 @@ export class SSEIntegration ): EventFilter { const filter: EventFilter = {} + // HTTP query strings are an untrusted boundary: narrow them to the typed + // filter fields directly. Unknown values are harmless — matchesFilter() + // compares with includes(), so they simply never match an event. if (query.types) { - filter.entityTypes = query.types.split(',') as any[] + filter.entityTypes = query.types.split(',') as EventFilter['entityTypes'] } if (query.operations) { - filter.operations = query.operations.split(',') as any[] + filter.operations = query.operations.split(',') as EventFilter['operations'] } if (query.nounTypes) { - filter.nounTypes = query.nounTypes.split(',') as any[] + filter.nounTypes = query.nounTypes.split(',') as EventFilter['nounTypes'] } if (query.verbTypes) { - filter.verbTypes = query.verbTypes.split(',') as any[] + filter.verbTypes = query.verbTypes.split(',') as EventFilter['verbTypes'] } if (query.service) { diff --git a/src/interfaces/IIndex.ts b/src/interfaces/IIndex.ts deleted file mode 100644 index 4be80567..00000000 --- a/src/interfaces/IIndex.ts +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Unified Index Interface - * - * Standardizes index lifecycle across all index types in Brainy. - * All indexes (HNSW Vector, Graph Adjacency, Metadata Field) implement this interface - * for consistent rebuild, clear, and stats operations. - * - * This enables: - * - Parallel index rebuilds during initialization - * - Consistent index management across the system - * - Easy addition of new index types - * - Unified monitoring and health checks - */ - -/** - * Index statistics returned by getStats() - */ -export interface IndexStats { - /** - * Total number of items in the index - */ - totalItems: number - - /** - * Estimated memory usage in bytes (optional) - */ - memoryUsage?: number - - /** - * Timestamp of last rebuild (optional) - */ - lastRebuilt?: number - - /** - * Index-specific statistics (optional) - * - HNSW: { maxLevel, entryPointId, levels, avgDegree } - * - Graph: { totalRelationships, verbTypes } - * - Metadata: { totalFields, totalEntries } - */ - specifics?: Record -} - -/** - * Progress callback for rebuild operations - * Reports current progress and total count - */ -export type RebuildProgressCallback = (loaded: number, total: number) => void - -/** - * Rebuild options for index rebuilding - */ -export interface RebuildOptions { - - /** - * Batch size for pagination during rebuild - * Default: 1000 (tune based on available memory) - */ - batchSize?: number - - /** - * Progress callback for monitoring rebuild progress - * Called periodically with (loaded, total) counts - */ - onProgress?: RebuildProgressCallback - - /** - * Force rebuild even if index appears populated - * Useful for repairing corrupted indexes - */ - force?: boolean -} - -/** - * Unified Index Interface - * - * All indexes in Brainy implement this interface for consistent lifecycle management. - * This enables parallel rebuilds, unified monitoring, and standardized operations. - */ -export interface IIndex { - /** - * Rebuild index from persisted storage - * - * Called during Brainy initialization when: - * - Container restarts and in-memory indexes are empty - * - Storage has persisted data but indexes need rebuilding - * - Force rebuild is requested - * - * Implementation must: - * - Clear existing in-memory state - * - Load data from storage using pagination - * - Restore index structure efficiently (O(N) preferred over O(N log N)) - * - Handle millions of entities via batching - * - Auto-detect caching strategy based on dataset size vs available memory - * - Provide progress reporting for large datasets - * - Recover gracefully from partial failures - * - * Adaptive Caching: - * System automatically chooses optimal strategy: - * - Small datasets: Preload all data at init for zero-latency access - * - Large datasets: Load on-demand via UnifiedCache for memory efficiency - * - * @param options Rebuild options (batch size, progress callback, force) - * @returns Promise that resolves when rebuild is complete - * @throws Error if rebuild fails critically (should log warnings for partial failures) - */ - rebuild(options?: RebuildOptions): Promise - - /** - * Clear all in-memory index data - * - * Called when: - * - User explicitly calls brain.clear() - * - System needs to reset without rebuilding - * - Tests need clean state - * - * Implementation must: - * - Clear all in-memory data structures - * - Reset counters and statistics - * - NOT delete persisted storage data - * - Be idempotent (safe to call multiple times) - * - * Note: This is a memory-only operation. To delete persisted data, - * use storage.clear() instead. - */ - clear(): void - - /** - * Get current index statistics - * - * Returns real-time statistics about the index state: - * - Total items indexed - * - Memory usage (if available) - * - Last rebuild timestamp - * - Index-specific metrics - * - * Used for: - * - Health monitoring - * - Determining if rebuild is needed - * - Performance analysis - * - Debugging - * - * @returns Promise that resolves to index statistics - */ - getStats(): Promise - - /** - * Get the current size of the index - * - * Fast O(1) operation returning the number of items in the index. - * Used for quick health checks and deciding rebuild strategy. - * - * @returns Number of items in the index - */ - size(): number -} - -/** - * Extended index interface with cache support (optional) - * - * Indexes can optionally implement cache integration for: - * - Hot/warm/cold tier management - * - Memory-efficient lazy loading - * - Adaptive caching based on access patterns - */ -export interface ICachedIndex extends IIndex { - /** - * Set cache for resource management - * - * Enables the index to use UnifiedCache for: - * - Lazy loading of vectors/data - * - Hot/warm/cold tier management - * - Memory pressure handling - * - * @param cache UnifiedCache instance - */ - setCache?(cache: any): void -} - -/** - * Extended index interface with persistence support (optional) - * - * Indexes can optionally implement explicit persistence: - * - Manual triggering of data saves - * - Batch write optimization - * - Checkpoint creation - */ -export interface IPersistentIndex extends IIndex { - /** - * Manually persist current index state to storage - * - * Most indexes auto-persist during operations (e.g., HNSW persists on addItem). - * This method allows explicit persistence for: - * - Checkpointing before risky operations - * - Forced flush before shutdown - * - Manual backup creation - * - * @returns Promise that resolves when persistence is complete - */ - persist?(): Promise -} diff --git a/src/mcp/brainyMCPAdapter.ts b/src/mcp/brainyMCPAdapter.ts index 11e43d43..5765c0d7 100644 --- a/src/mcp/brainyMCPAdapter.ts +++ b/src/mcp/brainyMCPAdapter.ts @@ -146,10 +146,15 @@ export class BrainyMCPAdapter { ) } - // This is a simplified implementation - in a real implementation, we would - // need to check if these methods exist on the BrainyInterface - const outgoing = await (this.brainyData as any).getVerbsBySource?.(id) || [] - const incoming = await (this.brainyData as any).getVerbsByTarget?.(id) || [] + // BrainyInterface doesn't expose verb-level accessors — these optional + // probes target methods older Brainy builds carried, and resolve to empty + // relationship lists when (as on current builds) the methods are absent. + const verbAccessors = this.brainyData as BrainyInterface & { + getVerbsBySource?: (id: string) => Promise + getVerbsByTarget?: (id: string) => Promise + } + const outgoing = await verbAccessors.getVerbsBySource?.(id) || [] + const incoming = await verbAccessors.getVerbsByTarget?.(id) || [] return this.createSuccessResponse(request.requestId, { outgoing, incoming }) } diff --git a/src/neural/SmartExtractor.ts b/src/neural/SmartExtractor.ts index 156dc847..f919e40b 100644 --- a/src/neural/SmartExtractor.ts +++ b/src/neural/SmartExtractor.ts @@ -1,7 +1,7 @@ /** * SmartExtractor - Unified entity type extraction using ensemble of neural signals * - * PRODUCTION-READY: Single orchestration class for all entity type classification + * Single orchestration class for all entity type classification * * Design Philosophy: * - Simplicity over complexity (KISS principle) @@ -645,7 +645,7 @@ export class SmartExtractor { return { type: best.type!, confidence: best.confidence, - source: best.signal as any, + source: best.signal, evidence: best.evidence, metadata: { formatHints: formatHints.length > 0 ? formatHints : undefined, diff --git a/src/neural/SmartRelationshipExtractor.ts b/src/neural/SmartRelationshipExtractor.ts index 0967eab4..5bc44240 100644 --- a/src/neural/SmartRelationshipExtractor.ts +++ b/src/neural/SmartRelationshipExtractor.ts @@ -1,7 +1,7 @@ /** * SmartRelationshipExtractor - Unified relationship type extraction using ensemble of neural signals * - * PRODUCTION-READY: Parallel to SmartExtractor but for verbs/relationships + * Parallel to SmartExtractor but for verbs/relationships * * Design Philosophy: * - Simplicity over complexity (KISS principle) diff --git a/src/neural/embeddedPatterns.ts b/src/neural/embeddedPatterns.ts index 0d6a0d19..a8ece789 100644 --- a/src/neural/embeddedPatterns.ts +++ b/src/neural/embeddedPatterns.ts @@ -2,7 +2,7 @@ * 🧠 BRAINY EMBEDDED PATTERNS * * AUTO-GENERATED - DO NOT EDIT - * Generated: 2025-09-30T23:01:33.167Z + * Generated: 2026-06-11T21:32:56.112Z * Patterns: 220 * Coverage: 94-98% of all queries * @@ -3979,7 +3979,7 @@ export const EMBEDDED_PATTERNS: Pattern[] = [ ] // Pre-computed embeddings (440.0KB base64) -const EMBEDDINGS_BASE64 = "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" +const EMBEDDINGS_BASE64 = "8KFXvd+6wzy7cqe8l0XDPAkzZz0K4Yc8qmO5vMBoNT0hSBO8boKMPa1z8bz7bek878qeu76Lrzxq60m9Y18kvAR0mrwATQ26wEo1vaJqPb0yWAy902RNvB93rzswqoa8F++TvQsWkbxn39+8p77nvFyJ9byi5Sc8lj0avBs21DooNSQ8sKQxvPGdfryZ9228Q8MbPbK9trvy4BE9FlYTPWaDAr19/uu8Qr5TPcYIs7zBgBI9vZoQPX6Rer1LtK66DgnjvHIuPby68lm9K+CAuld3+zvt3uW8AF8HOz6hHr2HT5C8FcSIvEAam7upC7a8BRRiPZFH+zsB/BS9hZcSPM6YGD3skSs9dJ0GvPIhOT0qtyU9kPY9O4hN5LwX1DU9lwIOvWpjqLx8c427Gd/4vL0po7wVJ+a7KmmJPbG/E70aAS49ACEgvQI2VT1ar7c8M85xvLdZm7xFFwu6NL9QPD9ABD39xI88kvQVPF4y3LzNNqA9uMYePedyFL19CJU9sH0VvFR+XL0QqBI9i2v7PBBHV7od0Ty9p+rCu9wGczwecu08S2VPu83bETx1Hn+6h5G8PB085jzrJ2u9cER5PUnJOr1oSq68PjsWPQdK27zln688a4QvOmKp47ysB+u7RTiFPN/dzLxdBYq6a0EWPFnTozx03eS8iF/BPLAqi4k4P/48oOYBvbq95juWjds8I9EhPVWAG7wj4fm6u8KLvFnPCTxJvAW9hJs8vOwIsTwhlIo7JM0+PF03nDz/qxq8Vq8VvQ8zJjxkTgO9Im27vO1FmDtOuBG9lJxZPTnoKz2GORo97bgtPZIMC70KjXe9e74KPRqpjjwAPGU5Ew8NPRnWmr0hK4G7aZBAPHoLkz08QKq9CC8du7EVBb2gQ5s9UvyjPAb3JrzrFtk82rzYvBl6Kz15uC48q6YQOagUpbyp+aO8cNBHvdtbZ70KrWU9jplOvZyrTL29ugw96CIKPTEBhjxq2LY8GxE9OgAB7rwTf3W8iy/BPADRIr1w27E6fSHHu2Ag3zz3HqG8im49vCPQLTwFgmu74ZwNvQH6ersSYOq8MnDjvLFccL1kAmw8/L64vE3f1LwxsSy9XcHjvJH0Hrw7pqy8XFFAPfRH8bx6+mW9BjL2vPGGCr3P0GQ9wgDHPGKKMTz7Ea+85GaTu014pD2A6Ym5KHEUvfUXpQigw2W9NbwsvY5wJr2cdJ88WRzDvI3e0zzKEdO8ptznPE0UpDzwrJE8wAceunLQHj1yDTw9yAIzPXijXzz9aga97XH+Ozh3jTysvIK9V6qivIddxbzcqvk5RsgFvXeY07xA4PO7MOrqPEWZ4TtkvoG90EmFvPswnTxaTva8n7H2POtd+Lx01rI9as61vAOQUDxyt2E9t2T9vBA3WLxpZ6280oBKPS3s2TstL+08Xe9Yvag8qDvjDCA9rDuZu2bHiD0IQag7e9CRPMsC1DxyBtG8WXaCvOG0Pb3VL+a7I2azu2I53DwNqKm82yUJOiFgqjzEf1q9kSz8PIZgar37bwI9muC8uqsXUTvuMIu9gDs3PO8fiD3eZkq9FO04PTNivjzfrT+8ryR9vLVqzrxMDB68P6EYvC43x7xt3jm7wtDlPCBkhLyOk6W8RKQNPUnC5zzH2/I83fcyPPqmJLy/OL29HfDHvH8LxDwfCK+9s23svC5wnrzQyiQ7W6ujugcBarJEgc48QxTCPMRwpD0emmY9pWMiPP2dBj3sIPG8qvOyvBKnj7wpan49eDPFPH4S3DwlzEA9iMUyPSMTlLzGSge9/uBUPWdUG7tarcK88vfYvDjw4jwP+go80cRtuw++zDxbalQ911GDPMLyID2rB+u6iYvSvEvjtDtgGKa9bsM8PYPlmjylXgA7TEEyPX28gzsIt6E9csCUPFCKpLwYND08TjawPHiBhD3d+EW94PuSPJg4Jz1qpYY89HMavIAaSr1bWpe8tQMTPQdUMDwndMG8UyRIPHOFfz1ysAa7F1irPEDEeTlx+D29imzxPCRjBDwjNMk8c0WHPEs8+Tyuc7A8n0PGPJjeYr3Vv3u8pjSfPDq1Cb2U2EY9Qa7wvMuizjyKUl89uYGtPKdU8TyJA3u8LQlGPR9WuLzKDEC9d6yfPLyTa73itEu9VJL+vPhZwrpAcEC8M7CCvDPR6zyP9/e8mB4ROxNvAL00atW8kfiMve0uNjzkMEa9wRpsO1KvRT03DeM8dqSIPVDYSj1OkYi95UPAu5AWD7vTh6g8O596PVLXGz0spIO8cH8HPXNtQ7wEK6w9XFiJPFn/fr1Mc6c8ItwkPYVeqDxWNyO9LJWCPIXrPb02PJg9lkYWPXBe3700j4u9rTR7vGmVY70vihA9qgyLPNh1R70R6bC9kGISvRTvELz/UpM9xFhAvWK7RTx1ebA84cHYPLt8Fr0JUII9ir3vPFtJhjwETMa73HzVvEr4/TtpaCO8WC5bPbjy4L2//TO9FqlWvaz4Er0TytI7pdcdPC20Xr3YV0S8NLzJPKeeNDquAKA8V+tSvLH59zykVjE9la4QPbGlhL0/BCI9g2FcPDaXPD30o2495/CgPQ/xMbyuWbk8FPbJPVkcl7v69169asZ4vAFSE7yKSQa8OYCKusuQI70I8AA9LV28OxIZJbwTZQk7JMHzPJ/tSL0jjGG8fNciPFVPRjm9aj88gxxFuy8w3jwNroY93MIdvUgFGb0eYia8596Gvcr5YYmDo0k9NDDWu0U49jzB6YM91AZFPSsPabu4xxg8WvwnPDNeL7nYlYU8tokwve96DT35PaM8lQbxPALssj2QhqI8+8ZQPOihJT1WXgK9GBZNO8ACQD3t0pq9VZLqOjhnhzwTC8g8lPWVPQRmxbzVl/07HPNYvYfylzzlkM88uosOPdNi0rxuiO07JHq0PCtlFD1Shwg9yz+TPGcAeT3vCP68ATVZPA2cOzwRBiM9zAaXvBk8PL0rgx89LAwtPVD6jru4+UM8ymV6PapKFj0ogce8EY2SvfkpDz3M4L08Zh2CPDnvVL114D68x8tkPdS1aj1rX886rvyRPMVhjTwtsQI793pYPYQUUD0/Zyi9jojzO8SIXj0vOE0947SbvITh5bzGESa9DYQuvXSj7Ts9IIO86nepPIYtcL2fiI+9UNioPbw3Hr35iaY8+mMivP89x7vEjow8OttyPU1OFrzKyNc7yGj/uhTtCr2lDaY6yJWkvIHrEbxQwYG9HYi/vVZtuAgf5Xa9+XXOPOBt7ryU/vE8Aqb9POVw5LzRBr+6z893PXXAZzwYssC6ikS8PeRVW7zxI4A96xkKOyDvSTprDoG7UdUAvQzwXr13VCy89a6KOjdgSL17o4S8cLURvN5NEj3dQvi89eNHPRgVmL2Noi+9uYMWPTYMqjuewdY8zbKDvfIIxry1YxA9GNDFvNWF8zgZnoM90rhCPYFgYDz6NVY97hcVPRlLibyZqYW8p3zTPKLczbyaf7u8tfcAPDikFrqjsoC872VJvSORDL2QKn88lEC9u5JChLy1k7C8Q9ZovBHRAbw0dqo7AALUuZNw8DuyMF29gUFdPHctKr0Vwi893CKJvGSmDb2vqEW9tVJJvSJyjL0Wc4Y8T5/IvKZoiLuQYtS8yxebvHGZUL3xtZK8mFZpvW+Qs7xQ0uk8xAbGOz22XL0IPFu9Uc1aPZJyKDwH5x+8KOLkvApmkT1VvQa96UO4vKjejzz9r1g8mssfPCMOgj0287k8VaNAvDtkYbKVfwy9jROHupoGWT2QW1O9R9sKPZl3ljz0RFO9Q//lPUDaHjo/dwU89QqbPdKrgrxbFj+9ENMQPfRPDLzrB7q8J03YPJjlyzxFaiE6+1txPLP4BD0iQI85RTLePDXYGr0K7K096ErXvI3ARzxx/gk9YQU5vWJgMTyJMLc81oULvOGsIb0J8Ve8bvGLPfCWZLwATWQ5WhRyve4HTL2beUa7WyCxvEuHLr3XGES9aRz0PAdqRj3odiU7CbT+vLiemL2M1eA8N66NvIPUDb37zj680ivEPPwdNbzXmwC9oguCPc94jDwudyu9Tkz4PAYEFL3NuUu7jUCovF6hPryeqNy7MInku7isJ7x95Ei7l3g6PZ8hrrzLsjQ9MNWAOr3cVj1mWZE9OPZgPUAIq7udYLw85WGDPVv3hbw0bpO93MK6PMmqpL2KFWS9tuocvByIibwnndo6iByQPKJ5Qz1uipi9wBx5u5jJ8Tx0hVy9sUEfvofWPDzkCMm8j4YTPeq+SD0dAw09+gn2PGodWD0S13C9ePofu07wAb2qt6E9r1I4Pe+ysDzvaVS9ICOBORNCybw1I+c9eytNPZg7ib0m0lg8GSqIPBwcfD1om7y9q66JPJspJ72+Cko99K4VPVQEZb01zS69jOf2PJh+f72I5lO8WC1BPQufZ71fVnq9rkXjvJDTGzyIosQ9dxjdvNoXsjxQWxq8uGkqPQB0mTtnvrU9InlKPfOBKT32+5Q7bDoRveTB27sS77S7gthDPTS+o737AXS89usWvUNMd7yTOiE8mwwevbhgN70QOrk63CQmvczB0Lswxd08CnzaPO5EFL0+1i49lgl+PKpIHry0Nxk8WEIBO36bgzyFA4I9ssdBPRpmkbsRwX88UiF9PcUED73UZla9OdcaPXaEoTykVW69okwjvNVXoLxxxwC8GKwdu320fLxorB47VyO7PE4evbwVx5c9qEOGPS9fRD3pHO08gJyRucygBDyZbEI9Xmfiuza9Pr0vaMS7BBAEvPUzm4ksdsU6GPRVOw/PNrz0TY09KmT4PMwErLwqXjY9jC55PJOZjbzkjYm8zIOGvX5GbT1fSZ08Yzu6PBCWhT34peU7p5lbPIF0Gj2cX1u8bwKmvFNkVz3Jpsm9KRBXPNwLYjwLNS09LFdKPZa0I7yHrZi9o71XvPB21zlUZDU8ALeIPbwAJ724O3s82zxtvMZWqT3IfoK8BU/qPFlHBT2uI7M8kNYwvVw0NjyyqJY9PE0yvWywq7yqqRA9Roz7PIyp5rxvAh899JCiOyhV8ruWuAc8yoSZvcC8cDuTv6I9R4XGu0VJdL3ojX49OY4sPdz59zzua6M8GBzsPBSr5LyGwYU8AvTNPD5sVT1uNwi9rfpJPXEAkT0JOnc8SrhDOyQyhrtx1ly9/9i1vQVk87zTb+M89/x6PGs4AL7o47S9FbziPNjRsb2kkBg8aAjMPAirg7wg2zs4zI6lPV/xrrve2u08slBDO73WV70hbyA95gHUvNSCSbxE7Sa9lfaLvcYyKgm2YYi9dmI9vUqrYL1PUDM97XmTPAJenzzc4aW7QQ5hPdb7BLwyGII8bRsqPdeUA73cnro8ElJAPSCbOzuEKSW94VDrvNfqSr3MlW48in2PPNOs87yABak7OrWBPBKSczzzxtk8ApwdPYv/Zr3vwIq9SG/Euk3XzDsi0G49wQ9nveAsU702iKc9DCvNPDj1G7xoUWY9fuPTPPCdk7u/xEs9QX3zPHTJDL1EJGM72y2PvC6/FL2+nju9DiYzvOwEKD1goYG8emsxvQqSKrwJh4u7nqirvN9/Vr3aucG9CoRLPK6GILwmEA+9IFTjOWaXLj3lGlG9osE3PbdMAL23zbk8+SMqvfIXZb2I/R+9t9+8O7Ddmb30qda8GHkdO3fwh7yfAyy9JifkPPsKVbysdRE9IYZlPCBVJ71iuKS7h/mUvGC3H7wM/q68oifsPJaEgzsQX2W62AInPFdn7jy48py92KjOvMvR7zwgeVM5vKqcOthyEz1NjmO8HNprvTgwXbJZtmW9A1IuvJaXfD1AFV+8A9NlPejv9TzGB8m8wS+UPaDjrb3P9nK8LmI2PZ5hhr3K4U+9YAbRO24dT7yKigu8kVdcPVao/7srw/s73QEhvGqZzT06m8a8wCC4OhiPFr3qOx893q/SvDYMPzxZXF28ntYZvZpPArz8iFm8iLJLPeRE1rwQIrw8fsS1PRZiBzwrl5c9wsJJvdqPxb2OsCM8Yp57vDNV4DsYZIi8B8I2PDRbzj3JwHm8ehJwvTO17r2wqA89MAJQvYpHtbx0KkG9GL+2PXmkOD00rCw8sVEbPWIFPD2fyEi97j+iPFAHkTzjjfw8m1kXPXN06zxUaCy8nLMaPd61j7zbF9o8hRA4PI+mcj019KM9t/BIPdYqmDy0Os29aVPZPFppDD194Cy9lURkvU65RTsVN/+6Hueiu+JMSjwxA9Y8sGQfPV/prb3f7jS9rUMIPaBVD71fDDu8knFYvPWdcz1tr6m8ysYwvUXW97yaWd+9nIq4veQUyDzevqo9/gDWu/a77zz/X4i9UFoUPCfhnrs+/VA8BKrEu1PnXb2C0aC9nxvivOSX+jzoBJ48dhQUPXql/rskmEW9d1AMPX+51rtEgdK8aCsUPEBMhb1njZE8zo2DPXmhKr0pFq29etxkvETBCrx9Av28amwjPBLPCTw6lky9qi5MPeAtaDpXzYG7QqK1u5NsdjuuGb07q0gdOYIOkLxWQLQ8bvCivIBatjwEDyY9+FHeuaBRGD2rsNq8H3ScvNiViDz88Iy9JMeAvC0gzbykuqu8d5+Qu/N4Cz13IUO9t2+pPDvrkrr+5e27wE+hvQ7NR70mPgU9PEETve55Yb1Xtoc9ryBYPfc1ub2QFQK9K4+3PaYutjtY81e9IEVYPXe8Gr3j6Ha9H/fvvOq4HD3V1Cm9ZaVoO69uprugxIi9VdsOvCem4byOtoy9RybEPO5DSL1CXeK8DrNYu8o2Vz28LSY93GV5O4AAa7wpl3480P2UOoIQUL0Fbt08zG4JvTQCO4lja+o85p1aveq6Iz0jgmy8c/xmO9kxezxqTJU8OnBbOiu1mbxLZkA9OfCHu+hTmj1UtSe9SxmlPQ60XD0n7GW8Sq9DPR5cpz2GtT+8g/rfvC1N/zuD/Bo9jxDUu6riXzzoCJs865+8vP4NijxtxAm9WHA1vfYmNzwMCfe8ZOfJOnRa+rv3z4Y8qx7JuIXSozzri4m9AWdmvfWY9jyeosy8coCEvLqdrLxjTda99lgSvNPsUjxtXRI9IE7yvBCKMDz4mn09KXSdPRQbAL1q9/477V/vvZsLFr2CLBi9tou+u5X+U72egDI98JVOvCm1iD3A1g+7VQWBuJW/F71cdeS9BmxTvXIFlrvR4iw8PZ8EvaOoB7xYY288PoWQvej2g7wbibU9z0EmPKOho7xqX988a/RBPAV1mL05SEG99FMuvNrgEb0/5Xc8XzghvXbbhT1ZALQ97vm7vNvIRj2GhJC97KwRPUplo7wt9AC+Y95DPX3fST1DT/u8OKiTvUCqAwhSNdk8XSUCvUHLljzRqKa8XngSPQWs3DyzNSu6ARoVvIYWDD3bn8o8PvxaPfhq1LsMZXg9bfg8vciwGb1yLVc9d7KpvPqwyrwhmhg8zWNgPQK1GL1v82o8NZ58OicdujwAWB+577GXPBBGpLyMjiq8CNLCPLHrDjyStEw9ejTgu3MAYL3Gj8E9sDGku+PbXDwXLYY9/qnLPUGDBTxxE4s9cB7CPdlwbr2blvI8kaahPQA2jDzI1LK8sa39vFiOKDx9Ppo8khCAPS2ZsTo8Ceq7m3MGvFeS0Tw0l648GysJPbYi6DyTeZa8Kqh3PUG5hjsEoxy9XoYfPWLNmjwlgLg8qj1bPcgqHDwbDw28MdIkPPoArr0lYAW9VteKvX+0HL3FY4a9dUOWvQXQi7v7YKc7PhtrvKxFNr1sh3Y8P45QOpq4BTxsxi48QbpHPBAAhrqzkS09+OnUuq8FLrxwET48kyTEPbtjNjv8ZbG81fXOPCpffz1v1pA9xm4KPdb8gLIL0Qy9+YPuvH251LtdjjW8AzmuPSTAirsPVJU7GAt4PYunuzzOhic9tdSjPFV2Cb3ICtC8bmR5PX9T3z39WD+80jOLvGl3kD1OCqG7covCPCCmDTo8vfO8z3xfPIidCL07gT88wFfSO4TXqry402k805I/PW0cwz3dQ+Q8q/mxvJOORD2XZs29GXauPRQ/ZrxXLz69FXPqOj9rObwgBSk8o5CROph6S72gBLE6VqeuPCuwEbw6Qvq8NO78vNLQnb0chP28HZQNvQKlQL2fino8tiigPZBrprsJj5i7oxHMPcud3Dy4daq8WQWDPa2wqLs3NJU9YZbOvGvnzrqV7os903pCPT7d1rzcXyO9y+0rOvc+yLxwyr68AJuQPGwiwT2n3xM8SCUvu5ZHH714/9w8SC4UPbdrCb0zra696rR8OhXwoD3Dbw68LoGivLD1obxOa2a8C5R4u8fS3T33Qw+9EjmOPSmDaLy0aOy9xvzVvDqWlDwk9km8724TvekzOz2gB8M9XrbMvBL1m73b7C29KajoPM2dfzto+5w8Fc42OopcYbzIakw9pUJdPRQuab2zt8c7wRQ4PEQAwrsmFky8+AgJvRfFgz2nDX29DD8FPQGZa7zYgUi9rJvjvEKRoTzMzza9f8scPEQjiTwzkQy7KzakPIYqFL30IVe8lxw9PCgFiD3YIAe9x+gKvGbrIb0hZYq8rw1jPPkWI701GBg9C3lavZ4R1rwwx4U769wGvKWVf735ULI7AVuWPPoZVrzBxc480Ga2vff057xAMK28TaNhPZITH70RiLg9RZ2VPZXmILyJPvI80HoWPTKgsbyEeoy8I8g0vVZUKj1cXY498dnfO7R6Cr1O0CE9loLIPTVjEz1evzI9+Iyvu8mJMr0q7Jk8rX+0vLa/wz1wZAc9SR4yvFwveTrr8bO7yudpPP4Mdb2nf8o8iewTPVqOHr2Lox07pVQMPV2aOzwxpis9QVl5vNMl/DyMxSk9ENC5uiD86LpjZV48CITEukgBhIl0uVm8/i6luyehrTz08pu8HYMSvXCR0Tv8yyy94ALKvHx8MD3VUQ+6WlqAu9XFxTzBOK48YkgkPdXEnD3oUsI8kvoEPAcFtjx1mSe9hxsEvT+Jrj0Sswa9HtgVPRMx0rtu/Ro9/YCXPErBybyRQbE8y7PnvOW9nry4UAA9tUPhO6uLzrw8kYK9VEnFPOGXFL1OMuQ8tbONPcb/4jyd9sE8l0EIvdW1Oz3xuGo8cbeqvE7Mh72oFwY9fA55u1TTLDwr8pS8s49xPRVQXb2VU6s6ghS3vPYmnj1tNNw8QNCBPSFoGTyxKCs9zMAOvckKBTzwphE8ooIDPVLv4rxaKzu8V3OjvHDAcj3QWyy9TlUnPSmWdjyPf4s98E6gPXATk7x374q9O/MpvbWgRbuJW9M7UBh7O3jAdDyKVry8mZryPNeOwbuy5U898Gy1vLB3Br7p7te7IVAmPHSHIDxcF++6oW1vvBOHnDyLAD87DkwMvHg+Tr2Ejho9MGaVvaAWHQnD4Ja96ao5PdJOzj3WWwM+O+/rO7ooszw9NlS8zZY+PFyLmDx2GwY9DljHvFkNvLscfew8jrpAO7Bg3zxeUgC9EIT7PIRxWLtVrRM957MvvcCKUz241EO9OKgEPEkTArs6Tdu7yN4vPdKMTL16pZu9MMa5vQytDb5wJ5s78X8jvSDZYLxiVW09qUTRvBKm/LxOuCo9zWQSPVuxMTzP9Z47aPSgPIXDFD1ljIO9VqenvBkvBj2jOFq7ggokveShtbxku/Y8j5CivIdYAL0gTbK76auNvZk4DzseoyK9pCJLO4iQtbxCecO8Ug4SvYvdljywLBK8O1ruPAnpk73N3wg9Z1Ffu2RUArziTIa7WVdBvZwM3byPD/s8PW8kPGLTXrxrEnk8BWIBO3h3Obx13Gs7BRU2PSBg0bu2bPU7iaWhu3r9yby6VNw8+Autu2Cwfr1t97O8fWMUvc1OCT2Jjqq96atRve9TqjzQcD49QYQePUaiH72+ph+9SEe3u0WsSbKByJs8+4VWPOBEI7tJj4U90lO0uzbL6zwu3Y29FJqoPO+CKL1roHm9ClCPPQ9Uvb1eYYW9QgCbOzdjHj3k3AC9qEGWvMyaKj19ele8JOfKvL7aKj2W2yQ99sEYPTxzLb0URmS8VrKZPdcM2Lvhm1o8GXLrvHzLk7thEv88IiIDPRwqGD0e6CS96VuyPBZNnbw+WqU8K/7EOrnSzzzigNk89swFvCuCYLjfJPU8DrLuu3ytzjyLRjK9F0eLvMgl6jwXPF88GtFUvVB79T27Jau7R45lvNlRfTtoDqI96UxPPI6NGj0LRXm9HIUpvWXQsbzn0GU92tWgvWkWDb0Q1kk83SsMvM+rvzzxhRG9CtfxPELaVLyDmLc8I4cvPawYYT0kuxk9KjoIPaV36Lo/vTC99wYSPQR+77xDlKy9Jw8oPXgk4rvVrIS7lAwsvGGMZL2YYCu9VB1VO5cotTtc/kS8OoQpPVGepjxy6GW9JaNquuIg+TwH+ka8rArFvHs7hj0C4O88ANyXvAJR/LtAk4+9wGX6vC0X3Tw1bVs8VReaPBZ8JTyhUN48uZr3vH7xEzs+Y8Q8NHjWPEQYprya23U8s3ZNPeZHnz3RpT48SQcVPKEiIb2lY4I72HMFPbCRlr0gfXS9yaidu+zRwTsw+5A7JzgfPBUGGr12/qS8BJ3yPDp2lD25SbS7vag0vMB3WrnFVtW70y+0PGjE5ju+2X48O6qyPNZ8Fr2EHo07LGtAPQPuWD3FpxK8dKEvvH8jAr0QkwY7ZhyXveLwKr0JPLq8/uoLPTpGADwALP48f/oPPTHpCT0yRRq75F0rPHVU5ru1/8W7WaEBvRfhA72H3jC8FBWevJRFkDsuGTM9ZyPoPXoZaLwsTli7myzMPEQOm73gp8683jyWvPFNhD3ScMs8QrGivG2y0Tx3N9U7UmkFver7zjzfVhQ7BEDfO4+MA7x9Tbs99/cnvJVSZD3TR6e9UfhKPV8CvjscsDQ8B5xQPM0Mub1EPEK9m3CNvEa2hIkSREY8U/p9u6RjpjyStV+8U14SvdYuTDz6bFs9J49BPTWqozu7oka6ziJ8vbTIgzxvsa+82TZdvJoO9jxaSb28gzplPEcqqD0cTEm89wLtvIeKEzz2rxS91XEdPednUz1htGk9DVJ5Oq8/hrtxeJu76psxvTpr/TvyrSs9YL6QOvCQDb37bGQ6bqJDPQmCBTw8IoE8CxfjPHJ4zTwbPfo6t6UZvRQpkTywiIq7E+Y3vSo6t73+SJe86aFyO+g0zjxma808tuFoPQZ30r3TZ0a9Ob1svSg66zw64CG9ywmYPJxBJL2pqBI8OXHJPC97zjxNIw69ty4mPfXLyLzSWw48YvsePQyVAz1OwQM8OH5HPOoJjT0jnQA9OlQNPN7fUDu9HHs9NYzNvKdQDT3U6e+8hPLWPM8qFDwHjBW9eTxjPZpZRr1GAzA9HlMEPaV3l7yItpw9MZeEPVWfIDgy5jo8JTUQvXXgjbwB0ay8V7G2O5/bfb1tM6E8f6havL+6QAn2yJ+9J453PRmuTz1Ogv8772Hru+fa7jxRtDm92B3SO3mGKjxcYWc9B3MSPK32Bb25sS09TDa/PJvn4TypzEm8q/5KvRPXAjy0JwQ9difwvBdL/bxAa6G8AeXSPDfkqrxidEq9g9pMPZBjU7qtIO288TmivKJHpzycM4o9a126vM3gwL2yx1s9I4yhvbOnebxkiXA9mAmqPQS2Bz1acd07nwX5PJPH0rwJcE89nWC3uxi0vTwyHi69f4BAPeDwOb0gWcU8gJSHvXohxLzanYC7aR5QvW1qoTwAr2W9K0UGvSN4xDtEBNM8E5lRPIEArr1+dU28CysqPNehcr2stfK8oZDavCmxFrxDZNk8/gTAvYB6Zr1M4q88fIbOO04fdj1TmvA8z6JIO9C04bxvxAs9eem6PJhWDjv2r1g9UiKDvCAU8zqeAzi8VuBCPdyxA72/qCO9C4AtvakJijzVGD89AYxVvWbDFT258ta8rrQmPTWDDT1Rq+i8XCCMO8xWY7J343A8U2QmPEsaRL3bhQs9dgZEPb8kqDukFgQ8UhazPXdmDL1NhAI9dTsUvI6lKL3BF1s7uebRPAp1y709xwk9Ruc0vasFtznbSmw7z1oivRV/ZjyPxjm8qZnWvI4SRLsZwhk8RTQaPbPlNbsdRio9B4nuPP3HCT3o4FM9QFFqPYxaM70bdz29Qx5XvfLvXL1P34y8ISO/O6mpKb3qU0o9yQ02vWY2rLwPb8Y71AkAPXT3PD0fdyy8genLvYPZ4LyySVa9QQ5LvddkiD0Rv069bZqNPQiQoLzLdOy71XxQOnH50jz29vm8LOOqPC/sOz3d9Mg85UidvZ3Wp7o16zi8oS0fPIVvOryuJB29evpfvVBLhL3vBt28XpxlvMTSez1v4xC9gG6avKH6A70fo0Y945GgPCn18Tt1HWu901EJuh528j3G3+08jlaqvSlMjL2HQ4S8SLh2va0s0TwSay889TMWu++3NzzXRom9GMizPNQdIj2XM/29zwMhu3UlB71jWWs9YrFAPEyLR71W9LK8ayI1vCwgiL0zLWo9Vg0BvFYW4Lzsw1O8BxJFPW8T1Lwp2489Rv0qPZopXLxGCuQ760CGvEwkDT15p5W9ztQEvGz3tjsx8d48RvawvAlGFL1JVri8lrJMvXXCCDvzPjW89MOfPF3QtTwSc1C9X32VPD27hT1DISG8AffFu/62Br2Ppii8CeVtPYiQ3zurOOM85yv/vP8auDx/03g9B0AkvS6cIzy7irQ7EtdKPY5Xt7wsgL48Rul/vf79I71AJwS9IUpOPTUc3rzkbqi8UTT3PJOtAT2NcJa8wgj7u/jh2jy8cdK82GWxPPpGJL2q6Wk9K+2WuToYAr1N3gy93nsWPnDyOz3OaEQ8b5wGPKSmljr8vnI8H9NKve0qFD2/JqM9x0zPPJ/c4rztYQE9sXrSPN6FSb0AXDe7FaU4PcMZrLxHKMa8I9WIPSrXqTy5b408E3B4uzPj97rV0Tq7Nu8UPMPlDbyUnwM9hP3hvMZcDImddGC8bjaEPabQTj03Koy8kBwNO82CwzyuQ0e9Q8VPOwGpuTv0ngs95LeavcA6uLvmxB69itdPPYJBCj69sdi8pc5VuxYioT2357i9i5KyvNqXXD3VtzK8JSuMPDX++ryt2hc990pxPevB8DwLlYI8qo+9vTcxeTxCoKY8E985vUcXOr04FYA8L1m8OxKHn7wnse+86H36vJ8g+jylgbo8shlZvBFJ6DwLw9c8SoimvHSRO72JYoU9pG6zvGqYAT3cuLi8saQ1Pe1IzLxP9zU8szlvvac4OTxAOTc9TfzQPN8iWT0JGfi60PwoPTIMmj27O5+8XxLcuzVogLwERHE9V+hOvMTtwjyZ2V68F+IHvT5VKT1Eh2k8TuNPvWxqI72uHLU91jxQvRY+2jwMVwi97EPoPOAGUzxkRRi9kKU1vD2GqL1/QqQ9cN5HPJa4jr0g97G8Hz/2O1SM8bxRem+8VhiuvFTkTT1WFg+9uBuHPFitIj36jRq86jt7vcMpPAnyviq8/oKKvAu1iT1CL6o9ABboO8adQL0repu6hvcqPdVroL2B7/u7KmSFParJpjxRqcs901qdu51X6zwhdjO8EJxaPSigj73laxQ9eZGCvPdh6Tt2LSM8xDMFvcKcAT3Ztgi8BLkpPS6NjL0gNUu7Wv0MvCFrfL1jdga9N3PNvPX9/Tk0Bqs9BoxOvZBpyDzTgM08uVgwvE7uxDzUvow9hG2IPct3sTxZk6+9gvFJPdDlHTyMWxW87KlQvXUzMjsLN0A9K3ghPCQGHL0mw6a8QA0mvAyyWTzZ75M8WsvavAKZT72p6yK8u2jyPAAd7roY1xA85FYwPWtTlb20hJc9VdqyuXDCPDyHLzu9t5IDPDSaXjymd04989klvGivlTy58m07phIPPcye0L2t6rO8YQOwPKSV1zzZ4rY70w03OwBWmL0tFOQ7+42HvPQaHj2Vqq87FQqcurKnlzw2vZG9HxhIPJRYtrzvsAg8hmhFPSIsIDuYuYS8gT9YvQjMSbIPdq68z4J5PCtMSbzx7R68l3lDPXQyMLymCSC8lHxcPa+O0TwkGji8ReWwPdrSSL0PHaq8OuIFPR5KJD2joNm83grRvGYEzzyTVAm9m14UvDmP2DyFkYw9Y5cdPTEQNL2Wd/k8MPnAu4wg9rzGEck9SvqLvHqVVz1i+8K8mzBQPDBuvLxoW/O81sNHPQ/YczwmB429TAZAPRyOZDzMIaS8mgRcuzuisLoVbh29ASawO3kiyjy/FjG8NZuVu027mL3IQyA7EH0MPdSvm7wO+rU8MAaCPBc+QTvlIR+8bDcjPYo/pLxuYA+9t0q5vZ0bhDzT25g9XHsIvaJ/ubvT4WU9qW/YPNyyID2SRlq8firIOpiNCzvYQYQ8WN6VvBSj4j0dvrM8FtD/PHsDGj0aQC+9hjxcPabLIzx0N4e9NETGvBNauDxrSsw8Shmivci/57tamDW9s7klvYhQbr36eCE9lyh1PJWcTr2VWHw7Y2eWPAhNFj2fTjy9zQLIO9VpwbwJE4U969jQPF0wBT3IXpk7QYrvPE0fnbwkfAM81PMzPNfEa7ycuoo7wiGOvK9Y/TxL7kK81h20u7cKFTs3t0i7Kl0CvaXrOr2gZJ85kiEtPYrzybz+9TK8ua3FvPQxoL1lmFG9wy2CvaFydzs7rQg9M38uPdfeUL2CcQq9c0aPuxGp1T0Ebnu8vYuVO1cin70tZCu9gNkZPfowE73WJDG8HTVjvdaQaj0yUdI8D1FYvaFQiD3+fJw8a8cdPJxJxjyJLie92UI/vXQFOL0PmCA8y/TqO2I5AL3HsOa6gjQpPMr1az1PyOa8sV0YPeBL5zzfLRe9FkVaPe1YJ7xwZRk8e3VjPb7y5LtcMka9zKkdPkystTyYdsc8KLqIPWP/njx3ODY879jNvOblGT3UDrG8w8CovLIKL7yJvG68wqp5vLoCfrxUTcS8wFacPB5+F71ZUi48XGO9vNuzK7sAKIM8VR+YvNIbNDyafvs8Tsnbu0c1yLzFKpK8yzQrvdhOEYkoAA09DIOaPVq4tTwGF329RCegO2vWTz0HdQm9Cgj1vNbRE736hzU9oZWsvGFAO73FZEu7GA98vbq3yD0b5YK8nEDHPG8ItzxAstS8HWWYvL7ZD71xDwa9VOy/O8z7NL1q6n2843YAPeJ6BD25zpm9bFmBPO9ncrtTgkO9Q17wu5XiAD1g/mi63BAOPXmMd7zbb/g8t6CcPLblIzw4kES9fI13vI7iPz0gbCo961ClvBGiQT0KtY+7fI6dPUFDOD0rXd28pkxbPE5gMb2k89s8oSyBvbksHj3Dy1s86nyNPPN6rDyzBhu93Tj4O4tgBzwZh7+7+VjMu8H9g7yJi4k88GZ1PSzdnzxZzaW8Lvw+vbmbVD2vcuA7eapevelNu7zCY4o9P+tkvYL5tj2xfys8x5zUPYF4QL1HA8g8jLhdvVwHTr08tIA8UBDfvJvHoDuyOB29it7bvE/RgTy1Mqc9HIugvXlCMTz1OqS9vF7zu/NQt7zq9Ls8U8f/PNkjAgnZSGm9YAMqOjnEqT00TW09fs28PKj4Dr3xWIs9KmdTPBKBRLwWTmE91Uv+O7RqHzt+DoI9/QQZO2TBRz004jQ9mL+2O3THmr3OxMM9b/PRO02KAj3kDkE94gU9vQn/KT2/iDC9fSlKPVuMIL3bhCA7LhqYvVCgQr2mSOu8IK++uTRjSbw7veA8k/dcveFBLzzNpdC7aM31Oy/cx7zBZ089sgXgPOxgkDxAwlW8p0fLvFf9iTzCrrO8FLghvPJqwLwXNEM8/Ie/vB0zTL1a2Qu9mO+/vCGrGT3yckm8j5E2PMoSEL3ywHI9jt+BPbrfqzzwZYi8oWmnu3IekL3/glM8JKT8vBaNuTxAksS6TkYQPZX5lDzg5YK75bH2u7o9Yz2yCHg9ZILbvEW/J70QJEi9SI35u2sq4TwHtW49xfk+vPhzAbzw8w09lR/xu+EVlry9TZ08xcyDvQMxfj2l5bK86euxvCQvhD1aCoS9wmGlPSNUBD4baX282guTvZsHVLLZlNq8SgS9vOt8Yjy0H+s6ST4pPceSGzoL/bC6UPeRvMNV0zwoW2M9oksoPSZ8t7srz627gpFdPZUS2Lx26ho8yWcTvHjygDq0p5q8F/04vcGIOTzvxIg9LhOauwnzBb3SWhM9jtZDvR6SaT09HZ4904bxvNxIzbuErcu8dNNqPcXksDxd2zI8aSj5vBygLT2aRRG9/g8yPRWRb70GWMC8AlT0vPeZj7yOPne988oTvRI7wzxqiYw8C5+ivV39ib0ItDY9Frl8u3RyhjwpnPY8AcQqvEz1jDw4rDq94sZ7PFGY8jtTRH48WLSwvSUOxLzFFYs8PzacO9Pjvbt3gBk8ZhkDPXe5rjz+dDW9d8k2vOJVp7zXHTM8fycAPGg7/j2f6bQ81nWmPDLSlDv4RUW8C3UcPRMXi7zQW4O9vqBcPNVvKzzwbVS9YyfivKCSfTuy5L688c2FPK83Oj35+6872TLLPaCxpbzwU3y9mA4svIidnzyl2+G74pAavb/Naj2L4RU+oESTu6HsL739b1+92lr7PFujKjywPKY8N3NnvJiCA7y9R1k77zYpPUsMTr2Gu668EC7qujFyXrxbvb27L9q5PF9vdj3nnGC968pWPbFBLL2FdSW7qcMdPCDT0zzQmDi9wOO9O9kF5jyWhZO8HZAuvc+l27wlefw8/u8GPLqcoj0M6QG9SDjhu/62J71OcB+9EA2Xu2e7gbtQI0q7FSYivB7okL2tHwk9/pglvMP5m708Ou+865Ewu7E6I7wC80q8F/NuvYi+KjooZAI84aTvPCD7JLyuFvI9fSu/PWhLqDuoq089eUwNO9CG3rxvhbq8ZimtvHAzijyiiUM9PycUvPxENb0ReSc9CrfUPVMyujogwkE9k+CCvCxys70ucUQ8NSTxvJSgPz2perw7lRb/uIlll7xJU1y947JovIA9o7zMMBs7ACwZt450rr1OQGo9G+hsPPAw2zk4IBi9jwaAvHisEz1QbME7E4qiO0+s/bw/NIQ8WADqO1ixd4kKrgQ8MzI/vfFSAz3ao9u8l+WQu13f8rwtqMO8ArctPFiddjwYL+G8O/KJPKsCmjx0WyU9lCPtu2IjMj3CCKG8IbbpPBEr07xB8UG93HglvaHulzxnG8G8IW02PcGYhTwlo6U8R1NlvGKn2LwJcVa7k+ozu09RzLweRq88kGvIPPTEK71pcFu9qZopPHdCIrwNccE8oQCRPcMjszy4yoY8EiK8vPE/tDyXAqE78s7ZvCr5jrwV+c88iVcUPZ2wHTx6xu+6tAzvPDxcTL1biry7wckNPXMJRD3FZR29ViM/PQsWaTzpGxO8jT2PvbxGBb0l8LM8YJbRuv8hnDxlJ5k6oG/BPBXqez1wKkO9Am0UPaR2cD1ghdU9BULJPfMBtDv1xoy9u/EiveyOO73jhp88FD6VPPTD7jyY4G08dKQJvDl1eDxGpU88rN05vHz+1b1J2Do9IrwAPdU29TnVzM68s/lXvA9MprxZ6LO8hHUwvZNZOb32LcY8JTlGvSLgBAn5s3K9klagPbKlwTyiYJ49+bJtPC9C3Dy0laI77M1OPACWJDw0S3M9VeZdOoNqw7yqOw89O8sOPFfTQj3Sktu8IrFKPXyB+rzbsC+8FFnYvBKfID0MUZW86mYCPbqBUT15Xim8EVQXPLRyubzTO5K9ikp/vbdclb1G8s88VAuVu5y/HDyCpwY9cotAvUASYL3Y2Q4986OwO7B7DL0+My09faApPcmJfTxjTYe8Ve8ZO52U9TzWplY8PUPYPCgXnjsN5Ig8tUGgvIOTOb0p9GC8aPgTvTNJ7zqrQiK9kmROvAirrrxq6No8MT2KvMZk8rvkayw9bagdPUpcmr203Og8QWWsvNUO6TpgxXm6D/VvvQYFy73QG1U8YdKtPIFr5TttVJE91fEQvbxbmbzLuoQ8tTQDPHnYJz3Vj/g8GY9RvHOhabvGtPk7Jv17vMfaKL3Z+Qm9HTpuvQYUWT3egya9tkDpvDtpvjv10oq8LSVrPXRFG71d6yC99iJFvI7ITLJ5bg08KdMVvHmKgL1PIsY9VEk0PDAoWT1PQPW8JWQCPOtxDL3Xja28owawOiuwwb0u9k69+AvduX3MRbttceS8H42MvF28bbzFU0Q8RsDmvOIWJjxPQGq7Y2ErPcDN0boct5i8WlmTPaFwBLxWvB47i/xRvKSaJ7zbHhw9blHvPIVOPD0Zk1O98v8kPOhK57sd54E8+foXu6qB0zxs+bQ8K5R3uXSdmLytL1w8ZlMEvervV7zakZC8xTskPH/WjT3XfO88ZPufvY+arj2spfm7CqWCPC37gLzXXlM9VJKIvHM5aD11NLU5SaiXvAyS8Lv8Fsk9ReR6vakSXrzcHgM8ezx3vH4+zL2oCcw7X49zvN6N8jxo85C9OKOTvT/Zz7ysG0a8DGGxveY0xrxORBA9eAUivJpOzjz9oWG8sNXyOxE38Tvafxk9FnnzvMy9l7sSNNy8JuUIPUjDZDw8TG67LqOHPA4htrw6AQY9vOYcPJfTnTwoDQm8xpWiPGCZ/Lw4Sqa6kCozOpOrLLyn5TU9zvUzvKkJB72jmgM91dB1vLTILrpeQhC9A9eMvHunrrwUc2485AgIu5ANBLsVugG9P9aoPGSnQjzsxcy9+Gz4OwMInr3K9Me8ZPwtvQa+v7uaAxW8UIn2PEapKL0QAQg8q0GPu8Het7yLycQ8CfRaPVF20ryyaP6783pdvSMNAj03SmE9+vzqvJ1Fvjyf+xg9dnBpvD7Rjzuubpo8MMZrvbx3TT2s5eK77tZ3PHUf4TwWfQS9QbSgvASBMr2m8xI9AC2YPYI7r70zd4+8O2mEPUJ/8rzUjiS8pFbLPAB8mLztOde8zHyXPJCMw7u2u/E8NQY6Paz9Hbxd3IK9H6YnPUIZ+7yLYG294ISBOs4cMTzEZ3U9LwBBPPvofD0xsBW9S1YXPfjwf71RM548gZTVvEosRj3j+jW8eTEgPBlsSb1sajO8GDPDu26AQ71aqrw9cBAYvUJ9NTzaa9o8kiIQvJAQEzv3yQA9E22AvPiTvYjR7Ma8Fqlxvavm6jw33LC7vz1+Pfbnj7yigII8nIzIO2n0hDxVfsa7iwQGvdN6dT3Ar4m5SKjsPJSxHT1cNQc71OSjPIhWq7zsIhI9nK/fvDtxUD3Qt9K6zbh2vPsazTyLbAi8EW0APUTPvTwqP5M8cB1eOwxFLz0Cui29/31YvcCbtDxGl7c84YK4vJOyBD0vaQC8Z2+VvS8wxLyoPZC962ZTvLCsBj17HaE7M5sKvd2+ib1qItG73Ly/PNyRw7z45Ai9+mIivJY0rLxf6ky9iDhdO56pxbyamDQ8fwwNPai2vryR4Mg9oF3+u8rP9bw8uwM9Eam6PDWpF7zUQdk8tkCJPIPxVT2o1oE9ZD2ePd3zPT16UDc87/cgvBu8Oz3kogE9VOnru1B9xjtco1O7JuXmPGrp6r2qWdI7djnHPZjlkDuoZNs6ynarvEOOCLzy0Zy8gzM3PYK3PT1InLQ9dt9vPdbXnziIJuG9oEE8OlVObTyn0De86T6svKrAiwaMFoO9AlqpPOOlabwcDmc8Qm8hPKwYyjqGcQm8sDiWvIAtFz0KwBE9dIwrPPyQqr2Esqk8LcvwO20OIztdn+Y8vnaXvPZ+srxkW7Q82kN1vOmXtb0/4KQ9Wtx/vSAKb7zH0US9SWmrPIHswb1UPmQ8QJFcvfjTFD1O+wA9ZcStPBzpoL0W05g8OlWEO2g/Pz0A3UC7PODTvHB3Obzi88K8gjqPPR0+kbzUjVq8FlRHPO15ML3onHW7ZEvnuxgCnrxeUEg9LiKivfQEVLvHeO488p0rvVqKsbzEhvm8rjHHvE5kwzz26848ECo7vY+mCT3IyD879tOdvc+Mab0eZuq8fsWwvH4AXD2IXl+9dKHUPUqzFzysT8u8KcjgPFo0qjwYcWY9zcYkPSmNQ70WKo89UMIFvfZUXzw0khq8PoAyvQ57hz1fkDa9bs96vOpEUz0U9jW8jJ7BvNj36rzqjaG8HvNUvUiEzrzlwZU83vT2PHyBTDz+c5M8uTR5vIRSgLLuiM48OqplPegt4z0gOLY8l3qpPIq2OT0Ecve8+L0ku3ZZ4DxMWBw9JS0XvY7odL1CLVe9yKjWuixJdbvz6Qc9WZ6svLzE9Dzw6SQ9pNRRu0V6lzzg3IM832igvAz8k7wJgPA7YGDbO/Mu6Lw4cJ+84aiMvOKBTLyCDCW9CgZ7vBBGAzrIm8c8xDH9O8pI7bz5Zic9YriovK6qs72K3IO8YLuIOgTyFz3PaGi8ksfkvBiTEj25fwQ9Li9jPNBifL21Kws94AbBPF5lKz1g0xU6eRW9PZBQ6Tr5xpk9d3LFPHllKj2BmZ28qOVxvRjLs7vGHCk94ChWuhQpaT3DulG8TMjOvUQVKr03HyC8leYevZfIlD3HMmg8OP/7PAc31T2pW+Q8X9lBPSKAAD0PwCQ9XTBGvYhhr7xNTcC8N1YqPUA8tr1PhDe9v70JPallj7wG4om9w99XPbdLcz1r90+8GVjyPDBDq71dfOK8wKaDvdW5azzHTiI94EEfva8iQj7+F3+7IMtYO7aOODzlxwI71AOlPPU6lTxZkaE91WQdPJQVOz0nWCM95P+APPV2YrxkPIW88LRxvSaCOr14vIU9tu6IPdk4CD3WQ8W92MYpPDwzXTuqcJe9mci8PBNfC75prIG9hRSGPJNIjTt7nYy9Jg+IPTJD+LxNMVC9mLaDvT3LMzsXgUI8wkyaPLXH47ww24A9a3P4PAgpcTwFNEg8oBZevbnzJb02zaG8PthVPewRwrzx01W8jMNgvXv+Mb6RI5i9DUXmveM4FzmvSEu93UEkvahhbb1KiB468KdJPe/NerxQQag8yjBwPB7wGb2bXfm7Zap2vUJwoLwjsi49vY0yveloPbxFwAy9eKz+PCujYDw8P5c9BjmDPQVtor2KhYg9ihq8OnqtnjwJNxM99YAsPHpXEL0L7bm7K7tdPfctLzxcrp28g8X5PM1ynL3LmTI9Tw81vCFiAr0RrJ89K1wnvMxVfz0kGjG98WUlveOEa734o/o8eLmKveM0A4n2CZY9r8zSvG93B73hRcU83G6IvcVZEr08msU8H7YRvZWEJ73uTwS+LtHPvOC+pzzRqhW6e/gHPemVhL0gAQW99r5ePLN9Zz04uyC8oyPEvHyFmjzjY6+9xBBJu88hH703cGs9Xt26PHrhMb0sBh897w1nvJvgNLwmrmU9xMSQPbqS6TxtpRM9wdrgPIB1UD0Xwjs9+tIDvVxd4zww0pG9WmNVOwzjLLzCv+a8ZPdBvcDFkbyUkCg9kl7YvKZlvj2GqYg9DYOcPMGNWry7jS08ZwnNvZbBpDzY+Ca7rYuMvDkzALzMO408+XwPPgGZUj0d6iQ9AXDCPYWtrr1cX7M8EnbKPI4GjT0ZzIy927tiPRjwAr12viw+QwVlPRQLoj1AIly9tIaUvfvrzTyFiDS9dvKYPOBHj70xi+475VpyPE9upzwwJx88/DZkPAnuBr3Sy1a95lqbPRYSk7xFhRu8uXbUvFWhvDzL8wm91bmYvKAhM735BVq8JHCIvdFNAwgp2Zq9WaIEvZ3L8jypNaA9LZqBO8Jc/TyNJWi96SJGPU0a5TzKPNS8/OjTPTeUq72cGjU97LEpOweVsTwMF/q8wYSjPTn2ETx+0qC8qLOyPDx5s7xpO9K89yj2vJo9SD3w1Fc8OLUDPObLjjyEW5e8Zk6+vYc+Db2kJoq9RCscPYM3nr31whs82oyfPJVDM7wxnoc8tamEPQkXYD2klf27oPhlPOiAr7yMA6U8Xdvku3TOXr308ga8EcgLvTyxMD2u7WK9mNhPvHk3Aj3kde+84fVUPSzn+7wcSTC9vruNOq+xhbomsL67Xp8FvN7swLpIqI69/9l4Pfka2b3rjNY8GQ9HPa3sk731twq9ko/3vLck4Lyn1RG9v6CZPWf3XboUSxw9aJ9ZvDr7aL2ZGBU99wcnO0ddVL1OogY9vZhfvWltZzwWg0y84hT2PLfKQTuhqYY9dI+BPf/bRb2WFCG9/ZoFvcCvpj2JgUQ8F5i9veIaOD3+rvi8rphNPXqXlLJ6tOa7ahsGPoG7Wr0+wcG7HoPoPSD3dDwVvI07OP/YPQFtmLzgSE08PMjWPVRCeb2pfo+9kHy0PFfn3zz0+Xa94v2oPHlaCL38LaG8Sda8vLvVLz1PmCC8IHmrPWtHsr3zERE9QNmGPbmejT1gmKY90170PNX6zLvgYuW8gZ87va/ys713QHy9h5mHPRF0bj2OlYg9TrUFvANoRL38qZo9qDlrvfzyw71jzB69UVoWPbSfOb199fK82TJEvQM2vDsB9Kw8+yKlug0oSj2ntmK9EWqsPQ0gPDqgS6c8uBKoPRcUCz25uaw6P6q+PJYsu7yhDgg+CN+1PGjy7jxYiQo+CgUPvnYG5L2WfZ09/a/yvJh2bT27AjA9sY9+vcPwDL1gKI69noygvJd/EL2mWfE9UzDfvOGuf7y8hoS9cKg7PZLkh7zQ6JW8JvsFPAjdqL2nPwO8KItDPdgPgLv7Zgw8M/PcPPO+BryEN4s7RUNhvd2wgbwhU+o8hSCmvM6prTpjnhS9z2xVOtRkMr3xxaK7p23qPO56hLyRfrs9srM2PI5xsrsk4R+9ZIWAPO1qe7xIp+M9bEmYvNB4XL0goKa9AW3IugLyLz2Phha+dFZLvdFmZL3bQP885oRWvZ1lAr0AjKg8qmYtPF7K7LwdVzu9WWklvHbb1b1oEAm+hmGhPBhRhD2AGW09Pv0nPc1dyT1H9Oy7eU8YPa/g57wsjME9G/mYu5HRDj30tSk9g7Ccu6Aygj1jue48M/JMPbEVi73EulS7Y9mfvXm0RbxLeBU8xulnPCRg3r3iBIa9WjETO1n54bslYo07AlDcPAW2mbptMg68wo88vX4/Rr0afX49rfIvvEHDGb4lSUs8cc2EPbEu4bwjf4s9ciRBPZZG77ygbEg9x2UBPBWZ1Dydgx49Xa+kPdqwEL2geeQ8B0YwPeswFL2MYDI80uvvPEd60rxYZr49FBJKvJG9Yz3ofhA8HEefveoU6DwRvbi83szbPN1Khr2idxm9+eO3vSfvO4hIxc48CQEFvNLPCj2Fhe48yneVusry6bwqWwA8LFMlvZaQlLx/a+68dcOAvZsW7jzqsxg7JDh8PG52Mj3n9xq9/vh1u5f0ej0M7l28GWMJvf1frj1Vxhw7z3VRu06aQL19nMi8c/muPIVVFz3R+ny9WBAsvAjRaD0ImVw8Bb9QPDpVVr3DY2o9eZSHPOgW+zyo0qa9ciMQPNnpFr1sa3o7I5VPvfrFIT2q35c9+MhJveD1KzuF2NS8IWk4PTW9Db17KvI9iXFxvbQMT70nbDG9Ym9QvXxnHb0m8hA8wlEJPU2LFD3QzyE9yC7DvGCzxbyrLSE9ecKYPS9vnLwS7g+9b0FEvS6aIj1k8fW8U7ogunTxEL1Xmec8EHetPHNO0jzPB507HgqZvePPMz3t1049Tf4ZPULxP737Zo29eHnwvJjbN7yMkxo7DtO2vCdli72gfxq8LDctPLXqKD1KsPq8oN/7vGFrtzwa+kU7Ue9oPC2n3D2+MqU9/tWHvQCkwYdvIue9n6pLvNuLEj2vSAo+qAR/vNDpZT0a56u9DtzHPVge77xNWw09gRCcO1rIwbmqPW89RBF2PRS3lzwwf1m88pF7PNdPhL29lci8GyAMPTo8Xj2BdQM+MAgfvXnVPz2gyh09Cbo7vEIo67ufGis9elAdvWP5T70Lu4G9MWM+vPGCwr1UoIY9O20xvEJFGj3UzaE80cvTOAQM3btZI9M9WXGoPQ9itjwxbo29v2gtvBS04LwuXhS9TB3mvMSZkTzeJOw8uZIHvPiq3byzEaK8bPKjvLvTo7y37oG9F//XO1NwwztE5ji84OiRPMI0UD2mhBC+iTBgPBFYWr04fD09zR3RO6Jp2L1+xJW7kS2RPXDMO71LQoi82cuavDO0FD0d4wS5mA9IPZQhFTwfh6c8J5OKPQQoW717Alq96w/0vCgtlD0e/Qk9jaMkPDqFxD1q46U9x0u5PfYGyT0loW29Yuv7u57ckr3yCdc7JwnJPAHpADwMdW88HFApvEESebJrgru83xqUPUWvKjwiRdY8bQq/PK11Fj0Y47O847jNPSdjx72H4c48KYZLPDOJuryV5DW9ezqHPaCbW7162e885duUvDJmPrkgWRK9ud+0vH34pj2ty7485QMGPoYMr7wBVFY8iQzzvBMMtLyfKne8BLhtuodagjrb/wW+0Ed1PfhTUr0rsCS9kp6YPQZFsD0NfMQ9Ae7QuqRuXb0z3SM9lxIivMfEXzw+EgG+fLObPAJQpD0LpYa9CLFjPYDO4bxQ4kK9ruSWPUU9GD0aEZi9MXmEPUvpNjz0o6w9ZRRQPCerxDxGF6C9FtXCu/axRT31svE9g7hePTWKL7376EA9C6MbvWx65r1Z8d68fEd9vWwaxD1Io327db9ivAQtAL3wrlA8DJ3DvaYOqr04ZRS9R6qIvQV/gj37Asi89y0BOr7aAz3bNKs9fjhuvTrLUb2twWy9qoRXvb4zwLxBorq89vDRPKY68TwD82Y8+FsWvTL7FLyOok496F4mu9MprDwwvXI8uDmOPEX1rDuK0h29YuBlvL3bvLtXwFW9c4FBvS96/7xyQIc8KhBevSew8jxchls9ok+cPT39Sz2n0qu8JsUlPMC49LzVxKq98W0kvaiPr731SuG8ZXuAvaTExj1EvXE9F904vUL04TvENt68an3vvBYb0LwS17g87SowPVDJyDuDuIM8JLdCPdqypL1938k9dCXPvdNjNrwmXXs9JslLvZ44Gz0VEya908A5vMCa3D1aGZs7vviqujvjrL2dVR683nKpvHYBKLwwJDW9bGitPbBjVjvVuFu9hyuXPZ9/qLz/NSW97B99PS+YubxdHqC8gAiEOz/rZT3gkFw8awwJPWjYPr0q0Xi9+Yp9O20rQ725h7a914TUPGJF8LkzoZg99Ii7PaFyRT3Vkp88Ge+cPQai/rzeY3k9EHOyPJlnIj1yPDI9HiGSPQxjZTy8BMm8zDHvPRcBrD3DTgY9r3U5vWsBpLy0nQC8APnoPIRfAb0r1528jd9ZvbRqNgmuoFa9COrivO2mDD0/WkG9YyqBPRrysrzkQJo96Qs6PPkcnj1kuEW8Gv7JvWD/RryGb2O7pINOPVnD7bya+Li901mFvZS/9Dywrje9Os0CPgFggD0QN4I66B39vNDtiD0XNfK7wvqDvQAFcrxIMjs9bq/NOuTHzLuw7yS9N8ylvFh+Hb2Nvl88sr1jvY7cQr1rUw+8GoMqvIkodrwSrgK+83KyvdAPnz2DjxC7VouDvf4QwLwJEEC88ybzvLjD2j0wgxq9t6iGvVa8hLzvsk+83s91vboi6Lrgzhk9lNoPvYEiQD04rDI9kqeNPYM4bbwtnUU9V9LOPTlIKD1LdIA9U76IPDnhDrzZn9k7hsSOPVxSnr2Vuo49SS47vWaP0z2bu2S8Nc5LvT13KT129x+9JPEyOkmZizypFSu8j1kUPWA8A77TOis9NYLJPG+m97xklcO96stvPYTBBTxLs2s7lOIJPbpCKz1OIL68AyYNPWHJkzwtvdo70WQKvfBVlIjCJxi9i3qCPYwpJj0ic+g9yjjUvNt3BL3RKx49OZySvN8mWj3PIyk8lVALPeUzlzqx87S9G50NveDTZz0bNoY7S3cEPNTxVjwTKG2748ufvNWyhb2DxOo93krEvYaeeL2ko929TL6wPL3QI71KaMS8ZSKpvc0+h73cumg9J6ePPDhbjb2kyiY9zaE3PY4FRTzX1sA7fvHivPD/B7w24/Q96RdFPQ6EyT3K5NW8frY0PZsD/7xONGE8C4kSvQMt4DqGWJA7ez+8u+14Jb2cmIA974wevWkcRL19uAm7i4+FPPRXiz1RA/a731q1Ol0xIDxHagO9oHGSvUWcLr0+2x89wyz7urA3eD19mI29eoTwPWjERj0f7js9cUcWPe4LL7wu5B49y0HsPbv/ibwkZiW7g8HjPfzPIT3KoXM9hwsLO4ajEzwGwjS9TSwcPHgTcj2IyFU7EJvxPZlXPTypOXG94oinPYLVkrs00mu8C2ZNvQUQDD2SLfy7WDRdPU2ndrIIsDG95ta6PZa/DD26QRC9vDgwvSxLQb3l3oS7pnIKPs6/Jb2xG+Q72G3xvAxBZb1fPne9JLNTuuGpSzz2Lbk9yqoBvYWEh7xvL1I9M+BoPQN1RD3S/vk544T5vMZcITwuZ6e9Ywo2vZj2EL1HwJA9mT8XvWj5Kjyzgd06qfHkPEwvgDwjSj29YO/iPRlPpju7nk+8h907vFH8GL0LO4M9xXjDvTPxTzz8Xc08pZ/hvBO2sT0JbXG9lFIdPShABL7JWh+9VcjaO94YKD1qwGk9BhqiPNm0gz2zloE80KNVOgrhK70P6na9A2rXvHbEWj0dFdM6E2XdOyqhaDzYMoK9Mh2mvb7Ckb0gqUi8wATFvOjQbD09C6q83X2wPE/+lj0SR7g8020qvVQBhb0NRpc83IynvQ2+Uj25Yq+6MT3tvMeQejuhjvy7JgmXvE8TYL1yaRC918vcvDWiDD27Vcq5Zt4PPVz4YLw50CI8Px4Rvdv5HT1trlw95Iz0O0DVDzz+zdQ7DLk7PHfPbr2oFIQ8RFICvLsQhLwSQxS9uHwjPUZNajynHJA7+4lkvDBxDz1Ii748CZP9u/kp3Lxpkia9+eIQva+pDb3U/M+8nP5vu+xzXr2oeGa89X4yOv2rmj1TCW47t6NPvGfcUryQCGu9L7+9vJXQArmwZUm9UTAivOGH1jxOCS49PExRPNMXrrxHU109lnBDveNLhrzgwng9nkSrvVC6FD0uJXE8+Qcxvcp5zDxqGF87MEoTvdU5fzq1+4I9KcYqPJN+AD2kL7O8hz2+PPZEZr2rtGm5Bw1YPQ/U2rzlMFw8kR8XPcyDlTxkhNI84gz3PDtntjywCaI7qiYJvVqRLr20nM+8lT/xPPJhXbyF8iY73w9XvT2+8Dxt/gw90beOPf3omLrtELo7adGaPLUYLLu3h+A83Qv5vJ1X+zzTMXK7UkYdvXMSjDx8sIu9/RGQPTFeAD3mGqw9ltIGvc9PrTzFwYA8oO1Zu+VHHL01sYc8cU04vUQwfghdmJ67HU5/u+zeD7vTefK8TIiKPMVxmT3wZhm7zJ4XvSpIhD0QdoK9UVlKvSNSIrs5JOK8VRZCPNDsFzu7X248tlJwvTYufT1TfAe9M4IVPW6TPj0e1oI9APVCvONPHbuRHu87EpvEvJEarzvj8C47GNF4PHoCgDwkmsm9in2yvDo60LzZygU8L9eWvJdt/7uTIj48NuG/vYbHIz349ky9EcZ0vZmlRTy/PYI9A1GOveJynjzXCPI8oWoFPD9BSj2/tpW83ipTPNh7/LwWWxM9OnSHvfenSz1selQ77eoyO0mjOz3sdBI9Vyo/PdpVRj0tUBQ9lMp6PcM/Gj1Z5w88Qx9XvHcVhzz15lO9mKSvPP7ykLzPyr49/xj/vBMcODxUYZM8t8ApvKTxSD0P8kC9c4SkPGVhDjt8FhS9Ui80vHl70L0sDk49Yn44vKLJ+bw/mKu97HLxO9DR1Tz53o+8nVKdPHulCz0sb3K9bYS3vDuRH7pJLUM91+M4vc6A04jwZXO8C+I9PUNIBj15DbM9Zi0AvX4xSL3eGDU9n8ffu8S+Sj1t+yo9ZYkyPVvZGrpL93O9v+1Mvc6sxD0/Jva73XAQvZBlc72Crrm76Qk6vK2VDD2jwRg9BwK0vWg4pTwdgzq928IVvNN94Lxugpa8y0ZovCL7g7xJugA9zu4iPaK4Lb0cpjg8SL+QuxHR1zwUCJ09SDQOPR4TAL2YEps9qG94PR8SRzxxHTM9gIEsPaNdczsgLZs9+YS1vIvCH7tiaxQ9NTuoOs3IuLyXKqW7K/9PuslWZrtNvhW9WBaIvSKtZD3MNt47pOi1vbGemTwZaFg7JWJ7vWmVTz1+uw89GWn6vIm6j7o5EOO8RkUFPWkfKz2/VXA9tRY9vcu3sbzuGWw9514JPcMl97xpKFU9xwaWPDKvVrwf+Bg7sq+QvMHXY7z8sI67b5LfPJoQ2zucswS9nwrfPLwjxjzAdNq8gjzdPMPruzzmZg+98XroPO8PSD3Zamc8EQhRPBz7g7KtUzg8layfPGUfC7ziL2g8jYCRvVDkQ70JfFe91A+APfb0gbyY9F48zHbaOyMGY71Pg7G9QoQ6vHxSPD2NPlQ9QT4xvfzWA71IMuM76fwFuxHqvrwZSKk72qkdvIlacrxHZU69N1KvO+tH4zvVrnc9lZHQOm0GHj2Aoro8pKWGPABn8zpfjfk8aXluPbSxAb3JlD67R2jwu+K+JzwqLUg9fGIivPPejbyOfm68b5nSO3rqGj36V0y9VSFgvBjDbr1q0QG8ldYuPNrXvDzrbqo8BRzUvOBRxDwBWsI8p2itPAlW2b2K4O+8Td0FvfQjvDtAqSq9pL6xvAGp5zydH1A8+7ZQvV9aBTwakfm8bhCrPFGfBT3qzlE9B42HO0ql9zxGRE29EMP2O1VlPzcEzt086FOkOx0h5zwp7kS9W0DDPNuqqD2LJ4+8vc+QvYvkL73kJbe8ZfgFO6FUmDxKSx09rGDtvNHQAL1pGIi6fI8WPR/JGDxx/i69y7y4vFaDMD2T0028Ay0VPLLEo71ITZM8JOeXPIbQqrzZO2y8LzFlPJ0QHr3wpcG8u3iGPPntijrEELM9E6pvvdmRhzwnhYa9MZHZPPTp+Dv6cQy9zUU5vTv9BDy0qzu9K3y0vIgWDTsQODG5r7icvW7dFLx4gZG9WMUyPcwF3LsCOaK9XEKTPMteLT077Dm7N6uXvfZiljry7DW8Gg5APOqgQr1RrHI8be4LPAlP/zyi3hO8sNcCPVLlcz0b24K86TcGPQnpBL34Pr277VewvPoOODxn4+i8FVwHPRskIb3eyG09v+NAvH9CBjtigxe88NCtPb76RT1lXhE9O381OioxjT35Yb49dRpHvZd5uL1Cjh280LcRPq+fnDxOkDI9ctm2u1CxZL0x02q7QPYbPLO/DDqP9Rk9YJyAPE5ZJLxx06Q72t+/PcIipLxN4uI8/R2MPUhRnbsBUQE9RvCOPBWJFTxlKns9dnFNvMWnbLv2YT49bimkuwxubjtl4SO8uU6avLp2CIkE5wK9T4sePSX/qzvpJxs9SUzWOobfuTsB3o+7yrEsvFJJKr1iWIK8JTldvY+dMj0Yuqa6AJ+APO+lCD0yYLm8foQVvdhFlD3y4Ni8YvlMPU6VBT39WTm90NUAPBmtJ7wyWbA8kPgOvY8REjxP8rI5EeQTvecv1DwR8KO9d98CvNhvtrzjWMq7Aco2u8/9Wz0L+h+9D5dJPVFPajxakvi9orUJvXMWujyk0Te9SZ0suwTE9jvCUZg94NkqPeCZJr0x3xq8fs2avONMTTuQfFK8khg0vA7OcT3BaDG9l/HcO+dpXz1yH5W8covnPHBF07vbLxs9oQSsPda547x31Tq9zdfOvDeyhDyCore81+G8u5KkfT2dyD29ZBSbva+rPD0uLJ28X2U2vOJbX7x/TLi90wGovD1UN7x6psw7H17GvLu2bbtotgg8mQcQvQwiy7xHjpy8nwozvaUNJ7zoa5K7dQKBvIQkIj2tnn29BIOAPcnLmD2IKcY8SXETPahpoAhoZlW9wD+rupVt1DvK85E9tKpSvcx9IL0rfY29zYtHPNXH9TxKKH08Hsg0PA9RuryBQiq8QqrEvGU/QDzm+ue8n5LEvCHo6r06KRs9kSF7vEJvxjze3nk97rxOvUkdxrujuga9nuNUPbZOlrxmzQe9GHPNus63CL08r0A7/DbgvKdKRD1xxTs9kxPvuofa5Tx+WEE903KQvO0eLD0+a5k9fYs0Pal2lT2335u8dWjBvKMy8Ly9zui8xcWVOxuT6TwBfd68kLDsvHMCmr2NI+e8unw3vRrqJLxjZIK9JC5+vHTA4zwwxHq9EZBiPONTZD2Jk2S9usAcPaIYxrycjpC8NlcSvXFjMb0OtDc8yOequ8Fq5DwD/9Y8vVogvRsxWjym2TS9lJxaPZw8RD3MKOm74xowPQ29Crw8MN67Qlalu+I5p7y5Z9C7Om1VPCx2fzwugYE8nLysu9rFQz3fUOG8RwYzvXo8ELw9M8a8le62vEtqgzyhKoo6caS8PETzY7I3Kzm9uwQOO8HJzz1xIIk9Qn5uvR4lC71CUeA7dOoGPWbrbrxO/xY9ntURPbr2yzzCSoy9Q/AWPQW4wbmDXmu8rgBEPYZksz3CFmW9qYDEPLm2kz1blfU8/FV/POWZRDlzGWU9cUmfvF0ZKD2fbDk9VYEmvWTyjDyvFyQ86k/APbmYAb2wlgU98xpYu6I5kDx78zw9jm7GvGh9Bz3m3WQ9R47ovBW2tDwu6PS81JArvVW6FznYnFU7/IiAPJxMir2huLe8bzSHPJjIiDxPOSS8gZZhvGtXkz2LR1Q9M9uEPG3RxryvTgm9/QWLu3+ECz17TcM73jmOu+Cez7or2MA8RYOXvLt2dL3GN1c8ak4OvQm2xDyu6uc8tboXvFg0szwgCk+9S/K0u4KGx7zcmAc9C85nOhweNzzf8/q88eGUPP8H9Tz7gwc9hQAgvb/8rL0KLDO9cFybvF/36rsjwIM7gmUXvPBXyTysKHk8OTNhPBNrSjoe8Ve9hTkDPKmfG71l0hm77amYOlZc3r123CY9NX8mvKAA/bwe7Bk8y/BrvOG9KL2qEMi8o1KmO9ZkM72nKsM9GLYpPcEdkjxKeNu8hd76PDiO0jzCEKm9h4wWvWxPKTw8iPw7sGkgvAasUTytVJU8kMBWvQZp2jwUj0S9FaShPODQibwpeVm9XHyuPLMpXz10cjQ839UzOxSXpT3bGiQ8KISGPF/Porzn34w8ljYmvUqfMT2NkE47b4pdPI8QPD1NE/28F5B1PdgByDqxZzu9h++tu9ynvTwvoPk8yu6NPTzGirz3ZF67BQvCORG1lLz1zIu8fc8VPVfrJDzexZM9oSJAvJfaWTxePaE9dq3LvL0Ppb2YWLq83zr+PV6d87zj3107nVMHPLoUrrwycyo9FZLHvO7hrD1uDao8+xZoPTeZdL0ATpC8P5cGPcF9LL2GT7W8MNx8PNZOyLwuQgU9qcklPb+ghzsYTss8K8ZHva1lIzt5OFY9XslgPAUZwDx77Ks6HWgFvXw5BokQI6w7ofVIO6kt5jybkFM8yeXiPBkY8Lxs7oc8iHjuvOOOELuT2MU8XziCvAehrjxfky69uFsvuzu0nj2aMRu95uDkvG78Mj0JCxi9/17Ru30eND2rkBO98myvPFXYlzu9l748V/8YPW40TD1C3X+8743Ru7L43Dxuyim7jAiQvFXCKL3R6i09R4YfO2eCJT3CORa9e07IO+57dzzdKuq8xcfEvL/jtjzyUnA9nLCvvEvkZbtmDUA94ImdPFTWU72pSsW7JKfnOTcn/rvampO8VtWQPOCCMLyCv/28zg0HPTsKBT0a1r67RSIdPH8d/ruhMlU8tcYNvHCB37zXDdQ8h5ZLvGnz3TsjwWm7GC/CvO5zYj0GTAy96kNIvHIPDj0RDuI8aVcpvG2BEL27IK68UCCjPOeFsryqvn+8Fp3zvMWuirzFgJw8SvsQve8dYbxtgH883RLuvPUbKjt80n+8PKomvVnjlj14zLu9rXyePFVDwz2+IcY8ik6EvXNBLgk2vya9PNCuPGJ+SD1yOpg9btTIO50Gobyrg2e9hYazunPJ2LoFOOY8oUSGuyLLmLxBq5g9jX6zvGAYLjsLIdA753dXPMd4g73K4xs7D58CvZDmu7wNAws9QFsdvUt2WrzUO+S71KPPPNlkwr2Qfrg8bkoovR65CL0ZQiy9jmIDvMuGPTzhnQk8nKoVvQpJQT2aBSY8ZAnLvD9MwLpT0eY9QJgNPa0tMDyWJ2a9g5+3PC7xzbz7/Ly8qR+cvRzNGz0nrhW8UX0EvSZWkb2TD0e85hOFvSeEfL3FHl68OBSmPM/I7jvfvNS8dV0VvCCBijz5joK9l55JPExmBL1u3zg9koD9vAwFSLxJHL67Bj9fPTVK5Lygm3u8iTY5vXVfKTzX9BK8QkoePUpFGr1Qegu9+sJAPG8b07xQWW88FRgevEOrary2ywm9SXeAvIxEjT1oTik9s5NrPflaoT10xou9T3gUuzD5kryK+FS9mtL1PF1Lkrs9nZQ9Wc1tvWIMXbKQEwu9tvyXO17Uoz3BgWU8AbuTu0dgDbwGjKq71hRSPdwuHLy+LO48GBr2O4BWNTyThU88lo60PKthhrlr6Ai8GaMpPDcxNz0awFu9vXvGPA+kRz2mwRA9uBLLPO/phLx69ZI9ckBHvRgvujxNXE49S5qBu3L8sz3QRDu99jmHPaledDzP5dC7HaxbPT65HD1kSo08VDcQvc/XEb34Sg89u0mVO+SqVD2ETgW9649jvDJ7VjxehEI8zrkSPTW1o70NLRA9Feapu6C+KLqtDOO74nsKPRsnrj3ySq89fxLfPJ/RMD21Rsi8XIeQPFsW0TwgBBM9wPbGO6Ts1bzALz09Iv2CvWTDlL1RdYa87ljpvNp6kj2Htgk9h2PxO+cJvz0DeFK9EDCqPNZnFbzd66q7KD1Pvex/1zxWiha9Lu+ku2EwMTwVb7o7XKvCvH0PCb0Tn1+9JTghO4EYTD0Vx9C8C57rPDQbBjxU2D699hM+vNOE3LyPNcK9hoNzu6dCPTye9Fa7EORTPCct+rzeSY69RvYmPZKGer3ZhsC7NGjjO+gsML0o+BC9bshRvNiTRr0KWow9v8oOvfrBz7vZsm88VubGu8NA7bs0/6O9laCmvdhshr0Vniw6VUm6u1UJCL13SRa9SJcgvY+Inzu8JVG9uFKgPCEOQjyjJri93G7OPCSGWj2RVWA9lIH4vFzGFD1jLbS8GjkrPfRz3bxoRPy8rbscvDpsIb1Qv4I8sV/ovFKyujzBlvu82dw5PNAwIr0YxUy7ULLBvNbYFr29mHo8iNakO5TNlby/1YG8aedauwWiBb1D8Ka81yPgPJ0xOD0Yzds8Dyv+PBHUlr3GSTI9ZVASPVqDVr1ypjm8COvLPbMYg7rq2Dc8jOaEPRVT7zrcKYs8haJ9vEC9iT1Bt4A89ZxMu/Qgo7yyy0W8l8k4PUJFd73bLfW8gJSqPJX727yUjog9tp0pPFtOmz3/4pg7h4EHvZKkvzyaTtE8cgE9vW1QLL30pgQ8WykavVjERIgJZO87C4eZPJmSJD3fySE9T6WJPQyU67sAI8s7M128vKWgvbxwdSY8Li4jvWznIj3JqQ69MfW7PNxa2D0BR2G8UfE7vQhhgD3Y00e9gZWQOzT1Cz0S8sK7gukIvNZTTrzOoxk9S2BlPZM5LLt1ENK8ihY4vemG7jwh0RC8jcvJPBixLr3S3oI8/uSRvJTgwzw1Y+W6t/tbvSXMMj1BB0+9BmJKvYcSbjyq7987zGnUO75aIj2FyEY9Y7PAux07Jz044zo9F9gDO4IKLr1D2Oc5IUbKu1Xpw7cE+D88exQBvTLuyrsZcvQ8AM/XPNPzFj1LAmc7sVXgOzYli71j8IS88+q6O/+imjxfI168YCwevVu3/Dz35fc8j0xFvYACgTxf11A9gC4LOV3MHz1+KyY9k9rDPPHBJb1nwzO9YnykvOC9Zb1fCAY9fRscvG2Q+Tv3sbK8+HmoO09W3TxphYG8AECpvK0TBDwo0By9VPXUvNhIFj6oF4K8iPKIvUYrWQgl17Q7lifgvC/FrzwwlWs9egpPPYvqHTmADau7Vn3kPMoUBbykAJ08lC+lPf8Dgrv2Yd49WRpRvDZuHj11gKw6W+KwPNUHCb465YO8PYXhvBWXLT2y6b48SvSIvbwwKzysQ2M8MrZLPZWio71mTg69E5PCOkX45bpFK2e9jolPvEbR/zzwbE89lxU8vILAez3DRQU9WAJEPCMh77xlJt49nQQTPaXnDbxrmxw6PrBHPUg4PrxL7+S7iRiyvQb/NT10Cw+8q/54NxRVZr048Ho72uXxu2L9q7zk6em8BY+0PA+Fwzy4Ywe8xbpKu17JYj3s55u83iV5PX8mNb11nxg9OeA0vLDQMb181w29IdySvLzSlL2J9EW95x6AvTNimrlmuOM8UQeLvBBJWrzLVEQ7i/4DPUC+zzx5ME89yjOlvCAOATyygNs8Gn56vIRwWT2x3Q89cW0uPOpZND04U5e9zFQzPRid57u9UBk8SJ+jO2B7ij2IfpQ9MJ7iunZaWLKlHEo7SHaSPB5BAj2KtJG8JiKwvOrdjzyrqSA8Y45DPZpUWj0qUZE9ubT2PA0tlbx2PjO9EXAsPSTBFTxYJ5G8+qGgvFWlLz0PGsS8nDFGvc91vDxOsh49YHh3PfgXML3QEt88d3SKvOfUqjsAvqa7D8siPZyDjD2u0LG8j6gVPXcWkbx6JE+8sIeuPBAqQD1PXLy8+O1SvFnj2bxj8CM8xviwPHFKd7wccJi98PIXvJ11dD3vHii9BF7MO6IYpb29LYM8JpcfPM02X70KJv68JEEJPYq0Bjy+Tps8AtdqPaRUVDzmaye8AEjEt3hyvDyyZaA9hmT2vAGd6jyJfMM9E3nJu4h8hzwiPHm8CVFBPAO7mzwA4zg6H1rJu6aQwzxvt+E9ruTNPe7Ou7vcvTm8QTpLPb3wmLz+WUg8qeoIvcySqDx4n0O9v4I1vaPMm7vv3L+9jD94PMzSN70drDw85MkHPeunoLzVexo83mg0O7BpqDzZE1a7KBELvfBxKr1Fwy48WDTVOlVTcz16qKA7W2VsPDGPR71gSpG9e56BPZNZDTzEOj+8nm3BvWmtxLwPBFG85DcTPaDm7DmepLg99YBdPW+M7DyfJLE8m2K/ugwdkLujCpu83LkavZXmvrwy+e27CuXCu0BiXjyiPiG83nnSvDgsbL0NUgm8a9yxPEltHD38eC28oJPYOgJGG70Va7W7Aad5vM2qVr0Bld67VNeGPFf8PbwR5om82A81vMABED5fXIa8EGwQPerIrDzlhio7/6Bdvfxoib04WNo8YBeNvFwJg72iP4Q9dG3KO7mTmDx72wK8o1cbPVSy/buZGFw87mTQvCsZK73TYRc99pjMvCvnYTpMmza8ZGj0PM5M9TyHjnK8jzsOPZXVyrx3McK8K4DeOftMNjzL7Is91wmoPNh2ZDwvQpW9oHmuvacFIr1VH0w68NGCPAxMtLzvhws867CBvflDmT1AeOG8Atz8PIQpMr1qtAI9wfG4vMf7uL1+H8a8GJkpO8eyvIk1fqS8G6EuPdseN71Tawm+XAYMPMEI5DxnShc8OptyPQPtWb1Nt1M9LzsBvV3CUTxk+qM8DJKJO7tW4TzCJFO9uVrPPMCrbzqQKYg9QQwVvMh0S71/haO7jRFgOzibxjyz2rU8/6DJvEkWMD0ButC7VJsHPm2Qn7y/li88gbtOvRkVUTwdn467oNucOnL1Nj2EaPA8p7h2vOF5MrwQioa8SsAgvdsEYz2aIVq9QrSUPHXfdrygHno8lsnzPOfjD70ZumK89/bjvBN5AL37DH48oLgTvQ0sTT2QhQq8qy3uO5hzNT10Rqi8xlwpPcBTKDqI6YC9NnFhvUu6Wbz7iq88ytM1vRqT7Lxurzy87ESdPErJnrwooRQ8Q1xDPDmyFjym5M49mJcLvbZESr1wIgQ9jZm1u763K73Y5oI9hKKnPZop2LyF+tq7ivluPOjzVD0Tzeq8rQ9+u2dSvzymSnc9KCQhvciyPT3U+R+9mrAvPfVNHL0wTpO7h0hVPThXNwnOjgS9wE5VPSuffLmUQTI9HNykuh174rugbuC7L+wxPV2e27s3ZIc7ccRKvQ+nDT1XCzC8JVE9PDW23rymlkO94lJkvdpVvbw3jLc9ljV+vLjekr0P8JU9H8VbPasq+btmsR08ITniPN3yF7yQ2/g8JlWavCw8w7sYJtW7d0fwvJiUsbguQLg8AVB7vaCEAz1yKCM99967PTVtrzsVkIw5c/AoPHdSVbyLSDI977XWvNQJWT2I8iW9QblZvYwasby/qOI8ShsAvbTEjL0k3w+9Y/pgPBGmezxnn7W9BeqYO5rtJr315pw9m647vNuuVrza7mg9C/whPVDkaLyafho9I152PAoheTzA/IM91HorveTD2jo3ka+8jySsvKPf3bwlFvg7vFSPvGOzOb2LJf080BGHO20hn7ucy8M9SpCrvJKCybs+vQ8924iSPALtXb0myvO86wXZvdxDNz1M6Y47frQWvfR4gD1b7sq9P3ocvcGphrrQhiG8SagDvdjJVrIna7E7H2LtPOvyUD1e3TQ9kBDXuhWzr7wlLZI8QYBAPVouFz11a089dPM7PP0Yqr1MITq9mgfaPBxxsL1fsgA9ocRFvMgg/DzLtN48KdcDO+R4aTt9Aq49h2p2OnbfPr3FBjg8XYM7PWZRxLvd6SM9FfeVvL4U4LywUUG9y18zPIRxYT0UCoK8VvXpO2I/hb2t1Ti+CzckueR/Rr2d3N262qQmPe3VCz37+Wu8fQksvVyDkz2gCpg8cv2YvTq05jzAMrE8SPB/O21QKD2BUTI9HEHRPFqBBT1p7A89wZvjvBruRj3a4Vo8VdacvH8ovj1FQry896Kvvf+zC735Jsu8wXRwvV5R37zmAoO7DCVqOykUuD3KDia80zSAvFhvvTw5jC89aAk8Pc/RETyEp3o8iTF9vEmYQL0QuzU9MvWWu5o167z/HIY9PAnTPAcLR709SNK9W9c9vE5isjxRVwc7d7FWPafgy7y35DQ8L3NwvDyMDz06/ki9ej0VvVdLUTz8Pyw98EoavKAlIDn+FTi9oUsUPU69XT2Ghde93N2xvGcxkr37XIe8gJ8HvUYRmzy6mr08HYYfvUl/wbzDsva83EjbPA1sET2KiDi9TYGbvTOgAL33JIu85ObmPPb8Vr2QZjS8s3p2vI+XEL1FIgC8+1EMPUKVf7yzkvm98QMHPX8UPzzwFBU9LaPWPBAqpz031fE8bZnovQwLEL4Av1I5j5AZPe+7Lz1zlbQ7J2nrO2dUwTwMM9m8fVShPK++oLxbrwS8g0YPvQz2urzlp0895Yk/PLEF3ruHyfU8At0oPS5SUj3LURE651wnOxfZET0Kz6k9yIdHvPob0Lz3leu86vOVPUcOM706Oay8jmkbPiCDD73s8jS9u4yVO9De+rzQ+1O8SvkRPTXScT1fo/c6B4USPdm3zDxCb4w8J3RkvcI42LwF47m9l8xFPHm2VL3EKoS9pEVHvb3YHT1q73m8vP8LvaPZm7z13Q+81NIsvKqeObyoVtW8EulVvKk1Hom+fFU9Zn9qPZYWc7u+5te8bDxsPXjxSLxQD6U6liRGu9Cx671cYuU8gLEBPYCNpz3WdIC9Z1nEPCa57D2f9K69o9xou390xD2gFWI9YOmsvBPaKL0qBq28DN0DPBDVVj1OqA087+R1vYvf8TvaWW+9UQjiPOhnybsvdUW8AWWHPEgtOzwHs+W8oQgHvJOflDz6pvy9fFdwvB3KgDyNDSK9GAmgvI3CQbwaJHQ9e/XcvMREYD0bq9y8XtsOvbsZH7lcsug8GraqvIESFT3bGJY8+VycvZ2RVz2cnzS9riEyPHzlyTwx/o08tZePPX/H1jzwpqs7v56PPY0QV7wB0PS8qgwmvCEOYrwlHes75GF0vIBSprgYIDQ9x2pdvWFxQLuwCkw9UJzIPDhOdL1AmFg9Oc9BvNJvGbwPb9W7J6nDvJZka73pY+67ddbeO8+uujxWr4s9pR3XvHV91LxhAhU8bPlRPWDtEz0TrTG9K9zzPKPjjL344yQ9t+uoO/l1QQkBCLW9USeevfbkpDp/3F09L7QqPA9STzsoMAO9KS77PNKmyDzIZx28UIPJvMZ4zDp3B4w9+NvWO4B7jT0Z+4C9ZtLEvNfCP72IM4u9LTj2PBJUR707JxI9ujc3PG+S3rwARqe7W41bPHlZHLxg5yY9CqkzvYiZ/jwC8oQ8BU82vKwhfr2LMTC9Jr6RvCBZE7xbEyk94+uCPav6RTx9jVI8fMBxPPv3Bz24Erw71L/aO3xFzLxIxqQ8biqevVel2DtBriU8VejRPJYNajxMmea77esaPTjXzb2FBQo9lBpVvdJxC7zLoEY8mwpBumP5nzoQPhe9JACBOwusNL1hFaA8lP8oPavhLD3H3Bw9cr46Pfhher0w6kM9LtkvPWjeHj2b5p26wEIhvZYwkDwxZAo9yAvxOlSSbj1Ko+W8Ey06veaAmT1I1oS8hnWlPZwCxjzJK5S8JlavPA1j2zzrQ0a8i4JSPEROjTy4uiG9rGU1PYBOJz14Mbg9zcxLPPlLcrKr+H88bjwCvREkEj1Ne+M8ulywO0jfCz2wYbq8o9LrPDDUdLzI21c9KM4NPSABi71Eiwe9luSDPV8dGr3eN+E886i8vLFMOjzMzx+9M+2uvJ8Q2juwupY95N7DPBU59LlY/YE84n4Gvcz8azt1cYM9URUGPVyMhL209Pk8pDCGPTHKHz1y2H29BnuhPZVQcbw0cXS9Y/WQPR0r6ryu3+88dxkXPC/ToT1FxY46PiGUvVkKgL1aQCi8nZ7IuztGyL3wdK87DGCEPDfzz7y922Y8Pq1HPYlePDtlwuk8DLilPXyWMDyoF4E8SPePPceglD1dAvE8XUVLvY6IYD1fDys8BI12vYyWlL1Lxau8hKadPA+zSzz7Hly6Q9NWPEO6Dz2TZn67NiXrvCWP7LyxNSo8bTEovS5wjT2DWhs9PMxaPW+EIj1l9W494qeMvNvdFr1wVpK9JckzPTQ5Jjw4QNe8cpljPKQ4sbwLq1m5jXAIvWKlxTxsLWK8forOPNqq7TvN7Yk8TV1fPOurHb0EaVE8KE5evehygTvQMXm9563cvJ5rmby32i47iWk2vSSp7LyXgv081C5AvQSLN7tXwu28j8h1PafjtTt101m9yt2OvYE0gbxBSqY8M5QiOznXsjw7+L66siopvdXyMrykHWS9IrkUvBO95byw9Iq8oRZYPBz/F70F4ZA9mVdnvEp6Wz0A+2g9mBFlvfA5kby92Nk8fLeVvG/s+TwEXcO8shALvYh8pj3qrru8tt+EPDeveTzEyta8Arx9vExnoLztFU+8Z2oIPWberjsORac8mJ4BPTfVsjxt1dm8UduyvIisIT2Y61w9Pr6rvBu4qjx1sEY82GyqPLRRer0d84K9/igCPo6Gi7ww3t270ELYOqME4LzAoms7rB45Pf06bj1/MgC8MlaSPBC4lrswilo7AbuivNqRaTyRrH+92mxMPBO+SrxMbw69atIkPZgxJT3sQow9qSJTPPAufDwqPwq9RrgOPXmWoDseby49zXhOvE1gvogX4YE8scpKPLc35zxWg1C9m/aNPcIjRzzydgM9YIvWurO4nLxOyWq9yXWCvT6+gz2ksmK9hrOxPCtQBT2YqUK9cHU3vZqY3D26c409gDzXORvMzTtKlsM8v5obPIWpSDwQaNY8X48KvV74OT2YVxa9fJBjPX9tOzwp+sy8uGgZvEjEGb2oHRE8g3hbvIuzk7zgJ7C9cWb6vOScATtgYA29TVb6vD79PT1QOMa80xS1vMQcHL1QUzA7Nv6aPLlImTwcetM8w6wzvSugyrtGQLO82cJOvVoQpTt8BRa85Jx2vS3QUj38TPw8dI2KPXXqNT3c6Ri91tKgOz3rs7yo0we7QHWgvAFF5bx1kYG8qGIOu6rzBTw8kcM8obgIvXBd0TxjuBs965CPuT4IZb14Qqu71LjOO+uqeb1jJk68C7FGvD6vPb0ZWCk8HoObvAkLjzwisr+8qlOYPDu1TDpj66Q7ltIWPKl3lTzstJ69i+5uO+z9Lj0NRdY8bqryvBTeDgmtdYu9z14ova6Hwrww9ao9zlvkPLvls7wREAs9NHZ3PZ5A3TxDVKQ6X0gIvMzqAb130nE9K36ovI2PQT0Hjny8OuxdPCB8cjvUP9m8BVwcvBnSBL3AUWs5IGU/vcn2Ir0zNdE70uBZPR8gBL3NXju6NiK1vRFjrbwayoS8QSo/uw73xrxvWZs7XSnJuxEHpT3+RFQ9Cx86Pf6oAr0c5Tw9xZgxPWhsQLy11ho9XbwnPcN25rzYjEu7BunOvT7ZCj20D7a85sgCveuKUb2QWZs7vlhrvSDLUr0MICe9k5/ZvFX6BD2/wN28RmSlvPOYyjrGwpe8MFdvvfxAGT1ciTE9VLgTPBI2MT3Pkx28iG9dPSiIT73EEaw7er46PEtPOb2onSc9ozryPJDriTsJAqQ8aF0UPc6HJ7y4HWE81sXaO+w3hTwTyzi9pmmgPGSTqT2baM88fNlrPQH35TwlIKK8FMY6PWXXQD1ddyW9TDv6PEFogzwemlY9kfDvPGorVbJliTq9XcEWvQb+fz3nrQ49RnbqvOXXBr1Y0Gi8i8flPKxIBj2EcNQ8+4j/On+0nbu9nPC85TEkOnvBwrvQ2IM9iicQOwEOtzxTEgI8krKVvOlMhzy+tlI9fBcEPSt2WDxI7s87/2VNvSaFzzxapX89Ao4ZPTI3Abx//my8JGHnOwiF9jwuTlW9Rgk3Pa78/zy1VNG7MWdXvNx1bb05ORs939Hzu1Nb4DyviYs7VMdTvXbEez0yfri8bledPGX/iL3RsR092dKmvBm+hTwJYom8+27vOyzQaT0pFOg8wl4uPK87WL3pKwy9IoYyPFLhRD0xGjY8PUHlu32XvTwkOHI95bUBPIxNkTx5z9W7INU4PWpitjy/vve75GitvAYZGD1tgh28N21gPRArJb1xlEE8m0PZvPMPNjxcMKS7zGHHvNLTXT217kG9XqABvGvoSr1Ch7q9TAsJvWxUaLxgffa81KaGPeGiBT2k1z08PouSvF1cL7yX3z287CsUPYgjs7srNWU759NJuzQL/jxk++687hW2PJtUpLzLUs46tiF1PJ1Jkr2FFye9fJdxvQtwbDtKwGC8+Su6vG8atTu2PYg8T3gtPYxkPT3PYNs7reBzvEjrML2wY4q8jySSvaqFJLyRiIe90mQQvXYDBD2bpIG9pBO7vEWRkb2EiqG8a4cdPZz7SzzBcdo8baEjPRXH6TxrpPU6AU4CPRGCdDx79BY86CIkvb2k07zjQUc8vgQLPbHC8z32Ncm8/O8pPIu9TD3lnxO6DtstvT6UJL2Kfhg8TnsSPQsJA72ciwY9MDsbvPlzgTzYu5+9LHAhPAQ1HT2Capk7ehVjPACV7rxPmi88nGQMPNoIYr1+rQ29uNmzPavNBzx3njO891a4Pcdxbrz6Uny8ZoC9vKF+0jwGWBw9SEDHO454zTx/30C9Bp0vvHhZW72iZxm8uzmsPLsoIL06ihG8lg9fvD17cD26FBQ9dMOlvPLQa71Dc5Q8UNbKutAtfr040vi8qDu8vXwAC4lwfJE8uSgaPWPdQLxy9bW9OORLPHXH2zxhYF08ly+zO+raJb2fIEg9C3a4vGVM7zx6aQy9jv6xPLxW3j2Imoe9TpwovQ9skD0bb/c8tUJdvDz8dr1ecg89JSdEPeLlzLy52Hs8ZL52vczeSz3Q3oS8XYuSPfEkNjzQouW6lixvvGdSHj2+qhS9yG8MvE8bZbtMlLK9ImngvF9bnjv17jS6HZFTvMAlnj3FuD272yiDvIHAMz32guI8Ij08PfVCljzgc2q94vOlvD50gr0LVJY8w9fqvWRtITzGpR29yBJXvV2iWT0xNL67L/ukPabQHD39PnS9st+1vOz867y6Dg291EAxvR0oT7zbUJm7QkoFPThUOL23kmE9M5bpvHz6bTzyQuU97T0nvMgCTz2hrAU90vcFu+u3DrwYzYa8vun2uzKsUb36aKE8ypfjO0ntaz1/Mui7rzxTu2IPUry9HuU8ZmFQvb9oJj32KnC9i+ZIPBq7uTyOHBC9EuYMPSqv/gh1XAm7nkUWvTlYYD0r/N09HdKcPXOjvrthKI48YJByvGUy6zyuxzE8madZvcGRaj15Gac9HYV9Pd+JjDz3GTy8ZHlRPFISvL3kfP48yqFlvdWNPrnFAO48VaRbPOZJy7zaxJe8hiEIPXprkr0mmLc8/ZmbvNiS/bq94DO9b5GVPBolADxkcIE7aCWFO+0Hzjw57p88FK2DPRfMHr28q8k9t0EZPaS+gry4WR09NDPUPNrSIz13CRk8WjdZvVzMr7wsX9o8AeYivBRR2LwZmYA7Q2QyPLUW/DzlCSS8cy1WvVv49TlBr5E9/ZNEO/OnkzpXlaE8QZahPMit67tXKCA90Ctmu5oLDD2W4UY9X175vLQynLx2ur08VgoxvaQ2I72REwo9zHejvECIB71OgDM9YpMhPQoEZzwQ7bc9SRN3PPW9jLrC5Fo8r/r4u2LyJbzY3xk9FXB0vd4YFjzNZJe96kECvVFtwTy3JRK9XxeBPPiIQD3bSCg8J6JJvGAmSrKec6U8+fBQvA1QWz1Yqmk9s8faPPgwgb22kQ89/CI6PYWokT0mLyg9ioo3PbiYk70j5Ss8ypoiPLOzyrxy8LW7qY6LvPNFyjzVG1W5tP4CvQQy5bzde7482cu3PFVwwrvoP1q831iBPLGKyTwLGvw83+fyuuVJdz1/Eqi8wpzruptl5Dw2WdO9Z7oCPFJnfr34iW29q4DZPIboqjyWYhi8h+TuPDTTsbsnxlq9cXJEvXNgMT3ga/C8gwcVvSQ0ar1z/fo7BvyDPdp8DbxlnHQ8+3Y8PLrQNjuVhko8dfa4OtMj8bqg7y28pdUovS5AMz3s5E09toy1vQEJirxO1CQ9mk6RvC5drrwLChe7k0rgPCMoOj3Lwuw7mfj7u0+OUDyRKEw9S7b7PPpMAr291zS8YUGvPA/a+7tzkzK9BqSTvFK/Cj2MzBe92sOrvacLvLuKgkq9ieMXvSTC8bzmy8s8cfL5PDP9Dr2j8Ds9fJYJvV30Hj0d0m07aEHxvBgLgrybZJg8BfyXPEh+ET3kOLi82ylYO9iMtLxHeTa9TYeAPKJ4tLz6WJO9hGbUveGjWzzK/TY9H8vqunYlPruq7cA85VwJPV7zAT3CbVO8BAE3vbJXGL3hmkq9Oe5WvdRJxbxfumo89OZavSbftDy82Fw80QbVvF5fkr3iSnC9GZEFPU5oMT0LTMy8EN2bOims1rz2XaQ8mnt9vCvjbDtEob48dDL9vEutXr3mFUU8GkaDPHyc0T1CD7E8Vi8fPZQkhjuaLDY9zJMgvRblHTy4HKu8FrgkPUKAybywbHk9REKFPL9vGD0orTi9ucY3PVxftLv9b827D2LPu8jgm7uqgUc9VdV2vKZqgry9i2+8QFSxPQViXLwduKG6gKqCPeE/NTyKId28pMbuPEusRrwfyeI8oLYfPdzWvjz9gDC7rXsYvX3yZb1jCog60ewtPUMTuTyziVe7cNpxvVu4xzy7DS49vjBDvbEsgL2v/4g8iosbukYb2r26zK29NB/mvcacQYkm54c81LRIPSuHSzxbhPi9VZUfO6XTNrzT0sY5ITLXPPijxDsBiKI8hsKpvWXIOz0ya7c7v7cfPUddvT22eVW9CFr/vBh/iD394YA9j8dCvNH6GL3oREu8/K2cPDDD+zqjD+G6ZgicPOWVSz11bse7726PPYAVWjw45UU7MhuRvJEA8TwJrva7DLR1PDXxIT2kUyU8I1yjvDffrDy8SyC8dUXSvOaVKz077208jUxPvTt4Q72rkHo5twFkPayMi71c4oS91O63vELOWb1K8iM9I9O5vbwCLbxIRSe9STwBvXWaVz3QV3e76uigPRChRT15jIa9TU8bvaoFqjzwbfQ8SeODvY/WmrwyzAG9mA70PDdVO7xzWbg8uG4XvYD7nLvKckQ9pDxpva4hiD2CAm2860NrO1wibLy6mY48E21WPTyWVr115PM80eGOvHey37socyO9D6e8uzU4QzxvheQ8g8dXvcHIYj1klA29qxmsPKKhDrwQSCM7auhVPezU3wgumru8XbOvPM0YoTz9JLI9gjmNPTiDjbwDdFA814rSPPAkgTzELCM92tsivW8nUz11rrS7sEVcPcZIprt1FMG8cJbnvA8IXL27m6g8zKvgvNmD5LzA5x89UTgtPGKoxrz/QMi8aFhoPXPEUrzY7JE8slkwPctL3Twmztu8vXFgOzaTTb071dk8JPyJvc+UOz0VJ409KZuxPQETzzsoHYQ9vBmgPKNvqLyrz6Q8devtO9CwiD1BIA28PCMru9wrV71yCEo84kfhvAKRh7tqgbU8uIjtO/WxBjz+BaW964ocvTI5Hrwn5Hg94MbAvAk297yGSrI8e15LPQY4Br2jkeI6XsuJvBYrfTzGabA8PCqlvDGjNjwhsce7OfBYvaszvroNcvI7sy7huzsacb1asYU82ZbcO64NfbzY5Zg9oHm2OgYT8rzYv4u8zSxjO1cyr7zABoY8i8mKvUgPjz0bskM6MwthvaZj/Tx9iJm9dZDVPDz3Ij0d4BE8ej8yvXvXRLJfxy08csXjPFHH0D3022E9D3vuPOXVi7yWqKk8fAOOPWbszjsEmpY9Ux7xPPMngr15Ox+7ChT6PCm5PL0h0kI9FqCcOyJY+TxYsCU7kb2tvC/ExDvt95Q9uUOAO8O5sTx9Kla7SEfdPMw/6TzdN209KT0VvW7rcDz4/gi9vwWgPPfNHT3Ziim9Dq8wPQoTbr0HSYO9TzHsO0Hd2Tv7tie8/GARvEcsaTx2AgA8ugIuvfmynj1EXPw8hQ2xvbPay7wmrC28QLMiPc02hTwiulE94bAPvVdWAz0z9xE9z43Uu12Knzx0mWe8piYDvbwqHT0DHt+87OPVvckGqryb5oy7HCKJvThVpb1GDVy7C8+HvJ7tDT1g06m6/KMXPfbqYD3i1Hc8r9xZvcmFm72r8iI9Y2OnvYKijj3Ie5M64jYVPKJaCD0Na8w8RwsmvV4gir3+R1y9AgWNO/tIPj05Fsu8jZoWPfmfPr2FXKc62EM1vWyWYT2Gv3Y9wg0pPVhdLTsglYo8sGivPALpMr3hcp48L/DsvAj74TtMFOm83w7MPBz7gzvuFho7aFUEvWxJL7tHj508XdAAvAjROjtZiTS9AL4FunGbF72QU069SotkO1MfhLyZ2u68kC3luiZo2D0c2Q49aJb1vCPBOrxlOce9ciIDvSaaI7v4Gve8Jz0nvKixyDtsxgA9+Fasu9AOwrs1uI094jTmvFg6HTwmDJo9Jgeovb7ndT2jhSw8fVBjvVMxFj1Vhm68IChJu1ZrNzyzpTQ91bYQvcdFMz3ka0u8ZilzPUAUd704Nrs8SuH7PMAgtLxyXZY7Ak3lPIhrGjtZtNw8X6DYPEk8+Ty6NE48vROHPEQSkb0i3aS97Ds4PXMmrDtMcIU7P+qpvAhf4LsM91Q9FNmYPb2EBD3xns889UDUPM2XYrxEpjU9fNaEu6Cp2jzEkrW7wM33OiI0ajyamDm9nke2PSD7hDwDMYM94EbPvNVAIj1AYty7Bqg2Pa3qIb16cay7HAsSvUA3Gghu0c687ISpO5u5mjvhJJG9ZJq/PN8hgD0q3xI9MJwDvXLKcD2eequ9CPi2vXZAO717ex+9h6OMPEzchrxAaQM7EDuUvQaRhT0cWaO8gypuPQzjYD2FAbA8f8eSvAbBM735Q+y8+DiPvPEo1jzfRAg89+cUPKhWkjxIBvK9biSnvDDx1Lwu4YM8k9jxvFkqpbzNRFq8urZUvbJZ6zx59XS9TFmdvXiagzxQ6QM9m7pQvcDVy7o5vRg95DDeO5zlgj3nwr+8gA0euw8TH7ySURo8qteZvbbTlz0EeJc8uPxzvN1KgD0EozQ97B+JPYVXOj22Ux09akc6PcT8CD3EkUc9UhaLvGLipjrCc9q8xEYpPYRjJ726r5A9jNJBvQrdJT32MUA8EUwKvRpAFj0isDm9wnEHPWCREjrWZNW8Xu+7Oo0Ih7004wU98IosvJrYVb05nby9NA0gPGQr9jtCzHu88tvkPM4ZhD1Fg5S9m5khvb5rnjws8iA9s3WfvRhVCIf2ys68hTC8PAInsjxTgdU93Q81vWvSWr1E5b48IK6fPBrqJj1qSuM8LFuQPG9TpbwAvFe9+ixXvd9RAT44WD48KD2uO6I/SzxADww6ZjP4vICA57poCNk8RGuDvabyCT3yuYW9IXiNPBbmbb13mR888WcbvWcPg7xQ9xc80ugoPauEgb15mzI8fE1gOx4MgD0OVFc9y6OCPH/G4LxHi7A94jubPYekszxH7qC8yjRXPYZyt7s0ThM9wmYuvdePqryznxA9oZ3JPMv1BL1YHwo86CgZvcaNILxtNiG9Eyh/vTob/DxySSk8VSRdvbB0NDztC/28oQ1OvbB3aDvhTiM8YQ0vvBLPgLxRqPe8x8GlPQWDBD0W8Gs9zH3mvIrPvrzCgC49scuGPSio67xTIaI9WzdOPX7dprwEgDI7YPOEvCJjX7wJGQm9YEW6PEeWjDtccJ+8NnMnPQKl4Dxhzxa9sABQPdwHyDySmpi8MH+gPPiybT3mfKM8EnchPTIParIYMaa8sgAPPXCz37ri/Eg822OTvcw+Yr3JfEy9w/6RPc+3Ar3YcsM6TnWqPA6cO71LjYu9CIuPO4gcBD18rmI98wAWvcr3j7x+R4087FxXuyjyfjvswpo8QIMSu6JK0rvgS2O9XIMjvdWs2zzg/4g9HknguxoMuDxcohG8xqB8POYN4Lyv/0M9sVHPPUz9ZDxUu8+7MoaevLk94bwWZDA9/AIavWRmejzwoZe7mrRGvGRBMj2Bn1q9JI1oO1ThZb0rlQg8hIxYvMpKNj3fgOY8eFczut21izxEQP48cc5PPCh0/72oT/28/Ho9vbDLJzrbWCm95PUJvFwltDz8LMe76H7BvAO/6Ltlpw27tjvXO2RA0Lw34Jk8VLcpu4j0ZzxTuZi6lQxGvY2cJj1aGi48/b3YvFFjTD0Oow286ZE5vfG9rT2eGak8uzKEvR8iAb1P6w+9kN8OvbeJQDyrLC471GfYPKHq3LxeQmS9yyxOPA+OhT2q2K+9K3gzvH+njLyaFH09wMA9Pc3nsb0lEyc8Mi5VPSkL9bvnUXE9OLQbPQlkq7yaSie9Up59PK1gt7zmHFo9kzuXPHrqfzz71Wg8vhS0u8M30rz307O9JWOQvFT5Qr3qLVi7tLmbPOtU8TzKgjW8ddfXvCSh6LzkeIW8y2cmvXSv3rzZ93W87Fa0OwqCRjxM8WC8Ff2mOgk9WbucWhk9JZusPDcUhDtfL4o9d31YvTRRIz2oe4k8FGNgvQqkgD0KbAs8OyDCOnuniL3U7Zc8IT+mvabB9bvxrqy7jLkQPTxYZLzVuJU8IA7wPJuPA7xnxci85U+WPFO3Y7rTU9k7tSaGvGIJBjxGnmc9Ihl+PGYNCr1LzIa9E7gJPjVIED21aSk9L9ZDPGkARjyZpUw8kCU6vCR2oD3XEzo9VYTnPFjPQTuRQxA9/Q8SO/jk67yNMKW7zTcxvZ81xrxXTZC99N6TPKcMvzwkcoU9aM0evUCmoTyJgnM8cI1aPCJZTLxPTC28gn4BPNLaGolgSou8qiQzPZgM0zyOmXC9lsEVvVBVpzvFtz67UGkCu1vVkrsTDcg7CxeVvWFbHL3/myC9j9XpPGqcnT2p6NK8diqAvb8rYD3KLYO9QU4KuzrTeD1nIM28ul/XOwp9Gr336JQ91efDPL3hBz3uBwC9EjgIvPt4lDxtDWu98WPtPKQ/ir2HQey8sURvu1lfQ71WoQA89m5Yvdd3OT1SaJo8TZE4vQVVgDwbJ467WaWHvZFdMb3LWwY966xzuyAqhD0ppQC8eLURPH1YxjwNyRy6dYKIvd+AgLxzyKc8WXS0PJRypD3xOy09tpKBPBmp8j0+VTO7Nv6jPKiud7xd4no9avXmvJiEM73zk5+8VGtOvA51Uz1AqZK53jRJvXRrjL3Hln08Q4GZvZRpdj2I0yS9G9HOPItSIr3waha9+QDNu5d0gbxMW1I9964vvRrLkryW4xI98KaUu2CK7buyqoa93Ee6PNoeGT3yNkS9hb2fvCa5ETzxeCw78ONovV2jIAmGHBY9NTnivDcINj1AWsU9gdSEPejo+Lz2o1E8ElvdPZv9n72XSMc8W0MOPcYVy7yuByc9xo4vvcuOpj1NCEs9oXZ6PVzZmLyzLh89VpeRO/yAYT0gUk+7Tmg+vLwsuDxCgIC9+E8yPUw0Cr2kc189wN52vYnNorzq02m9N0PYPOrXk7yQQHm7ekGPvZ2muT2OtTQ873QqPKTMDbx40qE9fabYPQFZNbyVvG68iv1KPZPUHr2S7XK8Wnv+vMj5m7y5ps88cghrPaiv07vMjMC87esavXeWHLw9Xzk8OI7UvQJ6Rr2LMle9HQQwO3r8qzxOES+8ee/ovFriCb1dIFI9wDhLuovAvLzzTFy8q/SwPEbXdLxKLTI9ijTkvI+ZPz3Zh4Q8BTQyPXVVrb2pSam8sI10u42YiDypsjS87h+YvEyXYb3MHsy8z+HXvAXTdzwiBI690lJ5PXXGLT3bUIC9fSwvPQWkEr0G1ik82wNLPYJ8sj0y3U89bnUMvTIYT7K85hI8EaULPJ6OsTwI7h88zAUxPDRrVz0kv4q9/CmcPXyP5rsI+im8Gx6JPdNpwLsvUWA9kXadPbvRAj2PnUU7F7L8vJsLFroHomK8UhK4uxMDVjxlpYE9JDM8PW0A0rs7L8s5C39xvYHeMrubabY94EyDPE9kgjsNZo+9lGAKPY+djL3trIo8ggFDPT2YLDxZZdW8qf8jPXZ3yrw6eaE8y8wYOr1eGD2CqC69KETzvMg3uDvzixW9HeSGvHxWw70LHt084h4SvKpj0jyTwNW7JvYBvFZm3jyhoOG8VdmgPc6Jgb3WjFO9LEAnvZeC8Dzrrti5ntJtvR1GLD05Wg49eUXivI4R6rxlwg88Hjf/uyrFYLxgzoq9wJXxOKsVTD3CDyE9JN75u6/cATz7i4s7Hv/kPHLs9DxFMoy9JLKbvf1skj3gt/o895SxvfUhlr1ItKa9cMsJvOrsGz1sLLU8/nO9PFTVPTs8gGC96GiFPPg+87pHQLu9UgQqPBWRQD0gTDy5yS4ivVabj70SPx29a3ecvFc6o7z8f848TiI0PNw38LxColO9VFO4PfsztDzYCFo9/xpkPfKFLb2wr727v7WfvK1iaj0OLuq9syYHva+Fzjwqeiq9ZU5GvaBwlTwsj1G9SLOyvG3SYz22E6i85Dj3PI6PzzwNyM29WEM/PBKLoT2QhLE8dGQDu0FuYL0VQS+7868nPe2pLj11TKM9KSmEvLgdMz16jM48PmuEvecYsTzOWKo8TdalPWtQ+LqE6448souNvblIgb3k2/U7vbCqPcb/cLz1f1k8Jvr2u6bqTr28H2q9bp83PMgZX7v6ZKq8Jr2BPPeO47zSxbk9SE4NPaa8IrzgB7e8dn4KPprWYzsmp+g8PQHxvK7a1LzmFkI9ES0xvdpJND1alE89HJB+PTxbHLuJ/d48HP7auf6zgL3pXBY96k+OPeK9Ur2GxJe8tv0PPSrgR7tuppA8BieOvaM8NTwVeYs8LAkmPTtvxDy75fC7iTysvGJPKYkW7ei81PdvPW99iD0AWqM55uiZO4WCm7xzIra9BNIIvFB9KD2E4gs9/cfOvbY+4zwDt4K9pDXZPIK+wz1kXJk7fA5ivcYVkT1INLu9wJvTPH4yMD3+obG8mMBjPYbmqL2FpbG8AkmhPcHlsTxAG5I9DVnSvTQd7Tv2QDg9u6SJvPg5yDqmq668iFmAPDTQML0kAZs7f01FvY4SUjxU+OK8QEdtupcg2Dye5y49AvwovOfTwDsoV4k9fZ/7u27LhbyenLS7Zhx8PdbgLbzyA8w86P+0vTiCAj1Cq8Q8imixPBlS5jwgNfk6t/CUPAJWST2v6SA8vqq7PJyjkbzgxAa6IP5EOv4PZj0gDDQ72XK2vKbDHT0htCM99ayevYrW4LyH0La7aMXTu0YRQ7uMv8U7tTMhPeYebTzQX4y7hjtCvDrCHr2YmWo9CvTBuzZCZb2YnkS9Huf6u5QjTDxio2O8+HGvvNWbAj0Wsqe80J+5vP4cIz0VLGG8SyqOvbbbFwnhwLW9wOlgOeO7iD1qaw8++DHAu7qcTr0IqWo7MwxMvPJBFL37zlk8vUukPcTdOj3vIEc9VMgTPHpVsD2IqWI6xBmNPfT7h73ovR68ILwoPHP/tDxVCvG7sI2UvZatZzziljK9a7+UPepcd73+YZs7u+d8vFb1Zb1nSNa8fXkQvVRpMT1g4kw9SW2Fve980jwaeUM8126JvPCTaD0JIIc81YEQPWZSYD0ywru9D/4Pu0Y6uLypOIU8nGeYvCH3Cj2cxYo9jIgiPR6shLyAIwa8tDN1vUQDMjyyBAY9bgvpuw6bVb0h+Im85O+FPKdHZT2smpu9ZfGpPKL3Hr2RIoU9vgKsPPht1zyeyHK915G9PLzlLT2LbQA9TOVWu4AmProG2wi86AOQPIp/Rr0kepG9BpCCPKVZMzw9BqS8ZGkuu5Sdeb16DuS8zVL3O4K2cj1ERU47FDouPZOwYTwlHgi+yb10u+a8wTzxHNI86ryQPV3O8DwTkue8+H5Jvd5CarITXOW84IotPAohRD0IVWW8Odo2PCJSQbwkNhW9g6s1PB4+lLyE44a9bPeMPaAEKL23If28XPlbPeuxTT0fqQ29A5opvbRPJz39+Ay9qSkdPbr5sjxQ/D89yC3gPGiyXb3xMB49eSy3PLLvyL2wJSM+ahkBvfHrsj1Pwvk8oIpKPKcibDzqgJK87iVGPQMT+Dx15sK7Tu4jPXUorruXBiS9Q7a/vI4dbDw2caC9sL4zPcxp6jxwGsi8RI1iPVpC1b3sumC8IKX1PDwsejwNE/E8RfiEvPokRLwcdgM9m16iOrdzML27xqe9bumZvXOnDz3K5oc9unf6vDyorryJBRc9BFUYvcZ+VL0ES3C9EKQLvZBCKDoH47Q8wD4tvPQIzj2grBG7igOPPBsg3zwK5IA8D1n7vJ8yFj2GkBI7JDutvERLtD0mNhy9I1Z/PHVBYb1ueem82P8RvRZKWrxeZRq88NPWO1TpzDyA66m70+QBPXVE2Twb/pq9N4vLvGSGMDuQ5AG9l3Bou3pAqb0+pIa91AJ0PeTUp73DDpa9bu+GvVGXwL2o85U71CozvMZ0FbxhAZU9vDiSvZyCLzxVDrs8y2SJPQzR6rvwqsU54p6fvYB1sryizp68cyEZvWjmBD0tnUu9rW8ZvUyyjbuAumm9lIc4PJjIFDyFXw69b+AiPe6F5Tycl/q7ijTJvMDXajzMPC09wnYivbMqsL0SBo+7sKyvu6Tb1jwC2Cu9UafivHzIlT1EhSC9MNipPCNPQjxASUM8hEWWPG0loL2oad67mEZ+PcB5XrysVYo8QpVGPCDnsbyOAU+9N3aFPd2p1T1mmhU9sn4DPcyrLr34tVQ9rX9tPcHMq7t9FJe8zIO/PR7j27xIbQG9vV11PEzkTbzt0h89Wc0Lvbr5yTzFfKk8TJAePHZXYrvvouO7iZAEPFDx5r3PEQG9boEHPSW/W71mu9m8KfLbPKtDOT3D4j09hLM/vbNd37tK6XO88mEzvJV2zrvg1zQ6nl8AvQLmxIgUJ4m8r/tBPRok/7sRJnO8ouVwPeovczzzvPY8E7LyPCWEQLxSRya84UZOvcTFTjygBXi95BxQPRI10D2HMo69MG4DvIRKXz3MwSK86tHQPPCG3DwVjLG732bjPHAO0zz5u+E9moOTPF2+rj1MfUc9fJ6nvZlG1TzgTjg9zC1RvUhzpr3pohy9Ur5SvfzaTr3hnk29YdeOvV/HezxyE6O95/HMvXB8IT1cdOw7Bd5RvfRIND2KvEM92UemPMxZaT1C18S8ZhPePJZvwbs20Wc8RTP7vERUjT1o4w69uk9qPDfD5Tz82ug7yIo3OyQiOj0zkAa9lDupuwjsmrzOAyy9M1dqPSmDDj1sx64773KTvfxi4rxYXwu7xEXgvAah5bxu570932PfPKp/HLx2vcy80gGBvKRIAT09FoS9BLacPOVv0b14XWs9UP9kvFLxxDxYMcu8JecsPY1Q27wokyk9/OJ9O+ygVD1Iq5+8DNk8PVio1D1UiR09C1VnvJSzAwhsfJw8v7R1vB0bFj1xz/w8kJapPeBTB70+z+i8RdoOu70vLr2hiZi8FDUMPUAGj7n63Hg9Z7aQPDq75Txgg5E8xLuePEzCOb5AHhw9P98FvZZaHL0QGTA9TsVnvcxvpb3r5KG8uDXpvFdB370YSVK7tlAvvKhfWTxEmqK7+A6qu4jSuz3XU9y8pn6YPGZNzTy9NN88CtuyPH06RzxSkYI94icuPRu1Iz0gz4g8lINmO/wsErtgHnO8tj2ZvS9UKT3aHGI9+NelO+SuL72Mbv+8Aze6OyMda72qprC7bz0LvTkj6DzK9x+9J0lkvYpk1ztQ58O8qatvPFPxx7xNhWU99sHYvPeTkjy5Ja287v0FPCbltbwCoQs80P9MvfLEE7y4QEM9T+gnPXj34rxawg29CLEIPaH2DT1U5Og8RgX4PBRANz32mCU8vf4evPE0hT1oVsK8xNtIPNiAFz2+Zvu98VTpvJQPdbzAsFC61gBzPUDRKT0/YEU9tYeQPBA3gbIQjrQ83i64u+/uRz3ptOi83FGIvQRZBbxoeis7kPMju59YYj28MLQ8YJxnOrCwVL3ObBK9X0uEPRIAyrxwMk46hp4yPX1lxzwdske8oWa7PHBZWz0lf6w8MUOdPB/Bvbzydss8Gg4jvcpdhzxZRe88eiQdPPMa/DwEr3O94teEPbyTfrzDtow8chdCPdb3EzzGUs66qIe+u7+RmjyC3T49+4WzPU0TLzwayQ69hCduvcsNJT3xfc+82a9UPYOMGr5TmPM8i4ujPTiPLb1/AtO8PNe3OXjW4LtyGoc8BH2MPeZqhLu63dG8JFdRO5DCcT2W6SQ9y7k2vQBM5jeMla89SLrXvZL3Pb0Q8gA9z8e+PIDpOT02v7u88jZwve1tXz0DL3s9rPBXve+dj708N6s8C6OBvQlxOD2cBPs8WJtRO5bndjzlHPQ6zXHUu1ZhTL36iRW92PkWvUu3pzls5Sa8y3USPTRwEj1XYga85IgAvN+X3zxE4R+8dfsBPH1f6jvQnQW9iFgKPJtdyr1I76k80eoevT12F72hKGy9G98lvOaIfbyT5po7ftFkvcHXbLzMoS48tcP5O49wojy+PyG9qxqhPN6c5Ly8lw+9aF27vM21SL0lF6q8+wlRvVWFwDyoc+k8Q2wIvcGq0TtdFDq9ayl6vArEBjzBSwA9Y9ByPV9t8Dy1XYe8TO+vPKPq0DuA4po9z6emvWeMHb0G2vw8O5FDu5irOz3n3qc8khfFveaH/jy+MAi9WcpDPWvqpjyE2R08Cu9Zvd9Gb70MfAI9y0XzPGefwjzROUM8/sOMPVeWfDvEfL28jlhoPAXjMrxGJZs9X6VwPaH+hjwY4Ts9Ft8hvKpNojxKmgS9QTyyPCG/EjxCXRK9yjjYvOZX/Twl3IA9urQ+Pd3zrTtLt6a8SpNVPVAwYTzCMrc7viOjPIfsjDzhxR27DzWWu4mgpjwR5j+8z9wkPRQ1dz16rFg9RvHPPLcTMT2gt7y5a5KzPOINgbzV7Ke8YJQTvZSgQofvuy29nKZ5vD3l4DoC7NW8JDhmPUqkZDw/kj09LQsxPKTTZLux8RC9OrAtva6GET0jD9k8ZfufPV2P0jzLZxe9q7DWOATCET2+kBS9ZmeLPHg+xjwHUjo71xhoPFiBvD253fK7osBwvcgcz7yunLM96yUwvaN5trwSMo29dpoTvXV+yrq9p4E86uQgvbinxLz4+XW89LKOvSF0v7xMLne9I915vYE1Oz1jDzG72YjhvMsGYTpB8B67pufSvH4kGz0xP1q9KPMTPIUxMb2VBYY8iFbeOwCn5jyRAyQ9rNNyvHvThT13Hzc899v/PEPnXbyIntA8NqmEPTHCcD3/0BM9UWR9vHGtHz2Bxaw8OGAKParwkLwoGD09iv1LvOfSnT0vI4c8bj78vIa+6DxkAD29Lr6Uu3ghHr0lcg47aX9TPIMK8by54aU8o6azO1ixCj0i1Im8QISwPAfED70/IxI9haFuPQhDXj3d5Au9j5nqvHRA2zyADw69FAqMvG15BIZgnCe9UMMbPUIYg7w3N6Q9duqTvIA5hTjESzg8IV4zvJxuPD21v2o6Tah4vGsRrbvx0Ss8EBJ2Ojtxsjx5NDM9btsBvShlJb28IF497MlavexXVL1ju189FeZtvXj+G7xO1yK9LMIfvYQG47xewOi8HHaevZJvszsMXgM8trEbPJ9GEr33jEg8qQdlPRj3Hz0PkBw9JYirvD8CDj0u9E08RgGNPHksDD2AOnq7ePkXPSurEr2Pg1E9NupFvZLJjjz+Ml89BHPNvItgI728F7E8JZveOziHdb0zNZq8iFXhvHBteTznk3U8G6vevBAmrbwuFrK8MU9RvQtQJLz7g9S5piaUvTs7HT2Isau9qNS9PU57Gz0S5ie9YdICPYEjDDyfPDM9sPElPXjwBb2wISa75nqCPWCnibusQyC83eAiPdQAorv2cL88FCanuG22Jrv1Lii9XxaYPb0n9rwiQ8i88qGPPL5x6bwdOVy7IhfLPM8NkTxlESq6caeDPClwXLIavtI8I4IKPSZ+wzwev468KxDdvKp4XzyMaIS7s1ULPbWRzrt5v1U9FxaGOxx1jrz96Wi9kngIPdnDpTsqY+E9B5+EvOkO+Ttx15k8uLzMPPoggD07ERQ9/YmBvVIUCD37yF672e7svCi5wzxIHnM92RcLvaxwh72ZPQa9hcUPPONIvLyBYRQ8YpczPUNAC739EhM7hjs1vXEdpLyVWwg9oe1GvGbFTLzNTMY8z2pnvFO/sjtt0DC8xbiWvJpw2b2bcIs7/vMGvYpJ9Tx7gQM8nqEJvG/uvzyuWWs9ka9IPMAFe702DQC9xyZxvO8fSbxpY8w8hjbIPDFTgj0GZii9hKE4vR7tkL39Fd28svICvFi2gT3oWxU8PNNrvKMcXT29fY09VMydPAjRHrtM+1A93rQ+PMVpAb1wd4i7im9nPXm/WzxI/l+9RQxOvXS1fzsS2gs7GIAcvQV9Qb2AjeA7D+8ZPQEpqD2sWXE9OMi1vN5eOj3UdGI8Vh13PNzFTDxXs8A8CGEEOtl9EL7VmT09+kY+vUTz9bw7Dz+91doMvafFbzxYnOO7XBk5vO8Uh70O5PY8yQ4oPY5+OL09KzS9B3pavPFaAz2ROtW9P/tDvCqErL2a7aA7Pt+/u2VUAr1y3MM8sgVqPCqQarw4y427SlhGuz33B72wuOo821gqPcgtRz1g+269nnETvTMVBL2b8aQ8MFySvQC96Lo2Dco8w3n+PG9oDT2Cu2k7Zk1zvaJf5Tx91Wm89NMYPYVykD1m1yG95mw/PfBEAL1TpCu8HHnXvG/c3jzC1448OHFlPHCNJjuBMJO98uQXPY6GjDvANo471JmMPYlO0jzyNwI9rN2PvMJ4YT22usy8SlrGvIg2ebyP5dk8joRDvU4g7bsYICq9iISkvNyaXj2Jx1a9BL0GPbBttTr02wg8OyUOvODupDuAuSA50t0ZvcS1Kb3sSQC9+vCyvIlcND3RC5A9+sivvJsuobyIoac9qxmyPJKGrzw3M+o8z1gBvQ3z94lxMXK9JoKgvFpWFb2UCKG7bmdXPfjq5rw01QA9i33dvLPNoT1y7yg9pq5evDNPRz0WSSM8bq4tPdJqUD3Y6fu7Wo03Pd77Z7za6iK9oI90vLKB7zwMTIU8SsypPFr7Hz3axyc9afTvvAB3ET2VlGc9QJ+VvU5c/7wksB09x5m7PDrvlrx+aD48PvFtPAgMLTvicRi9gI2MvRABfb02Oua85IklvW6t/jxQkVA9xXUQPdgdADsBPxC8j7YCvbosdL0H1TU8gWfIvCPvAb2DwEM8TolzPKnHLL3a6Z49vIANO8g0ljyhfIM9uLtZO+wEkbz+rTO964urPMIejT3cqRU96H/VPGeTMT0swBY9+RQAPfFk/TwK8mU8kdlRPWCxd7y46Z+6trp7PFR2Sr12Y2m8WLJGvMK4Bb0D9Cc9LP+DPFDFVb2StBs98ohRvYCukLl2ZV+9MgxMvfdiZ70cS0E7dmmdPTw3iLxOwT+97po6PRQazrz9GJY8epg9vTvkGgl1hCO9rIE9PNqnEb2ezoE9vESXvEFuuLsgjgI7UzwdPFMbPT3Fy3I9ymzSuxhsYjtAq186NboPPY5wGLxc93m7xHeFu/sAqbzaDD46NrCmvONMkzw+EUA9ZI4TvX3zcrwmP3o8oajaPCxatbtUJF48NGtivVbngTtlDNE9zJ4rPNgBrbx5Bg88Gcf7vArSQT3uBCY9rcUfvWO8SbwMYoO8GOvsvHB0i7rHq709yiOmvOXjNr05mCy9F4ZMPFK7p7z27/g8ZcNIvSgZHLzWhYg7WDxEO3KQS7y0Mhq9lkVbvbZZtrvo6+O7AHGlvBAKfLtTsNY80U+DvW9xh7yKqOs84I77vTC0uj14iq+7kEfKO0Yt7jxOPa88YoaQPNKpvDy4Nzc9AG/EPGIONL23G+O7b8G8PRrmYrvzMCG91AqTvU8F47puGkW9JJ+nvF6ysLuw01+9s3UFPMhjEr02nk69rh0RvYgN7LvgrXC7oKZuPPegTL2OPKi8t8Upvd/AgrKwYSq7m4FePEyZjT3nZQ69fAfLPCLZMbz7z9G9zCgavUwDhLsjmg89PHQSPCc/mLzkyaC9y9FZvWnShD3itHk93egfvW7rzLwn+Ck93CyBPbKUiz0wMgG8GrMfvRosobyY/kw94m8yvcy0zjwKKLg9tIE+vXz+ljumqIm9IJYlPeiFlDwc34C7QKvbOZgBR73nhI49BFylvTgvk714STo7akHaO8q2GT0AQp+35CwwvQCiyrjvoLk8YsQkvFo1vL30NgQ9OCnWOkxUOjs2r4e8aM0gPMgAHj0MIZ49wn/WO8Avdrxl5rW8RGsmPf5vRDwuJTU9kH8/vINMnT1bOX+9mCe4vXv6AT173tg8kckDPQAetzzd59C8wbMGPV44VT3DJRM9pRWYvHwow7w/klo8d6tqvO0dPz1Ko/o8dpnFPBVLujpZiTI9pkWfPKLyN7268Kq9e9x8O6EPYTxg5fc7gd5oOstYiDyiF+W79N6KvILui7r4sEq9u1+Huy6BQT2fZ6k7KQP1vKwPEL37YIG7SM3svB8wGTsOUgu9FOs3vaTh8rwTtJy7cbcRvSu227z0z/a6/iZKvPWksbzu+Ui9eRySPey82jys/k68X7JzvDyns7x73fy85J1lPSuNyzt9whg9zE41u+F6RDzwY4y9n5SrPL0fwTxPBo+8Bk4mPd1IA7zfxZI871feO9C5Ej31oTU9Fcg/u9LqaL2A4qo7EhkLPThhJD3oApw8q/psvYl/Gz0y6TC9j0V8PT4wSD1lTs67iDlgvYrfGr0Kz788q3SBPXhQrTxILBk9wzzBPL3r/jqZIBS9DMXEvEUcrLvQ6bk9xfMJPM8qcb0Ry/k86pJmPNbwwzo8Ls+8+LPqPYzJCT2kEGK8rIlxvCELnL1t4+K7Hbd8vCdFsjz7vRM6BlNZPTWvITvwI7i7oxUUvf0OMr3A2kC80MBRO/nBML0fbSC97biYu8iUDz2SHtk8kPqAPSFkijp6o1i9RUwPO/pWyrv1yly8YpwOPVVkl4lXpeK6yj3ZPADdCzzLIYG7iYNYPZ1l7zstNB89RvoKvWUjWr1hGB+9NJ7tvIjvRz00Xby8dAlUPK+9ezxwT0691ji+O8jaCD0vKMA8vPtGvWGWM72AYYs9x4jdu8TOBj13Z5E8JEaEvFUfFTp7Mwg8AYMxPAJYYLuFa4k8Kq6svPLGfbw6W5I8LKmxvPhi7rx53GK9q81svStnsLqDxVO9ks/kvIJF1zxEWmw80G6lPBOXBT3PM4k8tOvNPGYtjzw4Bug87gtBvD0rybq9Yds7pcETvY4rnTyDwSi9exqbukdXHj1lMJI7AE6aPcFzGL2QARo9TFbfPODjqjzhlB49DwkBvH2R6zzqhi89Zs5fu6XmIL02MYU8EfZJvV2yf7zqsQw9QhEbPcOETr1+R0y95Ig+uy1wFL3U9/C8HCrAvLOvlryzG6u8Fh+evFg1SD2rkao9I2E5vXYuhrwO3by8ygJOPYfO/DzHRzi9ImxXvGJTiLzSYzG89IubvMeuRgkl3Qy96BEpvUvJszvWtXQ9jUzCvJwctLws6dY8uGvmvATeIj0I1f28COngvDk++rx518A9o5TUvHCXBT1T51s97boZvMP+27yuijS9lRXVvKZFC73v6q48fH7KvIttT7wishq9NBycPPkwlzx9NfY66jIXvez8R7wRVbS7bQuYvHn8Rb0wJBg8uNRmutJuQT3JpqM95znIO++zVb1o1lQ8hU7YPPXEajwvayU9C7K5Pcuac7zJQF+7lXE2vUDEozw6qUU9ZgKYPLM1B715CQW9EgV1vI6PPL1TpHW8KAaQvJcch7zID7y8H5jrvGkOybzloQG9NKAtvU+lzDuZP8U7LXz3vBoXUT0iXpW9mfMfPXToBTwS+Ai8WzGbPdCWtjyeK0C8tQvUvK/ZjrwoRVm8owgOPDcOsDyRKra8jIX6PCyHxzzzNx87xKXTPAG4iTwP/wy9wcajPFDCtjyf7ps9raZ0uxAAzLz0p3W8UcvCPJRvNz3CW8s8JvmWPES5YbJFxG48D2K0PDjDgT1La0q85uieO6/cWzzPgu68QNPovKEu7bz9xhQ9DbGfPDCnS7yE18U8Cni2PLmn0rwk7hs9N5rYvNzmPDykYje9CToRPTip7bw3dzw9GO8Dvbw3AD36Cdw7veaBvHFvo7s6YbM8mu2gPIVZjr2tIpC8IRvCuwgFhbvreRa9tcNnPUqFYb1ctoI8F2jsu85uZLwjMOA80nUvPKnNJbut1Lm8MbDNOwBVQr1h9Aw6nglvvPuhlr1pNbc7hy+mux5C+DyVsd27Gi06vatnAToS83s9MFgIPTYu6bx/CFi7zxKVOySo0TxqH2s9EdsYvKRDsT3rBQA7IsK6vRvvIT0DPL8895m1O5YIjD2IOPU8rVm5PIuSrj0EPQI9CXXePJPNK71iRXI97J+CPHlGmjyHOtM8INJZPNzTPz0UMmW8KPrzvLAIub1mA6S9WCmsvf4WvzzFMdm6cq2vO7KRHD3dKwK9FG/evBCNpTqMHB69CSeoO2O5CT0JA18908Elvemp072SsbU82aBaOienArzWoiW9GRb/vKLgBL0PpWG8+AsGPGudJrxHCJg8s6EovA6aKTyeKUO9I0oZPQq+0rzS6hm9WtQWu1X/argPTfW8Fum7PFpslTwPyig9e6sovYYRKb1nQmu9NN2DPKuaYr0mjco8ekaAPK4Fmj2dK3G9GRvju1MVVbxnbIM9tEsRvVEu+LwUEP48n0QJPceD3rutlD89/BuLvfDaBj1jZ4K9OvXzPC3JrTxzFiw9HuK6vBst6Lz/PW09RZPrOzoVA70rCyk8xrSfvA7LprxxK6O8lAWjPbmCsbxRJII9FDCbPJFqkLyb2EU9q1o0vbSJbDwSEjq96/EmPSeNiz1mVyW9rO+/vLNkirzUa5Q7bnh4vFbOJT2heCm9SImIPTdBwTyTtCm80y8Vu8uIyztsSWE8DFiNvDd+LLtX/Qa7m7e8PDy8Zj0H3BK8e3vAPGnyIr3UExw99YCFPavPizzlC527ZFxXvTZLqYmvhoK9L2ZZvO1+e7ygmSO6jxGCPeTM3LwQuQM9XkJCvXFqD7wdG2y832kAvYHKlT2CR9882E+NPdUKpD2nAD69Kxseva/5Sj2wGkS7p+wYPOnGKD06tSi90orQPGkQXz1XqTE9cOc5ve02OzwoaSQ8kJ8wPHAAHLwQC3O9uxGtOlRKW70uFbw8e//OPNSs0jwrsyC9LSm7vYLS5LxfGyu8pTrNvO5Ljj0vbiM9RCWKPDxPGT2XgxE8ZGiruxiJaDt9Aj298opPvCGOKL02Uhk9Kj+wPD/zQb2komo9nPqOPHCZ7DzSMCe94phwPEt8I714l/K8KYZDPMhFJjxePAA9uz0dveflqD02OWQ9l+gmPZ1NDz2yaC49JKHZvJax4bvy4KK8fmZEvXVUB71tTac6EObGvBg4nb3L1q08w5V6uzX3YTyEY1K8FtIevZ4AET0JC4k8ARe0vHCwm7y+riS9ULI8PQ5XID2cz6O8du/tu/eqwzt9jgg9aXUlve2pHgnBnzS9q3rEvITCI73Vyfu4xRo2vWhOzryAWZE5BH6vvJZ+DT3gEBo6/IAGvSd+vTxUzBM9LX6hPAt4LTzrFyE6FnP9vN8fEL09kaY7nn6pvca1Bz0x7489PMA5vZBldrysUxS9r1gMvJOv971mtGa9jAO8vIFxojzKZt08CUeeO/qCgb049g+8rwRxPFp5gj0VCD09rrDMPDFHG7zAgkg5/v3VPONZ4zzaOUk9TS1luzo8pLxdQ8A82TufvLhuJz0nng89FxOjPEWWwjz2KbI7wLgQuh/2or07gRS9f2aKvRx4nbvEYRi7bNsZvdt/CzwcxoW9VWedOTlrsrw3Luo8/3uzvRb4ID2yKkO93JUAPXOnBD0al3+96ieVPTwXpzsGFAS9PqRAPfsVab2BhHw9l6fFPEz9rjwupIC9Fkd6PX2tlb3G4za9dMUtPWlJnbxjyoa9rodFPSA2gLw6cJe8+iadPCPq5bw1AQW96jSZPK/qnLwib1k839WhvCocXrKZFII7XmKyu7h8rj2Cx5q812NGveE2njyaFhS9SvPzPBYBu7xKYIw9RWIyPT381jyvJlu9gVwkPdhxAj2js9E9TCg1PbELnLp9uPi7v86YPOqokz2+UF08Qj2TvSNvAj245Le8DYQ8vFQ/TT0ieQI9yKDxvGNpl7ynBxe9XJ/NPBtnJzscLXg9VaV4PYtPJb3iXVQ86o/3vK6i+7wgqRc9CcYavIi4Gz1oUmu7yARyvLDEA7uymTe8d0gQve1xZ72OQC+9J7YbPSMgRjxdkDS7xz9tvLxN1TzyHsc97I3TPD1eYbuQeIa8A+9aPM9JPT2ibS09cG4qPb2pKz1F1NC83avVuhu+yjumwDO90Bg0u3XbIryompC9TpiGvN/ccTtdooy8KoEQvRlSsjukssS8QO8ou/DVwLyRawm9hfKHvVcMCz7n+4A8lApovTyLd71MyDO9wZOfvVVo9DvwAWm6Xi5EPfiqrzxNzp+9Ho0dPQkrgzx4K2m9NEiTu9W+3TcT5k28aUsSPbI8C72FV+O859UmPSVddLwW5G49yfIWPBkwGr2SvR29qCtjPQ5cCDxVhQo9bys/PZgQEb2fFxE9uJY6vQ52/7wpr6m9nhlfvKCzgbx/bni9o+7LvGbTDj33haA86U3fvAD0Tzp4Yqo6V2xmPOeJlL2deiq8qXW6PHqiqT3gBtO86GxJPaQKGL0iDwU9l/sAvBd5obzt5HM9704LPPjikD34Y8K63hgUvYqN6rs8Jle8MiY5u8L7rL331cQ7PpnjvcqPl72MSE47wYx+PU1dXbuhjq89oSXmPLD0JL3mcQK96PhWPWZOnD1h7/q7vT3IvPH7QTyn7n49MVo3PBH+rLymIWM8CqP2PfwQ/zz6Zvg7KavfvNBl5zrrbys6xS8ru+HFrD2TZMM8N6MGPYha3DummR49j67vPOkAwbx5R/y7zVyCPMIaeL33foi9UksGPSYwvjxL1xU9NKC8O2ZJWb0TWMw8ERUSPBZTEz0gLo079fwMPGsP34in4Xe9aKqjvNRsHDxRRCa9ZnolvdClVryJelO9KfbwPFDg1jt8FeE8kK+AvRWiNbvlAc+8qFAXPbz9lz29c4A6JaqwO7QLxDxdcnG9Q/zgPENZST3by4G9JJOJvIm7zLygSU89t9KjuwwaK7vg5j08YJv0vJ2jxzsMlsS8BHbpvEmXq70Sj6U7HLQQPQoFbrzbl7K720cgvKJB+zyN5FI8gFurve3XUTvYXEe8P+8fvdrDRL16zTa8NFAlva8ciDxgsKg7KshEPJhsjzuT3wo9MdR/vdoJijvJG4U9CgMfPRN8kz2WUwM9wICkPKMrHT7fZg+9YwhaPEj8hL3tnPW89u+kvIYXRDzd9gm9y4mbOhHoQD0a8gI9dUP7OzxIEb2xuvw8YdGUvFqFgT0f9GS8NqOIvJRhuDwWO529DpqsvTm/Sb1E6G09YQ6kvAqZhL1dOLs7MpfWvDCj5zpXvAG9sQGWuyxMhrpYsr+8pLSBPXG8jLxYDB881/EyPBxwsQhQUQW9vveYPI9wZD13WAc+YivmPAgpSLvcQRk8lwoyvO83Hb2vM0I9BwAQPdkvvbyAjR+7DCo0vFQP2zzr/6I8fzo+PAaYqb1K2R48b6jougsPBrqNOW89MgKHPBDH1rxA76W9c2cLPbEJFL2JsG69ZJVhvRlv3L2LzqM8JewHPLzye7y4L7c8qiiHPOtuCD3kHmg9cDRPvHuWzjtH++Y8ZslOPQ7XLj0weBq7dXo6vZXn77ki8zw9D6pnvUWHhTpWBjA9BIhkPWQGZz2lblI8Qg5XvEIyFT28ZRY9IHFbvQaZub23dka9hgwxvAmeLz2rYxW8wfBlPE0sY72nH+A9ErHFOqJaw7xzali6DbYBvY/DCD3kPJM91HuovCsMK7uOdkS86qfnPMypEr1RsFq84siyPDOOTj0l9Qu9c2FzPaCjA70216k8K4ZnvPV6Hzzbt9O9LymePak49jxwYlS9gp0ZPGTXkTt1eYY9gyZ3PWWfBLw+t/m8vA1MPNfJWLJM62u8xH2Bvdio8jwv4uY79cIlvWMRzjxASJq9cDYlPbCn97wTh++8A5e6PRz+67zyZjK9RqQ8PTQodzyICw2826UcvP8wkzxelUC8HVOFPLRMDT0bXdc91Nk/PEUpBjytYhi9+lEbPd0YIjpKyV49EUOFPDo6jrucnRY8ZdE8PaA2sjzDhmW92OaXPaUhzjuCeti8EnLVPY0MKD2H5L09wzdjuzAM+zsF2Tm91gdAvN+UfT2f6oS9afbgvKtVE70Jin28uNobvWJrqjxRjUa8NG0jveyRJbxu+YI8IA4CPTXYM7wMezy9NhHkvPthGz3cPpg9mLRCvasCNjriy8U8zr21vRKUxDyLA7y8LAuNPLC44zp4Eg69/aPsPITStrv8rz89bg0VvLPtFD3pUxQ8PN/lPM9UpD2AUz+9k0EDOyi1OTzJcco8f7TnvXM0JDwCxia9+jMAPTWRZbt9LmU988aMvPqiJT1WVhs990DMPJKRdDyRE5S9tX4VuhPOaT3IcLM7Z5i0OpIwTTxQYMI8l0c3veTYjj21XrO78V2QvOov/bw2tIa96sUmPLDsrDzs1T+8UZiXPDNBqr1aZNc8oXQTPR4vmTw3Hq690KQ3vb7wib2iJiG9aGuGPUicpzyVYxS9q7GWOqcv8zzO9+28NIy1PGt6oTgPPze906aAOjCbOD3mUJM9C9KTPJmSLDyl+r68IG1zvPrcPDyh4R89IhnpvHtVmjwsSPC7ljKKu9SWNbwRNhG9cyFmvZ15zbzGnIq9u2wLOk4libwfM6K8XCKHOy0wN70spr48TT4yvax9Ej1dNQG90lY0vXCjubrtTWM8TjPXvHR1PL1+RVI8qVeYvFj2ALzA5ck8dqE+Pg9mJzuUk1s93BobPY00grywBs88dUupO7HD+ru6uwG9jeojPRzXVL002nq9KzUhuPkeM705aH89ebx8PYZIVb3/1UE948p/uzufpbw8cq8875YLPZDSSjuqG1a98CwKvKgac7wmr+W8CMZXvcyeNYjJX1U901AFPXMpMrsbHuI8z4mBPfAugLw8JPK8uVvBPNrK1LzzVCi9UdVKvYW8Cj1TNHy64Mbyu9jdQbyEUAC9fkykva/rZz3kuAe9XFeqvAAyI7rLI4W8ky7mPJ1y3jszxTE9vzj6uxjNVjzYc6W9nQlhPF2x+LofOGw9mUltPdgoNbsqVGm8kQiOPLmHjj0g7Wc9k8obvSnqYDwpaQS9slS/vGXG27xQqky8nokZvVjg+zyt8Kw9N5LVPNeHzrxBZYw9AVsZvbAbXztU0oi8RPpsvSsNfLy9V+08zG72vOCXiDvk3YQ9Edx+PdmvaD2lWLA9EJrKPPPxlb3FYLW79mmDvD0fMLxprLO82VAfvW6ZJz2pzh89R8eOulcheTxxHVi9VzO9vDxwQrzgOwC9F4F2vQE5jrymsl69s8ZxvQDvmb1paka98a8BPOmdWLwyugG9ZkBTvGbAsj3YsnW90Veju828+jza4GO9NgLmPK1iAj1QX9W6347KPAAOmIYFB7W9dddlveV6FzyFV0k9RLIBPYCcjDw4La06nVMRu6CRDbx4TJo9ZS89PUhfhrw+L+Y8D5iDvKbxwjyjmao80krQPRStTz3VODu99mpmPVyMs7wJgU89/knWvOKD5jz4Tdq8WYFDPdrVBLsT7BW8TMW2vNiMg7xr9Ew6WFApvfS007yT55G8njOVvZqeQT1YtCw9kScQPZE9Uby8vFW81yNrPEZw+7wR8aq8pALxO6u48zcD4C29f8f1vOdMFjywzfY8RJkyPWKOiDyxJ5u8UvmVvYpAsLxyv3S9MyB6vJOA1Lpd4ge9HXljvEV27TtjYao7aN3HO4+P4Lwrw7Y9Iu4GPRlzgr0rPki8peUnPPglhjv7UXs98cWEPHKJyLyIeTq9XVa/vGfCDT0+LO+8VdHuOxAnJ7yYCAm9zdNvO1ZACbzzn6878VIbO1XxNz0iIku98jBePYKWXTwyaBK9j0YLPAfunzuZqC67qRywPBZ6UzxrSK25IPmkO4QHjLIKo868BuM5vSu/ETvpoaY8qYY5PZcbOT3Qut28dsTePJNcJr3azUc9wf1rvL8GhjwmPD89EWCJPe7IAbzc9LE8zCK1vJK3Zbwrx9O6dddjPQg7DLzgA+I8lGRUPV0UlTyRkiu7aTWHPAwmm7xtvrY71eX1uOiCJz3yEEy95jU0PeOQiDy2Xa+9tr5dPWMRibzENRk9YZGSPAtOFL0t3/48F2hZvNDKjL0/Nk49rCR4PGhDqz2gGZM8MmQNPRbNa73J1ci7m3LQvDS2zjzu2+C8z1ARPa7UXrxRRxo9585HvDLk3rziEIU8HIxOPc77lDwaOcQ9BVjBOtgjoT0aPlM9FzoNvTEXY71wsIW6RnvwvDDFeTyqeH29ECGQvSZ4XrxZIUQ9qLFBO6bMqzsQdL08UqSLPC49tTy1q+q8Ba4BvZQe+7xIJo29Hxjeu8S4mrzGng691FjuPAkIXr1Kokk93lszPU0c2rtdd767gIB/PFR1bD0w09E6nTSbvFLVJj2bv4W9PkQ1PJxHNL1Odqq9FhcEveiSsjwkhoE8oGsiveN1L72MTrm9AmOMPJ8jFD3VmRY958OnvMmxD73+iwQ9aGu0PTS6Xj0uPrC9hjkDvUDCgLwfFBi9JuN4O5h3GTyg17i9tDGrPcBamDliGOy7BaGCvD7O3bw/P/c8k+WMPL2ACz0d+Na8EIoQPXr1W70oBma8WGNDvYCQ0rxXgRA9KGgFvTCMALs//Mw8EmqOPV5i/jyQygK8/TlevNI9dr1UEBu9UuMNvSCSbb303Sq9gtxiPB7VlLyL1UE9UXb6OyLyl7uQHDO9JOyBPG47ET0+SCw8OcmcPR+bWr34jRQ9EBSQu+H1VDyC+jw87MDNPfqIiLyU0l89E2/evM0eqTzg6nW7x9ipvP70Cj3g5gw5wQbIvLJnhL3bPAa9FxEzvEcoKb2pJ+68/AZQvSqqDr1ExIO8FkhHPb6sCz1gjq477xtbPS54JT2WSGK9k0lNvNSvpbybmVC9VTlbPGhxKQbFmLU75+AWvdm9ajw/ZKo8ICa8Og07Kz3AGzo9E1ZMPX/BWL0F0Ai9R70kvKZHbbvMP8m8yiVkvYPU7TwO0Lm74Aj/PGLBzDyitZ08CMssPbYgOTz3b7y8iHvpOxkJrjzKbZc9lF3GPTp/OD1Gvim7vhfIvNc+BD3lT/Y8BGGxvFCorjoUfWG96ggqPfgtJT1cEjY9PsJ8vRZLirzb+Ws8UAz1PHqxAz07PgS9MTyWvXcPpT2ANCy5DsaHPDjo5LtWhV08sSz5PFCzbL02Ale8y0pAvaVqgLxIYIu7mLTUvVlWZDz444U8IJWCO9UFIzzyNH09ZzikPAvII7wUtkK9Rhb6OzpNcz1ALEQ98N/nPA2JzrzxPSk9+PyTO7EaKrwGmiM96TgWvMrU1jw1mlG99d2WPHA/Dj3ahuy8Cnh/vIa0mryggXW6CqMcvOg0TD3hPBE9LGVNPbQrvDzNdiY9nwqOPcAtTbt04aU8pBgUvW+f6DzVy1I9kPMzOhRPSIhbRYO9mEsfu9xiM7wDboC8YNEOPMOvM71KidY8wESAPXhnJzs0TaQ7MMTEPbyptLylO5k9O23LPNgzjD0at109/I/2PBXeBb2O8Jm9tiU5PcgQDLzaZZg9kmKTvYqQKD3OBCC8wCyYPKcAEj1aY5E850fOvAdZE7wybSM9vvKTvcOMeb05wXe8GNS9u950M70Rzr48tOFZvWuMtryGWMy8dC0DPCtPRbtLE/Q8dtwoPbzOX7xnwZ688MGNPPdZkDy7Lp09AOoEPfru5bzmrfy74dQ/vJ8yKb1AkrS81EcWvNwZgzwbsRY9ZoKru+c5h73Vki48f72TPVsVqbwS2Pa8cRBVvMB7BLsgp+K6qWmpO2Mbuzx+bKE9NpiYvVRec73zTUG9hIghvIRsi7xobBK9MHNbvVigzz3Kzxq92hcHPIRYzrz0/jg9nvkgu8EmqD0IDtM7GhE4PUQYEz140Q+9KsVMvIIgQDv1t868al3AvA/gRb14yjY8iaswPdzSm7J60Mo80r+fPYYL0rxCEb88aeuwPUA5ajw+0kS9Vr2WPAnZ3zvV8+E8iUcTPb3TSLx4DIg9t8kkPFrKmz2LJv67Gv/QvXKakL3CBB48zlPHvD69Nb2sq/U7jiXIPTr7cL3qkaS88Iw+uzkFpLy2RLU94NPjvGeN6Lyj5vC8aFSEPHVzkLzyIY29TBy8OmBWMb0zqOo7rmeJPYlVvrx0ZTO8aHN0PUADgL3yGTK8EvssPTrugrvggru9kpwHPRB8cL0cOyk9kBXPvOjVvbpsUtM7MJpuPMrWb7yc96g9E0f+PH6cSr2bXv68Yhf8vAIXnzzfHtQ9jmP8vfr7EL3wE449XZf1vHNouLyqWki8qnJMPH15oTx91j28GMyuPNhlaz3bbki9VdrjO+fedry61kI81AoevBLAMjyf4kC8vaYHPL1tKL1tlnA8c1MlPLxaer2iCeo8sAy4vNuJUzzKVBO9Fhu0u75myzy/LLM8ORRlvSMHKTzhsPO8S9ytutN8mTu3kCg9VmN2PIoUwbyPJf88i5n8vBRDBr2ly3Y8gE+VPI6t1rzLoIC8/TAhvNran7281Hw94FWmPGh3ib0Uu1u8AhuTPdFkGTv81qu9NJXfvCqeSb2AkSo7mRZDPZh9Trs933g9rX4lvHs7hTyWfq294bscPRRVAr07iPi88FXbu89c/Dz91us8SgP6u+adkz3FHAk9qGRAvWFafL0QNhg9veYUPSUxcbqT7yI9uRi6vTdPPztzSMK8AdpXPQHSwDumPcG8J3mFvc9Nl7zEFj89a30RuyXs1bw/drQ8AD5HPb4fojyDQOw8z9CSPPRgk7xRzhU8Ar2+PB73Hzw7sI49c6dxu1Y9+LwUrH+83EIrPeSAtzyS0iu91d3cuK4U4buOHCq9Bg7EO22WezyCUiS9c0l2PcagYjyl6LO8yqGlvGKCv7zPl/Q70Eg1PfecQLzZLRs9lgaAPFcQUD1XAbM8YaBXPI+aLDvGV6S8p7dlPEFHybttcXa80NA8vG+F04k+qie81byNOQQ1xjz28h09BmUBPeNNzrz3Bks9/sfVvHeGLb3o0hy7aUlBvY9IWz2Yh+O8WZ8tPVyvl7y1n3m9Sw8BPEkGeTwGmZQ7jeJKvIUP2Tu8oom8zuwqPFy1ETwe2w49Y3eWu/vaAL1/mwW9OeHBPA2uUjv8EWo7oNu2PAiomr2VVmQ80MYePUtFrjyA0aq8axTXOwRZxrzH/fK8Z4olvSUPSzxhL5s82/IQvJzHhzx3ok08nluePBvWkLr4k309BpPcPJNVEr1AeZi80s2UvA1qJL2a89g8RdkNPYliiTyBEBg9synqO36rXr0oy7I8+1f8PEKTlrt2o6A8uVcEvUrOdD2MKJa88+lZO2bK3jwlQdM8NFRVvV4eGrwqx9I8Vp3vvIcRor03Y5k8j6NEvJzOmb1WvRG9htqGvJ/ptLzzIUW8VduMvJXsEbu/SAg9LJYGvRXAJ7ptg9Y7Il94PUsVirwAg5W9rfkRvez7iDznWvC7Tj4QvW7XPgldrcy83G3mO5MORr1VIvQ6yKx+vJtmRjsPtAo7gFAbPVt+gj1oiQQ9NnfivGvMmLm+bYY9DyAXPbX3jTwjDM87Bz2vu8m03zw76tK71+P8vNqJJ70YbSE9+HQ/vXs/Ijt9woS7XrG+OtaFNjwPgAK9oJ7hvLS+HDuk07A8Fka8vKSEAr223qs9Sa0IvbDSoTxV9jg9813yuyvQm7yJFXy8y1EYPVBGH7uF4ZY87/phPNwUzryTOSI8cNpVvF5vuz3sInU8HZGgvJGoXjxXI/2839v8O8ULsr1qj1u9cZUcPF6rrDyT/Vk72xT3u7rElTz/xUK9R9GivN2F+rymoAM9JtCcvR3B1ryNZ6S9TOcfPE3Sa7zsEpy8lkojPaqXbz36uhY8RVGsu49+9zr16M26YtfqvNz6Sz2bcHu7cWwAu5DAND3Ae5U8cz4TOvaEQz2n8Fe9SA0/PYNUGD1uiZY8hMbBuxuTAL1ivQi948gBPRrxOj1gga88bPxpva+wcrIM6A88eICXvI9srj2nyku8PfeFvMn4hj1qzji8Lwq4vPPm1LzYYdQ8gGEnu0UWQjzo2Gm8fwomvP/2PzwWOWE9oWchPYcoErzUVQA8J6HROw1LKz0mbwu9zjBjPETQAT2eoZI8h6rDuzYCCT2A0kc7Ss7WvCXyxLvwnBK9eHjUPNJxBz0IEJe94omBPYvgajzi4YU9dpsyvY531LwSZ8S7pmHNvKPZJz18wxa8e3GzvPcFvTyjfHQ8juiTu44GxL2Y98M8IQuTPKbvGbxmHem8aLrFvIU02joi8cE8sL+yPDbcmLxpTg68wGSduzxCCj3O/Qc9nknWPWVHJz0LREC8bWnOvf6vJj2Bxfa87IAuPCRL+DyrLks8iGtgvVOq1buB+z68gBaNOWyj0Tz7+ca8WYdtvMTJFz1yvrc8iiHFu5oMcjoNFrQ9Cr2GvHY2Ej3FmZO9pNUPPW1gIDvRWju8zQwqPJDE8byACim94pDxvNVz8rnDbX69RGP5vA5u3Dx0EoI9w0RgPaIEFz2Usme8UlBDPVMiwjwDaio9TM/JPNzePLzBJpK8H6FEPAD4LboT+Ek87hyGvBQ9Yb1hUaY8A1voPOcKKT1iZka9fA0IvV3toDqsO1E8gr9mPXDGBb15eau737wdPVgohLz4fso68YBfPXsllTx8/KC9LFaGvOz8zzz7hjE9LEKBOt28Bj1F2go9/gW9vIbSojx+r2E96w05vcASKL1PdfQ8HJcHvDC+8jwfLBO9sVrivF8wMr3q0U+9J7otve0/nzzbpr47arHMOuCdCr3FlU08dNaEvPVoO7zquvg8kycjvURCtTyphg+9yVdXvTbTo72MTpG8GFwJPAHCWjzu5as8obvnPUkxvzwVaxI8y7PIPCKQCb1+yGm9aGVQPREUyLznxSo9dAfePNKGUrxnF5e9eNQSvFgJ/Ty46C+7PMiKPctwBL35Y4s9EMz3O7a7WD3f5xm9dGW/PBXAODwH2rO8qkTvvEunlr01UbK8JUGovXtCd4ncHWQ8DBAMvRe9hzzVoy85Kz/cOGZWgLwNiSM9rAjqO3AjcjyIYdu8WP9mO5Q+Qz3jTWi8EIvCuyC6sz0vE6I8BiBsvH1yRT3q6su88+9jPG3vazvcaAW9OJXDvENa9rwITIA85V0gPYdWsDxKyVm9xj8DPmqtCD3+Qy68/e8NPUwZlrx2QBM8eElLPGu2jT3wN5I6Mq98PHfakryRGjy8laR+vZjWpbzc10y88WgsPZi/H71Moze9i3r8O1/rqrwdRXA9Si0OPRhemzxFCfA8TEEDvksTgb34Lo09vzs9PfosLj0u1YU9ugSNPC9pnDxvYjc91l8oPUZ7H7vvSJs8EzyovRgpYr0nlI29RQgJvKABnryCsy+9HT7vvBfoIr0PeIE9cr+XvSHKNz3lOqy7daWQvI4rSL166pG8aeVAvHMSIz2wlfO8aS63vD6ULT20Qt48CemGvNIvXD2K8lm94AAJvaujRLnukaS9zJsxPKPiSz1Qqia9jHNDvY/nSwho76S9cYKmvYiFlrxwgyo84GDmPN48cDwGZ7g9pCmUPCiplDu6G6c9fjgQvJyx1rxC5QY8lwBZPdel4DxqOUM92+EyO32t77tkyA09GwqwPDtfmb3lR149Y6a1vGTeIT3mYhS9FPSuPJfDDT3poK+8P4XOvLthNjy1g5M81KCvvMzRbb3arxo9+I+6vZBVMbkx1lM82FGkO57oSzwAxAw94mjeu7rAijxQGa09LOWMPbYI+DvU3J68eznju6sQZzhhVII9R725PIK30jx5yoE8iVZuPXfL+juJGw+8y7eHu6yvHT2Jo8a8G7LuOxArRTwBMAK8yz2BPXaZe71nb1w8lkEFPfMnHL3X+RK9/Wa+OqFkFL2wuOQ6518NPXldDL211Iu8wguTPCLDDLyR+uE7DhsevA8Skjy+2Uc87oA0vb1wUb1OEYS7lcL8PDwNprukJ5k7vCaXuwSYXboRiV49AxPQu5DGQb0njxU7VRFCvDI/rzzubIy8db4DPVCTkrL+NzS9Q9MsPbuxhz1SosO8HT2OPCgMSzzKFFw9moYdPdig9rrXWZk7EicPvPKzpDzRE+68498RvBzKJz0eEoG9Jlk3PIHhCL0w7FK9RgwCPXlkmzzeVRw9BAFoPMv7BTybwKS78VQWPUmTMrxou5q80DX+uytykjz28d+8QsOHPStpYj2q7JO95qAPPYTxEb2OpLq8XB+mvPKRdb1XgTu97WWbPHZsJL3qLZE8D08gPZXMdjsz2727CkOAvICpX73y6P6829yxvECXMb290EW96BGEPWLGMrxWNA29A2TgPOcqFz23O428wzqqvID9wbvsKZQ9BsLKvNqlCz35kY68cZX/vIQSDD0z9Iu8HyLWvI37hryio7u87w6DPXGjqj0UnYo7vLbxu2usT7yHCF49mEGlOx9/fTwPE2m9WK0evW7FBrzIdRm9KRu9vGdmMr2pGB88mVIhPZTz2jzCN5S7eev2vGIcFz2qvco8L/KrvU6WJzvkECm9EMkgu+hX+zw7CDS7jtxDvFALIr2Eac08TGYzPFj6+jsxJtO7SeERvYwEEL0zBYC9aWtMu4hL0rs8V9I9jIJju86MEb2ncDq8DFKYPHAoxzvtwKW9WNFfvYJXND2R31q7GxlPvLsv/DzMDZc8ot7kvD8aBr0sLFO9jmCEPaumCDZNxda74q8QPWG8kz35LwA9jutVvJ/0mDwgMRM8z7+JvSk0BLxegAm9V6+OvFszhD1d8T89n8oKvV839TyxQkk81o+hPTXZPrs+UQ496ukrvdWIwLrsUvk81fiMO17SI7teHNm7nJooPKC28zpay9e8QZhfO4dCf7xCTUo8vaFevP99Rj2RqdK8fsAivds2f71BBrW8UYfCPTVahLocMIc78fc6vBGN9DtcARy84ESMOrfAEz2ujQ28tCp7PfWFBL3RB1e9EHq0PIa7GbyhJrO8cBUfvFCfsDzl4V88OnQaPU9wLj1m5Xw9t/tju8syYrs5pX69HJHOvGsRwzudbES9op+IvQttuIn3WAO9oi4yPClzDD0rDAY8+S3iOx+IlbzQ0166kzYPvXY/1Ly7Sfq8S4dqvHuBTj2BB7i8GP5mPdtn0D0gwE+94ReQvIFhmj1/QJY8ug/wPDwSqTs41069BDkFPcUEd7y55BU9PpD1OzgnrbwMbE08U7TkPUQGiTz9doO8AW5RPeZbT73SU429+uCPPLaWlbwT3907D6pbvdidvjxusz08oSNiPFWJgDwpig49sVcyPBwFMbu/d1s9w7/qPHm2hjv7KQO9pxiQvMCRkL31C+88qaNnvfSlqr33PyQ9NxyEPBnOfjsF8q08dQLJvNFbdLythqS8Ps6LPPlKKL0Inw09oVwNvd0KCj1lmsY8Xt5AvKaEpj2rUvI3dVqHvRHRhryf4Ic89cU/ulWNGL1Q48s7bAQmvDhZF73Bv8u8M7BFOnkMxbzNLse8OuHFPJhkrjvZPk49NIg0PKbFhbzyHFy8vyO5PEqDhLx2Zm29FkxrPC0bFDyN/Y49m/nVu5thNQlNo7a8l2prPN/3fr2LSSc9pgQ6PdhQyrwvgUE9SOMIu5+nGD2XzA893h7gPEFam7zToBo9gdaRPOoDCL2yvbM8QgCxvH6TJr0tCB07tuK1O9itBjs0n9s8rxDovGLZBLtKm2u8k5llPJe1k73pR7E77EhdvCdRxDwozK06/ZiGvRZM9zy0Kj89Zu45vbMpnzw1TjY9X37Yu3CUfzvIuB48kPCtPV2Hrb3KImW9nxsHulcD2rxHbK+8Zj3bvBRCTT08uyM9byUyvFbckjyw8ye6THQ7PeyBUb20+Yu8YnOpPBvdID3dpli8vVXLvABlJD3cQqg6+K/8u1GizDww/G88V90RvVp/kbwhIys9k3M7PZxpnbzQr528B3GQPWvoAT2uhL483MJRPNBpBznR78w8GqErvRsJS7wuqHW9Du/HPPMzWjzCQm29xEMGPHy9Jj22nra8GVnRPKTEjT2Ycoe9eef4vP4oVL0ru4m9I43DO6bgDrwSCyM7mvaovVhcUbLHxwW8054xvc0wAD1Ejoe8y4vhvLqZX7wwLym9pc2nPNDUJbwtHIo6UESkvaYJRD1zspI8QFPVPGgkjj2lNd08xagNvJrbDz1wUQG84DOWvB9EjT3RHxK8X3edPMQ8yjzPt467g8WwvE4kDT3sYwg9y0i0vLiSRj0A/iS9/uKtPPR/bT2yG5A8JpASOwuwbrtCXX08iye0vPX+LDuvZA88nUJnu8bXiDyJB/c77hyKvEwQFj1VUZu8N4mWvGCc8bxulK08GYRsvB0um7oJ15M8LOKwPEmCdjyo7GM9pmK8PKpmCz1piT+9eu0tvTo16Tx0UZI98LfKvIb1XT37xAm8vTdBvQUIDz0qKVS9nCZgvKzlJLz4Tqk95wfavLe9sTzVu7w737/yPMBZlLzvesI9soBCvVcCEb1dT329tpG1PafQrjxZ8lY9hXGrPWIBgjySYpE8iJBVPb5/ljwqTbs7txK5PGthxTt1e0y9uy5wO8vHtTvH4328jTaauyED6zwsHZ49DEzovNvFzTwfUHc8w9YfPX0fij0tk6E9mSCSPWh6QDz4GKA8dWwvPKBYVjpGMIK8w4PVvLbWEb07g4w8b1lHPDbGkz3DDde8VvePvP7CH71oITm9+OYiPLHjqjt3fOU8Fps8PZNiRb0fihy9wI1XOvqNvzwmEIa9bkRWPehfFj3XQzM9TzVJvH9h6zxvlpm9TQ9xvdwjBb1xjfa8QWgpvYK39LwFR/Y7vGCpvPFyuTuGQGm8iVhLPI/JObx53FW8WcYavV1E5jy/zri7mDN+vFlUdzzQgXy8ttYCvCpJNz2jwxe8ktECOzBqB70iFHE9uFBmvQ/CtDveel09V84CvSGcTb0JkVs9k+1gPV5jZTwNI1Q9quK9vBK0X73NaHK8CgRavJNCMz0Jv389Ww16u8LOWj2j6LE8u/8iPFJPgzwSNa68b70tu2J/0L3lIxA7xrGhvfZOYj2RH5y8GK85vRiEtzw4QBS9BzOGO/PHzL3fQJK9hVWIvAMKCIlzwzI9LzIgPO5e/DsvkQ28i5JJutBBt7w5Y3g7lNl2vYEzYL30XaO9NJoGPZg6QzvHjCI9eJAEvQNShL2TGrG7XPK6vNSmrD02KW49K8tNvThzSTs1Fly8XAUvPdmzjDzQZ609QQCWuzDTwLwwxfs7QoubvSgEhzywkbA6IDqavKMCkL3G2nm9hiVEPQw0oTxLBxO8t2fpPLEEuLvuE5W8XOcAvb6tDT0hS7A8KIM4PUaKqTztKHM999d9PJ6jjDvHnpc9Q9QEPVAQgbxv5O68WqMQvZ0o8Tv8GmE8Y42APN23DL2H5+88boDbO+os8LwYM9w8j1jKPatE3bzYBSq9C6/kPNJt3bvL2029V33kvHegXT1+KVY9tJKRPdxCQryNWQm7P8Oxuxx4Tb3zLTo7r78OvQ9B37tJQo28+7aeO9ZtOr1KTpE84HodPEMwDrwfXry8z+HyvBF9yTzoyj69mUwevcRI2TlDdZs8BYxkPHt2aL3LcU688B/yOmDcogcN2Wu8hW5evetlzz3H+208ru55PO7PaTx06pa8wIIuPI+6aT3o5gE9QEd3PYF83LyCKK68l6pNPVXroTyl8Dm93mKNvIDSejyd5YK9c+fpPC5ODD17EVu8KT+/vGdzwzoPLhc9ImCpu+TuqbtxDtS9uYqKvEuIP7wa1iE8ymTrPOI5J71UwxU9ESmIvSaNQj0zm4K8dk/7PBpyiTybgVK9oBTLPHS5ID31kwE8G27xvFqdXruUkeq7i3eBvDWCPT2CXoq8aWtgPAjEnb0tf1u9Y8UbOwlujry1Y9e6oXn+vFpQZz30krs8nAz0u8n/3bwv0FG8CMeEPU/ztb2AbI49J0vCPD7C4b2o1R88q1GcvFjKFr0ZAIq7rf4EPWzG9zxiIS49/n8vPI6dXbxcy8W7BUhwPYK3sT2BGia8m1K/uwFTuLsbEKc9I45Pu2Y1mj0IJl49KjjyvP4oTrwxc0q92xFBvTU0xzxfeM+8sokOvRavAr1RRoE9Q25xvAqJUbLXdY+8wzBVPRjjo7s1URM9CKJovWM0zTzB/pw8pvo9vTs4qLxKwMA8m9fYPAaHfbw1okW85wAjPUiWxbyw0QG9o2qyPDqaM71BXk87XPnGvACYcbooRw66jo34PIAPbbwqF0A9fwGGPVuikL1uO7m8GuGMPLVmAb1zXve7BkTYPSy3Eb3+aqa9nnoxPUvBoLyELbY8EIEYPSQBMzs1LSM9ZODBvExxjrwtLxi9COrsu33vyTxRnGu8gChAPbqZgT3jAaG8Kx9BPHvx6jyENJS9fSl0PWAAkr0oWzK9GEhpvOq+5zw1ZNq8eg98PFf/ur2pTAo+UJ0hPV9Ixjz4lce7EuV9vTDQtTrzZUc8OqVdPS4nIT1y2vI89LGJvcWwWT3pZQK9xYjKPXQbXr2ClbI91laluqzLGj0/+CM8YD8BPZMrAL39jjQ9SornOyVgn73u2p+8g0QBvQb8ujyCzxS9gtHdu2hyWLwt6xG9Llepvdfxb71XDxc8JoKhvTmUST1GOUw8Q5qAvPTdFb28xQc9vrwtPUwumDy01DQ9ZZU0PYbulDztW4e9MqY9PP7hTr2wK0s9S2SMPRzpJ72uuLO8RkvevMbtVDzNc7S9rI4rvZ+SXTw8l2m9bjknOyrXML18y4c8AP0ivOaxfbyRq7S9HeyfPW9XjrzSc6C9NX5MPJ2/lD13QoE9nbRJPO0FMz0OyYe74udxvZN3Hr1M3CY9T45+OyY9YryjsZA8QEp/vcx2QDokhJA84huePQ70Br1tHCU9InBDvELZBTyp4Ay9NB3YvBwMV72qhds7XxJkvEhPgzuHcCO8DLkJvB1ozbwygjg9wk2iO+gIRTzfOKw91SlzuRu5qL3aR6g82IrVPJCjlzykHLW8YiY+vRSlLLx+BOg8/EtaO7zfiTwpcjO83qzUPFL+qzz0KpO9RxOQPWbIbbyubQK9TeVWPbkatbyGRac95oAlPV/yPT2ucGI8DraHvW1fGL0fA7Q8O343PYI/GT0sYh26Si6YvEXImYn4hDA87yRTPOBFyzt2icg8zaPxPOqyFL2AJMW79It0vczmDLuS79a9vAmVvMY5zTxk/LO8gL+vPMjZlT0ud5u91kg2vZwzFT38f+g8CCXXvNTJMz3nsLa8oL2ePKS7FD2s31o8RGAKPEGCLzyUtZe9MsXKPDBqxjz5Ols8QwWqPHkkjb2Ui4k7TLtDPJhbbT2kgSC9uiaePNF6h7z7l5s8rzdBPNXiYDzmJow8QIM8vfqIZz2qR++6VEIUPSCwFb2K3w49AEv0vRY2Zr12Ack9QhMIvaq7sb3eBZQ9FKGZPGrxujxw1Ls7UiT2vCw2Mr2uFvw8mt2nPRoqNL1EpqS8vCbOPEatqD3jOCC9go4SPWCugDt42q07kuiAPHKONbu4NIo8rYKOvIJAwb08zUg9+HBRvV11ib2IMnu9zyCmvC1XFb3EyZK8kFIjO04Nh70GGWi9eVyHveQ6ubuAf9c8eFyWPYzQQTtlrUU8kNWBvA8aozyisYQ8PhC2vCwBAgkpTqW9k1CJvVh/0rxQgZI9zP0ivN7wCrwCsJa9gOQePZMjLD18jLU8vgibPNImqLwqn7I8Yvt1PV3hPj1vqgq9SqhJOwTZB71A54q7D/mlPLgvCj1QhhG6VUO4vPA7ibzHTxE9LpCHPMKX8TxC7iM9hvsAvQOpp7xQeRi9w+YwPW0Cgb1u1Zk9axnMvP6WXz0ufY88yP6pvHpIbLyIpuY8rLOFPXLHhr26EAo8B5OavXIAaLz4EgM7EjdMvTfJij13nA28PjrdvJQbUT1twHS8NqTtvDInNr16Xx69BC4ou6Yw5Dv88WW7DWzwPOFBGz0irqy9bnwLPRgVk71YEy89vFHOvHDHOL2YCCe9QBo+OmmeJD10U+W7qjgzPROmbDzK1qk7lmEEPSAPvjz+taY8qvE+PEiklzxBqkG9QOwwO/yKWDz3BR49sbu3PELvATyZk6w8esywPPctkzuFO5m9ChtwvRHaMD3OKou9UH+HvTN/Lb2eSjQ8Wu3VvFx1abJP07E8grljPZ/54D2g5Yk9r6+yPMQMvzz60OS8gDjBuP9RcL0FapI9jgAvu0oIJj3ISYo95tNQPc+UGjxzmDa9pl50PRqJU7xQ3yq6M7gevSgVyz31Pd08LJHJvBh+U70Fop09iMw3PJzWGb15fQK9xqGSvBiklDuGH6W9uY6FPYQDnDzYvpi9jep2PYFdGbxxoIY9QJDeOkK+eL0Jk5S8UoT8PCYpuT3Gxhe9Dp0+PIUVjD2xd788SyMMvQlzG729SIM8xuVhParfOT1fB4a9oVpCPZaOVzxaQL87Wot7PPAMGbrgL1O9JiXPPI3C9zuYXDM92s0GPHEIqzy9uQI9KPELPfXlwLvingQ9Hio8PX+Igj1aBv08T0TzvIE7pz0VMl28OFucPWt6qLgM+QK8Emx/vAakFj0DHxO9DpEVPaeXA70X+GW8z5rJvM9UBD3Ug6O8Cb4KPeWAND1Wjkq8Xgg6PFYFEb1/S9+8aL71PDhETD2iMHq9TCYWPDCe3D3P5yA9Y57WvKyiO711MDG7i0OnvNDv+7y9ufC7yGbEPI2ICT2rzvE76zcoPTgjWL1XSaU8sEWFvcg4jDwQ6EC8A7/pvKBk+Ty7fs274+81vemINr3eUHM8Xc5Lu89Yr7uREka78G+DvVDa1rzvfXa9YD8APWM/wbsJYI29KXBEvDKnFT6AZbQ8YAQbPS5dLLya2CC9aIabur8ewDwEJdS8BkPKvMhu/7xNnw89yqgsPSUbDrw18sY8C3qRPWwLuzwxXV49ZOaSvV29r71l1fC7td4JvLZyE7wa8+08B/uFvAbbCL3GxxM9/D5TPTFlDLyDK1I9rGQ0PVZXkL1i7uM8JVZ+vdzKgr3CbFM9f70GPSPHADwVT1o9gHjNvYkf4DyBYCe9VpkCval86bu9Fzy7FEF/PH27mT0i2AM9xh5fPbUuG70gGtC8hMNfPB3WxrwHXJI9uAyDPMmlVzwSr7C9Cd4wPKQhtLukv72891+QvKWwMLrg7Qm7fiyMvaFmnIjYOv88GWbivG3Ljjxp9iG9vMn7PKv2CTm4cCC9ii+DvbRyO721npK9L/yKvbdSxD3Ivlw9hDKovNV6LjznJye8NEcrvEqtlTz813y8tZfru9r/Q7wK2mw77r80vdm70jxApaM9L9eDvMC0KroHVlS8s+/TvYpTIDsR4va8XsqAvQmkgr3pMxi99ngXPdzc9rtlroS8aAY+PDm+TTyuPgq9GlAkvVixnTy4UB+9aEEXvKOwgrzL4Eg8JbPqPBcb4TyBLMy8YolhPN/o1bzgoFi8G2glPUjWyDxARqQ8TtiAPLgVQD28mxC9pn2LPL/O5jwo0Zg8xqGRPH74lDzbCFA726BvPc7SPj24gYI8skkFvFnWjjz/sDg91dDAPBEsUrqNpkc8MJYUvcAqebxvBLq83BF/vIAb47l6hc48hXkQPQz6i71rE6s5O3aZugb7ub21Un29ztD4u47x4jwVgX68jydgvJLRLr2Txwg960aVvAlXuz2pAo67rXTEu0PgbQh6m6m9edbkvCp6WT0+QAg9pwgIPYD8X71B4Ak8uIXdO5DCjDwNPzw7ppaaPJZDXj31+gu8iq4ovT7zwj1kB4u8OiWdvI5/jLpvDEi8UGfbuvlUdz0t/fM7THLMPBvU0zru6xU8eOEkOoQrxjxNxVO9byqKvEWQhr1jVQ29eteLvFpwkjtnAvk853mVvN/BHj3srFU9kYyBvcxSBrx4Rwu9PIK6u8Quuz3P9oq9TwokvEppXzwYKWI8MkMRPWnAcT28IA49Y3GsPB9bLT3Yj8s8qrnXPEJd+TxspqE8Gy9rPKcHcj1koq67gOZvuctBBT3HtwM8vShLPL+KMbz0Gyw8ObIEvR4jAr2jw+A7pHsWPWfiJ711khO98emwvInWlT2rd189P6ervJS1Ar2Bbs08mpKtPCW78Tyt6cy7vbEUPd+NI72yUzo9x0nMuxV0v7wSMEW8GbW9uyjCwDwufyq9D1hjOye9ErxrGj+9ensJvd8NZbsd0xE9dP67vNgwV7JDRL+8kRvEvCcKGb1G8y89sCUgPWfSFT3M07W69xCBPdANxzqqnj49baCGPVCHnjnNxYu84qKLPXVsOzyOiP68+BgyPJC3Y7w80KC9FB8DvUYrXD0Q4e48lQAhPQIRvDw56+g8cVOjPMf+m7w4KJ08jjQxPJK/0bwsj2w85vi9vBOiw7zMYHe7nDhBvODYjTyuXC09nxNhPGNomrwePcA9VMUpvS2/9rzn98c857dHPfFyYb2kvB286veUvVzKxbyUavM7nW3vO/+lzTyW0Ui9QEQdvAI2OL2Tf0Y8iqmCPDvjULzh22k8YtV3vJ57u7zufQA+eDi5vShfLj1hOkc9OcDsvTVtrztOtV28+ohhPbBelLyPNgg9nNSxPHeeBD1NqsY8A5pjPAtFCzuFJUU9M9KqvPvedLyC54q9tNxuPBZvXL1X7408Na3fu5TK37wKl0O9A+LfPHy9Mj27jIs8gRQYO6aoE7yaCzK8gY4yvcljtjwB83q8do8BvCZW7TwCOJ88tpGgvHoTLT1dgxk9Z2QsPWxbADwppjE9m00IPWMWFT2A/029WmWlPJOPPjsypqs8p/xbvEJjQbzuu648lh0fu16Gbz0dnnW9Lh7ovNOk/rtTKLW8WL9BPWtp0rzozQW9jReHPE61SryCcUG9GENWPf+REb38pc29IJ+dOlFAhz2WEYY9kzx2POqbNjyccMG8wWQCvNxIJbtmZTe8hgUXvdoCGr21NsU8qWtDvM2KBj1mRwy9xQL8O7KEP72vN1g8Ai6YvcoPB73YtL+8o7dWvaFNML0Ndmw7JaVrPIJ1eDxHII08jISgPAr5ZL0lVXe7x3wlvQspb71VzYM9kFeUvJWrcr2J2YA7JrntPWsUBj0oeDI82HoSPK1fiTsUlNi8Ozk/vYIPN7xHI588HvpvPC0IGDxaqTM8RJioPB6m4LxBCcQ8QsQfPNTeIr1pHQI9+FjcPKcLSj1DWCm9ezYcvORaMz21M2u8eKaGPBcRkr3hi8e8XC9Avfac5Yj31vY6qG2IO22no7rXVok9SywCvXgPrzsQ/U663t8mvVxGOr05Joy9GkljvbbtdT2dTj899DOHu3QwYrw1LK+8B6bquyg1Kz0hdXg9f6oGvSM8zDqA6cY7mUVEPL5oljoYTE89h78wPEXYg7sgmYu9+N8ZvFihpDxx4jw9KnKDPapfdrwzZ9W8gyTlucV5Uz2hWsq87HYLvexOtTztpbW8kgMjPeMk+zwFTsM8CHvsvP5tpzxSS4Q9hIIfPWPAYz161AM+s3AWO3DEj7wW7So8FGarvbzRB71TQyM9zRZfvMhOC702VxU9GRwNPYQvnzoCfDo9MkCqPTb6Pr0RAd48chZtvRG3zDuCJoy9nU7fvGTVorwuqS89b08dvdMimjyxSyk9ocQmvQV9Fbz7EP889qg1veX+qrw9zs68RsNjvCiEgb2Iynk8r5bYO/uM5LsTcTG9naQLO0DbYLxbv9U6+OV7OiGCibxK47a8a3UYvA1mgzxovZE8OvWQvcrbhYdR8GO9RA+MvZgjvDv8LJU95NiFPFNNPLtQj/O8EtDrPFbOIT1hooc72kmKPbYJa72cMk09Ns33PAx22TvG5U29PUpvPCqTYr2/gSu9ek58vANy4jtUjWc8PmiKvHMJnrx8ITw8mRLDu+zVkD0S9OC8i7uLvchAKj0pH4a94EGyvJFYXr3QgYE9Q+kCvT0SgD0v5lg9DpMfPZGloLyaT3G8D3qSPGAjhj0esB88NZYFPcHMu7sqdYo8kUHgPGk3cj066ds7YI7zO6hb2TsE84s6aQrsO54PJL0r4f+89PyXPSum/jg3H8m8nnDPPPMSOz0oVwW9GXVpPcuQqzxE7d08Qa1DPBu1kr1J+Z29N6hePB5TiruckWu7EBJiPcL2I73V1O05L3jFvDN2hrwyLkI98sbBPBebITxNDG+79qjNvDkLrzzOf1k9kUI7O2v/yj1mwhU9upsWPfBL7zxeKFS9JWM3vYZb8DyjGRO9RNZZvTQ+DT1LH1y8oCVVvOPuarIoIjC9xbgXPYnJ0DufXMi8qmPBPBvwOj0iVjI94A1JPC90q7yq75o92PlBPHFP0ryTuCK9Ij8SPaM8SrwwOrO6M/PVvL6NIL3p/CO9UfEyvUqiET29VAS84Q+YPX6Blr07wds7i6NhPfIVuTtVvDM72Hv1u9oQxbzccIS9VjfSO4UJgjxK5um87mdFPae2UTwU/u08TQqMPFpIFL0i/kA9wBwJvfrd3Lvpn0C8SvqAPLbp8zwPw0G9URRDu8cFiDyeExO9thhBPQvTOLpkED29tklhPWbQHjxgTn67t/t+PEfoIrwK4sG8qms/vW4JnjvSH6E9jR1fuxsKSDzVFyI9wnp1PT1gKz3dfUi8IQhZPIuVJb3wd107NLIYPUNWgz3AtS87ua/YPLIS2TzfCZK8n7rIvGF287xUHT+7aGAcvLVkdDyOWIW8OEZ4veDElL3hD6i80dqVva4btztnpRI8yRR/PIkoC7xvnAQ8/HiZO6mijD0h2OM6PGdBOzpsFz2YU5I9gPucvIpd5ztttk48JnPIPIKfkj28mne7hAVnPQjqJL1/byi9fiw0PaPZ1LxVsvc6fsdnvGkcqLyMCTo91SmGvTIRTz2XYWK9YMELPaqEVbzKYAK9uS+9O5M5Tr0bG0i8wlTxvB88Dr3VfTQ89hs9Pd91rDuChHO9xykPPR9AXD1qe+a8BKievMvWM7uOuYQ8sK4JPAG/c73nwiW8hxnFvVQOvj2v8xw8WgUhvQVz2rxv57K6PW8aPQnscr3SXjs9+i/BvLpko7xL4UM9K4k4ObwTnjzsZw499XDfOK5FDb1zOxa7oDjiPJw4ST1ANtC8iwRyO3MgMDuqWDY8DOzyvLBVRL2S+5M9mdDaPbgILj1wYMo8WX/pu/qREr1I9gy9lxwmvd8YCj1Wl5u83ui/PPpjKj31/oy8x9f0uyUOiL3/R4k8qmpzPYdnZb2MGc68ZWqTPHsTZLxaCIE7jLurPHkGJzwNngk6J04YvYw2qjsZXEQ7t9QNvGmoFokWaBy9mJ8svT8q9LxKqZE9Wj4EvUSmXDxVHMI4hrGyvOb8Fz2ElQ89sxwTPY2ZMTy5qng8S8IgvPBuvj3UqWo8xZbiO2J6PT18l0i9uEyOu9JeUTxT7Aa9ovhYPRlqmT1hLLs8hopgvMDWybpTlp88XCoBvWkoO7upJ2w9Uu7au9NIpb2SZXO9a3QqOYRi97tSEYQ9P4jQuwdo9DxVI4g8EaRCvVR+4bxNZow93eCxvLM9ZryD5Io9HVwEPQl+NL1TDyI8I2HBPCiKIb11lIa8QwS/vI//Zjwla8U8M8iQPd81jLxaVcq80dwSPVwCujuQRRK8Y8fZu0JOTrwOsrG84WDLPIznFT0D9gq8xa6lvb13Cj2BX2a80bKyOzY+GLw8KW68UO6cuwZ7q71h5qa8EktDvGuAoj0aiMU7s/p1PKZaFr2HDi+9B6VRO9c6O73avIC8NBdivFUOVTzWhK68koAaO5CwXrzhvo697czlOhhvsrwHv3q84rLIvPE5hwcI76u9i74jPQm9JD1J21c9aZ8LPR/NUjzYHys7moEwvfB9pD3/ViE9Kbabu20IhbwNf4c9Eo3mPHtnUb1H9+c8jM63PEkA5LxXDLy8QpqgO+BHRbzIejo9nr0fPe0GlL2KUD68ZBgKOuUgsLzeboS9juk2vVTRxb0geKU8HN5xveinIbwFgHY9riPHvLeKGLyWFY49/GgJPVNnDzuyQCQ9osGOPdmzqztpU/G6iYhSvTtBgjrTPEy8J+WEPCMbBbsOaAs9T4yovN0CEDxY9ZY8FtdVuyyvaDwUNl88PiEKvGOshD1nMOm8qaEUveWxOD262j86+tyYPMEdbr2eQQY9DJ2svKqjgbvGA1i9pX9PvQFry7z7ezs9MFVEvOeM6jxprhU8GB40vS9Z7rzjBCa7lHMOvbjNZTxXnQ68HOJJvE4NQ721DqS8Ptg5PKRnGjyNeAK9sq0IPZIoZD0WYzy9pnC+vDNTl7wUaqe8tJXfPISmjbsnphO8quZ2PE8IdLKK7EA9XTNuvWwCtD2lNPE79bdrPGylHD2EiQK9MD15Oz5XFL3GN/w8rfXbu8Xi7Dv5ilm97EX5PF5qiDsV3qO8+ViIPE4+SD35m/e8WW6cvNZQAjwiBQk9kzXNvEicOTw5DVQ8eBQQPS2Q+zv+Mss8wp3UvACOAbp+Gt48DIaPPdCwtztmOZS82RIMPcFoyL38B0I8ug5TPLt3YzwnYbw7tbkvvUFxdLsvgEu81cdhPKiGLzypNz08pWy+vGDlnLvF4Uo7WQ9SPBMslzzAcsi8tfDSO2zG3DwO8wA9NBO7PXDR5jwM7ts8BlxEvSuu77sen1M9QFFhO6PlQL3/CkS9YSiBOxiliDt6HPu862MHvApdjDxo8Kg7hgCDvOPv3zsPWxk9EoaQPXv2Mb0W7Py8y1C6vUxodzwWXZe9UgnbPH28ArzTGc68VsdFvV9V+LyuJDq9PazFuwdHZj3nXc68jUFCPNZaybzECaK8NH8dvcklDzzrcAS7UelGPU+SQT3Quiq60+aWvLMRRD09Aqc9GOywPNFI5jyJhK+8CCniPOC4V7wqvBu9sFBAPZ1OMz0pSdm8EyHPvI7rBLzlpOg8B8h1PLTJjbzdpA07EMVfvbXcRDtKGSY8lJufvBHR1jw+QgU8z9wSvd1Oybzyjqo7oViZu7x56rs7LPm8CLKCPGvUfD2az5Q8S2n9vEbLFT23OJQ77HcivYRzRz16gyK9PbwTuxKmPb0mnng99Hz+PSy/AT3mFsk9bx7qPS+Np731/uA9yyQNO4aX9TxHK8K8zr3DvBSjgTyydCw9xGEUvFiqvbuQ5mg9D+0LvFYD1bxO3Z88KYJvvLKIAb4YFHO7Oy84u2QUsL2188O8n6DPPVv8vrxDHVA7A9DjPPE2Bb2zZAK8xjkAPDvdkzuXSrs7DImwPemfbj3KZ6286E8HPetFEzzapTg9ZZcxPEuU2bkZJVO9yQkJvEhIwz0WXvy8K6XZu90YTzz6FU+9wGGjvZebwLzkrZi9aAIOvpzJT4lhAoO8arV8PDrZ2zyktXm8lerSOcPUI73bJcE8P2VQu/0Z471h5FG93/u+PI+eQD0wT4g8T7elO9hI7rwcAiq992DAvE6qnD0rOqI865/EPOJglDw4gU+8uOg+PJINfTzh2NE9calyvRA3JL0VC/G8lE18PTEuLTxT5Pe7LC50PK/wBDyhyby992/6vOlTBr3jE7c82XFnvc3p6rtkto08DRHHu9HRyjwNAEo9+8r1una1IbzcGeE8LH08PSMlhDvtx6S8aCaeu9gt7Lzj4gK9AJ85vXaCM72f8RU8PDUdvZ6ZOb2ZIyW9+c8yvWLJhL1M24+8uAlKvdc2iL0VT/66qCWkvKeVlzxX62w7nRUwvVKtNz27nhY9MH2WvbwrHTwTIpA9i25qvJxJT73nkjK9nx38PNj6VD3MTuM87HqSPYLBsDvtW6q8zdjpvM/xSj2qDU09Twc6PQzmxzvnR2w8WM/0O/+fab2K1we8jr9hvcjjLLpsLaS81PYOPL77bQithys8n+mEOrR9czxdtnE7Z0TMPbdGhj37Uac7SkhuvaSHpz1VtFg9ZegWPYf4szxKYpM9dQTlvH+mLr2aK9K9JoNaui9Ckr0zjNM8S/7EuSOnAz1q+V49RqbSPCDU6zoqa0Y9TTyqPNLDNr15aDc9h3eSvWJs+zwrvk468gwmPcO23L07RRq8tHRfvdfyGD0f3qM92QXovIr8Ur17NLO7JGMbPfC6ArysR+07Q+h1O2WPoTyMuR88Ug7pvEMMoD2b65g9vX4vvXzMMb2vpwu8N6RnOy50hTwPOzc8ouUYPedDbj1K0Ci9l/wOPTfJUz15Mt+8t18hPL5FAb0iNPc86QWWvT00GL1tRh67+HkjPMVbo7y4pAW8Jo5HPYLf9jwgmYA9y4dRPehVGLwzckw9qLv5PGUwJL0wkUq8i7eWPUp8MrtV91I78DoCPdaVJzzYbn49y0KiuuBXZz0YXKG9IKkFvcjF1byon4q9ESQAvfXWAz09lhI9C5MCvBpfWbITeoY9DJnXO0AX5LzMY4K9m2yjPFhk9bwkzLi9mhgxPcyq7TybVo46C+IYvKEpiz19+8q8DY42PRXpEL35CrU6vbmCu7ftzrwYnyK9Gg8CveepEr15zEA8ILozPKtJHzmL3g462+ZkPEXbJj0Mm+Q8DTgCvZWwRzxL4RW7TF2zOyzeNTypLSk8MwA8PZGi7byi0M66mEcIvFOZMLxigMM8+gakPOd7pzzQwaC842g7u8W7M72PV2c92JU0vWwnqTx5OiA8Lgk7vRYdRjwXJ9I70HQEvWJRF70XaiA83ljxPD/+Yjsamg68jt06vQ8YLbyl2mw9zteuvf6aND1lB6K7oBhVvdN+S7sWhfi88wCTvBFEB72LVC65GQUTPLiyOj3RGHu81VULu9omJr3VOFS8JLJHvXRABjzBB+484c0oPBpLdj05+/u71Gw1vDuN0bysWR68eAoduwpqgz02LRA8NNTgux9g7rwXuca8Ffd+u+zr+zzuzMC8g8HzuuC0CD0qEai8ETg6O9Imx70i+bW8rN2MPN+PBLx81te8yNxNPYvtfzzoKKI8Q7wJPLpLgDzjvBE9UScqvZ6v+7xMvuA8FVEsvfdDmDwFBMG81L2HvEtYpLzMe5W8Ti6zPHzdGD3TtZ+8HIPnPLm8Jj0TEOi80chMPfMEA7yKG3q9MQiavCPz/jywyOe8X+0tvAyNgTzEZVA9UcYqvMhbE73zR7S8KaH7vKbbVjsUvoS7a7wHPW95Kbt8pca8ap6JOs+kODxyGks9ZoUBvbBL9TrVXJW8Lhppu2BqN71rIRU9Ih0KPaotEj000BW8ZvoVPKDTmzwgZCo7uZKwPHFv7bzooZs7B80ovHMSXr26HSO9ajOmPfuVwbriqx+8Qet9vQWISzyg1oW5sIXWOw5C1TweJgU8YSzLu1Rg0bzvXxO9M9djO0pAvTycIzw9t7JevFDLiD2TenW8PJ8iPIh7lrtzBsE8y0xnvMdVBb0rT487GNjMvEubpLruIFA8zcUKvIezkgbbHlo9/+vTu6C9HrsK17I8W5KwOzhzMz001Iq88VhRvBXqjrteXKG8a7o+vb+x0rzU8qi8Ny2zPD0CTzxIuw+88NG4OqzhjTxJKJA8NjvHvDA2TLybM5E9QDjpuBkthbs+x0M9WIeTPVklOT3PHkS9uk2NPN1WIT1gHpy8/TNHvIYadL0Y2E49nldzO3p7g7y3uWS9lt0AvTiCAzvFnqY6NSP4uhHLgrxKl6A7+E6IvX8Toru1PfM5lVRPPEXKHz2AVSa7gNt7Paj2Nbx0MW09iQKYvZpdZj0dkeS8JWb+u2e7xzzmVP07LEprPB1w0DwfeMA8BnTGvITWJLwZ0u282T3JOxqeCLzMt1m9sb+/vIy0przcKLQ7u+inOzv/IDum9Zs9I+pavD8DljyQaZ278Qj9PCVLRj1lclo7yFxMvUIcUb2F14Y9TV6NPM0e7rzcT/68wF8SvTk4jTzWB5u8wXDivPcYez26/MK9ZgV8vONFD7zbrpg8zQvWOT6UEodj5HC8NjZyu3MNXTwAZ4g9SVQQPdEoiL1KiDI9gbk6PIZdxTwP9xM981RIPdOLOr1HZmc8G7wUvPPXmT2xNDG8Tb+UvKpZnr1nkLY78erqO+3yfDyjmDS9AOdavbc7ozs38wi8v7tYPPPVUz2Ac5+8sZOQvM18kDvFIX67D1+hPIi7Ur0OjJY8GBXbu6U7TT1kDro9bESRPWHWFr1epl09KypDPRuKnzzvZfS8XBcIPd93hjyl+cM8BydtvKokorvlk5e8CTGoPBhWeD01PxW9JI4JPYBDWjt7/Du84eeXvCv/eD0tLfO7fjUkvenVyDxIqqY6cDI4vWKUizy0x0C8O8RuOxbCdjsc41C8w5liPIqmdz0qix09+7z+Os7tGb0l6Qm8JaWqvEjQR7vpssU8LswQvXTIJ7zuybg8YxEAvKC3x7y9Vvo77TYvPZK56Dxgv908V2SIPIqeNT0awo480LAePTHaczxDqDK7T0kOPaaM2jxLkYM8UzoIPUchcLLZTD27FxI5vQseO72RQ6s9PccwvSPZXDxoaKC9yeKZPM4JojxE/2o9yYrDPILhzLy16Re9gyhvvI5Z1Dx4ERC8V3g/vQU5V7x0YPe8tlYJvO1R4bwMuRk9y4QSPXAjCr2bDsE7AXFTvIu0DL1IXSY9FXw3PFWe0TvfVw09zzJHPGBXgrzII7m8pVvrOwY6Ur1JWkO8G6rau0ifSz0FvYc8bmXYPHshU7s87yK9TlsuPKYPGj1gDzG9MYngu2mJjL2Mrmm80cWrvP54oLw11bk5K3WlvF3sFzyp1149P1yVPF70L72eHpq82cuuvEMUmDy8dgO9aNZIPNDLWTt6G/q8BV/2umPylL3PfLY8+/KruoC8Oj1dbhK7c61PPbNM5bxkf0S9lNY2vJFldz3gRge9m2zbuzcbDj3Ok8y87IMnPU6VgjxjzVk9KNTAvPq8Hr3HBr67u0RqO0a76zyXhzS9bOjTPJiCHrxBhjk8vAu6vJf/1Dv/6ym93/uhvInAvzxqW9A9uJkHPaLQgD0sqT49/8LCPA1DujxAFNm8trasPPzISTzG1E08jGaHPWTBxrsBUSU9j5lKPVV/KT3r8uW8SlCYPVt5CT02ETe9kLZjvDJAGr30xYo9HW6ouowp5LzYBKO8Thnsu+X3fzvgdq05KjfHPIyQjb3dLp+9cnJsPHIFaz1QOs86KMaXO/VeejzVXI497eX7vUDR7rr4Ja08gLRLvVT0sjyWM7O8tQajPBgzwj1DM1a7BW4MPdw/dL0DbWa8XihQvE7zoD37c/87x8EEPVEieLy5N6k7A0+4PYTaBr17TuO8GLKlvTtNHz0zUy08ARBrPBSCM70AMbE5YjzNPC4dNL1PUBC9/lzdPccSDr12hS69zN2UvFtgELubFqw8fIcIvWvnkz1p9Mk83O9jPWjLATrsV9C8i6aYPOZhh72ae0+9MAFfPcqofL0lJ2u9XaCBPaEzt7tCesE8WdIRvfNH+bybGRu7mwYyvO+vmLqUDgW9fuFyvT2TjQf8bjc9FD/jvK82RD08Mxq9bZ7QPIgaZL2am6Q8otsivb1kK729hma9+u6GvTuBsrwXqZS9NJXZPQ2Cazw7OCy9TjFXPEp/Gj3vHHc9SgZYPGS2U70uC6O8POcvu0aJNbwjURa6nHMwvTYDzzxL9VG8/N50PcKZHzzO4+m8virnPES5oTxtL3Q8cbVdPNUA3rxYEwa9gM4AOKr7zjzDU9W8ZftPO08KLj0KBd08DbuuvH6+Ob1UWwu8vYSZPFkQmjzzRBg8YStsPaGbtzzQQwo8oc0dvb7MpLziUeS8j26lvHyQGzwpYJQ8XIBFPQJ6ijylYFW8CdmmPBbtlDwzaMg8B2rjOqGUnjyB/Ly8g+11vcAOEj37cUQ9Y78TvSiqwjo9ISI9sQO2vLu/kboIDZE8DlwZvfnCJDtUm769W8dKPUK/fL3weIm8287HvOwj0bypnzK9QoFxPWGVFD2Zylq99GJAPQHbcTzwL028hQbhPFG8srzdXUG5f35xvWbRcAihlP+82v4MPSyIIL3x+O+7GP7quxo6xDuWVaK8sYd2PYlmCLzsUMI8ru9iPcUNE72UAbu8wVyKvYphpLvBPpO8cNdBPYFqMr3nkrA8oCzVO1QBEb1Wmi49lr5FvVM+G7zhnHO9PF4ZPG1G87wyOGk9z4oVvPM3Nr01hLe8CFWbvQIRUb2Iwyy9FyVoPOFa7DwNDxc94/laOrL0kLwi0Rc93yrnPPeOWbsC1ti9fAVXPXWzWzrsq4W9g5vwu7RkdT1BzbA8O6cjPexeGbx6D0y83+AuvIimTb2KNTA9xly8vBfW1DxJRg89440+Pb6IiLw7SBq9nDe7vTSnY71nzYQ881JfvJHi2TwKvlm9C5zZvGT0Mb2rNY89kxwoPDhIpLvCC3I9/vC/O7ooCL2bpHy9o8CVvP7/4TyN1IA8q6PjuyO3gjxnQA89CUi9PBmppj0Hsak9WyeLPSPbnT3pbca8rVQ9PSAybTwqn/m8IPdlPLpu4jtAU3U91+rEu5ZdTLLc6h+814u2vCSqGz2z7ZE7JPmwvC40pzwXnp86xLMwPRdbHD32AcY8DNeBPQpuHjxKUh29QeaouyLKi7zrtP67QSdVPTjYCj2VIeY7VeMFPRdjjLtFysM7Aie+PDscfjwok+88W+kzvDRJtzziknw9SqtWvJZs27zAekS62ykOPElybD3uWLe8bAofPd/DTD3FtJi9nz+DPPJT+rz3nRS9I258O3bzkjx+H/w8aLJJvLPADT2UUfK8KDMDPUW+Qb2RqYs8n1EWPMEZ1bsbHTs7y++cvF3nbj3O5oc9wfAwvLoVDjxUqly9hnyIOdvtzj1/Al+8q0BVOU5eUb3xsnW9gUepvaIZWb0Itwo84NwkO1V1FD01MYm6W96QPEptQz38mFC9aeV7PN+vsbtT7IM8qLAqvZf95DxsLjW8UDSvOxXQprody/Y6o/mZPOYQ6rx3tww8sI69OgkHyzy5Tja9zU1vO1ZHF70ryF46Krv7PJJHszxVdEg8w4JAvOFpjLzYq/67kNAhPfyoObzVzzy8D5LTPGMcnbvEIaK79F+5u+HF+Du1BGM7DuWhvJTzKz2x60E9ZK0uvaz6Jb24z446iRE/PUnTAb1c8ve8PYuAukWafTpLNQ+7I2exPL1OTj1g4KY5fJCkPIewDLtn5By9cK8Fuyhw7rxPhY+9HrIKvHkKW71bGvY8MIRkPApiXjxJOVs9lQ5AvSHfi72gFq488z/YvKPwszsAZQY9i6sGvdUhJT3MA0I8FX1EO3dw37zd/5s7psyCvDhWpz1HYai8uqMePUYOvjsGmvM8zRcRPYtxijxUNhS9Z3JDvaDxI7tmkrs8x6KgPC9As7xdKWo8wB9QO2+PDr3NeUu9SHmVPWMoQTvVche8OrGcvM1GULwsAr68dpKQuyUaDT2rr9A8AOYOPKt5Z7xKwBM8XKbUvGj+I7v5p0i9AR7LPGTcrTx+uqO9RENzPPHI3TwUrpo8JyrZvE6/97xICUq81x6tvG9+9LxlJha9hipMvDxUqIjIJZk7yhA0PANBl7zmHGg8BzilO1LxtTygcls9MaGFvP/I4ruGGY29wVYYvft7v7yqSqC9GePxPKKOOL1qHl68qxbFOtRZXj1AZnI9wRW3PBP86jv1Us45bFaMPLAtdL2ByLw8NvFnPAabPTzh0dI7KbulPazqDT1MEea8eD4pu8UGq7wKLRu8pd3Eu7iHl7wF+Ly7xDGzO6QuTzwrUBC7eNebPJVkFz00w9s8+IJ0veeCjryfEIC7OC5CPYMIQj3dTJ08oBlbPTCcy7yyaoY8iq2ovYsZzDr140W9L2UmPLfg5zx2bUE9Mt1nPS2yGTwi75087V5IvFDJ4TuF9k47IWnBPLDsRr1he1m91l4xvZApNbyzEr892rRmvZWHCb37Smk9O5shvDJ9IT3ifOC8dpPlvHseNLpAN3y9q+49uWH/ab072MY7grZuvdG3aDuMcvg7Ksi+vDwdrDyfN0G9KhfcPMag9Tx6B+m8mJKevLml1Lu7ono9quOPvCW5OAjjJYi8SJ7APM4wFLzVIQM9b0gwvRb9/LxfJlU9+3dNPfdFs7tdHvU8rPCjPVNWML3T5My7cmYQvZBniD0jdx+8iCIAvcnxWLwiRrw8AhzOO5qqNDwD3b47pdzFvAT8oTzOqJO8Q6fjO4fbFrz240499WU0OjBVlzoNihm8UfGDPEKeCb2ESPI7ScYJvV4z7jxRI8w9ZSLhO+xSo7xUEh09XvKXPRCG2ryVpBG9mc4aPfwIKTz7TLC8wFtWPDkB1bw4zR28kOrbvMZYkrq1zGK9IwsCu6Dsybw5MEG8NdGSvJ3oPj0FgeE8sFWCuZ4RzTxcDSs88qeDvaNPD7x9kR289TfbPBXyhrw3hwq8iptHPIhd3DyGW7o9DH2ivZv0sjt6mo89vdQevC1BdLwCURC9cogEvQrRGjzjt0q7twfFvGkT2bsiyRu89Z7eO9lewTzDe1E8C3HOvE4+gT0hJQA9qMDMO6BUoLsUNnS9FmeAPaENHz1MdaM9d0cKPMfwZ7KYToi8bxG1PFN/sjsSfxo9Ds/KvIW+Erzm6De9RkA2PNz3cLsDclO87riDu3sIDrtU1Y+8al4fPUbGozwOhOQ8HXHQu4nzKT35QqK7FtHHvFqthzx2Wd27enIyPVYhQ7wuiY082GQTvUvw8zwNpl4905MIO3xC3LuihjC9i3AXPTFfq7s9yiI7oZ4xPbIhAj1jK6y8nnYXPWwOqjx9xYW7651EPWGHMj0F6wy9Zx5PvFbmXj3AzdO85eyROkIOurw7zzo7i3PhOjU3GDvqAvo7uKTBvHAoKzxa5ru8kT9rPCPBc72pb3+8Ypi3vPGAszyuoBK9NUNJPQApVzs2yuu7zaDAvTK+Wb1k3gc9Y4EePEycGrwdVzY9OKdGPaji1DwQklC9JueivXSt3rxqAXo8TkhWvK+VJTzehlW90v8hPBbLrTw9ibE8kXQ+vYGD7bw+HG68FtMSPFNd0Dwdnv079GifvGvLxTn22NI84keTvBhf6TzSI+S8Z8fqPF9e/7t4cwM89hN5PfWDlr08ol48SbQMvb2QnbwC/oE8zAd/PR+KA7x9VVK83DqJvK0ZvTx8hZE9JrWVvJ6hQLxREAW8E4nTvLWAGTwJ3Va9PeSwvBE+G7ygNo28F8oBPYo0mT1pWZQ8ZnJku88zsLxunRa9O4idu7qEy7yA74O9bOc5vWUKujxqgMU83rwFvaesPj0ArBU9gIVFvXX5rjocEAc9QuUrvdmJpTs50KE8q1K2uH9uAj2/2/u77GsCPb89/bzVz4K8/35PvYLgDD0kVJ+8OcZiPSb3XLwRPjA9tLkaPUsRmzvhAwo8fyuvvAbWzbsJw7A7g1EuvKZb8bsKdQY9lPtHu8uyrL1i6B29KJzwPYPKATyiWhA9ABPjOCo+7Dzo+My67wmQPPcZNj06Rio9xiYOPW2eqL0RPr48lauBvE6L5rxZOFe9+Y56PNCp57tRioq9Hhp6PO2d1LxJgpw9A7rqvKMeSryNxwK9taHmPL8LH707vce8xRUdvazhlIfHRBW8b4RiPIPvyTq4qAW9aX+3u+0j6zwtlJW73ByPvM6DZDw1Cba8GE5gvdvKlrqDv5K91QrkPE6TIT25BkS7uvM4vUI2Uz21FnA8RxYsuwRDCj2v5lo8WWU/u7JOpL2cuZK7GdmuPJ6mOT1Zise7N1iFvMVbET23kTq9uhTkPB+TAr0vCUU8vSurO05PAzzLeLY7QdczPBePlT2Haim8bNLPPJUvOjyIqHo9IcQgvawJbrwR3Go93TCPPUWVqDykoAO95TYdPQZamLzFQ6I8fxiUvQCeubs1SnO7D5P4PNdh7DxZDhg9xma/PIxk7zwx1509BVhkvF+WGj1M+QI9MyHovAMra7xrwk69qumGvU1AJj1ab5A9LaFcvX64irx8aD89xlxPva5LMj1QZTO9YMWFPCtBLTz6N0W9C1HWvB176rxAE988JA1pvdjzMb3lBOC6pjIFPPX7NDpGoNO89XfnO4WVZz3K/pS9FAqcvNeerTxhuVM9Dz0DvRoUUwg2TDa8/fKyPUW7LbxOFW09uS9OvMge4LwNeyI8Aw+QPcvGfzpo09c9kvTmPBUDn7yyCTy8GD8Uvcc6Mj0b/GO7yQgZO/kO/DrqlhI8PNS/uxZBtjuzfCM8keymvdu2Dz1+kwu9Z/EBPXkVN72ODC890PW5vLuELjyk+c+801sDvWLynbwZ6Ys84ngevVH5MT217eE9YHuUPIggIr3nrn89QwJRPbd+TLxZIC69zVNcPcpawzpbrAa9fHY/vNspgzqhHqa7BQjgPFd+zrz4MfK8fGsjvdJdOL3wiVe9j4/PvJ4N3jz9o4m7XUe1vASEGjyCV668sgIhvcwtezxErJi6VXHFN8iRb73IUN68pRQGPJCXjT0/hmQ9E9LKvC+C6DwsrEk9Jr/MPDA0L73C4/W89BqhvBV6hryYvIs8ZsaUvLFGV7yOCBC9uJcPPXjGaj1ylxc9ijh0PeLDlz2GGsw8Itk6PP4S2jtp9sq8fbthPdrCQj2iSSo82II4veUtZ7JS3Vu9uqqgvFUWeTvRcoA9G3pRvJu7gr0FtEa9qtEHPSV/m7yCS2y8Qug9PZsMQrw1qne9FjwgPQTjHT0D6KI7ggcMvQLJgj0xb4K8pIgmPC6NWT3X3RM9ZJ9jPT+iET0CQVA8INYevdNjXrulQcU9SiqwPOToaT0nYVY8fPMJPXEC37tAC+25i6gnPbldfjwhGio8GS20PBXkfroiK/g7pJJ1vH2jKT2ArS28jL2LvOoDED1oja+8xR2XukJVzb2Sc6I6RdwcvEpckTwhlGU8I1l/vFGFpjy4Q7M8JjQfPJOVKr3s1m29IvS3vbZZDD2Avae914FGPB09GDzde6q8rEOpvT0Vq7049sa8pf7pvNmnAj3S0nq7pIM8vVu9aLxL9NU8iLXDvb9PxbzWBWe8pHdbvUhbnDzVcMq86XC5PC8ywzxO6oE9Q7FKvde9ob21meG8pcoAvZgSwbyZeZa8YvoEPXfH4zyCDtg87NiYvKOGLD3jAP66TDiJO0CvMz1qElg8Gn8JvC6dOr0mhIu8R349vZYalLzGioq9kNqyvDSdNrx0E4O89o3LvF2gUjyKmla8J7XzvFy4lz0wF8m8nlcMPaKVjbzmbs28EEU3vYEvXL0+xZA8VxFgvUg7Dz2AWWw77VpAOzCiGr0Hefq8fh/xvAeazTtphUK8ELMAPSxNxjz7X5i7kZuqPAAN0LuqArk9o12xvT/VCzy2dY88QBFvvUz0hT0jZRo6+H/0vPkdoz0xjcW8RsKmPBIir7x9BAQ8wSjRvLFT1bwrMCC9r75JPZ/VsjrHumi8ghSYPQtzSDxExQa9B5c0PUfwyTufTLM7q/4ZPctOCD2LaIk9Bnk2POwSuryyeoS9AMdQPRd4gzxgMQK952wPvPB0mzzDUl89jdkgPbISkDzxD8k8bJmxO6v0grspCic9MaXqO4MrGzxqaKe5smNXPfsXLzuJFxQ7GjuJPXWyIz0/26Q9ABFRvfBE/rmO/g69Rm9fPQBXk7zMGqk8flGlvfw+PAk7XGG8J49SPJAL2DtShg+9RwYvPYUdGL1jck89r7VqvMUm3jxhA1K9yj+lvXPFzTslLYk63GYFPZ0CsDzk+Ki9rgEkvRMEGz3VMpy7C56RPW7ERT22FW88qWJCvSwTej2tBgO9c07evNk8Qj34+GU82We/vCqg1zsdiEi90iqSvaDCuryUJmI8SpFWvQtTsbyHDwO9FlNNvfc8trvNwBa+NTHDvRUCQT131QY8RRW6vA/11Ltcl+e8s154vODGjD2Zj2a9aXRXvfddkzuliSE8z7KQO2ENfT3XKSE9/9nNvBAxoj0DrQQ9GrRHPSJOcD2rkq+77RyaPYzmmzzOtp49P54IPGRV4jyuR8y8S9C6PG6bFr1/JUE9CziUvRVnqj0Nc9Y8lTUwOjx8Bz2KeTi9Tn0EPawVHb25d4e8VS7LPA6ilL03Eyg9fU1ovICewznOC6O9GQgtPT95DL1IY308UJcWPWSdAD10/AS9LZ+qPNxdUD1t4I48Hy4avQ9i5YiSrBa9lzj6PJg1sLzTycw9F4wVPXa5GrwJKXw8edozvbL9XD2q7y08YT6gvB/Kmrxg3wa9/4covWqelz02tXK8g4jPO4yCBL0vx8U8APd0Oc0ji71nb5o9YsWbvS2DBb0Hbku9k944vGgLSL1SrHE8ugKVvUAvmbmHi7c89Q8cvXrIDbwK46e7Wz+xPHXpljxSUE09fZSTOwiRrTvbOmU9535tPS82ij3EAEW94UmNPVFpKL3W5d08AoyevfguP7xwp746y/qIuhMLZr2sSDs9gCzAvK/Xx7wcCkW80L5oPPULEz2ms7Q8oM9wvKmrDT0DBj29ZOCXvcK3yrwLtcY8GIJgvB6JJD05oy69AGLnPSETDL0wmZ88bd4VPZ5TED3OuAY9o1LMPZQd7rtDs+U6nDiIPVR02juX48O7VSgPOK5u27wqhJq7wNQfvAUqRz2a/Cw9aKKIPdkIsTwNEjC7Sg1wPQUjJ73QPTs9d4TcO6v4HD3tG1s7W1wmPNOSd7ILi9e8XCxsPQkNAz0bt2W826DTvNWrZ7laEto8oUmaPfumBj3HcY087svXuaeNE73CzGi98dCRu8hwqTx4nLY9+IuxOcRbSbyMUWs8X5JxOuQpST2i1HQ8LK4SvYuNmjwkYka9h2cVvYuTED1pGq49fGzmvAxyvrx/j3q9JanVOk5ovjxZ2OE8vGaiPc4x1jxf4nE7LffaOnTSTL26Zqw9zXKsvTzxn7vY5pQ7Bh0evRxFcz2siDe9PTQzvKwq+r1rzZk82qY6O/sk/DygTAA9AjsNPTJwEj1x3Ys9/pslPQhwkr0ysS29sKkYvRDD+DzTxIQ627L5OecHyDsCoQK9/LURPO45xrmo+r08/aOFvaKeszwXR/q8AIeIPaeZaD3gWiu9L2y5u375oLwHly691DxMPAMyBrtZudE8ZFSsvPt6GT030p29XzgNPYqVELzDxKe8QtOFO9IbJj2ItCw9O+r+vLE1jLvMPQg9eqY3vKepGTy3f228LKLgvJZJID1nWrA9FgTXPPe36DvUsos8QghfPRg6HTwQD+m8IDfcvKFbkb1wRn695ElCPJ2BtDwLl227zZy6vffgAr0mSQu9nIjxOngPC713Mt+8zPRWvTPZCDycc1C8+pkJvSl9Ij3f2VA98aCVPQoD8zw9ydy864qcvfWEB7xsU6y9jaB+PVxktDwMZ1w9slwwu/QjKz1ru3U9YQLSO+TJAr2bojS6iIw5vSwpBD1XgWW711uDPSxWMr1G24u7YGU2vd+Zzrx7sKm8yxecuw9/f7xFSaU8yP3euo/l1zw6A9c8mN26PNN7kzymF0A8NZrsPBnWYL11KHg82l1TPc4DBLzmVSM9/FsmPMGECb4HjRC9CvuJPeLHgbyUn568+uojPcYA/7wUoli97LbDvBpPpTxseWe83I4+PcvGhr2fOnW9zJdvvFGlHj0N8K26J+HfPO6NQbx6gbk7m1fUu4DxlzwLOsS8ghyTPUlGVL2Cwsq8O2wLvaKdHD2W1ei8ILCBvAwRM4mLMEo982YpPehqGbypA+A9XPW7PAZj8TuJCaU8vp+pPMfB0TtG00+8fk5yPSc7K7yO1cM8XZgJu02ARjx9qjW9QXiDu31QsD3L0Ai8LKOSvISDMLwb+om71V3JPIA/1DwHdgQ+p0VNPSeAbjucBaI70nScPSzX7TyQqMK8/MobvQA3yLyODbc8EleQvJ0tpj0u+CY8CcF1vQkn9zwP9iM8VaImOIx2kb3sZ4Y8ZXMpPEdqaT0KU1a90x7xu0grYLy0SNy84OCTPaagZr0zwBw9Uw1jvFVw37gIntQ89bwcvQ8f7DwcRJe8kkUjvJIyPLzDGKC8Fz9pPYay7TsMZ2e9jjuqvG0VTbxA/329MZ+QvYuT2Dyz7ek8lmjYvRmW/7wb6O+8jY8hu3NGWb1MJp082U4GvebY7zz93Xg9JXQmvBzourt+uzK9tPUdvZwS2TzbVLo9PIzTvPXqUD2Ksj69r7tOvQXRDT0KOkc8C6fFPDslO7xNHNM9YVxiPGCAtQgIxLk8hkXnPD57lr1TQCM9rRS/vEURdbxIGdA8ZOzQvJDIHLtRdjq9aTCZPOaRLj2nkXY8xjw5vHDwArw8DhW8lX9kPHS39rzfGXC8Vxd1vO2A9Lu1jwA9ICPhvQj3OL29ZHy85sA7vB9CMLwdXos8AUDhPCfvB7ssp7Q7MwFLPaIST7zQtE49lW4quAx8Xz0yleI9OLIAvPFtBb3B41E9wI+RPUqoLb38+ac7mh3YuyiJX70HnM67YBlrPFTeaLxRSw87ExwiPVK0xTzLiwq9N1d9PfsFH71dSBS9Lxg3vfnDWrsL/l68NnYjPS0ntrzRtbU89e1mPBh2cT2AhH+9UwFDvd5uzb2MgVk8QIk5PZS/XTwzabm5V3nCPG0EXLxKHGu8DjCfvP6NeT05Dc48hskHva1X0L3U8F+9eWzevEw7mT29Cog9Sy9zvF7kQz1R4OW75HUqPYfi0zsD+MI95UwKujjUdDrki+a8NgQzPfo6Dj0JlqY9RqElvOz7aLKBtb28h5XwvGDEVz2kYkw7CW74PO8CiDpuVk296CmWvD3QqLqM3ze9XbHavOr7HTzmiQ+77brWPM/EkD3YqYu8W4ZqvcWDQzv/kX+9lXhyva98ejxQBx08kRAXvCylBTwWcaI8m32iPILdOD1sRyU9V7B4vTh7qbufUya8FWyHuZhMTLwHdIi8z1RGPR0TID12yIU7YM8LPfZ8JT1dEnS89eSPOvM6/bxPelK9ORltvBSDhL2suJU8hbmsOjVcury6pV29EnUSvY+war2cgxW9Y55gPOQ4GT2G/rE89yRQPcDDiTwDZh899HhkvGYlGD3DCgS80o7+PXHqhry5L4a87/psvaxEs70HD6k8CXeIPOXNMz2LX746sFhCPDr9ur2p7hm9CVSlvXNu3rxc9HC8nsqDvSgNhTuxQs69qttbPVYjLr2Kpo49pUtzvUAkgb38iFW9oCuLuSdvEbzyuzM89FQzPQUMw7w1i548vas3usuDZTvJs5e8e+RKPSRw4DsqHbU8gnYGPbQRSb1EBcq8r75qvRBqgDrZciS7pRYiPXEUWTzOy5C8jgO5vEgzajvEEPE8yo0QPYBCELyZfqG8gVJYPQvZtDzWRsu8SrlNvRjTzr1L/mA8aJsaPB0yKT0jDWc8D1cpvPyw5LsrGva8IoYtPVy9WL11OgW9fKQ8OzomiD1+76A87EOevCHFs7uwmHc9TASdvTXmnDw9HMg8KCxXvHeu7zzpjkU9/dwIuwTokz22S7Y89giXPawncb09Xtm8RSbvvAdr9jwlxzY7YAZJPZnsELzDT+u7l12jPadKX7xYVy29uyFWPAtuKzoRrvC8wRUnPGtGnrz/tSc9s8/ePAOv272W13q9ysPHPR36yrxouYG9ElfoPOsPxDoPqQM9KWfYPAg1Ej0WtAo9MEH9PKbaH71J1s08plmRPLUFOrxr9Ia7fwaQPZDoArtvcqu82Jf/PACYyjjexW49yVaVvWgS6TzFpLy9BXpDPKc/1Lw0DL+8oblMvYDbIAnzMxI7ybQJvRDMijyYiwy9stvyPMdpXr1b/GE9dKWVvE2fFLwPr4K8eqDRvfFCpbyURES9NyH2PIJy77wQxCe9hSykvAApnjws37Y7T7iVPNw22jyDkPm7I9E8vUvMG7r7ncu89sSsvCjHirzB8Zu7Mc/JPHfqBT1MHtC8Ncctu/GwWL3SzmS8likBvEzkIr03fZM8yCI2PUFXIj2S0Uq979h7u9mAAj3nzpk8iKLjvJtsN73PlWA9JCRDPTHDgj0b3QA78KEDPYHJxbw72wm9rwEivU2NCD0A7Z88oz+ZPPJHdD2KwFA9RJVYPdUm7zv1ElE9ruxLPfV18DxtOD09VWIbuSErw7vEHe+8U8h2vOYaET0c3qg8+PmNvR+6lD3fdQC7XqZovbhDBzzuRZe8aLhUPC8nJrzgokO97E4RPRVjoL2Eg1Y9I4savdemGr3//IC9P2EQPWzNnTvDJia907EuPIJV1DyiiIO9Z8VGvG3r+DxHiJq7/+YGvVxwt4if8u+89EBLPevQELyIloI9S69XuojQHj0C1A69MHaSPD2JtLoLGY49nFotPSvHzDz92a686AQbvQsimj0bWLC841enOgY75jyyYwY9ySQsPEQ2Ur0nLaE9mxi+veoBJbz/L1C9/e8EvHiGh7wVRRc9dGwCvSv6wbugGM28euoUvWu6BL0MUOc80Lhmu8++zrvu9H89Au/6vCuwtrwkKx09AeZlPQDoJj0R97C9EOBRPaVI97ylpsi8ujGpO5LrMz3Vl/o7oFEQPYujqrzDoYu4iHpPvfxVEL0AHqm8FOpzPZ6utDylamO7bJUvPWPmLDzzzWe9s96evSGi9bxsA7i8HPmkuxXGobmq/mm9OGqSPcKBOD0FV488fZj8OysLMD2YkU49IbkYPdP467wUr1+9nkjQOrqB+buSTGY8cBJNO/z9Grz6hyq9DRlYPGKwuj1lQ7A9DUaYPcUYkT0uEYo8/S1CPdDRRzvdKgM8ecgfPQJdID39qxE9orjgu6qjg7Ikzie9FK+cPZgaBD04+MW7k8G+PP0C3rx2jVY9unekPW2s3by40qc8YOefPB7BDL1AAzq9HtKlOwdwLzx0MOE8Cvvlu4lBDT1gxHE71R9xPDekfz2yKYu89HjpO2eoDT1ag2U7O/ElvRTpgDwoJYk9C64xPNPHTLuUs9i8i+IPPLSe4jz1YZq8VN6NPWTFrD1ZyrW7YuY8PA1BO7xzmO08tbOPvX3qObvG/p08uM0IvR+Vl7sk0Aa84kcBPYNP+718anM9yC6YvD0hDT3gtYU8877Hu6wsej3wAUY9iDXLPMac/rwlLJe8YhqWvQ5Yyjxlo9S8SXMhPW+BCL0zS4i9pXGovYRpfbxnlQm8T7+EPGVELzvbHQk8OMyNPVY4arsV0y26eqfHvD3HdrzIj1i7ezOPPHhccTx4YFc8x2TMPZx23zysiyy8ZmOvvDNDjr0Rbr087RS2PZs1Lbtm9Qa8yTBNPMLGvbxexQy9GHYtPQjT9Dylk0u71rdAPFBB7TzF3Hc9gd6+Pck6xTvYSRk9474pvedn+DwH4ke8zAk+PRpAD72s5l69iDkCvK6vR7wGAVg9DyoAPO5YFb1eXVU8CL8bPeBSaTxfm5+9ZTUQvJipy7zroJo87YwovfFtOT0i58w848lDvX8j7Lw318i9kZl1vDzhDb0AcLG7PwfAO+u6QLwKZQI8lwLgvG678jz7g6U74OIquQCLsrysJhY9lQTYO7AAZj05hMc7nkdDvTkX1DyP4aW8VknVPA81QL2B5Cm9DKYTvMuhOT1oT7Q8aGQlPbrGAr379W092+8fPVViUr3u54E8NPUTvUjbyb1RUwk+/1oOvWS0i7y0Kw49gbe5u/sZ3L3ANhG7czbtPXjcp7s4xxU92JaTu5lQJb3OqLu8wPm1PIr0wjwfsBK9d/gGPca2S73Prq28FJ3au568FL14gUi9FTE2PUZLIL1s6mE8hzjwPGKTvDxB47E8YF2gvFc5HLozUfy8O10TPaWvHb2YGTo73HOxu8BDF4mYPgg8rZ/NPEXG5jzGBuC8bF4dvczCprqGaQq9+LMcvaVzX72+tDG9V0OxvLXHljyWtUS8jmreOyU/mjy9Jtm8I4N/uxydjD0xrSQ9jajwO5FugrvJySQ9r8p7PM71v7wP9vK8tv8dvRORKT2p+329vnxIvJs6szzSdR69q+VvOyrmxTwAMsu45KU4PVusIzxmgdu8kJBiPAZ/jDzchQu9w0twvZ8c2Dww9HG8+NVOuxezN72tUUI9FFdavF3YIrwp/jU94GG1PFr/7TyxVgG9QbbOvNZiOj3JtgC8YSVzPM/JLT0GSf08p4QBPfZggL1W7Lw8upAyPBk0BT1Edju9ZftCPASqE7zz6BE8GJRmPJSdejzU04g8bb4YvF9w9Tx136A8oAIPvJsA1Dxm6/487ihavKAkg71L54W9UtDtPGJMK7zF5Yu95PMfPNZSDb2RMDO92oqEvExeoz22SUa9QBwIvZ3j4TwWl6S92NDyPDATxzr7C+Y8C4F+vQZRtwgdB2a9XzOKvGHvmbyKHgw8bao3vV3w4LwKhSW9Rx+aPaS6uTymQTI97krBPGA/Tb04EdM71jFVvZUltDyTRd080iOAO0XtZD2BulS8z7uTPX2MZ7yXkQU9Fq3WvSunH7yQ6Is8xSpYPUtfTzwreA+6RqQPvbTXer19tAS9uJYAPSVzdr1uUCk9zzwLvZxftLytGva6w+QPvYyD+bvclSk8KKGPPX8EXz30BWW9R4W5O/MgAL0SKX69lzR+veP8cT1bFYs8tA0FPCCpMr2SToA8MMNHvQBSobrlhoq68P8FvV2AnDsqgi69qakuvQtP4juhnYC9poJVPX6lBT3CCUE91wRHPdcclL3B0mq8MavdPC4BS7w49/K8LCm7PTCKNz1Z1bk8vLTZvNG2lTw8KLM8cpeNvI3AEr0bRVi9I/StO4OxTTvFb7+8BgAUPaQVhj0LAJe8o9e/PDJpmD3z2MY88MEFPQWUfTtlH4g8AsskPJHt2zwxCVc9EspePKutUrLSxBO9QZ0MvRXTxbw+NUg9lBCRvOuQjjlUwjw8toH2PG871LzZO4u8oShfPaEEzDznh6a9/+sYPPglprxYYC09/7uPPMqe4TwejxY9ZKJNPC2Qfz0aQiI8/DA4PPdVkDvie8k7AgCOvccTULx+Qi89sLVsvHJk4Lx9dNY7aPl0PXCjm73OkeQ7Zvy2PVw1gz2cc2M8cyvMvELE6bxX5do8R5WhPLmuVD2Vzo+9OmmavHQupT0vmy28NiiXPOCu/bxDxu08rZaOvJ2p2ToArYw4ESiXO7KfajyFzAG9BTsEPfEWQb3A+is9uSj3vC5tOLwQC4a7lbBlPT57az2FSVo8lKUAPbkjQrxTbGC955kNvEXlGT3F1rc8rhiGvMPdsD03c2680wfkuw/pirxW+Sq9HVAnO9CYRzzNwsi9BJx6vfG4Er0p2Ty8+zc0vTDnN7yqIle8JruFvF8+rjvbTZo8H1XdPIZGnbx/NGu98XxrPG6aUDykceO8fXQMPB3LDz3/Ono9R+HzO0P+p71R6l29GdouPF23lryoO787YHoJPEbcj7yzopC9uXQ4PRY7JD2MbTU9wq1lPU3SKr25bjk99ycAvBtCLD12Tcu8YgAGPYqPDr3rVZm5v2LwvL+Adj2Wsd28VfQovf2VyrvZ24m7T+PYPFtORb2KlaW8cDBMOjSRjj219dy80lnyvKBGwL2z+408gXRiPPUeHD1t/KQ8R8GUPAY7hjx5os67qIIlOwC7Sr0wH+E8iWCoPCrcAT3G6HE8q6dpvPS/iLzQb7a70g2gPVC0tbz2rX49mZfOu7ybCbuxjjU9m/A5Pc+lBbxoP4u8ZCWju2DhUL3OZLY8UbLouzsMiDygqR06QMmMPXbeAL3ueAM93siMveT9G72nCmo8gLFFuW2f2Tyq1B49h40rPTNXVLzS26Q805oFPF1FYbycs6k7EEokPMnDCzzvIJC7pmFoPdaFsTxDUzI9a7QqvUJ7jLzhVcY8EymLPBso5rsHF4o7HiwLvdScG4nUMY2938wuPO3ZhTwPFty8entBvXiNJ70CFI+9Ki+XvKTBejznMgs9g861u4PgTD1r7OY8L0lQu2SdcD0+mYs8TJusPCeg+zvRe3a9MxEiO+iIqj1F8ei8+gpKPbzmtLxoolc9e02ePfS/Br25SVo9cNFSvZSMtLo9BVW8LNHsvMWFODw6+06996RhPVAr97xMU4I9FS+EvN1D0zxuNNA8O+fWvJrugDsY9pI8slQeva+1Er2hjqk7/UwqO+bjzTyPlH88g2CAPf1uMr34JCq9H9tAvN350zyTWFI8IyH6PBKBnry31Za8Agr2vD0gKDxa1tk8z76ButaCNb31HZW873N0vbP6qzwM4Ac7rSdRPKMlED3cIi09MN7FvE1kUbv5/sg6uUS+uzruwLvpAJg8tJgvPdRmxbyjDvw8AAHauytfX71tEy89RtgivSkWdL0hUa28zhS1O3eGEz2RuD49xNs0vaoZlLyUij28kXmNu6HdszyDIEM8RSyDvUeFMAgubrq9/xy+PPn/Pzy9kCQ98pcpPKf5JD2jUJO6j5syvYvotDtA47k8wJOMPEa7/zwUFA29JGkYPIiXgTw0iau8MMo9vcxmd7y5ZHC9HcMivBR9Uj3e4/s8xIOHvHSAU7yBwuC8pkBDPZPYc7zHeQa90uYDvadoRL0gZs+7qmw8vWbVjzvhUaM8PqOlPFWSQ7uzMFc8zbZovA1nwDyjmoc9ArRyPIRvjj1YQ469GDKpvGs2n7v8SL08YX1CPQSpMD33SYE9YNRlun5rQj3ThMU8fL7dvD/IgT2tvxC9xbbdO37/Hb1q+xW8jedovbbXfj1Lf/o6F0rFPPJtDLze8WY9QdoAu1trzzsLRu27q8k0u032bjutFPY82MhSvfX8tzsF0CM98K3juk8Lr7xoccC8Asysu/RA6jx/IDo8I2f/OyGCHLu2CyM8RI8cPIJfZT3lYq+8nP7CO5zFVz3MWAC9zuf8O6I9BLsKyZg8dYe6PZbTwrxHCVG8JImCvQgzR7LCOyW8NdWBvA3Ae7zaAM88Gz/zvCaQIz0x+pa9h1H2vFwCjL03qKS7WaqUPbr8L7wUMne9YVb/vPTxJzza6Ju8BpH2PFkrzD2iK5G8+02hPLrBoTwVvhc80Ne6OnTMQbxInoG86+2cuSjKcLz5M/09PxbSvMRqET1MRL08oc8evIhEvTxJdBQ95UTFOmm3hjzIAjS7gUoMPUB0w7z0Cz89CWpPvDvxJzxUZy29Q4lHO5f2VrsmNFG8pfBVvN1YLTpO+Ei9zysuu2TNdTv+fNc86KmGvSc0ijwTzQ28biXTu3WcaL2eAyG905rBvRKrYTzhDww8aG2KvLPOebuhB6S8n7rjvEqdNDxzKqY7E5FHvY4NfT3gcO28vMaBPdbPg7zIUG+85XqFvcWDLjphXlq9gI5wu2NUSz1eAIO7cyJbvemJtzwa4pM978RavTy41ztYraO8QRUCvagkKjz9ATu9YudZPB26Cj31qhU9cRQSPCANnzx/Cby97FRsPNSPi7vo/7o9c201PQMX1LykqcS8oXMNPLz5vTznJom9G6eFvHatt70wFkk87BrBPKE/MrymJ649+R5yPVRTvTylitS8ca2NPb67Wb2S2/+8OR5RvYeimr0/aU49KcQQvYuRKz3BvwA8w3uGvbNA3Tyd+xw9gDLGPODDBLr2gwU7xFQtPbtyAT1rFO68K6/7PAleOr3ELXU8KfBcvaGfkLzFLE49avUuPYdlwjxXvCm9REZuvO4A8Dw0h8U7pcGKPcYekL14WMA8UwYkvWKpizyN5Z46S/lfPXsz7jxSwIy9xezFOvxXCb2za1s8J0mtvPBVWDwj0Li8m8TsvHPTl7xITom9ZMRkPX3lNL1l/ug8YsD/PZb6Lr3/33e9taJXPVPTIT3l8jw9Fn/OOyJE8TwQvi46yoZrPT0NuLya8s88wQgVvZo7zbySlnW85EuMPHBYDr1B6fk74ZzAPJ5cgbvqSFy9am5+u8kZJb0EiZq8gBcnPH4gkDume0u9TbE/vODrwIdodGK8hvE7vQLp+Ls90ho8QY6LupaGjTwJHJE8I4zIvGNcvLz1kLQ6dVJZvYSLeLtmNHC89N5QPcXUtT2XFKa8PfKBPEaFLD293Q29amnFvHlIeryrGWC9PDgGPeCx3TwbBgO9jnEfvEzhhjxLZIS9etSDPcTtNTxFpSk9Mr1zPTiZAzoRRvs8lv8TPY33rrvP2Iu8+pQkPcsJ5DxM3pC9LFhnPGPSAz3OH808sMmAvdUvtrwmm4c9oI3DPDUvtT0XvaC9scNMPULm4Dz6tUW8eomKvS5RU7wpZQi8t7X7PF13dTyXbpk9Rzk/O2TV6ryRdLs8UnIbPJS3QbsAGUI8EXJrvXY1gb27KB+7T5gXvYw4GL0KoZg9/4f8vBWzDD30kis7Q4mEvfOXnjyU7UY9YJLpOg3aDz0xWnG96g7Xu6SOhr0RbGs94yKrPJ3tNb2pHJG7C6tYPQKVQT1MiDW9h41EvJr9Bz3NCWW9XHy/PC+AOzxFPKs8U+5ovc0F2whh348845BuPaCkxLt4aSM82JJFvNLJCL3IqhI9BxfuPNtUvLqEZCu8K4z3PPqGKzyX2748Jl7eu5B2e7uqHVa9yRyRPPDV4bvls4e9UwvwPEh8k708b349TGyQvGwnYb0c8CS9hKwfPVH4JzxxV+Y8japDvTRSR7wGHwI8pH04vPLCfrzHROs8NsEAvFXPybo/QRY8SW3Fuxh5cTvMubk8GskQPZEWpzxQZKy935DBO4t86ryHSXS9/RICPRdvlj1SZg290G9CPSbVmr1HMcU7+V1SvS2P+zvit4K8LVSrPQV1zrxdeKu6DqMyPSPeeztZsvK71bCYvPlGHr1WNyQ9/W4tPWuenzxpiZ28Zh1jPPa0DrxwXYU8lAR0Pd/s4zyTLCU8isRGvOfksLzraEW9KS8Eva1IZTxCc/c8+wXMu68kubxSjoS9MFjgPBlNtT0Eq1o9QDiCPRePBj1iHoq9l4h5PfcALrzExhe9y8lVPIgYdT0BKQI9i/oOuzk1UrKsff+8kcNevZMTO7wF8l+9wZmHPLuGxTyMHIe8V4qDPSdMkjoA8da4yTFOPdH0FryH6JO9+E2APGH41bx/cN88vOSOvBfEXj17K3K8evqnPGebtzz7Z7W8y5/tPLY4Xz04Teu6SHYPvdRNPL2/Fqw9lIUHPTkKWL1LKIW8oTycPVDhWT1bixe8sHYAPnuRSD1jSCG9NpkEPUJUiLxe4Dg8FgOBPeRQBL3nf9Q7JKQOveqK8TtW4Ok8swasPRtHc708ngc8X0WFPBml3Dss4oY8XBkgvItCgD2LKq+8mP0yvZi1Kj3i8EO9CW3jOhvsnj2JpDm9trHdPMHtBLwFwJq9HpegveFStTxdv267G+gOOzknBDxSBv48nlFlvEvPyDz61gc8tILePK7j7jwjOQ28EG4MPb0CDj1Yfwm96Oz/PDpp8z0zTL6936oFvRlVir1oSv68AA+fOBcuQT1Jlg28yoazPduRorxqNYS8JViBO40fmr23Vxy9UxfTuuz1HD3Lq9q7tYUaPAFrnL0gUHa922joOzFtKr1t4Zs8B3JIPIrqYb04/IY8OL3hPCETnrvJhms9f3cgvdXEwLhcK9e86/HFPFO9IzwN2DO7N4UwPEpXFz29hty8woxEvaHq37zcfhS9NoqHvDOAdD1NzRO9yWPHPRuDOb19xQ+95YMHPdReuDynnwO9PMMHvSBheb1aGOa87PlRPbm1P71iS7s8aCF7PX2NSjzmlKQ8QakaPatKzTz7gVe9X+qfvMHK6jqgldW7inVPvfAt9Lx1EwM8sSaCPQOmiL0DkIE97wECPXwTb71bYl47bSIqPZovcD2KDFW8qBrePGpHbr3luLs8JHIevXfwxr2H1h+92lmjPWmugzwpvkI8nxf6PC3UML3i1dU7GwpJverOLT2gXrM8hTMKPHeCEj0HADy8xI9IPapxMr3QwLm5TQiwPBaPRDz2xbo8sZmiPC5kgz10AkI9VbKWPPXUIrwL1Xi8HUmRvUvt1LwO95o7sV/yu8+0pojZNWk7bh27PD5APr3pSI68VZzKtyiImjyMuQo8G6Ewu5CSmbzWXwe93+IlvaughLkOz7q83U2fu6pnTj2MoF68GAXTvBiUVrz9kn+9YNikPDVpfDzBh407qgWLvH7MJL1EweA8WYO5vKq65Dwr7my4s7P7Ot0YyTxQvw69r09vvON/JLzEvJO9YC24ulInQzxykcm8/dfMO4gqlT2UA129W1/iu0wo9Tx2iqO9dnWBPZZAhT1V4Lg9m0egvLHUgTzC2Y69ZOfgPJ5DWL0AgyK87gS6vOenGT0gXmW9mLMpPa+bCj1c4qe8d+XyPKC0wjygWp86/iKpPVDnK71zSmG9BaFVvZxNGD1tjIs9kYoFPOh0IL3rbhm68NygvKQvJj1vsas8VuYovfmNgryIm6u8fiSPvJ7TorxUNrO8ZnEpvTSHhbqR2Yu8YY9cPCvsP737fy68gMkNvNB1Cr2o+4S9S2koPMUsFj0SvSO9yMQNO/wYnz2nSb06JkxNPD+9mAccZLS8tabTu5IATTy5qyY9R16XvRU4XL3o+U+94eBTPcMpKTv5L6s824fjO1lwnjv3YKW724KMO1JuPT0Rfw28AwvMun21jL0CkCo9Qm0WvV4JZT1erS09HyNOvLBE4zpjtWG6F9cePLJBF73M/NS7jGjFvA0oxbz0MTo9LG8UvbSeBT3zZUw9KSE8PZ+5F7zkHvg8BLquvHbAmDwOivc8gzKEPankcT3JuFI8pRrwvO+riDvISlo86RSKPCghh7yxHiK9x0HtO5CbEr3oEMY8PV0MvHYWtjz5h7W8EXzbvJpNfrw2rYQ8R+2DPZyo+jtwBvg83C5RPR+i9LzOpSC946y/OgByhjgEw6w9nA3OvFeCYT1b99Q8X0ePvdtTeL0hxNW8GXOGuy8HZLuqWHI9NzboPBhugruNiuC81VOPPFOmgj0s8g09lewju8Ezkb0TqkI9k9javI0OXz1uoGq92iPWvDyxcz2jjoM7PocuvEn90Lx5nP680K1GPGvrU7I3euG7cS4wvLKdFD2yxWs9OsMXvB6EUL3o/ra8UFJhPPqdmT2r3om3PGacPZalQL3k0bO9CrtkPK+1OjxmRom9gs6aPd8Goj1ErZY8hvjDPO1qNj0NfHc99R9wPZWObb36eCY9qX5CPazQSrv1Nsy8KwxkOiGmIrwAnku6AiHwPLpTr7sbAua8nWdhvYX937qTNdY8cQsavcE/uD1s7588GUANPRE6Hr1PV/C8wWIYvSlKlbz3orK8xjpAPa7Pgr04t6+6BUXUPAwLtby5dUG9y1QIPG/VTjtCSic9zTZtvDN+0ryHrIc7Pe6JvGA2GT0sS5Q9znBjvY4oubx9ypw97QImvGu+EryN7B08keUDPAk/Gj3w8WC7zboNu4n5iz0k9Yo9A4TJPVgq1brq+yg9+NrVvO3UK7wF5hQ8dm/aPKN7Ij1wzT06kNwnu78JS71Xkm697LGDvWqk9ryudpM8g9HdO7ERuDwWHVY9tlKXvFptAL31z5a5TIiVvRlyJr1u6du7iZQVPfSbNj1RQn+9wcrKPRwdybyFuVq9VffDvA8zab3WDwa9c4+DvXhBBz3lswe8YxqBPBLhr7vGUQw97sxUPf/eMD0jhGY8k85uu1zkobzPaSW9jq0TvCTD3DzoDB29ElfyvDtQsT0a0xG9+gRtPDujur0k5Iu9hMihu8ijBz3ymMO8pJggPfOjVr1Piiw8GSVgPTDT1Ltn9gU92g5XPX50lTub70m9Nr6gO+D2lz3C5J29hWkvvblPmT0Qx+K8oBaHvflfB71FySC9/kMRPc7nZb1Jhwc9+w/+OxNanTxF65O84IbjuhK+6Dwmmx28Aus5PHy+lb3/hPo7xor2PEnRt7zPgf28bLKkPfbuwjtROqA8qGd5PcbkKL0OBsM8CVzsvBeco7xXvCM8vzgmusy8Mz1eXJu94MMqvbAAu71GBKY7bqx9PPo4oryzGe08cRmePFA1GT0yyMk8asqNPDajYbyE+4U8u9eZPIHXo71pbW29RQYavaXY74i2d7M8VrkpPYGjb73D6OK9q38dvfFB/zwviAo9U43OPOhw37wJSaI9DfA9var5oLxztR29HiOyvDp5wT3KmQ69yemzvGShqTu5Pyi7efa5PPfPWr0C4yE9/KlOPFJyz7zCTPG7VY8BuEUoqjwQuka9E4qwPdE7YTxtpYa9JGptvSXLMT1fyzC9anIwPAkujrtrxjG88sPruzuWKTyVYte7c2q3u7v/Rj1vOHa8zt4fvTJoqD3T/Lg7BnxSvL1+yzt9TeK8Kj4evTpekL1yk3w8ugL8vPyVBT2wLzK9BylvvUs/UD3PdEO8LIrvPKV3Xz1YnwA9tgI9PYCvCTyzxjE8RyxKvfkNsjuItCo9jbxXO7sES71w/6Q8Sd/BvMZUsDwE1bQ9LERuvYCoIbopej88IR08PCmTIj0ShKy8uG6vO0PQA70VF7m76fwQPLrCrz0uR6G8We2cPSLqe7z3AB09Ha1fveP+Fbym/VC9e6NjPB0M3rxuIfS704GbPG/fpgc4Rbo8S8vPvHdGlD1cb+U9aoaVvEg1Lj1iCr68fVuuPGWtWb2C5Co9mzvMvHu4RT1/WYI9zh2EPYVcRT3vThk83bcBvDsNfrw5JMU9e32YvWZXmrsX3ME9DXmqPFWTKTwuvya8FZ72vPFJEzxEeFc8Ip60vUVXAjswWpI6DP2uPMgCcD1ghUw7iEOOvOlgizy/5SO9HoUiPVOMMzxQ0YU9XerEPLAJkz0kiFg9jxqovC1usjtft0m9jbTxu3StAb0UY6E9kzRxOn9xDby+bWI71eKKu7cVWzyWlGa9P5FdvS1uwb0DUrY9a0IpPQjIv7xvf1U8EIV2Pb64Fb2k6Q89QKcmPWQzFT329Ks9qJ6RPIUCqbzv78S8VtwgvTO1yLumAr49OZocPVHqVrxjnlY7FG7dPGiLZT2nX5U9XxP4PLC/K7zjKog8OCECvfBH3ztrKPi8s2QjvXoFAj3zA6Y82yl2u1U/FD17opS8CEJcPM7kIT2ahyy94l6ivZ8RWrJxIvU87K2nOtheAD3yPj09hQGCPIIR17yrdY48HrufPOL6Kz0S4Iw9dfcwPQyqiL3j25e8boLQPMh7dr0eXi88LsgNvZ0mdD3SLrY8KMVFvd2xyLsYBS09OzdyPR3b47zhava7Td4cO8wjQLx05BI8/6C/uzJD+TsY5Ii9KCdzO9QndjzgiWe99imGvNochry475y9tM10PC3CC732N6i8HuiIvL+Lg72baMC95dBuve/qGrwNghC9TzYCvV9nFL2Iuaa8mBcvPcgKPbyiVIo9N6CZvFYkBbxA1ba8tQKGvNjtsjvsqig8GTa2vUBI+bruMGc9dCbbvUgFaL3K2xE9jLK6vU+s3zxOMD2926wevZHU/btRPEg9esLCPDkDEbwDyY88DFp+PGvFZj3ESoM9VN9nPJD75rw3+H09il9Au7x3ELzg0em8OyuPvZZcvbzceJu9OgLEvFwsSr262YE82JauvNACBT1Pygi7u+o7vWoTIryICmS9yNtFvOzXAr0klcQ8+LRHPaHpaD3IkIW9EItFvQLePr3I2Y+8CnoVPYRvAzwPihS943tWvXvhpjwkQug8Ur8hvA4Q4TwEyss9G2MAPTed/zxKrWE9Yx9Gu8cjzrysCDa8Je0EPLVk8TxmnkO992KlvKwhgT0x43O9/toXPSQ3i70YkwU8AHUEPRTxHLzqwsM8/0BwvQtP0bklLUq9pySFvEgrZbzOIka8bClJPTMBfzx6Ahk9bvjmPNpbfD3Q1rq9NRSYvCu42Dg0EA69kQygvbm6O70jZdy63cpzPBQ0eDxER109hM+UPUmDFD1Xgc28U4+BPBspj7wVuxs8Xlw/O4vPEb4Mi129gHzzu/3eH7uPMIs7rGOlPZEPJD0q8jc99Y6MPNzxPr0B0n27lLGAvYRNGb1c2qA9tPEBPU2GNb1Id5u9Yl9wPEC+SryWBH68obmAvJ5oBbzVIgO5eR0APWabcz3GJkK9EcaQPQbKtDz3cc08m0BmvZQRkL2ThbE67RPVvHA/r4h4SOu8mkuGvD4xT73DZv+9RtIDPNukBDyqYoA8Y3UKPNTszTv+mRs9agNpvTTT2Lz6Ozy9SGcqPcBWqbprITY8z0RkvOsrnTyuJ4c8eCt1PFuvM73e4R488KqPvC3xdjwgwB69fzLQPKjyiLwKgj480eehPbENiTzf0OO7ymslvDE6bT3/0hy8QbepvAoRBT0wYo68R9dXvQei7jzdrDa9S78UO1BB3jz7I0O9pJCHvEajKz2mRfs8GjcHO1YFhruJLBU9lEr3PGRMgb3AtEa593ebPJMx5rv4yBa94almvQ+97LyHyEe9ufOJPYLeAz2qD/s8YisqvQuYd7rOvV69rFawveiWIDt52yE9kIhavKuJUr3NL0w9hBy+PACJHT3q42s97DPkvGZR+TzpEZo88/mDPa3Ihj3sdIs9ljI8vfsG/Dpd1py77sumPRivQj06fKC8Cpl4PYV4Xbz9aJC8OiqAPMpylTtwZZO9QxEGPObvSr1xUAs6W2C0PY850IZ2+F48cA+RO8KpQr2pQhY9NoauvBLDOT2a6jK9vv5nPBJL8Ds4atk6/kKDvF7CTz1FsOQ7O211vMOzjj2+DbS8jaFSPSVwmDxE5pA9Hg9BvGPBt7zCdP48/mhLve4i9Lz++BY8s88IPNvjjDurCxU9oZcmvdWV9LxLcsO8cJsXvXlnjrxpvlw9pziVvOXCczoG9Jk86hIOPRXjST3t4Zk7kVnYPFbXqbvO7Vc9uNNdPb1J17zXZIA8uQebPGthLrrG6HQ99FZJPWZ5Vr0QIDk969csPWvlyTx4hz+99yNLPNkvmLzYqci6rWYIPfHGwDyDtiy9H85YPGVpCjxvpDu9Lh+aPPBJ67yEUcU8l8ShPLnNRD3Yby88zZYLPNyctrw43fK7jxgOvXoJub35rBS9AbL5vMddpbsYk3w8EeapvAa197yG4JU8klm6PEyChjw8qY67TZQgPF5F/TyYT4Q7sNDLvO02kztynCK9LDA4PdCGFD29YvI8NJvgvOSMYrKKND493EvAPLqzKD3FxkU9xl6GPVboqjywhbS7YbowPVVnEznz2Ac9qTqAPSYiNL2OByC9Y+XyvA45Nb1S2E+8YzDzu8VXSTvGSKo8RMIlvOcU47tUGGo9w4FmPRF6Nr2yl2Y7Uf4HPaxPBD2LSrQ9CXxOPBVpCT131Fk79OrsPO9xvjv6L6O9Q94YPc+ckL2iije9alf2vJBNgDtGqQa9Gwn1PG6EiL3GUlu95bubvKtrabnUVKm7FYQDvclvj726+7C7e0lzPC4hiTwSfsy8mwLGvP/8FDypVlo8Pie9vAY3mDyEbi69oKn+PNSCGj3K0iI9K2edvYSGSb2ZdPw8UOvzvNCe8rwAMWk9WGDzui3feTzPauo8U7Pdu5DO5zw1frm7FQlQPYdjVz387mc9b1UGvRTMJz2uqE89LtLuuzVByTx+xV29+nmRvJKigL1Twji98ollvRSnxry0kzw8S+5euQWoZj2Q+tK8TzT9u0CRhLzEDBm91vsBvR+SKLvlTlC8VNEjPPF9Nzyx+4W9lYVMvLfIxbvwNfg8UZSnvO2UKL0iARm9mBHCvfrpDD2dyI08oaPQvDvJyzqRVAo9ofdhPULUnDxLcMI5MYw+PPT+N7p3S6E8tBqFvcdLQ7x7BZM7HFrsOzQZqD1RdN68YffZPM4HsL1QUGm9wW7DOvP/ILy1Wqo8eD55u8vh9Tz/9BQ7h0iXPG1/Tzzg+GA8mMyzPBO4ET2p3YG8DYIRPSxVtD0yq1+9EUTfuxcrZD1DkJe80xjWO3NkPTxZOxq9/XU7PaY8TzxHESQ9sMORPRXOZbsck7G9ntRJvbhkrT16YLC8I81rO5KxQL3Umyq8ZdTUvK+ocL3UVW294u8VPWvSaD1jFmm8ruOYPOk0Ezy1iVi9AAlEvS2vYb0y+I88NlYBO7KxWLw+bXe967SGPIQzC71WchS9IpIjPcQBDz2DtCi95zC4PJmniT1eJkO9qHuvvEaEBr3rJLo50wO2vEvmM7yiMDG9VnOLvOMK8YifGT28UD4cPb4qb70mPIm7EeX/u9EoOrxIqpc9ZnmKO0+WyLwjumu7oHpavZ/4Pr3vzSW91+zLvGxf2jx8Rfm8sreAPAtzDT1NSOc8rXyKPC7+7bwVyp68QF0WvbvrxDzLNQI84KcbPSvINbp/dR28UUHIPRFIlTw7ydG88VI8PFq347wkGyW9bO9DPHHOJTxNqeo5gBfhu8V9TT116AG9NyJkPRBM/zw5zG699UNUOiGCdj1vgsY8G+J7vDenlrwG+Co8ReCcvNSLS70geD89cHspvRxxIr1yV5u81RsVu3WF/7nptHK82XvkPKcAzjws+FU9JEPcO+DpmLvdlpK8zuwVvc3FtTwVKcw8Qig0vfNwHL2qwJ09Bo3DvLxmwjz+hNA9NOqku9faGT2f05Y8EHgGvdK3qzz5cHS8nUXSPMYxQr09Mdm8iElqvBI91T1tO1A9n2RdvCK2FTzJwR29BHxjPBPfwTyGYT69WJtdvUjNXLslY9w854XPvAUxIQfq8bM7/rl8vQOYS7xkFIM8xPccvQJe+DvbXaW8l2uuPKLYf7yfvTk9yKQPPdt8FT0l1zA9oMBTPYgLsLuGZ1i8zU/NO5MJPbwC0j49wYHTvMDEQT3Qf1E8eDgePT0Rgj0i8JE8MGfeOnsSXD2jeBo9+18culhR9bztMKe8T05fvT32WzwWzqw90JVWPNPffzyhagU8UrblOvMkiDyj33I77WkpPWkPljw6hBM93j9gPLciJ70s9oO8Vy+GPU3OhryyXEc9rcR3u3+KaTwLok08w9p1PCi0ODtRv5m9xe1fOqdvzbyAoPE8TB2/vMsSCLy+EIA8hLNXPcpwRDyq31O88XTTuwFfpbtXPkg9jDSovESZKbzLQ748QBlbvQ6GobwC7xc9T2yXPMx0ODxWxsg8qeYevCFERT2GUa8826oWvStKQbpmpck8nl22vP8TPDuHmpA854IdvFEcjjsAM4G77CVnPYCcJbtoChi9bj/FPAp3Bb2CQQA9T4LovAKYYbKbtSk92UMuPHhLhT3V90C4ZSY8OqaIh7yiJfY8WD+CvT7lgz1qBKY9VQQfvFGScb2elgy9GO6zPGA11bwUkKm8lcYfum70arsIX3k8G04yvZdgvLwKkwM9hh7LPdQ9Q7tOlks9+QTnPK9TjDwpjFm8BJEdPQcMLbuCsMs7wjUiPT2T1jw3zS+956uVO+6UZL0mEiu9LPcTPQsJhruhQeK8AEAiNqCdmb3qCyK964OevPVPvDzVYOW6eU/7vCn9z72wToA7PQGZvKG1ar1Ffi87PSzUvGXa37sG8du8NiaEO5C0ersXfhS9TJocvfwoOrxBcRe8P19PvUjraryUkqg8oswXPfxEkD0JKc+83O4jvEBpDzxo6s+89atjPEoUPj2zx1292u5RvPjl77pBRMo7KqqrvJ+PQr2m6Da9/5SDPIYIJb2VrsA9qqRfvVl2bb1dTEc85gkSvKtUAzoaLVk84jsavdDdIbxznqC7nwjSO1vsvrwb8Dq92y1EvQCUezxQJIg9+cz5PCANbrtoYcO92HYkPXFWDD3Vabi873yMPQ5SkjyG2CG9ysGHvI9LXrzcFJy8fBJJPXzjL73dgKY9MvUfvYkdjj18MUA8vNiWPSQvwL1B80094oBfPQ7JGj3OqlC917eOPB7xGb3+LCu9dM5PvGGZAT2gfTe9cWNNPHl4qryJ5Cc8uhENPaOWErxciOu8QK1rvGhRSDyb+Ai89DDlvAliaT2StYs8d7adPIbvrLttlzU87To5veQQ0TwQiLu9XJK2PCDpJT0Dy5w87YoCPX7SET30ajg8IFMsPLc1DT05AJE8kyHZvCYJ7bufUXW98wjYu0n+hrwwcVk7mlOWO2gudL3PX+28tcl6PVvggj2YjwM8kIXuPIroyLtQocw71XknvCg7gjxeOsk9h/iTPYwsZjxGV9m8iIV4PEbnobxvnQA7VYZUPe6p9bwx7kA8APRwPbXxcz3FD+884Sz9Oi6NEj1oFse8dtQuvV0xzr225wU92DdvulA4mYj3NhS9rhogPVXNqzehHxI9Ytn8vAf34LrOlNY8TkwgvZ/QFj22BEE94TI/u2z2Ej2H62q8uyFJPEPG0j1OeZE87WGGPYQ14zy+56S9gNwxvS0xM7wNU7U8KqWgPMUXVj0ad4Y9Qcw6vM8xJbtlr/S65RYYvMmvmrykBMs7dYMovRRlVzxgZQW9+Sv5vEchm7yOVTG8K3Tqux7nlz31pha9isqHPcG8pTwQmRI9RYaPvM++6rzme0k9E2lKPRVtaLunKok6NuelvBvNNTv6Qse73wCGPaFWNL0caSw9Rbk5vZTwTDw1XW28dXLHu+UkVzr6hS48eFr2PDlazjzkMAQ9UhjHvNOKLr0s/eW8nUS+vamFOr0MDQa8G1GwvFZD8DzY4XI94x6vPSiYWL2ybZC8aBaIvPArGj3W7M68eSo6vMrr6bzqU8U8umNZPLClmTpAkNy8gO7NvV7o2DxFtWk96LNXPDUxKL0UmIs8nIV5PCeigzv3n3+8hv7dvP9cpAiPqYe8v4muPLMfmj3kFDk9w3h9PPaxCT2vbrY8qM+iPcDRCDzD8ge8q6WfPP9XfrzHii674XIkvbtcnDx07vk7MANlu3Yoqzwr5rY7ej7PvJd3+jyfyoI8+17LPMDUV7zviyy9Nw44vVaxdz1j05y8MqOuvdM7n7xYTqE7mx2Lvb4IRTwCAgA+H9zuO9x7f724Dpy7mIdSPUc2iDztv9A8FiiNvGYIEb2cYhA7WwTou+oc7LyZpUm9PZ+uPfpBF70bhtg8/vvXvOPoHbo0aj49GoVlPHRZN72zPfe88zHbO77G17yRyO08MDXiOsbxSDyjMgq84o5avCl/VLusf9O8Pl+pvJJCzzxOyII7MN2JvOmkjr1maR89awshvf9VkLx4WZY9SpxIPZuNzL13Mte9q2pbu662oD0eHBc9tLP2PBSU67zzSaG8BnLou/1Pnj0cakg92RIjPbsmfD2MY1A9oxB3vH88Nz09nye9kcG+PJFJODuvufc86iZUurBWSLLiJTc90AIQPawgHzvOf1w9UqQKPHrTgD3J2lM7XOXrvA/1/LvkFCk9tUtVPGQH6DuXWjK8AumFPGHw+ryePrS9t6XWO9OX/rs1XhG8x8VCvVOrgDxGkMM8HgH3O6+eRT2SpRY9iz4Vvd02z7wDSWs97WoOvfO8dLsjCT49cHwtuoRRXTxoboC8iIlMvX7wKL11xKO87tOQPPF/3zz3dDi9VdNLvC4PW71LYwg87CvhvBUPsDzAyva8g0cKPWr0yrziUKy9ExtSOxSonj3Bx8W87GW6PLcndLxfbRg8UeEgvPPUSDt/cYU88W4Vvfi5l7nL/lS9+kBNvR+Qcb07w/O8/JASvXBa9TxG5Gk9neggu5IKCT1njDs9jCsuPVEEe7zodeS8NNeDPfMR1jxpbU09+k11u6FqlL17fX+6P8/fvP+tubwcBqq7FLu5veTip7xTVgW9kDwgvS8DRb1TSwk93IvJOxh2KT2ctCW9uCrcPOvPob2JVPe8naTaPOLlKb3jw6q8vjqvvA0hEb1PMi88B40ZvXKzzb3Kfgy9NjUTvGSfFL1Y5aI8DoPLvFtyizsz9kM91HLou2Bp9zwSBVw9FUSGPYAnQD3jzWI9xxrmOyFPfbxIr268OcwGPWdRrD1R25Y8W2/AvMAK6jyELi69qwspPbRR+L13mNm71AExPBQ+QLsfqHK7fYaQvD0ITLtteBG9oI81vBxCfLwEttK8Z5R7u/Q7Ij2Cjkg8uKjGPBk3zjzFVH670LONvNhwcT0JGBe96glTvWvqxbtIK1C9nZbBPOauUr0q4vY8fICzPEpb5zxUvJ683b1EPaj1rLw6QkM9DQgvPNdMa72A0MS8ULGTuoWTGb3JkBe9+40sPVnwcj1LID08kkWNvI/wdL2fNVy8roOwvcVFA7seho09SwrtvEwChDt/amC9qnonvMRfbD12TuM8zhwlvGrZljydkJu9LIXVvOp97jxeh4+9VQBXPJFvpT09Z7A9ACmZvDKEKb3fj3q9/UioPOAQtogRfl695tPUPGjht7zKYwG+2935PKOVATz3kkk9dIdZPEPrxDvbutS8jW4kvbvDmT04PVC86bBEO3TEFb1MWHA9PiyVvGHzoz1wIqs8G+YNPBuJLLxWraw8JBTAPHHs3LtEqzM8u2covNPdX7yuI6i8SF2bPZa/HjzekI481/uFuy/YBT0OV7y8lgT/vJRBzrr0FCq8pHkJPb778ry21ly9BNHIPDyMdTzcL8C8ifwTPUS+GLyotIe8LfcpPRXnRTrpruk8dy7eO/6rDr3YDZU8ze4cOoN/ejs3EDa976XtvOGbH7yIkSQ9Ij3vu0M9kLwCTqQ9LGBJPGMlGTzPpYE8hXrWvVWBgLyeEyY8tvcgvMPdY70Y1qE8b7isPOcxLD29J5U9ogpBvD9oGjzyTAu8n2UxvXetcT2DY1k8RdXUveCIEL1227m84V2EPCYyjz3epji8hu7EPGdPyjxsqM48JcgEPYlCDDzEKIS9EwUuvTTR3jxMR9889DDhPSiVO4jOwjW704wdvZnD4Ds2GsM8hryDvTEsYDxtJ7w8KzdsPbRtSj1RmKQ8gNeHuT3EubxHPqM92sCEvK6kcT0+7UK9W6dNPfPvjr0YhlQ9Ifc4vcznCT3uFRi9QNtIuv1nED3HgCm9gyxOPN/H2TusLAW9k5qXvGbXtryWBQQ9q2f7u6fbHb3CDPE9fLbvOTpFUb2MEhO9JbFeO/Fdo7tb9h49d1TJPfhF9TtONBI9Fk/cPLCMrzwmSNq8TST0PFkFB72wdJQ99iwcvOILo73EjRK9Zsk2Pee/Gr0X1j29c2YePSEIHj3Y0lq7xdaxPN8EH7z7ocu8ex2JvDiBwztg/go8nQ+Uu4OxhDx3cS090v6Kvfc78j3tlq+7dtE/POV7QTz9OFG7ZlQ8vUIqTj3zC4A9W1YAveD0n7z9Gje9Vf/zPOWFJz1jUxc8uXPZPPqZPz1wWQI9uxgivVcuxrxMmA29L3y+vGsmCTw+nnO9wkA7vdOGrbzpG5e8LmzjvOFFabJ6RAW8RcKHvN8RDz678Y09lllYPVd/mbxXL7w8rwUwPVYVW7zB+MW8u1zcOy2dBryK90C9XtuCPMtBFL1nLUS9Id9MPb1LSzyp2WU8h9W0O7lCVL3yGSS7iCqjPbtCDL1G2+M7X9RaPSRgFT1J4R89S/nuPCcLvDsgJwa8POy7vJQndbvUDyO8P1FbvQ1t272K6R89blJjPIvbJTz1+Aa9+9UtPYbvyDsmrpM8ARyWvCNZsDyDzsO7Tae6vHiTmL1SbV49rVmlvDaHkbywIFu9sTG5PBmNdzxA5628PYNLvSHtBr2uIJe7f1ADveGM8DxQV8U8OKKDvZMXMbxYlOY7tLP6vcYWFT3Z/r09SKMLvUZtgTy+6268nCuZPLutqDxx6xo84KnLPIi7Zj0rCjE9+9r0PC+LN72DO9Q6FVVavbdOCTwSyVm9Sj+hvarSsLySGLG8q3HDvPd5+ryP8AQ9KmqhPGZNyzzrSoq8YE8qu3ZwLr1e+Cm88emiPE2gvD0cThe8T3vlPM02rTx2PRq9pfIBvI0MA70bvga9fGAjvSAxgb1lcP+7d92au3pEQz2+4iU9Np8rPCTKfT0oYyG8Edp0Pcnwfz07PGM8reX5u3HmwrtrHOq6FTGHvCpciTxaCtm8YLmovJdz4jxujlU8ray2PRwctb3115m7WosUPUz0TTwJi5i8N3rbPB8JSL0eYxs8hDEkPbqPqzyQD/u8VIQSvXKVij2VbWS6b6cmPQODVbyPspy95tU/PHABgb1z00S948syvWHCHb0CsA894WmiPWBXJL1G0Q89cxgZPR/uZbzjn5i8spmNPRYoG709zHc8MWspO8dcbL3OC968lrMIvfrqebz0O8W8+GuHPSxYDbyhUEe8ZqWOPCLyDL0MehM9lRItva+XzjyVLFU9EO95ucswG7rNFdc8MA0aPKfU1zy7Sx893wNjPRhdRjwfbYe9y2e7PAv6Vj2IuJ+9s8cpPSt2VD2Fo8m76Y47vWy+p73YFrK9OPoHPRX5G4mY2Zk8oM3hPDhsAryu2cO9jKwVvPuqdDz3rbk8A8q5PEUXsLt6AB08pzbMu4wrEj3baK+8Tl68vX6DYDxpq888kVPEvEKNDT2cS/e8QfBIPftiXj1BNfm9tqwhPVvPPj0jvBq7fBGCvJIipzue8mC8PsgJPfB75Dv0h9s8hZw0PcVWdrz5Ehy9z/8yPHBdmbyNMYE9hq9LvEh+pTxEWLm7Wz57vV2hI7oRp1+8hlYdPK7mUz2XdFG9jrcRvYsWFTxUfgC8U3IrPH4/ib2Hb668RGKPOx0WZrw6BVG9sC+SPRUDnDy8EVo8lAsbPQlIEj3d8IQ9ToQBvShcqbxe+6m7FuDevBPriz3WWSU9dx/HPFjgPb20bPw8rBQJOoPDUb27Uw48mxEzvDexX73haay87dSTOlxTNLxL48S8PSGzvPnznL2knhi9cQgKPcalbz3N4rq8JLQLPaWlOToA0NQ6s6rTPCxUdD1kEoK9csyCOyhqbLzKtWk8m6svO+h6rQh24bW649++uz8fDz3Z5Hu8BAD4vOCqrLyNXIG9fJySPfkL/bwfv2u89aWLuqmS+Tx2Tfg7/9n5vNwjJD3jCgS71WlSPcCWn70UEQc9YH19PKl4WD0TVLG7UHhAPeXuJ7rAhX28WV0dPSV7pL1z46C8pEbZOzzvsTy5qmM9HMJKvUb1Kr1B80c9Nfc8PZ3wNrz25449uScQPXkyNT1SVKQ8sw8xPfJHNzx8fgo7h0g6PavsZTzXgq68jKY4Pf73u7wOa0I9a7vBvMhaAj2sKgi9umlrPXlBpbrHSEe9XMgvvRSHED04JMS787UrvFw3jL1fdjM8PFXVPEJ5pTs/4p+9n6U7PNLAijzI6ok9L1ERvawJ6j0vfty81LWxPN3ZobvJqFe9dUJ3vcQ/izyFqjM9QodNvcFOA72zZYm9/52QO1UOGDzZfVq8cbNIu0wfobtbDCg7m58ovSRqVj16roy8hKURvPT2HT3UqxS9L7rBOyOGcb0PqeC8TWSHvXiOXrIKQSe9kR/LPKT+kT0nlgQ9CC7iPeFqg73pGc280UcJvBz6Fj0zRRq9ceMPPQ0gTr14m4G7qeq6PKPxprxZqhq8Ei7ouw4SmD1Zeb28BQiMPQzGEb3LyOk8bsjOPAA9p730Wla9AgpuPb0IgbuUC5M7Q4SFPWwSirqmTpS8QYe+PJgEQj15/lW9ywHRvOiz570pWP08/jq5vFHdBLtSeu68ms0CPRyqjj10zRA9MyeHPVjqTT1Il0i97QHtvLU2Gr1gHyI64oQqvPXcHj3xFqm8PO17PHsjJz2lYou9hFO+O1iVGD1e8wA9MWFLvRlzWj3jJCk8ttf2vYrKajyEN9m7dKGHvcCgHT3sPpW8bewSPZQHmL2LDV885RiZPTkZkjwPXPE8WJKQPPIT7DyPHR49nRkNvfPPFLt0NVe8K+ndOAD5bLyAxFa9FAcuvY2H17yU/jC98CLgvCRwYzzXbg49TDWnPadS97yCQCS93r/BPEF/Sz26PzK89BmevPrnm7u1/EA8D2YZPc8dyjsDJbW8nxWWvN0BOjtuj7o8YDb1vNuQajxQHLm89sjeveeoD71pqU677C0wO6J1EL1yPeE8bdOFPe2uPD23wRK9EWIDvOdGITxpFYi9X3nuPP3ybTtTxBU8BCVYvJVpSD29KMo8mKGjvO1P5LwxC/m8ATNdPcNeqT3ZlTi9GBKaPA1T/rw8J5i9P3cXPRWLfLofsle7dchPvAYuNL3AB/q8bZ5JPArcuzxOVie9l0GvuxqFDz2vhiI9SmL2vCEPK71m//c8i8bROkkaZb2dT5A9c3IdPdHqqLxKQKK7YJ11O/TXT7t4J+K8NFIVPXzq/bwanLA9NKDUvJUJTbyWBn+8NN5ePQfzPj0VBfk8eDt8u8qqz7shSZ+74IQnvWPzZTsH4QM8Bh+iPLRP37tq5uO8sv4cvT6LiL13ajM8AENkvRuEMLxuKQC8lqDKvNsEbzzS/e+8QFsRO4QWGLv1K947TqGrPcr1jrzWdBO9aWRyvXiyhonl8+U6myYoPNsXDb2XWca8MKbTvOMlrjtUdu66RZ0iu0lckbzwWwm70rU4vdK/RLy4pca8Lt9wvBcKBDw0X8m8ZYwFvSuEsrwo73Y8DlLcvEcc6zwonA89wp+avN37mTwB35o7a/+4PMSJQjyoKSK9ks2RvJpCDz1AjfM84PjGOuNrSb2ID7q8MpFnPTVc5bn8KQG9bz+RPGhGhTu4RN67x/dbOoU/DDs8mIy950gBvSslcjkwVGw9Jp0AvZuTrrygcXQ7ZINuPIIkLb3kIkg9ga9CvcsJ2LxMpS08xyG7uyd1pbu2k7q8lFsjPERoR7w09za9CkZgPUKb4zsAkwo9wbjBvcg5tTyITwW8LlMDvL3BJr3laLw924u8PGnRUzuRZUY9S2W9vHmUGr1HzB69sHehPM7IcjyBYcc7ZcezPK1mKLyIrhe7UGhDPR/2xzoGNxG8WTVJvXvhmrudis87a8Keu67UqDttedk8a5mHvMZCrrzshTo7Tz8GvVc/tAcJeFk7ickfPMCnCT3lBHk8x+E7vNNyqTqKXOc8ea2OPXIAVDxznvk9efQNPQbQhz2AKZ48esMUPXvZnjy5/Ni8SFN8PGRa87xBN9Y8L/h1PBsqYb1Nz/s82WE4PQjzbT0qbbQ8897ZPIl1fjxbev68INjgvJvcUzuVKd68SqiDO01PybtDzj49M59kvJ5XrLud3MU84OaQOyE4Ib3GWrs7SEbGPJS5czyA/S48kGxavTaJjz2AOve5e0VGPZVyubvfs+s7HpbJPEtB9DzTPjQ9IsAEPZzWpjwfNre8K8qcO5PdULyBcN48LqSHvXGv9rvzOg48scWFvMBb07vqIy08UutGvRRiDLvtQ2Y6PMgpvfK5sTyc8YG88fycPMsDYbvnBnM88YnwvLVd8rwqiWk9ITUvvNy1hbwcpKA8ms6BvG5PKTymXZE9TO0UvF7Lbz2syAK7E8AyvWSNorxuAng9bwf9vH5xDT2A4BO9ArkQPL+TvjwVGzE7lIoTvW2FXrK0soy81FIgPajESj3mIm48pNiePRAGwTkj8CO7DoySvKXY2Tos9n89a8kaPGgjEjyGd4C9RffdPCI0qb3F6HC8vN1ovYFgI73JPAw9vWxcvG8An7tz41w9c1/AOwrU+Ty619m89fNLPXsc17wWw128qKcHPGCDhbwH5c+7UdrPPC92nbyZuXq886Hcuw9cx7zEves8f4JXPJsVXzzsqsI7bxkHvM5BeLu89Eg9jP+mvD7HvryKpLQ8AfcxvVEgML0+2Mi8hQVdu7wL7zyY38g8m2g8vaAIMjwgpsY75rYgvebFNb2IJUs7DZNnvWvizbyGcRc9t8WhvUic5bzlauo80WOvPH6uvz3KL4a9pTzSvIxul73LUYC86K+RvRSxSD3fwwi9xyNuvOWTBzzbtH29ZJeJO74i47zqKA691EHXuw6HA76QUUw97HkbO/cfCr3KT4c9G1nzPNK8JL36eyw7UQ7cPQtzKrwwJw283S6SPCxdDzzT2Io8rR6NOw0ORjsZIbc9AtEFvZmDNb32ZiS9z0QYve+fkbzaASG9K8hcuqe8d70xmNW9rVaDPGQ+8rpYZDO6MrsmO7gacb1+37Y9ZdEPPUty6j3D4R+97RhBuwJ/+7xhXA09NTA4PV4PSjwRHLs8B4+OO32kQbwcNqS97WQKPWslDzwuOp88+DhWvY79Pzwm+ao8GloFPdYbI73f6BO9aNnoOgkLV70XwDa9fx4EPRlsz7zT6ga8M3AcvHTo67sYFQ480XvlPGZWLL0aQqI8ZbkAvWvcCr2akvE8koCjPYOzhTtRkSg9NRvLPfHlvD0h2WW80riFPSUbmz0DssU8RECMvbqtx718pSC7tkKLvD3YUL39Rky9OMbOPLPHrLywk8A8NlWYvPs7fr0udyg8Jc3Fu/uGTD26X5M982k6vFJ8rry5JYK8CfMUvPuqzjtce+K82W9PPBWRCj0Zp+y8gHaGvJaSvj3s7IA9QpaQPfPQpz366Rq9bWs8PZvjIL2cVTm9oetfvbY15IhbE5e5fYXfPM2ny7ylxGk8Ru5mvb6HCTygVg67bDFnPVZDAL0ITaU81CzmPEP6ZjsSY108BigRvcfFvj0NzAA94pG/vKfb4Tx3zFE7XNLvPBUjnjwLQ3c8n/acuyVkXDwDc2g9q+MkPcAG0Tu8jlA9BMgUPIjM+TqTQG891lbnvGlxvbx4/tG9om0CPVJOt7yOaZ08RaQOvJJxjDyrHRw8f9iZvcLOkjyauqI9co4mus0O4ryR96K8A+ttPJl5MD3GyeM9NwuvPYJpNL1PpAm9teNIvaJkQTy8dyW91ifJu31ZtzpNj/Q8AqhzvWLyWb2wWEO8SKVkvcELQT11nk+9Q7fAvdNcBD2ZzG29UV9kvMGho7xYuKo9v32ovcubWb3jGvU9DpTju+WUJLzrqJe9icjYPKWlQ7zOLL674NGJvIfgjzxY+Gk9400XvJZ7tT1ZedE9oN8nPdz+djxPZKs89qfSPLO0LL1ce+S8MciXvVf6DD2GYYu8lcIEOjHHyIWJBKW9Law1Peekn7wYgoI9groSvXtvHTzHVmg9ly9Zvej/Lj1gNOq81cyKuk0UwTzPAR097mt9OyEdsDwnCjI9zHslvTZpWb2zzgC8BvQsvLictrzAy9k8UavAPAB8tLhYpJA8s3bFvAKSgDzElti81WlovLwJ4Lyc3pW9QnGwvRFEVj27GNc7lp43vQiWPL1J2Ek9d1pxvH10cTtWH+c8dNlBPW80Rr2FeJk8ACrfPOzN9ju41ze7WWFGPSPKhzp7YT48Frw4PRWAoLwu4qM86a5gvY81Kz0iJj68cDFfPQUdcj2hvjA9BlMPvKi5Mj0qMxC8gi0pPeSFlT2YhBE9cB+kvG5nEL0eJHE8aLEovIcVnLujvI68h2nWPDDtDT0s6Ws9pNxbPN6hd7zXcuK88YaOPJM59TxULgM7YCZzPCLd1LyidG89+DVWvJzqATw43mS92BsSvTCj9TxGBXM8ULK3O9E3Qrz3wai9SsRNPcyefLwOXyK8jaSOvZn4Y7LpLsg8LuHPPNLDIL2BCF+8Iu9ePdyaCbyfhrc8tlPRO71/E73em428ce28Pf3EpzwJhbS8qdy0vUwcFb3R5bG8L1xKPZVExLz9A3m9tcx0vOzEvLvFCbS8cYu2vOlEfj2VlkO9iGaivIAYzbw9LB4+8w/3PFz7cL2Gh588CGMePfmdWD1fInm9OWfHu0tVhz23tes8pwgrPViBij16cm88BUnFvIgyCb4V2lS9d2sfvDcplj2KNsQ7C2QZOtpLxb077Hy88fZ3vfDUUT2hywM8cF0/vH+mrTwy5IS8vN1evfPKEbvbIca88kQmvdPD/TyyGYI9MnBoPDowvrwJJcm9i+NKPYNUWLv6yYS9ufEwuzjiLLy2kTe9sOVVvYarKD2OuHY8Fh2PPFhM9LqVYB09nLRIvfzVBz3WwLY8Bj8oPYyy+rxemeS8QB7cvF+fWj3FzFi9KxJzvCwmUbzv3lK9a8O+PfakAr05iSa8nUHUvCn5GL30iYq8ILugPE5PUD16hfw7fEVNvf6L+jwcsJk7oaoxvWkivTy7WWG8EGKQPNrSYDuNyGK8e/OaPAUH1LyVvTi8uxyBvKp6z7x/HrU9K/SJuk60AT68GPG7z3GDPACff7qov2y7+RbQPLf+SDzHixS7UphJPQr5Iz2VKEe96D9sPJ0oCTyZsxu7VX/GO1qOL7y1GSE81ig8PdBTerzmcwC9WRwXvX5WiLxu7ui8osSDO3Xmsr1ES8q7jMMKvVLULj1aOBI9PqHFPJs/eb18WbM8UNZMvYN/n7uPd6C9YYncvLocDLzTY6M9LlEbPa93VrzxSdm74Y6nPVfltTwEMFY75SeOOzmOlL0A7bg8nkl2vQT6WLpkiQS927YdPWu7Uj0DEzc96RyWvWet/zxCd6K8agQWPKh2Cj0OPqI9YUn3PGZm+jxqLhK9NwUFPbCatbxewie9jZe+vJBIvb2lc/i78/YsvYGVtz2MLBY9dmGXPZISA7y7t0y9WNIVO7RnMTzpbyy9LQ6gui7mOYk4uQU8Hsuju2DRkLtsuTS+2FqTvD1vD7yc/Xg8BzavPaSZK72ZfcU8MXIIvWQzkL1FV0W89fl6vHv1RrxWyjq9pFzBvVQBAz3b8pE9O9msPF4rYL1jLzY994oHPNav2TxwIyE803kKvQSCjrwjq7g8TW4VPYNQAryhYcE8pSNmPALP1bz5rau9c3trOq9Woj0/zvk8sZomPTA7p7xOR5K8PH4Ku525Yj3xegy8UI0rPdVOxLyS96E7GG6EPEzOSL3XfIq9UJ2oOruEKb30KLO8hYyDvfdQ3Dw32BI9Sky8PCG9NL39Qtm8xNqRvQVDyTwKmVY87LzNvMEJCbxg8GO9oBbWvUcLSTwmHv08JYifPDU3mLwgEoE9EeAZvdNW/7xnoEA9kkl7vINFnDztxaG8nXZnPRnA0LwX6LU8Zl6qO2+4xbx6elC8vDPWvCyITTxQ3w67rPeDPdD9wTzyyqM8tUmiPcDKPDoJm0i763i+u72i0DyQ5aq7dmAvPZXH1AfeTO28jV5xPSTBxbsjTJk91omavez8/byxHoo8q0YRPbiMCj115jE6fCDru3r+kT3sBo88MDIBPW4bEbxaK9u8oZ6WvAaUJjx6dCI92wQDPawO8rzhuAY9OYnbPAbXozznwHk8kQJlPK6tCr3PZGU8tk0CvbejIb07u4i8WOA7vLxkFz2Akgo8KlGavIsvuLy6+1U7AzrHvFtLT7wMmg48WtDRPJt3Hz1K+um81uSJvGP8iDx2kWe8gaWPPcAafj2tMEI8Uje/PDGHbL0Glz+9nq4IPGjZjDyygsm8JZFJPNyuJj2ucIs8dz0dvEl1Az1bSx89d9vSPelMvLx44Mg8TnwpPQ1ZX7x3CL48suMJvUtrCDzFFX88XDF3PUFLf7x2bDi71tg6PYWc4ryfAHM8fXCcPLAVMDyEPG6765pBPTU1Gr2bb789qK4qvGk5+LxzmTi904FVvbl+NT16EaS9KErnvHog+ryPRm29MgWOPUuhGj3m4Lc8ZzOmvWj/XrL+wT885NtaPFNvX73MYk+85LWJPUSuh7zpHrs8oRotPamsir14+DW86WnqPYmRJT1y15i9uU4gvVRbdzt82Cm9Sm53PGAfljyDfbi7sMFzuznDoDw/F7Q9xWkHPb9ZTby+jqG88+ubPSRsMD2aIJU9qzAEvAWa3rtpTyO9nFV6PeM+ID2kvle9TWspPM6yjDxQyWm7+YDrvBSGPj3jQ7m8rUuHPOPasL33CIC9/NyavbZwzjxZ7Vi8VC4KO3TEDL25Kig96+pbvRnCqrtKpMo7g24HvfWN0bsxg6087reBvcr6hb3Gtbg8oz1IvRsQMTyx/mO8qdokvXsF+Tr86R+9xLecvFcZyTxqXYC9NVMfPbg+EbtH7HM93tR5vcpVozzTOyM8n05CvKGnA7vhG5K9NIqbPOp+HL0ju2K91GTmuyBHlLz5KXg9Dw6JPXomkbwh3Au99Bp0PXhPkD2JQS+8bMWRPfa/CL1+KK68C57gPMT28rw9jXG8HMuFPXLdIz3+nCE+DKx4O86SQr2G3aw803ndPNgozzyo9DS83ohRvcj1ID2EShG8sT2NPV811Ly8mcG8dm+vPEoV6zxTloG826N5vGZ1oT1DQYq9cv13PbvCnbziyyu92w4VvdAVHz2g98083jnavCZiIL2q4q69sTMaPbg8FzzRSuo8w/J2PAZ1nD2qlyo9BmE3O31UPT3gPh+9izd2vMy6uLwYCJG87JctPKc1wDoVQ4A9VRjdPQ5ckb034O876XsyvQAEbD1NwR+8vRVWvVdDOb3j5Mk8op0WvOepr7xJoGQ9nHgsvCxiv7vxWIK8dG2IPXQqJT2L6S09aY9+vKv17rz0Uz+9aiWrvU0Iyb06yxA961MePduT0TuukLw9Q946vYApX71auIE88dkwPbsTkT2qQZ0900HAu6ctY71PbYc9N7nUO2h0mjxqaoe9AD6LPO5xyDzpbxa82Iy0uwqrgT02r8Q92WYKPAeKCD1gz4G9IFLMvPZhZ7zqzVA9a+RJvVXdNYmRFIw99xrVOylTbD0/Tn29WPaCvFgm/Dz7Etq8bI0gPXg2n73pkCg91hAcPf2nFb05JLW7iJtMu58Ofjvu57Y8CGZ8vYAOQL0AK5W7oI41PS5C3DxSXhS9JhkYPZ3Qorx4W6M9AZx9vehNXLv/q7E81qQlvG1pF70fTNw5LV6mO0pPjbwRXHg7FsUTvJIdBj2xcTe9bVicPLjZRTyxOQY8jBiJPSW3Bzw43KO9h8YPvY7DUzzP4ii7ozpsvKb5mryBLjy9XkjPPeglgzxWHtg8qpqvvTF6FTxOa4m9hKTWO6AjSDy6bBq8YOrEvPeMv73XyT+9CQC9vWNCIL3aBYG9InKJvFUl1zzi9BY987otvIxoRL09MEw9IK52u2BEEjychJc8BUlnO1GJBb3s0fe8Xp1Hva2p/jrmFk+8E0rsu9SGdDvx8OI7CyoRPfL+GT3sy/48dKLbPb+ypzyctWm8Q7kkuwvdC70w4ru61lsVvSw88Ly7Bh69WPwvPAOCDAkC4Z+9EnNovPpwTL12BlS8RBIGOyhJqrza6Sq9uUXXO3Qq3rzK5908WBO9PFknJb1MfUM8DOLcPMofOD094Y88myIwPBEkdzzLT2c7IK6kvGS6oD1v7NA9KuzvPe5ziDyRRJA6On2kvIAWHDnUjne82yINvSD9oTvh7Hq80zJWPI4vVjv8mWI9a8vRuxAKX73pOpW7sIpfu2MQtDzdKL09a7IRvD9NizseZ/a8nCNTvTPPTbwstby8nT6ZPRy/xrsIXBm83ihgPWWqwb2mgPQ7yVxRvNIj4bwVYFu8YTU2PCKeiz2uREU8o22huxcK7DxbW4S8QSLGPVGuSL3Aebw69/p7PfoKXrwy0dc7PGT8u5KcpbsOM0k9THMDPPQQ9bw8djs9UXagPFrGv7y9Wgc9c2IZu/RLwz2MWJ+9ZKu2OmUjTL1J4C09vRn5PPC4djz1YUs9q76dvU8FtDyLqjG9tKQ4PFIAQD18GmC9+ABkPVZ+0zyz5ky9lJqJPO/5WbIa4sc8HDeHPPBEy72SCqY9M8YTPVL4eD3hGW69Q/5hPb7RQ70rCpa8ySglPXpZH7x7iJa9x+oavRGZRbsZFim9TDH2O0JnxLyPRi68eBcLPa9PqTwEzIQ7+fc8vFeUjDzym2K9FvqAvKxDKT26cyE9BIQ3PLrrb72oObC8WOJEPeb66zyhd229zuK0PDWMIz0Jffc8sxFKPCKhU72ta6U8lgIxvM9ctDzeiRe9XuNSvf+XbbyQIe26FX77vDfI9byrBK09zugvvWsjxDln8eg8SR5EPFmyxbtOxH07JYltO1AvaLv54Jo7yzEBO95m2LxaoU89U1r7u+MWMDv273+9lx4COgk07Dy390c97+2gvU+CdLzAEoE8VZd9uNIQ1jzna868P9nCO1esHD1eZU+8jgR3vapwuLzzizs7s6eqPWKXWb3eCUY9zFq0POIcljtPbWM9NiAvPI6YIL39gvA8uhAdPgmCibxJum48qobrPPWdYrvIEiw9ZmBIPFgdXr1cq3a9NPWIu3qeOTyg/TS8UcWhvEIACbu7oHI97cQ+u7bENz08EEO7ZyWPvPg0abylLru7qpyGu//fiTzTXiE9Q7Wpu8P6uT0w2dQ6I9ydPRtjTbwVpMI77DTOPHBPeb15fuy8GYjPPHVEwjwoZJy9FxQDu8YuhL35av8720g5PFVs2jt8afO7d8zZPCLvIL1d3SK99in4uu7lNr17PQ+6sYdPPMJ5RL2D8SS93Dz/vHGWurz4ZGo9ZvSzvMwcc71p/BC8hcDBOsu6ebz/g128Z+/auzaBUTxK2P88xfCQPKT4cz0O6t49ES8gPF9Blr0wY9489iEVO6yk8L0rDZ86qAnyuwAUVL2iLqM8MyknPVnHDTxSgxc9yg0DvVIMEb2ryoI47FH3O6uW0jz61DM9lM7bvJnZLr2Ltlu7remfvFtKmLvv1Ui76cAdveZXwTuiZA49RbKdvIDPOD3vb629Ve0rPWGkCTxotog7x5s0vB4y7zwbGzC9WyokvVBNEoluOws9BcnOPCQ1EjsatRc88fi8vNg8WjvDHwo9R00kPY3PDLzSfrS8iBkYvJf1Wb06nTs8aMMWvdoqTD000xQ9rk4zvdC82TxmRlA9iOWHvJZV6jy/zvI8yH5ROs1B/jwErd28VQQIuXJbFr0ub6I7kPJMvTtSpTxevJQ9h/QdPWJ4eT2t1lO9Svpruz3FQz3dvkw7th8HPYxXHT0JYoW7cEdhu4Te7rxSB5c9+HJ2veRwgr3CR6C8LuJPPZMcmDx8+X691byIOxXD4jtGhhO9eYjUvE0vgTrGlK48R8kpvYjyk7y6gJ28gEMFvda3LT2kKZa6DgtSPAV+4LvSdUS8xJCWvXuQGb2lvCc9ATB5u/o2bTyijgk9mb7zPALOz7ysg4S8I6ZQvKK7Fj2l8z86bYrvvL2JAr2yau88HWiFPHW5Qjt7mB682WkAvXSWe73+NdY8dlOaPMbWFT3sZWW8iX4DPWFKjrz3y7s8okgXvRYQ9zyhvRi917GpvHyAlweSD8K8VBY5PPO0Uzy+mZW8npswvZc/0LsD9xk90cz7vFxlPL0+M7q78lXUPGhUZjycIHy7EF1bPQrsaLy7pow8azIQufvKlLx/S9Q8AveivUZuvzy0VpY965NZu0KI5j1xWiS9SrZ7u8dAMb2g4lU9RetxPCP1VjwUBkK9F4mgu/Q7t7uQd4W6iiPGPHsqXzr1Y+g6RzcyvEh3Kzs4uGA8hVHoO6sZKrq++PA8lBaaPCMXST3lUVO8K+xPO2WXYz3hrts7AFgYPUDhPjqAAB88KFmqvOh+LD0UkCy9ajlyPaEw1jxGQzS8A1ifvDMNHT1DHVI78cxbPTyhDDzFifo82pNkvNW5SL2d0MK70WBNvcIbKT0hXOe87ViTvEkuxr3dI4W9dyiSvWbE/rySeQk9mGlbPYcRaT2VQgU9PkqqPG0/Vb3hw+U8OXANPdBmqzyr27C7CldWvchJHTzr9Re936i8uhtIxTwOP1q99N40PVEDiz3V2Aw8aHqBOnlwa7IztvG7X6I1PfZZFr1dr0c95j7+vECidTzrj8E5NMQiPWJG/LwffvK8v2WWPbYKFz39iCm9iSkxPLdvSb3tKlM8pJKBvD7YWz1Bid28DC2svEnBmj00Zte7d8VSvMzEMj2RMfK851ecOzxgaDy7NGE9bpaaPMcOODyjLC887InOPIrkdLzoA/M7HHVfPMYXSTxyivC8X41tPIOPxTx6E5E9dO9XuxzXpb33dgu9pbPMu1tRMr2BbQa90H8FvZakfb04QCC9isOxvV+LKD39yti7vulCvXDEObyu0EM8SgNZvajZiLz42Ha7Bw7lvN8daLyhlkQ9N0l4uxCHerqzReS6eZ8HvHDbiTv7+++8nr8LPcW7Sr0r+QK9NxJ3PAzcAj0e/ME8GIa6vJLHPL0feD29Piy0vPoOnjxuGoi8pfYpvNE2P728v568xRMDOyj/hbzwWPG8Kl0LveOSr7wAibY8ncLoO77FTD1xqMY80LR2vDPWZrsJVvm71B+EvPqVUjsXsaE8NTG5vBcS67zFkUa9SOdSO1XwsjxWP+y7ZVQfPGLvxju0kbi9k2BBvWxrAL0E6Jw70MFrPLs3/TznIpU9u7swPZ3bYDzF67i6G3FiO3TM/bzF1iY9FtYxvUWzgjxJO9q8K3QOvRc+oj2dUna9a+zevN8QVjvA0Au91cNPPS11hz1YFSU7zs8hPObusjrpIR29/eekuyaLkDxIwiG94dUDPBf/CbwNOaY6T9vNOujR9j3ahYG9SB5DvLeL7zvKFYy8XBM3vXJnfbywJS69+NmyPP5OKD15Tb89MQ50PScfjryyP968hEw8PR4+fTwKnHC8xtiGvK4NjTzBB3o9dWq8O5rRD72OO7s7/NGsPc91CT389Oy7F1prvLEWtLzO/v08QU2WvE9QSbxhZgU8XdhpPAeBYrzlT2a9eF2gunEqvrxoTwK9BYSWvKupQLoM9n+9o3RFvD9cVbwPYMQ8f25bPbVxhDzyxlo8Z3XzPKB9AL2PF9C8gAuyPAEBb4juJaC9B1hCvbrgXrywQqi9GiDJvOHgKT3mMEA9R2ZKPE3Hz7w7GLq8TLTyvNy5VbxJTDS8o6FsPUsEZDt4Aq699Ej2PM0EcrvcOsQ9r1CQvKlgEr3kD6E8CDrlO5H0vLsfXmw6mCE0O/ZmFD0KgWu7nkZ6PTBU7juuMhE8JG4RPSUjgb3dgja91h8FvREHPj0DEvE7lZamPJWFxrusKmW9k48mvHVjHj2RIlK9Ct0bvQg2RryG+gI9ja/OPLmcQb18HQO9YdkUvSexk7ykZ5e8x3rivQp5h7zYVDe7oYiZvdN2oTtWu6W9wgCNvMWBmrsP+fe8m1P0ODbQiTwT1bm7mAThvS+Plj1WTGo8VFe3u86qn71eBic9IkfPOz2zMLyN38w9Lu3YvOS2Az3G8aw8bjmIvPzftLsQFm89ILITPd6ngTwxJvy7nHqSPUD5Uz3a9Uo83v4bPcsK3rnVVX48kTR7PNxCEr2UAiC9kEEzvZLQPzy8B9Q8smqaPHZBBYkxo368QUk5uxqf1DtZ/mE9015JO+2rlDsYrUS9iwAlPe5qaTzUC1Y9oBUFusd5tjzKyY49vAdzO5eXqDw2lV29ZFFzPN5cVzywYFg9UTBxvItc3L1emDk8sFIhvZv/qbsRsiY9o83qu4/2XD3phHg8HjMaPA8nibyqNFO9AtfgvJn9qjwF5HG7ysSZvOUDkT1s8us8rQg5vesdoTw4tyC6iHsxPGe/+zwXmPy7ZgTgvPmWBT3Ezs68XyAIPRtCkT31evY9oeadPPmB9jxU/Kg9VWpsPVCcGL3nyD+9jp1kPbjnMr2360g9yRumPH/Ww7ugoJ283ioMPRR/KD0mbjY9BY+Uu6lYQTx2DBa9HTMcvMwsDj30HRO9esjoPOHqhDtfksq885ravBBMjjrxOlO9wlO8PMTkzzxOSmM9cWY7PbNVtrugKY09lSPDOtfbcbyeR5+8hGApvR1+kD0Ruxi9Ta45vVONTL3DK1W9As5ePNTe7rsNMtc8ISGIvLTYi7JcQ+o7tWA5vS17vz3+wkU9nIqMPXbo8Tx3pYI9ZU15vGIhwbzv9mE9GQkoPaeCD70V3Zi9W6OXPEWKQ72gzMQ8ku0lvUoKRbzO4gs9x+wGvfhznT191Z48uqH5PCOk5bznWLk80cVEvO0vtzwgLMA98818veTFMT2Nkgy8g53TuyUhXDwGKlC9HWujPFTHkrxOQnG9tUgVPdSowDxmPgK9NizivMRdtrxU8Ye7Es+UvFP7+rykcHC9u5c5vRELIb18nDQ93qaQvavijDzz6VK68kuWPdRunbzX3ks9W2uWPC7NFr01FKm8GTQOvT/boDzrdpS4lwapvW6rFr302RQ8ibfYOyt+0jy2y4q9yQHXvPOqg7yPd+w7KuhUPDoluTx7WC07oouoPIT3nryXrv481U/+uuQyxDvnQoa9XRAhO0bLjLwJLbs82sSEuyR9Ab3wv2a9doiRvVnmoDuUOYY8CEyJPbEcHT2+/Zk87/eaOybaCb3gLAu9AUtiPcnRJD1K8Js8yt2nvC6J4L3zd888owGNvLeoqbuYCqg8UD2QOjrDCLzs7ku8WHQtPQF9E70mhzc8uo8AvQTyUDuUEfs8r+iIPZKgbrub/4A80zCougAI7zkoZyQ9BuIxvcEoPrwPGBm9gEOBPLPStDxCG8q8q4xKPdeMWL0yKmg9tTUWPCEBlDwcKIW8l90SvHjrjT1F1Tu9SZeKvJSUNDxdixI7ouKwvRDjJ70Le42773BTPex9Hz31Epa7c1cdPAY5D72yRS+7vDTJO29fTbwVw/C8tP35O+0Z8bo+H1w9/sB2vFDDbzwlHey7/SQDPVNQTD0wOVW6zEfyO65egb1qw1U9EqJJvfK7rr2yUKO9M/Z8PV6+Vz2VI8c7gDXTvKmLSL1QsOY7055uvU6Z9TxJMmu86FNvPKbN2rxggcy7PEMkPXBflLxvppM8ZhODvB+RCD3zX4295yKVvKbVgT3TvVY714JWPfxniD3fLJ27WEEvPQu4lLu6VCW9j8YuvVKlTYgvWoG9gwX7PIFBRDz8qiQ9BcImvYDBCrxoy6A94PEOvYu5L71x2669eHxQu4srKD3tAK67jJjnPC5nNT0Ho5C9uxxxujBKsz3fcpo9+VWbvEC8TT047Rk8d7gtPJCri7xQWL49JJhyvQEn37vHJWK9I4U+vLDKHj3LmR86tgVTPYO0ar1C5Nu8NnfgvGro2jz74iK9O4mZPFEzWbxQwp+7/OeWvUGpHj1xtqC83hrOvKGABb07yRk8ZUOBPX7QhT03oLS8PKeOPMsfR7y3ORu91vlQPOFJcbzJ+as8hcL/vOOFi7xfqk29TgiOvT+f/zvNXo+786xyPBTBxb2tXQE9TkyrvVQVhj0gzFK7JhuCvEYJ+LwYsXA9X0zOOzIVnrzzWaE9qnQAvT9rNryShLy7AvInvaQmmj3Xc7g8xW9dPADXMT0fbQ09GlR6vB5+CDwAgbI6HDDJPIJvLT0Tohc9eAefPOv97LkV7C28efzSvBYLoz2QhOC7p2MqPIDMcgRVVnm7LAuGPPSZpT3Xhkc8iyXtPMGiLTzWc2A9FT3WufaH3TzKPUc9ND+PPFHmjTpkgqE7EFjjO8zzFb1QrNO95SD0PCMhEL07Rnk9Ome5vaMlhbzVzRw6q1D6vChoRTys3Bo9HkmFPJeNlr2dhuk8UZE6vcNKkzsDHXa91mkZvA0wsjzAgsM8iq6wOzjtnzzgPGW6HFaFO8OKIDx9EzA8JhWqO9vEijzGNv48pU8ru1AKKjzSK7u83IqBPMk/VD38EI89A00DPEcxBb2RjFg84eFlvJ9cGjwaCQS9PMRvPf7187wLozI9xoCZvJD4VTwocxC94x1oPeyqrTzylrU9T9uPvOtfBb2TI0e9kWWnO3AzCr2Z1PK8GyX9POb4iDz5BTs9JRx1vAHE6ztzSG48mZs8PUDaaDrpiFS8/k+zPVAB+rxgv1A9ATuwvIHfjjy7HJu7WPkNPZA6jjvBUxm9OKcGvEHmZr2Wc2i9TO3BvOgq7Dw/14A95mQZPUpmbbJnXRO9TbwOO3GgWTw/Coq8aFRYPK/LF73Bf4I81DVUPAbfAD1jIKq85K8RPXNPWDy0J9+8IsLmPKgHTb3l/Vm9EpaxvDkJ+bw8Coa8cwiXOlZoij2kZJi8czZ6POWokLxwAx+5K4b1OjMzEz1p7IU7kClBvP3wRD23Jw87VQIfvGC287tvhdE7gyEGvedxhjxMu+w6HASOPUSanzz4lqU8+NinO7Womruj78+65XAUvVd85bxZXWy9Z6+VvIiXVL0MwwM8s4GKvb2yi7wjqlo8CRI1O0dF+DzhxQU9h+DDPIsqg72SL/27Y118vZ61jbySBzE8jbHRvQ7tjLzX95o9+I2ZvQILKD1AWUW71lxXu3DsqbxNPEs9y4jTO1AsSD178+487vc9vBzbbz1GtTi988m3vOS3q7sBPkO9XHvrvKCCNbwA2OM4mpqvPEASsz3upT4944WtPbLdQ7yTlfk8BOVgPH9EFD3somy7QrjQvHmXFDzAWCW9CldCPZtItDwOYjY9Tp8kO9oArT0fjhA9kiZkvNxM8rr4iNC8lBdqvYv8N702K5Y8bp6APB4Mc71g7Mg72BoFuxppxDxcUoo8GH4vPJhZQT15jhu95qIHPZpDaTwuYZ0988O6PCQIBzxoehw6ulYAPC2Nrb08qnQ8ckMVPaCDC7ySW5y8B0asvApR27tOca08mu28PbrA3zwAr2Y8Yxz8POEQgzw0cjS926KCvXuesTy4x8Y7YdeoPU41mTuAFe07sqUNvBjKq7o4pni9DVKpOil1wrzKzRG8qXx7vZ8fzrzpVDe8M4CWPHS+BTx3I/I8YJGJPS49pLxFSVk9ENLUvHDngb38BMu8AO8zuT6/1rwqVIM8mShAPUurLD2Yooy8PuFtvEn5W70wARM9yecoPT9fCzyG9NC8QOpBu2b7X7w4D5G7oMC3PEYBgjwXZ2i9rLeOPNLhZz0tKx+95+uqPDDfbz1on1O7NKcuPWzBoTxcoQa9lKJbPN+UE72nFiO9N3lWvWBXZIlcyLk9w2YRu84GXby9zUK9HmsEvTjj8rxfn4y8ku1EPJQ4Ur212H68WlLSPKyuHD2Gd7Y8ykbQvT3DgDv7rf88aBwyvZibHTzAVGA9To8xPZ5nwDu4o6i9WIGcPWhoPD0Zuc+8ynw8vWNNVDzoYq+84DdaPbTQV7xSPTY9EaScPf6miD1fn2C8A+YNPKeM1j2WLDG8kjyWO4ZBiTyGWbU8jMxvPIgl+jyu85k9RkCGPACLJjtPQgS86+nrPCPxdLzfMNW938pAPRiBh7z0G5q8qdK+vK2Lj7zif0S9iSOIPMRKKb2q15U87j2TPOKgzDye2T88shRtvVHgUzxyKf08CrNEu2sGETyB/ay8sdgRPN8r/bxPzbC9bMpZvWBub7sSzwM9z/VSPUJ/Lb0oKS29dDM1PQA3NLl0gwy9ZbIsvdjxyb3VhRm9GP8FPQOXfz1fmxE9lEjXPGrJwzxBkSi94GhoPMIaqbwsjEm93dxBvbgOvTxwcRq7Ku3rPCKMpwiAUd+5nBHmvNSqab0vaAG9dPyWPWY4j71cbEC9fM5NPVMvjb3mZ0+96NjNvbtgdr0K0mq7ahhiPQ5ZEbwYlZQ8gVIQPX6XgL12tqe8x2jKvCAvnrswaYY6UWWEPd7YmrtMP0W9ysAePZLKFb19IC69qDBMvUg3ubst/qs8krA1vatPWrxY2Nw8R2gCPZGqWL1yehc9VnMRvUMF+TyDyp87qtpYPdf6/zzoDXE8aLTAui0QJz2k1Im9lmeGOyPRIbylQZs9gCfBuGj0Eb1qbce8AO5VPfdE2jyUX+w7vEH3OxMoxD09YlS9qAcFvLSqmLzeAai8lip4PRgoxbvxHmc7RAxnPcAgS7wE4bG86hA4vZ1TQr2IGgk8vHeovDgBlTvoqae7wP8Huwwobj1od4A67XIrvUKJ9TvNDmy9FB7zvAgM0jsgD+46DLLCPIQh6zyAROi7mj2ou2porj3gv5W84ETLOixmHD3P57M8uVKkPACehriuidw8YzMqvYbVa7KqWWa9EslDPfjErL0S/p081fpcPdiXhrym/RE9jjc9vBDVMbzo7H27HvotPfmE1jwbCvk8xQrvvCDCfb2qGz292JptvJeVDb3qIC+9ZYMzPQQpYrzaTJu8UEaMvB0XHjzy7qW7Ssa4u2C2OLoGUrM81vsQPbgZ1buqgE29ZLU8PRBLjT1sPOC8/KsZPE6Kob3Yd6888Fb9u2nQSr3CFzm82GynvNZ5MTx4ZCg9KlVIPOhPhT114Gi91LyYvarmfrxCUhc9+Dbgu7FrvryjjOk82ZFYPdg3ST3mAhW7UhDtPPYP/zysE+08EakkvVKAg71o2Rw8kLdzvSbbJr0xk3g8rG+Svd2Kcz0giK28h2TFu9j9lrxPrlw975p8PfhAIj1L+nM9Tg9zPEPS0rp5ttU74QIrvNjLjjxUVAc91CxgPS7LWz2BAR87LbxsvQN0iztiL9O9XO15PdeF9Lxx1cq8Qt7/vLTPKr1ys1U7RbZuO3OO2bywDBK9mAuRPJJ237xFVF083iE+PeOYtTw6+oO8JJI3vS86Zj3Ze5c89PNvPc5Xt7yMKNg8bg8XPXQblTzkbo+8icUQvKA7vDxk1Rk9VLo1PRfGkjoUrMS9lieQPKugALop+wQ95b2ZPE7ktLtfOFQ9aZpoPUEmAL3QkoI9Ay55PAUHfT1gz0I8xQpMPKVYYLv1RoQ8W0VQPZh+oT0tElY83pUCvRVQrTyOBgu97ONkvD4ejruE++y7w4MyvfCM/jzk0Wg9O6yHPQTqiL0CKwW9Kt3rvKbTx7087Na8Xo73vGPTcDw7t5s8CtQGPb/Icz03RxY9zB5WPY0WKb3Hq4U9mWCIvJpGEL0lfVo9FY+Pu0ZbCL2GHKG9rfC9PWlU0TsLfQy9+Z6PvGc3Ibyfjzo9gEKLPGyjrLsAY0G8jqcwvCWjSj1LZCA9x6kAPeNhPb0XBmS8JFlsPLT1Qj2uBTe8NsWjPYpnuj1NVBS9k05IvMGEqz3MWqi9bxYOPVdt/LzHyzi9kL92vQBOSInplVE8U+HLu6blo7xxwNQ8o54BPRt+2jlquui8peR0u/Q9Ibx48nO7a3HaOwH98TxUjNA8SBiyvX7hjL0GFJo9xBCMvWxsojtvVna9TsnAvKxWDb3VIoM8U1ETugw7wT2pvC299GStvKav3z38e1K8iCxTPfy6kLv6u8688OfDPOJvpj0n43e8cUOpPSxTTz246Ly9rTfdvKxznLwCm8A8b/s2veAbLLvwYLQ9mCUEPGM8c72A9/K7esvKvDiA6Dsn8fu8XorVvBa5Fb0eOfa8iCagPBhAsTxpmpe9Fa5EuQJJW72PeKI8JJQjPU9zojwz3cA8spevPXNkmrs4Zhw8tPZVvZnUu71q2S69ari1PG3Noj3wh8K9vSANvV/kyz3SB/I9LWHHuyg8O73kydm8v+5gPDO6BTp2tNq80Z3UvG/FQb2Y9Uo87AWvPFgsjT367kY9Yw1+vGZwYL1M7iu9P3hZvVWEID0tZU+9N2cDvUb5DD3DMzQ9VZDEPMGCPwgWjKe8EfUAvoRlUj0FL9a8ehQ2PQQ74r14o2c8uZvhPC3uob0On6s8k/IjvQer47z9x3c8/eA+POSkNjt0aQY9/a2ZO0nqvLyePA29j77tvCFiFj25+Sm8Pl46PTjfNT29bUa8m/NTO/OMlj2QYI88lZg+vfvzOj0xnTK7Y1MQvVjwj72GVIE8AnCsvQYdk7xL6Sc9GWipvYSeRr203hS9tN8iPe2ugjtKzlI9V1XyPNWJzjwqtxy9DBYRPc4pibwcGDg9xxsivUnGHrwV0oI59sKvPDR6OD1S2kI8Eh4nvTt4jj3DMdO8JmYWvXVbRbuul8K8xXyQPYmAWT037B09ItgPPGFZxTt3m4+9KX30PPj6gL2lhqu8HsBvPDxiXbw8zfu7WlBfvXHbXTzyACI8ygBwPOtoQ70T6Eq9wFU9PfDrLD2ew669rMLQvL6e5j0HBSS9yCiCPLGNJT3yEdI7eZGKPe9v2TxXoPI70iXFPLTuojzdx7Q7ZHNFvHNkWbLDapO9V03rPCQvYTxWdJe9A7rovBx4vrwnqqy8Lc4yvUDCDb1v2+W8/PzIPK5K7bxddsO7mSPcvBGIPL0p5a29Ih/qPLIcPDxYEzw8KwwLvIPydb2vBYS8WUT+uzxvkz20DdO70gNOPA/Pw7wk3l48UAfBvOuo9jxVpEq9RgKTPQLcKj1kQ4q92aE3vbfPeb2p9J083RXvvMrqvrspGXI8AYt+veVAM7yQbCc9Ir0MPH9RPz2mZM28bmjvPLW3FDxgaC46SNFHvLax8zxTWJe833GrvBiSh7z6KsI8Qo7uPEKCLD0EX9g5Sua9vTwoW7uQXi89CKEJvb7JUj1IVG09AMM3Onz6Dj2oyWg7tpuluyC5+zq+sgm7uZXaO4B0zTvzPC47U2yqu+A1AD0KJCm81NyUu85JEr1vNK+7L8DFvN37PLvMfwQ9qDMsvS2z1DzhvAo8OL8LPWo1D738IQU9abUsPS6OWD1McDS8xasPO7LwUL3jkUC9kYAQPSdDTTz/6cc8y3d+uzbQZD16j5m89OBmvAs/XrsiXzq8UT8lvSazXzxtB+e8NERQPfA2C703mwa92R+QPB4wmbymjsE705AIPZofND1lvUe9ZbEFvZAL5DzlK+E7wvxaPA3E4boy3dg8TSprPR3QGr2O7qi89aalPBxiWz1mWM68enXNPPhgrTzSy0g9I+yXPUenkT0YdD89U3MkPAvCyLt4EAW9gtddvYeX5zygSBE86pHePDdP2rwMAUI96M8FPVHrWrxOQpe9M9dQvZmnHb2Vp1G8Sz7GufVtlDqTGzE8xhiEPRAj1btF1iO7pZHmPH/1gju1rLc9lfIrvU3TkL2gNzI6AaEluzCG/Lqrjlu6Wr3tPZkTLbz+IUW9gJSNuxwUZ70KR2U929ywOyodPzyPOro8W8vLu/ZThL0v7c28SWINvai3nbzgrke8KYUFPcplLjyMrM28DaxXPUEyTj1VWv26HDbJO/Dl+jwT38u9N2N+PZbeP7xLoG+9YYGfPGEMi4ng+6s8U2rzPLP+xjuA3O050JaCPQ2apTzh4o08t3mMPDLJLr3aCO08fEkfPeVImDxCrOU7s+XhvZ8jmL0EjKM7nOXIvAXz3jzKxkC9IGUmPSEwjT0/A6A8RUUpPdSvXT3d6Nu8xTuGvUQYFDxIfMu8066LvJ17HbwNu4A8SlcUPDd34z2DCyI7yHXVO543QT2e85G8TGBOPdwzL70hwyo8dbEWu8Ru4bvcjka8AjhAvMT6rTwZ3iE9ximAPX9EzrwW7868WwXSPLu0XzvUO+y8OcwmPEZNWj2zfqm86hFivLmRvryaPVS9ddGkPJ58F70A2lA9GGXbvPj/Zb23E/u71bI0vWJAUL3IgMk8soEbvKf+2zz5/bq9XOiSvEiKdzxWc4A9VOspvO9YlTxJERm8i0kjvcZ6jL3Tv0e9YPPtvBh4wLxjq3W9WGO/u2PYBT0t0/88iq7rPIE6JLwxQO078F0FvdQWZDz1YXe99+F3vPz7cT2Vnfi8BRXnPYecHwnKoyS8+SWLvQkP7TxFABq9Inl0vBWq3rz+iMi8kaYgvNsYdL0Tkhu8r5FhvaVFeb18ILs8ZdRUPYiYRb1b5bS7l6UgPa9/KbwnXzO8rsw+vRfcLL1rQTw8+IKWPT/MGD0g/tW8f82DOwPUCzxSo2+8nZgHPPxPrTu0zKs818LPu+mzS71JHR491A99PBCXkb1ixnq87InuPE+XWjyQimk87xwpPNsHUD1pLGs89lvOPEtsLjmv2UE8WPu8PZxCJL0+fNM8QNCLOyCaWTuqmg69vy+iPYOv9DwIxy68g8rtuzbvOj0vnbK857xZvVJVgTvLqpG5s6J9Pa3GqrybBSU8coItO0vjqb24zg69jeQHvZ9tCDwiDyk90fC1vcfS4LzdyHs8blWRvDnI1D1ahSm6vQE/vElXNrsjUAi9+FsgPLGBUD28ocU8ICcCuvmxVj2aLw29oejHu8eciz24WAK9iKFLPQXNDj3LPJg80z+ZPHmenT32VU89HQQFPEqqa7J4LO28KEFTvO4bQDxiTMe8SvRFPRHN9jwoEi89acaaPNF/7TuN+Ay9zbEGuxVhvrzWuQu8ciJQuwoRN7xbPoa9vylfPZSou7y+r4e8kNSDPfdFfr0758u8W+DEvGVgFj3pe4i8rjpovGaxyzyUIgA9bohUPF373ruFMk69BUnnPP/BHD3J+Ce9dJ6/vU65Gb3bhcq8H5EoPc6bB7zMzHm9WxI4vRR90D0pDBk9p3EIvXEZtzw1DRi9HiX7u9qFD72vKA69F06qO404kr3YmRQ8ypjrPKSLDD1q2ri8fdsXPF0VYz0XiRQ81FqUvep7YbzDMhw97ePkvAs1tTx8Too7J6UaPHmiJjwUs5Q7cxFVPOPV1rsPLo084FiyPDJPgL3pnVy8JdC+OpoBRT1yM0A9fzDTPCfvDjybmR097N3mvKwkpTyXtVi8nCkDvTLSJD1sFiQ9qv2QPCcl4bztmfI8sYWoPFwSRzx4vBc8U+QivM5KbLycOqy8zUkdPfRUyTs1qUu7c7OXvNKPubxs6IO9dd3rPB9Lurwqvoi82pBqPGPmtzzkFwI8zqKyPDr1Sj2jFDS9bRGgPJ1tK72iqCy8Q0kKPTH10btc5tm7K+AXPbAXSjvf0PU9LQVUPbIRrb2hjcM8d/tuPU453rznNSs9enAzPXDsJT2cwvO8uRTCvBwc8DwBUj897TJevE4Ii7zE2KY7C+Twu/bmcbz+jg09NOYmvMkExjzJCAc8Z8KtvNsb0jktGwg9astHPcQsvr3le+K9ad0xvdlRFzxfjpy9QJr8uqrmfbwSgIW9ZO6OPcrGzjxgXSm6PLyOPJPsCD0hKeO7ihDove4IgLzdmHg7oGaBPBCIRr17Lr68ydhpPS/F97sUBra8nyuPvHRq/rsHHMA8PXIFPcggU73wJDo7JML1vDR84TtGehg9sVLmPMLbTz3WXc87rcB+PKZxVj3jGsG6ZzbjPEaVYT2Ww7G95GA7vaMkMb09UwC97VtrPNdjAj2wU8G8vbuKvcm0bolqvUm826iZvexUz7yo5Fs9kp0hPXIfZr06LuQ8jJJNvcdLJL1s4SO8KuM8PScdczwyrxO8igsCvTmzeT1FtYG7Av9svUGTrDxI4r080SkkvENzlDubus28I1ZRvfG8JTwPG6e9kwCmPJwh1jydgZ46N5elvOQITrzbMvy75ZcLPXrUwD20sHE8UBlYPdn1hzygc3K6F1UGPYbi1bxd7D+84Kplu0BPXLxG4Cg9n225vCTVFb2krpi8VdcSvfecWL2y+j69129APEzKRDw+qxq9G+bfPGSzATwvXxC9pLoUPW6vur2qkKG8zyn2uzCyHD0X5fE8tIOHPTsm7DtcDZs8Wj2NvL9W8TssWh08qgbqPD2+Iz0su3q8wtpbPKhFiz0sYvq83gA4vdfCDD0QuEI8UgogPQHb47wNePo8w8E5vFIGAb30kyi9kVqBOxP9Uz1X27S7Ee5oPFu8hjwLmpi7iNYQvUYgtTzXkpu8zUJMvXukhj1G4k69UkYwPUTJlQjArAe8ClyOvSie8DzMncU8CgCgO2bZ9Tt7xU48JeRTvJtzUbzkGEy9144kvYD0Cr30OUQ9rkghPZsoCjw6vRK8en20PEb0B72LY4m9bSyQvOUTjb190tu8vtl6PPHsIz2VoZC8R4HTvAphT72954c8UA0uvSiM+rxt5Gs8kQYjvVG3DL0ef4s9XoefvaZbAb5jJ5w8lS2FvJbrBD3YVxM8LGeZPLpMGj1gFyI9YGWBPRbAqb1vu8U8N3m1PcMoAT3+9927pGuBPPin/7zfCLS8WVnhO5nmrryFpyK9a/gNvE+zsjw0TGE9nbo+ve9bHT2bRAs9/umAPUXoyrswVBa81Po6PK1UobyB1K29OWDRO4SIcT0MMoG7bB0AvA3sLL0GLJQ71TaePAj5ujy3Kji79CelPSV+WjxFNr679SjjuUrqjrys1ke8AmzTvS3wdT1ws8M7rw31POAeajxdmey8f7cLPYjzyDzEDAq9YJc3PXXzA7yn37M8Yu7SvDDHVrIidu68SXUjPRMg4rvnELO66t74vLrHsD1L3q89O5evvJRvIbx0yO47KCQhPR0stjt++TE9F2QDvYW+mr1bn3m9/kOCPcrS4Dsb6bW8S/aBOv7zRr2CRci8zMZuPOakoD1gqVy9W5bnO1Ujrjyq0DE9a6o3PeCJnj1QVGC6CZ1bPGxnRb2JVEO9vMspu0823r2Asui83QsZPWyX8jzRv8O83brPu//jRD08lOK8Rrilu9B9d7wye9Q8eUvHvOhOebz23bS84dGDPZEXFLz9etq6WkLQvIN0Bb2NO/28jqg1PY2bhj2m3kw7/6SCvJr4Zbytcj094KtEPbkfzj0IOJU8gMoevRGQhT0NgXW8jNnDvHTiiLyl/LE9dFA+vdx8tbtnd7G622SovFd96rtHSBc82ws1vVg7bjwP+zK8/WFZPMf2rjtXY/c8WveEPYvsQLsu76s8MHN5PUWtr7yHMqq95eLlPKdI+jocjzc9Y/9ZPaof1j3hpoW9TUYPPRyKnDwn1Nw9vx68PPx40T3wCGy9Gx1OvQIqRrxfjz69eLnUPBqcoDw8iq88/CELvStWVTkCtgu8DQXhvHlJgbz1kKY8XeCKPAHGTT1bKrw7Pq7/vOvWszqxQFM7yZDZOzQu57z4VXc8V29avZBQOLxF/uy8Tlk2PZ3CizxzEKm80lYrPdJkhj22vwk9WJPNvEyLkz2t70y9WFcpvbjPlb2qoWu9IQCkvBNAn7zSMgc7I1EovEBIQzwI0wu8jmJrPNrCEL7ywCe9GQxjPdWovDs5omK8gO6OPOUTRL3orxs9nT3gPOwKkT0z1vu7brAsPVhfLzy3Muo8vkQCvTIIjr18B5k8vAdsvCvIsLxv2zE9DSSiPcP0xjrB4DG86vCYvM0qxjy6Oae8gBlxvMixgz1Dl/G8LM3UO4Voaj1xVIe8sLaIPOmdb72zazK9jAYzPHqshr1V97W9rNeLPOUPIT2JQdG7uhyLPNny/LssEJG950isu326bb2C4/68W+LfvOtQ3og2pBc9wfuUPAqxkL1RJoI91rfUPetmjLsjqpk866xOPTI/3ryu98I9Lfjfu/8g9DttqO28LU1DPaokkr2XG9c8w0hZvIlQqz3W8dk7gYADPZ3c8zsRo4A8LkI5PeSE+TwzTF48aBgYPeOwxbs9fug8xd68PHXXaTlwyEw9J2f1vH8IjjzKEVy8QKIpPKBiQz3/Who82fAmvG4Jtjtlv+g8AerfvC4fdLyQeiA9pMmAvbAvUrxwuL87CgthPWnEJTyzYpQ9xOzrPGY0mrzJftq7SIVXvaInIr2wHqs8ix01vXXLTb3U4O082fRJPXYuSjvIwHK9EAeDO2XVrTzyWha9BghQvKMaA70RCcO8N6UwvSkjvT0nAie9AqCqvEllsrtbZFM8wncBvQFNE71HWoG99Ka6uqFSAz2NYre8b+KiPPPEn7yY9jC83rDDu7NhhbwtkNM8tvlqvGPg6z1bNY87E1PSOnFWlruEk8+6SxvvO5QEPbxLTAa8KZTtPVFTmAhIXIA8/curu+tnM7rgChG9ImCrPCrhJT3P3nA8Ni2kPLMeKL2FRQA985gWPLaRdr3fbok8NdQVvSCZ/7y9LkO7Th5BvVd2ML3Atgy9D71/PP0h0rwULeg7COsJu3WQeD1B4Rw9rAI8Penkb7z17V86YvqYvEA2LT2pQ4S95VDvvH/rq70en4A9Ru13PIRZXbwQkKY8c7fSO3Hel7wJTOo7fvWIPeMuL7tVMmY8mFKlO8CzBL2xxza981ENPFguC72wN2I9HOKPvMM6gzwvTZY8mK1NvW2Mv7waG4q81BuLO8QKFTzw0B28hhgjPXumbT3JCPU8rykhPUUlijwOmmG8PQwCPcUfZ72KYdU8UVT7vILIAb3Lcu48XIOTvVYUKbzprXE8JekkvVMMQTypuRK9SfYqPXtN9rxaW9u8eDJpvPbNn7zjPm88g7I3u6wUuD2g0Qg9wmm/vCmA4DxnN/27q/AnODwzjT0mMCi9GyohPSM2DLwkeKo9V76su4dMUrI8RbG8rGOVO3vjVT0qUZC9yhzwPNiLXb3VRQo9HagIvR64oLvLySw850uUPUzKLb3MKlu9SMgBu2yRrrzdPeU8ipHDvDZyc7xIqqi8QHyFvTTAJL3qGow9h9IIvYTU6bwHyNu75TGZPIxmubwn/pM9f/lqPas9mrzYFJY7CIF8PcBeYz3XvWm91q8zPYl62LwMLD895CYtPL9/uDxwYye9MwxOvJm4JzzvMNq7J3w1vaziGjycxek8FznTvPugGb3gMVa9gom6vISA07sZamK9XbwiPI/j3jwgmxS9exW4vIH9PruxW2q8ldWOPMDV9Lz4jji8AEGAuFwG+zsxlG691d6HvS7YaD0FOWO9jj7OO/qZ0zwqfhc7lnitPJwsDTz0xgo9xcBcPNkBnz0cKKA89t+ZPFtxZrzXSac7Ew/svIxYVjxGl5o8wBH9ORZ39Tt8hSU9FpFUPYobvrplwuq80JrRvHfkvTySbpi8X4yEva9HPL3Gpzm9vzSgO6sbhjxG/he9mIVTPY3UsLwApKg64H4DvHVqF72doZM8+9mDPNML7DvvmMC7UuhVvbqRNj0GZS+9S/wOvf0wOTxJniI9T7mYvEsG3Li97d28sRCJPDNqL7zzpto94cSMu4k0DDuFtSS7H4wGPSGoZjzA4om8iJk3PU3zdz2aqb28JriTO0rfpTze7A69OgNEPbUvBTsFMCI8LBGaPOesmDwJOA28SKKLvan9uDynwTy9IRWQvG3Jn7wnE/Q8y/UYOqWt9rqh/DG9aDgUPJAEGj1Ir0S9yDu3uwCrUL1CqSi9aDGlPM1sKj0VSPE8QLNiPJRduzv2ZwY9hIQevcJOqry5IR29UU6MPMntzjyEBQs70olBPcW79DpfmRW99UaYvdOFsztd4w09iHn+vNcFlDwFVP68qtNePNc9TjwhXwA88Q0BPcOsgjyJcIe7MluEOwQYuDx+bLE8r2VRPQMB7bsHeAc8Bs2lPBiDzDzQzh08yj8Xve047rzEulS9Z8aUvfuLPYky5gI9koMMvZ6OPL2JfYk7ceGzvKX+yTzkueG8YxwGvFBfJDxLi0k9UoN/vAAETLuUiz280g2pu0EN/Dzq3Rs9U9cYvUc0PD1/vPU8AEYpPMMnQDy3Zik9QZc0PZXunLtGeSK9asMbvQ3kzzydPJC9g3Tsu+QdHzzmF5Q7vgioPCLYoT2Rsua7YXS1O5SzjDylw5c83KmxvLkvp7pgGK68zRo2vYCNRDtjF2g9zpjVvOjo8jq5EdA853ifuxD2Db00pwW8/ZUwPcSa7Lyodq68ghxWPVUQWLtyTbm8mG1cPXNKIr1dBhY9ib0lPGhQBj1r4D88A/wiPYN9kLuVOpm8ratEO8b/Trz5lhG8rF36O446JT1yAC+9HY7PuroKdT3T8wm7lw2ePPBz4rsmjh+8UNzEPXb74LyKNU88LfA2vZUqj73hwoa9EJGrPPvBHL0sQWk75bTGPCHShjubZj+7BN3uvBN02Tx7bw89rQC7vE2FJr0P+4u8kF8GPd+zzQdMNS+9CGHbu6eNGL1Ek3k9ed2TPIvvfDwRQ468ka8NPXAmi705pVK8FR+KvZ9TTL1vuZa83wEfPJelZz2lLR+9fFfvvJh+8LyGG6m8iwdoPQnoczv5vM67VRawOL9JmTy4r7y810ENvbBu2Lz+AyS9w+tBvebjqzye/UQ9mKzxPDLfB7286/g8e2U3vUvAZr1l4pA93KWzuz3JsryoD+S8nWw+vLh8vDyDB7w6gbHdvKdbVL1825c8DCK8vHtcsbvbzts8q5WLO5G/bjzQCC26yOTfPLnQBD3KewS8SZPwvN18Pr0eADO86d+FvfEmYj3nzV495PTYPKnxgLx6f988Lc2DPfw3vbwGGZe9gLe4um061bto9gQ9dgdRPRW4YzuoYr68NXAIvY7awDxeeQi9UJI6PFcWL7zmuwu9KLUIu5LH/DyBoJI8Kuozvd7e/bxNG647T6ZeOwHfeT0foBy9Zp+YPF2fOz2e5MQ8AtkYvMQS9LyH1Ho9JYJJugJqgrLdKYC8IsebO/bQLb2U5Qy95ewIvaYT2jsDdu483XU3veH4nLxiKE29ULXbPIQ66rsTxQC84T/CvGR4ETsJU9O8IH+2O0oj57sIrXc8GB01PXkwkDwQkAg81hxePFe7XT1easg8PKnHu3hRtDsEZv88QL4GPbhJBT1WcgS8Vs/2PMuzKzwNPYA7uPs/va+xYby8JZq879EUvBGkvDzYoR89FMe+vH7LBr08+oM8XSCYPPT2XrxJQmq8VQm4vDBvYzu00o08MBRCvVFqlryMNQE93Qb8vIbUmTvMmKo7pqA7PUVmoD3kvho9fzJ/vWz+zrvggj49HtSOvMCJez1wqYo6NLMyPS0b5TtwuPK8qkGhPc0tLj3AkjW6yzc+PcGozrzRMbs8UgXrvK+DYL1hxGa9JBhXvOEMAz0n6Ku8NpCBvV3xrbscg1y9Aut8PHcGaDw7XJa7fXhnPJomPb2BS+471ULNPC9bcT0aFUA9FIm4vKHW0rwXK7q8V7CHvf/C/rsqswe9XEDIPYrX5zx14so8TBShPf5kGDz4M728K6+7vDV1wTybvbu899GAPep95TzJMVI964HNuZUIlb3GsDg9+X6OvAeSGT2bBNq6vKGDvawjMT3pZoS9o3BoPFEdBLw8AgG9ZpTKvePHIT3S2B+9Q/m9vPlMED3DgZE80bcMPYi7gb0c8QA8r/gTPbM2ejwh3Lo9PSSnPemgGLzD33m9lCvXvbJKuL3olea8Sn0/O6KRITyn0n294iXqvPU2DLxNt4W8gBcMPe1/Hj2yAHk8H5rVO/ELtzxoQ4s9GK8EvCgwN71PUPY74f6MPPTdFb1Vtqi54XJUPVdipbzBWZc8HharvBIkoL0bape91DcEPby2hTyHE1O9mocWPaFheTx3tsM86pCaPTUgGz29EyU7SqNAu1R88ruHppE83H0RPVAIQjz6rZK9iweQOhn5UL1FeiY81ncovTINmb3QIjA97e7NuwYyur2FWhE8yvDxvKi5MrtWFDU9kYBrvTS/SokvVeU9ByTuu8OwxLqlFPc7DpBUPfTiwzzlwxQ9UYqsPYHPjDwlwqQ8BTpJPbNKMj0yXuU7tbgnOO35Cr3lf7e8v/aVvAmQBz2UjbS8H42APZQ2A704Byc9p7U5PLUQwj3QDvU8d5cZvT/dg70Be+w7kyfwvCti9DiU90Y8xAQ4vSAY4zz4hsy8Ql6YvETrFT0uyVa8eXm2Pbj83LsEISa9FlJrPdDjhjz5hW69u9vrOi3q7TxF7Pe7TnMPPQMUubzsbha9dxBWPEwAiLx7R+A83IifPM5ciT1i12A8JnNpPZDBWj2kST28fs9qPBimF707wA89aiiiPJ3YHr1Ikxa9tJtdvXDLiLysdju9g+AvvUz1BDy5pAm7of0VvM/oi7xAeuY7MJV8O7BkAL3gxHo9Lfq5vaPO5LwPFFa9G6VUvfW+T71zeuC84T77PfSo6TyOkyC8CqKIPBAUGL3MY2S8MGOMvf+t47x3Gse8d+l7PaFUWz1FeBG9+BFdvHT/dIcYfUG9HFYmPdStDD0JCPO8jQ9YvWDEuTzt6T875tV+PWa2nDywJ1i93eV0PYLxZj2YPXO9kmbFPIjhOrwIzXM9K0c0PYbDvTzNiBk9zgHCu8DZIr3EYgI8GTAWPAl6srzM4jY99ibcPIoYljyXwp+9Fk6cvemOgr3T2tA9H3yYPO/uEj3aRJQ9sFs1vFmvqDwTtoi8BAMCPVzQkby8BgI9Z2ykus/d4LuP9AQ84aUUPI9VPj3/FqC8nCXdPCLFdzwl87U6H6lTPVkZoruIWV28FoauvOFhSz1cLae8MPXUvEKhIb3sgpK8twNHvEksE7yRb8e7XgRvvckVBz0ea3S9+SSsPKl7Abynkio9ANIBvBTMzj14Th09g10ZvJ4GR70c39u93MD6O4xX7Lzn8bC87jwLvWzyGz05k1c7AgdXve5bNb39Ky08GuWjPZr1cL0RwLW9FG/7uzteZTwIYjq9VMwDPRRBvzze2yq7n1tpPVMPNb0yWcq8OhOevBr/WrK6tFG92skqvQCgkjvWAWW9KtT6vOVqnTux+zq8AuoFPYDLmbwczRa9EwggPTfWQj053cy8Fb4zvB05LrzsE648vNMTvb7A5jwD3J28ovgOvXekxLyiYRk9656NvO3xmDwYhhu8sSWFuxgTAb2yQNG8qFq8uUISJD2yMoK8OGpEPUEIHj17Wq27PS14POwyurxKPjI9DAkoPMs8ibzouYE8VoQgPQIMAT2kOMC87SqSvHTXzryb21e93mucPa7mn7zcDDE9ksUvvbaR8ztKwY49lWsTvIJpzDxLcie9ONsvOtbmXL2LcnA9lxg0PUoFHr0otv08ZrOPvagZjL0c16Y8vacMvffJMbysgQy9IwiIPWmoGLvMY787ICUAPQEanT1F1DC8LT/BuxxWRb0rtJk8VTyYusmxizz9C+m8lXmkvBRZaz036mE8YrrqvI9Xrzy5HJa8E0fyuvcZ0LyfcN88zW7YO2JJbzwuF/m8HT+7PB46dDxVVTi9BlfxvBHLXjzwdeu7Pbi8PFOzCj3xcs68a4S2PPcaYD2puWI8Ca7qvAtGqDtRgRq9isT+PJWEvzxsyCM9oCiDvTWB17wQzqI6uTliPRNCiT1rqh47GRe/vVPiXD39Yga9Jyg1vZZtZ73DxGe9CsqLvJF3lzuFNKY8Nnqivf0wJL2VVkE57g92PAh75bzFc3Q9guzVPIrQwrywQcY9TyE2PaJxj7zKeMa8iQqMvdPe0r3sBM+898W1O2Putzx+CaW8gN8IOYOeJ73L2l09fzoWPecjZjzV01M9QTCGu7NWBL0tOio9H+EGvXxrj7zfZ4c9nbGOPKH8NLz3SNY881TSPKHO27wjpz08zcphvZWmfbwBXaG9cG/6PEe4g7wclk88wniOvXKO67xUZgU81pbMPPfZBj2e/Za9eC4aPAYhjjzWLzA9tSpJO+XgO7zNJDu8igrYPODV8bsjo6o9clc3vS93zL2thhm9RIICvXPMvL2Z0qy7fUURO/i1Yzv41se8SumYuhRQPIhbC8Q8S1wPPZVh77z4Lo49atuQPRqvmbzXULg8X2ePPYBUnrx+NRe9+ycHPShr2Ls2E8m8+t1HPQuRCD1zsCS7PZrnOlgq8DwLKTk7uEHGPDbeB73Axfi7oIIQvSvXjz2DvW+6Xb6/O9n6u72NspQ96nQHvbgGlrxJ4Ci8bbihvXJNDL2mfbA8KCSEvGo3vz2RwT29GL87PQ+TwbsuJdI8zzNlPCWvTz04skC9oDMRPHooqjz02uO8XyXmvEpozjxcTLc8KPRuvLC36bs/nBC83CFEPSezKDxuvSE88XqPPYisezwuwhq90KRQPZ3kszxkmIQ96h2pvNstkzsv/ro66rGcvfvyuDxiRok8V+ievbdWFLzj3cK7pIt+vJOLezsk6dY8Ht4SPVKhfrysxKc9lXlxvQZA4jxQ3CY9m3hQvNJanTxV7WO9OGTrPBd9ZT11iE+88eixPCfegbzAeYS9CgDku3y6rTv2ZwA9fynyvLIEwDx0mBu9C88xvZd7FocZo829iP8LPOcqpLwM64K9jCzBvVPbXD2Xt4w9cy2kPQkGhj2C+eG8e9JJPc57uTvjshu9KpUyvHrzi7yNWJk8vSNaPaJPJT2Jgca7NRnlu58DVj0gRaK71UKFPQBppjl2cJs8FZ2Wu+ZjJ7wCY0293G1bvM1YED0tz0w9IgyqPVYkpryOgBY9UzUWvUNSoD1/8va8UnoEPaMvc7wd13u9TDMVO2VwiLpdacI7LfRhPGtKiD2t5iK8zfXnu/TgUDyVLac8+H7sPBjva7yu2J88s2wyPKdPJzxQKzM8Kw+AvTU6xDxirc69RYfFPOXmWz0tYiC96EdOPKXYIrwqqpC9eLJ+O0fserwC82k7PNTSvNbWvT00K9O8nndVPTGjjr3rA/q88Z9CvJQ8b73sXUI7rdSEPEjQyT3uEgw8Lz6dPJLuhr3T/fK8I1KKO43X9Lz5OuW9qLFAuyexDj28kQI8/J0AvR2P7DyOFyG8sUafPCtyjbxFh5Q8YAgvPMCDV7KnpuY7XwgCvPNGyj2rAaW8/xWUvPlPJL1wW7875TpBvOuxYb0gXoQ8hzMevYZT4D337uo8JusQvD+Y8b3xCc89NkRHvPzMbDwUCKI7HYHVPAyX5LvlaSk8JtWAvCpDB7wC2PY8eGY5vIDOTToS5aI9dmu+PK3aI7xDH+28hVV4u/iWXDvvoFY74Yb2vFNx0bwKoIy8nFkNPUdBHD3unMs9C5bRu3EICj2IeDc9TRBtureNRbzb9a26EpoxPcBcDbrAD5c8nIgcPITdgLwv0IE9i82JO60vxrzkHjO9UjEAuwtglrpm7UA8QUy5PfeUsbz/G3C8Ked9vRydfL0J8yQ9rjqFvAIlcT1Sir+7TwN+PVkWGL2RgQU99MhhPbwVqzxLpyU90K6FvSZljLxlsm49Kf8LPKrTL70mPpG8YomMPRHmCr2Pn5A99uWzPMQOI7xV5/+9LtRVPfrxhTtdCJc9qr9bvcwuLj0bG9e8UpsrvU21CbwoAuq7zsOVPW0ADDtV4104LJU/vFT8/ruQEiW66HJjvSe7rDx8Y428pSiaOtMx8rtPqbq7uTQxPOmwNzx2oYK8cQWbvbecDb3N61G60jUcPbrbl7wEgJo79YX/u/Rta71gFii7P4SmPY2RP72mbIg78f2uPXFKhLo4TD891beXPZPGVbzWNSy94Ww+PVslgz2YxNQ88HcLvetTD7sNVMc7VvHeO3FQGbwZyI+9DJo4PTmwEj3Y+tw8VMKsO3kMQTuXVPi81EQLPbyynj3Ce0U95X2zO7srKj3l/n07V+k5PW03orzBBhM98hKRPHBmYbzRRSY9dyy2PEE7uTvpJ2a9GfwKPXeepb0OPny846X0vAqp2Lxd+FO91e/TPb4mJD34X5S6GAoyvYZhFr00aWe92YaHPMs7G7xHoO67BPCYvE5dDL3IQKO9XtKYvViNGb3TOcw8fg7SvJENSD3urQI96/FovLPEND0DkEg8Nj5SPeqmQ70i4Uk9lVtgu9mx3jvJqTk9GV/YvDEBbIl4+Hw9Io3yvO09Kz3pYvs8M+jZOxUjkD0fq0g99TNPvZgjuztZkYG9QCokPLlOejzP4N67ifdmPKGXTL3w9a29jv1fvdshGDzqorK8+qqFvMkqiTxi2JY8A9cxOxUiGj2Qbqe7yQ/Lu2QyzzvSUSM8+mZuPZacyTzaDBG9+pdvPcalgrpkoy69YfS2vdrYSTtcxI6857zovBjA3jztHVi8o9OEO39DjzzAOP07WxDbOqoQND38p8A8ur9evcCLmr0q15i9rwSoOmBSvTtFK3W8GQWWvStsCL1XnRm9VdqSvPIyDb3Wq6Y8oHduPMAcrLyMUUk9Sl8EvbKXJ73SgxO9S+8Quf8p7TwgV5I8qrX9vdSaCr20V9a8xStkvZMjFD3gxqI9jyIhPRMEyrvIn5u95iaLPHfGSrysLsq9zDN1vEJFBbtZbGi998R5veSJlz3nbWo87q5pvOCMwr2oHv880HdrvRQWozyfUD681fcku6b1kD0AsU284szqvNz41QgIeQk9rkb0vF4aKj3w6qa638sHPeGfJzzBBjW8ZW5evfqVkjx94ks9AYMaPeqb8DzlP589iOUQPfo1gb2Z1qS7s5+UPDaQkLzDC4C96vfzvBN5DLxeNbs9pOm1vEgsUL2dSVI8fcZHPPP0QzwSZX+8yR8JPdPUAbx7mmK8Kq5oPCYuNb1glZG75YNau5Sf5jxZSqY96qSpvFColL2p4p+8n5AAPZPvuLzNdhu9iddsPX8WtD1bwRg91g1WvNd+TjxdjXk8SSV2PLwE4Lwfrp47iygjvKUg9jyLejY919K2vc78m70qVp292UW+vSu/RToF+aG9RIOfOqdwh7wXFSA8RNSkPPvigj3YXW47dv56PfTjobxLBzk6mFG9PHQYbD1AoHm7HQoGPZmKWTywINY73QkbO3A7JToOVYo8pULOO6AwAb3MGGG8M3HmPEUbEb1iGho86nrkPOPz5jyr+n89utOnvN3pgjpEmIe9KrMDvZLNrzwFBxS8fKw+Pby4W7KslvU8hZzKvfhzqrxnzBe7nOlmuzcAcjt12/e8XGo0PedkEL07uxY9cDX4vKM1ED0Fywe8dF04PcCtj713yjW9gVenPZuWYz0jI6O73I4RvUKgprzrrzU6Zl0vPBfR6bwwu8a69A8jvEczIj02g188vQULvEUrS70mSvA8l1HzvFQuRT2o5MK7uAYavJkGg727HJc94f0IvegBDTyXwo87aWURPYDclT0lZdo8YdKvuwHZxbxf7W28JkegPDONUbxk4Iq8pz90vBUmYj1mzpA9YgtHPK1kpbxlDQM8DjpTPYM4YzwBUjo8fRJnvYv70bwe+O08P0CFOzc3gj2fqOs8ACsLOSq4yzzEG+47tmajPVauCby0PHI8jHQWvSBIjjuJPZW7Uu9mvbhoAr2/UA88faXsPAU8rjzIsUk8bWFdO3BMczvvxZg8ayQ3PN0t9jsNDOa94Uj+PKRvRL0Kyh09fIR2vakRFj3jwTQ8fhYWvRtOpjurgRq9tcwXPXeZorxZKna8V0VVPFrLzDyJuaI9gHkwvdKtoTyJyMy85AqHvE4W57xmbAY8VHMmve0kiLy2ULo9IJUMPUpSM7xhyBU9HKpMPbL5gT2MWy09jolvOyXzFr3qKwS9CEwXPEspRbzGU4e90BCnu9kcNLtu+IE8CRHGPK8wq717WYu8LzqtPJ7JGL23N109PZ/vvFh7qryImo08KuVJPS+w1zwfaUW8ea3JvMK4C70FUCu7fZNJOzkuID1//169UpHsPNktZDyHwK078BLIPHtCFL3VqI09WMcaPWxTCD3l6jQ9DpqPuxpUGL1v6/e6yTRsPaYDUbtdIuE7wWZ7PYullzuoa228/pQAvXsICTzxI8C94AphPQ8Caz0y0wS9mSCGu2jyWbxQgg49WpkMPVMWOj0r5wm9yw5KunvqgrymYti8St2uO+FUGL0wNfq8okvBvJj6Br00YKo9dFUoPQjcB73kJxu9KaThO2zVwrxc7oO7RqqmvUI+v7yFkOe8bM2HvXyA6oiVk9Q8aD2PupNDA7piwBi90jIAPZfkAT2O6lu7w9JNPU8jrDzPvZa86AG3vFiT2LtMuRQ9sgFjvdnZx7xDtHm8OVefvX42Uz1Gg5S8xSD+vBR63TvZEpk6G/tbvIu8gD0b0UG94tW3PJCH5zzNpYy9UKsgvc5c2rz0gpK80Dawu/jvXD0nSie8WL1ava3Rgj0Mu5q8zhhLPKDDsjyGJPo8Q8bxPJQSaD2QhNm8iJMZPfdlHj2Dah690Ls1vVIikbtcmte84Mi1vLa12rzgwQk9CjZzPXMK0bw04dW8RWQZu1B2lLv3Uxo9PzsjPf9pITzt2W09ndxfvVFurzxd49U8iPF+vXxDVjz48Y+8tT/Zu+lJiLyD0AC9UIyxPCCIgD3RgvC6l5QPPPbKPb0f1L48rmKdvOviOzk2ziS9XCguvatvZb2sYTe992j9PK7Kdj2heoI9fHbhO9HLnb2mIUO8hBSbPNDWiTqLVCW9EzQ+PPK/0TyvII67eqLsO4tmyAi5kDC8MLkAuzi3I7zFFZA68CFOO+f02rtPhwY7qTdFPZpiOr31q+46EH4fvRNpfzuWEjG9K2eZPNCf3LoeIsA8jMOOPD4bvTxaRn+9I+D8PHRshrwu2YM9jrk9PSNee7zEZhI9sexLPcIPCj3qR5+9VAT/O4U4jzt617g8C/DpO0BQyblbDCE8ULetu+bAiD0C90s7frUNPceR4bxLpTc9QBiaPPomAj2rH8W4KKoUPW5Y5zybNus8XWnqvEV0i72Mz/q7tZJUPUoISzzyASa9VDrJvOulYD2Itzc8FBN1vRK7ab2l01m82fs6vf0v0bsH0I+8H1tTvCoorrs3Hy29GuIWPSoSjD3p8+o8sAx4vB2trbzp37o78qBBvfdWEjxy2uS8EdtYPTP6+jx0Kh49KbeIvOCNtrx4V848MAV0vKM43LzRnVg8Pms9PZ5FgjuNAh29L/uBvDYmBj3VCvU8rfsOveRzzjyxFwA9mMQhPUN7hrzM36M9FVoaPPbOXrI8uKy9vy/QvOEXurzYXyK93GXIvRLuob30Zhu9ZdPdPCGA7bxVHRW9DZIGPQL8JD1q5Yk91VZ1uzVygzpRvWY7UvwBvfd0Jz0LZiG8FcU/vVY7A72x6o08hpE2PfcuFzxe9RQ9adgvvEAusbv2Hlw9vJyGPT7TMr3G4CE8zY/RuzRruDyp7S29xCGGvP0Jo7x0lBQ9ALgzOJRnC70hugE8P0d7vCZuAjxGsR49ruVePBpcrLx5IZu9A0i4PHL6lD15A6M78UGCvIP0Fj2uthc9PmyRPc0gyrxWYlK8s4C9vNg62Lya/5q82EmfPD71AD017cg82x2YvKvwwzzFu2U8ZQSePMVKrzygBUO9MxTSupdNmjwFBRY96NlPPaCFXz1ff/C8IdRzPY2vcLq8cVA9bfDIPNErYD2Foxa8+EBsu0AvVD2QBbK8z7sbPNyXj7z/9JC9yOWLu8P+5Ty1Tbs88ZcOvTkbjTwSEk69rC/GPLvbAjyCMhG95bAivCf+qL1hXZ+9HnDOvH4hQr1grEq9m5EKPT7iFT27GWK6xwpIPCnQm7zWnMs8EVKUPON4Lbx9kG89MTSqunWEVL23zmA902OJPMd2KT1g6SK9guqlvZTNmDySeSQ9FdN4PHp5Dr0SjIG9Co7DvIyUQzw7Fbk8AU/3vZuTXb38gZu7K8rFPHVCXjtzVkI8RFqbvIQHmLzYOYM9Y002PXWGBb1vADI9vAQFvfgPmzxZm468JohdPVu8yTzJPBk9aUOIPUPQY7twxU87SyoXveqIWz1k1RY9aKstOgH1bbxZ2BE9ytgDu0g/hDq7D7U8MsN0PVLtI7ybTiA9DnxVPdXcjb3L+wY8aFTcvJTMN7w2cHG9VNp4PT8at7xUiti9FaIyvJ2d4jp4/2Y8n5IhPEBERLsxOni9rNzLvMuUe7tT7+y83AmpPdy8L73y7Ae8WcUHu89nCj10tFk9oSCjvSGKmbyMYZK9ejXmPMnrpr0vRbS8yokYvJvG0jxFe92815FsPRPBEoni5Iw8ZUogPAejaz0+UqM9sWoOPNX9FrnWTzI9zOdLPcU9yrt+tmC9yL89vCaV07w2C6M75Z4+PeIsFz3BRbo8jNYGvamZ/js/bby8kCqIPYUJCj2+IA+9CBkDvUqUaz3Eu0s9rzxcPSx0M70lpFk9wZxrvddDmjwLb6W8mQPJPCxUKb1ubFG8R+EQvMJyDLzOWEK8oZmzPACwhDvMqSM9fAIfPToHTj1wRJ68TebMPF4u/TwUOFO9xQTwvKqDQL12TAq9CIPivA6yhz2HKro8mwWiuzc50Lyk5MG7giFAPe2JTrxwFYQ8SwxvPIXMuLwX5q898oM2vVfSxLuJMa+8iL94vRbgIT2r+h0966c0vffeCD3qwSg83p5WPRjGP7wgJUS9sgyQvQkcRL2QkRY9a89ePDgYC70ddzc9D2iSPCK3az3Q3f68GgqjPM4UmT1CsCa9S0wovTNosLyodQO9uaCAvUX0mbx69TY8aNCRPd1RsD1gRjg6nJ2rvNC7ngim7gS9nkWevKARQ72KtCM9ZBXPvJxVWj23YlQ9QfERPRRwyz1mUHo81Q1UvHK4i7xv8Js8z05xPJXCDr1ljIM5AF04PKH1/DyyQoC9EKOVu2NFBz2+OAU8D4q2PZZEfr3A2jg9oF7hPE8TSLzlmKs8rNBKOwtewTqCkNW7aVNyPGcCQD0qT6A9SX2ivCi0Mj2tH7U8i/oMPakWOTyseeq8zubcPLNIuLwhRrW8ojiqPO3WUjzkZCs9hjxdPW6MWz3U6BU9IJGnPWjq77xnS5u8+eF9vYTiET0uSIK9XOjAvVE+hDvAY/K9YFaIvB2ruz1lMfW8MnyUvNBRm73a0FO9Izyuu1+kRDvsqjg62cjuu37Lgj2htHS9s7pNPR/DH7z7a0q70ytwvel1rL3rrYY6WkU9PYftZD3lwRA87NalPfuNJL2only98GV+ut+Xi7swkuO8VKxfPJ1npzx5aj+9nxMOvb0CsjyLEYa8/2wDvbsLJD1v8D48ucFNvGvyVLICIZY98XjvvOjwjTyC1AE9anfevHSDgbwCMsC95XChvFCKkLwoK5E7kPMCPfvisj0nJ0g9t8hOPHa6Kb1J0TM9CfgevfIy6Dy0fRm9tXqfPOAsKDoNPKE8apacPH0ZUDv9fmw8LVcmu9QZBb2rGuo85PkDPVmEdL1wQbW9LX9IPKHl/bwVs8G7jaGqvbTmerzqWKE7tllXPTAzWjyhwZA89ts5PV8pszzVxJA8EsYjvc2XGr0MNKY7o5QEvTlH0ru5ldq8a2vEvJf1fr1bj4k8KJyVuxMSZjyhFOC8rpOiPKhCMb3W5Yy9uvFdPbQyJb04yR07Sb06vfA57DrIB/s8GnOMvH13wzw5bi69s4csvB1SUL2GwEy9Y9save69PD118Su8BHc1vTlykTwU5UM8J2GbvMcKN7wgs4299umuvPcc9TsB2yW9pZ/PvC9wsTziPIK9zjW8PArxB7wu1kO99tiWPLbCyTzuga680AasvVORSrs6rvA86rQmPbJYqrtj7sI8fnRXPEfTsjxzXiG9Ftn2u+He3DvMrVe9h6J2u+1Cgz3ILV69yUuhPCVJSLyAKVS8uwkgPLh0kLwVvaa6dZIXvOENWT18GxG9+2iTOTTdCL0lH0o74M+tu1usSDzlYQC9JPe0vcGAmLzrQ3A5KBA7vd6oljwbaYi7Nf7yOb3sLD0jkZG8bz/auzrha726wSI9FB/tvJWjnDzqKTO8JLzovEuu9DxUdia9yJIpPcXepr174Qq9hWGwPAoX+bxlcM+8g/xMvRQjM70oTn67FKT3PMZoPD1mCPY8PRBFPeDzQ73uBAQ9i8yCPSzWPbxuAoa9gRmFPWzUyrwKWra8FbZ1PdP17TsCAAs94B3IPKTuvjz3tug8iKBbvFaTcTsRZXC950xkvPQBWj2SkL+8D04IPYgoe7u8wek8MK3IO3VEbTwPbQi9/6hdPO8X2bxLxQ69g4+qPLEpirzxpVo9XDRWPRMdirzF34O8O7wGvUeUUT1wIrE8ACURucvET4kQDhE9FRM9vcK++jy9o+G6/dcWvTyaPz2poVy9dUMIvTotYj1gqYc9IyIKu5T75zywqzI9sVSAPOUFir24h3A9rh4mPbPu07ySay69EZQcPU3WtjsDko884/PjuzzmrLt4LJG8c/uHO7R5U71xdpW7ZyARvXRp1Ts2UOS8pQfgu8iFrLzYRwO9tsWnvMyjMD01bC87nS3lPHpUt7wa44k9No/zPF51YrwyJf07BYJrPE4oLD0x2+Y8q/r1vF5rnLyrEsu8LN5yvIFIVr3CTxk8oocRO+LLKT0+Ioc98OGKPBMLljtidQc9eHCxvA9Atjz1aaM9rEhHPeSVL72ZOye7udJFvd7yITrDN5e8sRl1vbeFnrupRo89faA1Pb+nrjzjbtQ8u1+dPIfioTx5e109Ch99vAldujydMgw8pp2tvZqKKj0Urug8tnEpO1tz3rzk8Ag8G1IyPXqwLL0Dvey7qJQwvVanm7wio6O8CFj4POLDqL0tTy69Tn4AvSxgvgji3f28H7HsPC5QML3qXse8Tpk9PUWxuTwio6U9Ic8XPaIdCzz+8XU9TsPGPfFBBrtSalO8L5nTvOpF6Txn7IM8ik63vFF6ob2L6he8wm4MPbsb47z1uI09XaiOPQuglj2G7AU8ADVkukUBnDsEzJq9SCGcO8nlI73xHzA9oDxdvC9CBzxwOa488v+4PHXtIDwh4/48SEn1vOm8Bz0HQJI8C3+GvXuuLjyST9Q8cxhMu9hHtrxQVYc7vnJWPIVzZzwGEys987T0O+lOIr1FEiE9x/2Ku13/XT1NDxw7rxwGvRAfE71wZs87PUe1u2D/4DuACAS9yhOcPHQzar0e5rc7S/izvK18nj1wm3M9ThFjvFqA1DzI21Y9uc4BvRMmNzuNpwg8c5E2u/7PkT1os6O8AxnHvNIVTTwZUAs8dC0pPLd6JL0mC6K83Yp+PA13yzwuwMs8PgCavWm2e70/4J29XfvhPHeU1zymN4U9MpUmvLGSt70lkfy6J0cAPJikaLKGUwm9M/W/vThkr7xfGYU8knO3vMOdpbohQZ29jfyePDFduDvhYtw6EUBqPQsNl7pAiTK9GncivSdt3jzNT1080bf8PI1diLwJdwI9lB87vbh2Wz3A7JI8p2vxPD2KkTo5NQy9MwOBPbFBKL2SBqw8liPsvAxTG70f1p09JWjavHbBEj1tJ6Y7Fd4FPfKpjbznmgA9eqQpPXFjoTx6s7A9tHg2Ohe7Pr3u4sk8ciGtPAkzDb24kAm9hwydPN8EsTycZGA9tg/CvV6/t7xJweu7RKvwu61toTqATag7u3UPvG4BQz0CLRg9JiAwvf74XDyBk3U9n0UlPOV9rbxQDdk7MTmDu5kOyTyUVby6iCivPAFbGr2OnXm9mAK0PEYkhT24/AO9iLgUu8YzwLwFhPq8FKM6vTehwz0G2LS943c2uzd4Sz0joMW8X8ATPR8Bj71pYL+92umbPQorIj3BjLI7JERSvCPdDjrcgCK8JzoivSHsKb0ZsK874bGDvJVTSrqZvle8ZDihvBVfLbxnNEs8XHRHPMScKD3Lo+06s1+HPdW/Dr0Ih0A86Cv+u55y9buTAOS68smOvUBAdTxA5PW8EXr1PDYHEj1sopS84qSnvUYmNjzU/4c7jOOLvOPJTDyNSZ+8YBFpvb3bAr1lgim8evuNvIB+bLl0kEa90VAzPMyliTzatYi8tI3dPKbpIrysIUc9xM+YvPu7+zyVWne6BnGBPQpQ7D25LiU9yKHVPD8yNT0+K9e6DQJ+PcwcDb3MSwE9P5D+vCdAVrzlyyW9mkmuPEiioTuc2sU7/JjYPMu8Vb0PuHi9BOTBPUV6Gj0rswq64eqZPG3xNTvr0gg8AsEpvCaDGr2DoKa9aH+APYXvTjyCHb68fEv5vOFUQj2UJCi7Ct1avWDkN7ypGUe9YWoCPJYZnLyN6/Y8JYqlPLUKlLzBZ7k89feSuf0WIz07UYk9eNyfPH7X5zxJrDw9oAIcvclGNzzTHxa9/fQPvWoYODx3hWg8c50jO/aDComQoEK8oVgbPWzEYT3SHrQ8M+zfO6PYpD3z/XW7pMC+vO8nRDxCPDm9u4V1vO1lWT34lGg8T66IvKTZgL2IyCY9KIRkvUAtNz3anaS9PdaXPHjRAr0S4II8LMAQvbF6gDzTN9q7XXW4PDscKzocgVG9LQD1PfyzUTwbwVC9CJLzPKtVwrkpNwK8FpXOvBrcUD33Wu28ocUTPOAWSLtPZNG8HyqMvNZdhDwe9xI8/V39O8MTMz01Uj897TT9POCzdru4dBC9sKjxvJzHv7vKUdW8aFnKvJW8gbyv2xo8ACNfPK8k0DzHHC48Z//SPH4IIzy8JpM9+vurPU8SXb0L2YS8t+EbvQ2Plr31+Am9EC72vDudHzyXqzU8Ep9JvdIJcT2FTbo88/b0O+WCurznewY8UaEEvLIAWD1HXou9gdksvbF+wrsxWYc8VCmOvKVxHjuMzPk88yhhvLe2ib2/jxc98KcOvBiSPz3E+za9/0KDPK52XD29+1A9Hs8tvSfpBoeVPga9CjaEvYgbGD2rPgo718JhPHJjTL0VIcE534R6PXlojT09h1A7eg8YPX5D0jw186+6yqjevKVP/Duo+xE9VOTPvPr37rw75ee7FckXvR6ZSTxLtiE9V9xyvc3uL7upFUC8C+gwPNwigj10rES9kJMevRgnA72N7Ze7SDAuvLCAebozh1y7xnf0vDJuTT3JlgG9cE4aOx2s3rxvYBQ9WEwcuzzrTL0N7508rijLPFyXzzyMLoe82CPBO5wX3zzBx2q8OP9BPADQo70BT4W8FAukvJkXH7zcYbS75NIZvENqCL3gRdW7G49Uuzbetzy7ksA7l1IevQOEC735RAU9Huu+vMDVmj0pgKi79Q/MPEDXBrzZGK88gPMyu9eGND36tkO9ddCEvJHXmLynxU46Sqy9PLvoJL1eXfa8T1R1PNQlcjyqtK2907Ciu0WlLD0JUyo8OtUkvOS5Ej0iuYG9Cv6CvInoC726mKQ8xtDhO97sXb1IuqC9SoYRPVV0crIj+K08vp65vLS4nbu/SeK72FLhu8hwOL1APbm86u5LParWe7zOjT09C4IEvd9wDT1YMjI7hAmZvFLOlTx8SEe9ohoyPXyqRT0HFO27GRVvvGjzlrwo8oE8P4q2PV4R3jzf1U68ZWSdvPRbaT2ZfhI8YL8RvXmhszwlPek8P2fgPKmghbzjmoI7ptMTPErbjr1adCS8tz5HvCeZAj0oeIY9FSGvOjQJJzuXC467aS7LO0zkB70W6o+9xG+kPZEfl7z8F3s9z+jvuiQdfjwT72e8hEZMPXgAvbxgDPo74g05Pb5KUjzwBeq8EdaVvV8dhj3e01k9hhBzvED/HT0G1rU9yx05OuuCWz0b3Ic6lrqHPEQ1Rb2rsVC7xCjiPAz/Mj3oae07lc46vfrnPj2lkre8i5tOvF+D+bwLPu0517rkPHFdlL0YoyS9zfXPu/XH5rpkgjK827ocPHncSjymRLM8SeGkPAtQwjtL1hW94QgFvV+vH73sN+a5OfzJuxlzHb0QWBW9BcUgvWIj+zzY8zs9z7e6OjXCBL3BIqY8i5zAPKtzzbmWV1O7xKxUvGEhIL1dde48LZzFO4nyo7tI3kW7qgtTPQGdLLy4qy69zT1MPaljezzXzWy9NV4jumpehDwdjhQ8JlZ8PT8UPzy8Nmq8lCmVPAL9A71+auI8eBstuzmIKj0+hs69SaRWvG6sirzrQxm9lm+PPC+2VDyftFS8yhWCPQ3voj1fXro8SOeXvY8xgbzJ/4C7s7hHPUZI2jypj1S9CAbVvZG8yLwhctE8+utHPSQ6dzsrd+68UrMxPJYgC71RMbY8xJuDvQuKYzq1mb29V+/MPOCTdjygrI26Lq7QvMz3J72ZGcu9DYWvPQ0K/byrocw77ElVO3aMDz0aUau8AcliPJDYI72M4Qy9Bzp9vBV4Vbx2WLq83eJgO5CDyrysjS48GbEZPLygR70Qolk8RpQEvZ0MMTzR6qE8Uo2iPdMXc7yUDW88lVGePBlRAb3HIpi7YueXPSYumoiFNYy8rH2RvDC49Lpgrog94KzHPEVrbDxFLSG9wKCuOwdWJr22y5a8chf4vAN7/buwNKc72pQXvOpD5TzYPoE9oSuQPfvWlLyYCq27uEskvU/5zzwgabq8yYgfPO8l5byJkyW9t9bHPKbVAb3bpx+7H5jYvD3tNbv7fuM8k6M2vF3hJT3QSL080cl6PPWDYTxdbA48ajCZOyj2pb059/S8uNrru4bGyryzaQC79aM4vTP50zxtpRE8n+z9PCcLnj0OV4y8MxwEPbTfk73jGtE84sovPdbm9jwg0AA9NwhCPEZL3LxIJfo8aWMGvRBYr71bmAI92LM0PaeAr7wsPhi9GUequ4HK6bw7Z6U7pF0HvRAvuTz/tz+9eVAYPah1ELzfIw49mo5hPQqvsjyz9Gk8ZjJBvXxRQr0+dh68El8pvGu+ZjrCqYO9Qp/Zu14PTDu+Q7S8uNFAPUF4NT35quA8EfExPVrSmT1Fdva7fYELvVd6Bb3SWZG8sfeCO01dM4mC2JW8tLEDPYUY5LzWVgq9Aq6uPIdVfLyTb9m8xbBMuyWM6TuPfQs8aroevBANRLzr1RY9LYuRPMCyYz0BXXE9C0F3vO58Jbxrgsu817aUuqBrpbkKGlM9Twc0O6uPG7p1X3i9dRi1PEccuTwv2V+8O2BqvcAPDbqPGd68iShRPdYvU71yFHw9j/MLPfGzFb2YSH89ivUhvV3kSr2kExy9RmwIPbApezwALp08V8fNvHmhTTxpLku84YFdPUvEXz0XDD498z0OvPHKyryc1XC91GXePBv/2Dq+lK+8jsdRPSoecjzWugS8AqY7PYZlBz2RfcG8F3fPvIUEnb3D5EA9NRSDvH8ilbzwHxq90BiCPfvcMD3lV4i7BA+OvOh7BD3My1I9dkinvcZI7rwbkYs9IMr1vA+kvTyNSAU9QPzruh7dRD09mwQ8XNjQO2FuDL0ckTY9mjgMvVcvJDwCNNG7jhxyvTQi07yagzQ91rPdPByTA70s0io9EdQIvTjtjLKJx1C96+uZuYyuKb2vwme9iAeYuznstrw5/tM8bzE0veE+pDtQOuY7nwEuvVX8eDyzrFQ9TFa1PDT4uryCcCW9IvoPvbywHT1yhaK8Dq7BPNi0BD2ClkC9y5UWvO6T0Lxbi0E84MubvKXv7jua8WY7NqlNPYn5izx3ngA8Nk2EPVqICT3CUME8+yJ2vR8LCT3VgNs94wY/PTf4hLwr+gE5Uz1LvN1alDs4KZG8kjQrOvDac7zvqVG8BynQvLYQUD0rqiw8dzdPOxaKJr2qFUU9pTmHvGKmrLzEGbW7jUjEu88WXDwEc5U8XstkvYXHUzxg2aq77mQGvVvth7pwEdO8aGIhPWq+fj1VTNY66tGNvMXwoL2mSRG9QM71PFPtMz3Bw8S8s5/zOhNU17sPI5w9FjsIvBac0rzXNIS9sxtIvSNcjr3eiFI9G2SsPA7lRr2Dlu27i5OTu5Y8Kb1A9NO8rL/hPKi4ZD0dPZy8V8X0PLQurb1z/GO7JQvPOgBLuryf1hA9gzVPuzMgPL1BnKw8XUggvWkDWr1ldA89Hy9UPDfkQb0h/QQ8eEeNvNjNVbzgBss7pfYVOgZ8S73rpl+63QJGPU4kfjx5vWG8oHk0PJPHQ71N9Uk89EwlvPIzPTyAACQ9OG5CPJ9lzLsxvKC8iVETPFgYhLyf99W8uxCHPBn0rzxV0/28mRgrPbzIJz1QL2M8kOb+vPDVRL2Q93U7fbSzPGg/4TsiJH+8VpQtvTfU7LxihTw8Q0wGO9Wb7TxasH68g6dvvf1hNz30vlw9ejWcvNXsrzkaLxW9pehBPUiZzTuDxcA7kmb/vA8wlbyQRSM9IVYiPcQRhbxyXSc9GeW5PFG4kDxohUi9xuZ2PeMI8Tvg4jM8e50KuvchFbxh77Q8huirPLYYhzubvvS8zJyRPEDCCL3cOdO8UT0OPMsCQ7pIbLm7IAvZu9CN/bzUXlw8TxLKPFlzD7ykVQY9QlYaPUHEFbzQfo+6/SxAPEbtqTt7qtw8iJ0jPWwyMIk/tY+8fho1vLH/JD335QS9wkzYvAOOmbwQSDK8P9GePNgqXr0W6fy8yF4lO8WMjjycQd47kycGvRZp67xV8TO8LXVAPOmVbjwHs9i8a5AHvS0rC7w36aU7RdarPCeI77tXsNa8HjU3vdS1BLwTBDa9VpcKPajbljqCET49E+UivYw0uLzDzJm8j2MsPWgmh7t3i8I8sYmJOz9kkbxXthS8NM/Ru32rPb1aLhA9YevXvMtu4TwRJO08UxsKvIws6bxYlYe8aXzcPKkzYrxXwjC8gCAwO/C4VD2V+D47izG7vB6Ddz1iWnc8FRAIvcGfpbwLTC89SJmFPRlI1zzVSMg87cMHvI7RhL3V/VI9cXMhvCWKfjqPEq88YFxyvfWdNrxeUAU9KIpUPG52E715vOA8zBuEvCznGrwcaL68OtmPvcgmNbqHO9a8yNRJPEEAJryTOBq8/XIMPFuIqbqAxva4RdFbPZEUc7zoIMu8mx0ePLaVnrz3phm91U7YPLG4ugfVHww5BSg4O6sS+7vk5dy7lSntu1eJ07yY1Pk8LcE/PZEYtDxyoD49lQp0uteqZjyUqA48YcEFu4/8/D0UIg+7vKlMPNsh8zxrlCA8F3mTvS0aJ73rk9E6U3pGPdPfBDyTavW8ZelxvEpQTj0I9PO7p5EOvY/Jz7ww7lm6ETzRPKtmFDzDG4I9yqI6vDJYl7wyuE482TjGPMRSmrvxolI8v43GvGSTHz1b+cg8hW7KvO6ZhzwbFye79XkNvL43jz1hJUs8yUaMvcyGozyrED+4aIWqPEir/rx03XE8rhfCPGer6TuPnfM8mcONvKhuDD1AIn08n/jfvFzkPz3go5a8NJgNvczfLLuJoZO8uUsSvdpavrt0SgW9iOjGPAnXE7zgvz07QxRovEJGOzuVBNM6a6OxvHZNGj3a/Cy91vS0PLrBXT1Q0go9IjmmvCFf7TwFDBY7oMsbvWsb4LunH6S81CxCvX1owbysvgW8FwKkPC+9UT2156+8PuNUPCT9W7JXNDg7bM9XvfRljjzDunE8oLkfPHNDGz2Ynxq9XQi8u7u6g7hFsdO5W+9LPYAifTqYGt07iE+PPHZeAL1bazU84zC8PG5ECL0dAQE7LT75PHM6hT3vJny8qwJrt+H02TwXAZc8ax+HPLH7qDwB9o880tfQPAAbqToeK4E7kp73PIUU7TyDsbq87mlIvQF0ijwxM/M8dhyZPDvHFjz3HEy8qWeGO8TwHT1sc3e8gUywPNupiDt4oWS9lEZtPUh0jToCRme7Eto0vcUEdrwij0K7QeOVPFPXRr3xbTm9kvs6vHQTYLyNLpM7kSSIvZiDFz2pn+M7/a+hPI21+TzqgbS8GpWNvEBNM72iJwY9QAj3OtA0dbwA4NY7sDC6PFupgjtr2GY9gg1vPJVriz3+v2I9dYNyPNYanLyg6Ey9Y7wYvcIbjL2+/Ms9PL9IvOx8Hj3N7bm9SrghPZbMxbxGLR89hMPsPYLdxDtbJgW8cv38PEqDqr3UckK9bHgGPWGEHz0FTVY7ix3zPGchD7300K49oNNVu94LfLyAzKs8IEGXPHSVNr33Zp08fxaePLe4r7y0HkU80/jqPFVJk7wSdw+9XrlpPPbTN7z92Ok87NVLvfeXWr3ge4s8mcs8PYRvSj3nDvM8wh8qPT2uET1bgz4847EIPLj7cz06+Ti9HVOevAMuhj3yBzW9rYJUPRBkQj1hAuE7TT1kvbl3MT3o1PQ7u/LRvQDJPr1U1oe86wowPX04Ub2gMsk9CrkyvfFyUjxtNN88L1uAvatpK7xzvNK8M+n+ulQDs7tBH4o8wYWgPQ+CZD0yTNC7TN1RvcxmSTwXTNk94HgLuhnO1zzFdTe9C/keOorgmzzzpvU8mkkTPTWJUDsrzLi73SsbOzQUar218Tc8RlKLPNwcnrypgvg70C58O/IYA71ndF27/5BQvWT+rDrxv6U7VRSUuVrMwz31reU8WyervBOJk712eQy9TAYyvN6NyruD+KC66/X8upUP272YZ42843QFu6IvBIixjbk8yw7NvPj8Rb3fZo2815VsPeLhWD3tzDG9jrVyvTnv5rwyABa9l0VMPIa5qDzSCsi8mqgNvbVUcr0YN0a9UQ5NvAzhMz2/Jym971ZQPYetzrxZaok9vCRAvX7WxzzFnB093c8gveutJzzkWLI86O/4u+Q1Hr1W/R69ePWEO7CzOD3Sy0o8aw4jvBf1rjx0x3E8nalivV8sH72RL8S7zeo2PfL8BT3SyYW9bhtTvQoIFT65OSe9qYpaPY2dIrxF4d09THkPPcQ3Tj1Fow49tUC7vCUToLrOYJq9n6kKPbHy17zPN9A8MUKhvBYhlT2jq0I8ywjXOA6aRbvbv1285O2rPBaXHD3eH7A8cdp5PX2dBj0p87C6E7wRvN5fNL0I8aS7CPXVvPDPZ71uUg696lHpu4Hxrj3i1Ns8vJjEvB7KZb1ZQg889x1evDBFj7xtbPm6uHsDPQdbxDzxdT89eiMjvXL7qj1m2Z48gZGyPWYviDzDOVq8tsOuPRVNb4guvBC9NGCPvTY5i7w587o8f186vX2JPr1gCJu781SCvTeHlryqfp+8N3/aPLs+ML0yYB09Fo2pvIOPxbsfGeK8mynGO+LlGb2YQME73TATPXU5ej2XE7K7jo2UPU3eXTztbDm9oqABPXh6Wr2kE5C8nNRqPRmbFb0VjaM9Dzllvdzwgr0H/Y68/WBgPbOOvbwGmqy8th1BPIaVn7x+eaQ7thlFvF5P+TzBWuS8mbbfPFL3XrwCHPI8R+QQPVX4kzy485A7hfptvUU1ibsQAA680GguPYL/mb38LIc6lp2cvNwYpD24bYs9ABiNvOI/u7xIpok9AAaruL/a5TwM+iK8zXYDvQ4KBr0lqxW9b++hvPJzEr1Dx1A8rULTvLaeJD16Pi08DXHovCO2Lj3NmgK93HeXvJLnjzxbUrI6ONE9vQT0jL2syEM9pFY9vd8Yzryt4aO8DdtjvHnmi72knhE9nY8nPWW8q7zY2A29OslDvamtmj1s8yq8VWgsOQ2ZYLJB1JU8dVSTPfgqj714N/s7eXT2PKHUbb0yr6+8MnwQPbrAk7xYzsu8R8PkupJOCz22yHm90b1OPR9XNjtitvO8DQ+fvH2oPb0INRE8vogVPXZj17z0+wW7FECeO1jNnzwOzh+9YmcdPTAT8TzPGxQ+RHahvTEuC70xaO09DfDyvOi2kb3NwC08+Q3EvL+Zvb13m4E9+z74PNH85zzVsN86KnqpvA5F/rurjpY81uAvPRrgob0zl329ZHNhPcPPXb1NTqw7b/YtvYh6TLy5L488FNw/O9mxgbwcYHU91tVOPRbEAT38SlQ9fXT9On9ZATvpOta6RewavQQSlbzx9gO9Qg7lvBvlIzwk44M7Xc8uPR7upbzhuj28uVWzvFow7DuovUg97vpEvSsevzykmZU6fV6mvTz81jymHxw88kefPF9nm70PKYe9Z2qbOjOPC7z0m6q80aI3vVjDBzzUCgy87p9WPYJrUT3z4zy9UGqsvXp4JL2+C0E80m9aOgg+Q72Eq8U5ccsVvVRaPr3Ckx49PVW4vOIblr1XcAE95KmNPHT2sbtalho9xOZwvUIUz7yGOsw9yCHPPGLGgjxQKd05DA8XPZBWPT1d7JG8e7CcPLPzrDxsMwi8tIRdPTJ0HD04S7q7frPdPBrd5DzApNW6uMosvCwqWb1qNlo9DAvNPN6bnD1sNIi90B7hvHGVdjwhR+K8nKYZPVSztjsoDei7YsgcPgwcFD0gm/w8+GLfvXv7mTosVqU8zotHPcwOoj1fr5G93o79vSQ5M72nV+88WCjCPHDVgT3WsgW8ejYcux5xpr30GpO8C9+/vRo6kLyO1LO9wuvPPMSFzjyQJ+e8jsU/vJRlWL0QgsG9VhXKPM6NU70gztc8EswuvA7CSjyYR1O90F/BPIBiYL2apIO8Ws7evDo6Sz2r9QG9ti0fPaKRSjxYVtk8StCXPDQLj73wVd+61ofLvejhez0qWEc935yVPZETuLyRpwA9bjmkPWDnn7wtj708mjeTPSA4RIkhbYu84xNYvAp8Lr0e75U9IDrqPGB0nTpebxm84jeUvaJH7b3kRrs8qfAPvXsmuT0Srkg9nTJmvMDrU7s/BIE9/SmRPU3CGb0E2IM8vY3ZvPS/1buZNh87ouw2PC7JJ7y5pLK8IGMiumCmOr1aCeM87GtnuywVGb3OKoA9d/A5u7mo9jzTqNI81Du2OhCK7DsAc+G853LPOyo+073lJYU8+gkYPflojLnxngK8W28+vRFORDy4KOY8LCc3PWJsYzvGacm7s8M5PVTknr2c09M8S/AjPZJyljs9w9A8jG4Ou9gnHb32dTC8cuY8vascZ73bwCY9gJNePXM3s7xzbaw7qm1VvQv88LwCet68x8kaPRZF5zxzhRW99DPePC3Ijbw5c5M9JDKGPTjUIz32rvm6Q2DJvdXjk701bw68jiNrPHKRVTyoTTa9madEvE8ikz0HLcA8aOwYPYTxsrzu47C7CCA4PVRsBD4Ru9g63w1YvZDxJDzmW2u9qjR6vMcrzoi8LYq8mN24vMQURL0/9Ye8aFUIvQqJTzy5fjG91bkNPfpiij0s3wO8SuxzPEcYJT1bHKo95HgRPT93IT2eRNI9MRsmvSQJw7wikDq8OBbOvO5olj3DMuc8qVrdvB6ATT3efKC9POiyPZ5RXj0zJY68Antfvczv1rzYvxG9cETKOw6Awr0KV0s9gV6VPOlxs73H6h49j00IvbUwlL2XcZS9oPqAOdNgEj3RFD28cOgMvU5diLzpZTO8rgWYPc6EXz3SPTM9zsD+vIAWfbk8nqu9uufIPGXjHb0tmuG8LMRvPATwrTt4egS8jxnhPeFSoj2Atmq72kkGvdqcj71+dCQ997KLvQLJcLuifBe9jh+aPQ94AD5JC6U78c4rPGh3lz0FPWQ9hom1vazxGrxOi4I9dKYZvcsCrzwRpyA9h6EAPZXxkj2DeJY8tqoOu0X4S73WjAY9Hhf4vAoCgrzYdwY8vJMbvXq/0rw6Fxc9nGbku/ILfr32Ojs8EtUfvadkgrIUb768aCkHPfsalb3aHL+9yWwCvaD5nzyHcJo9cL2pvcyhDb0kJBa9gO91PKziET3WEXQ96LSNPDs6gr3Cy3O82M7xvMZHZj2W4M+8z9lTPSjbRTya09W7Bz7POgrHFbxnS1g9dGEDvcQsoLwclDC7LmgPPUTMFTwwMxC9hdKCPepeqDzsGGq89DcUvaghuDuo//Y9CGaePDC8b7xfctU8x4yFvPop3DxI+j+7We+APAEEir2Cr2K80InavMJ0KD0IY/g6EhVMvQrMEjxMnBc94shrvQQMajyZjHQ8+mNhu5+jQr0AbVS5l8CLvV7BuLyahBM9ahnEvQD9Mzh+8G29p7rmvG9oHr17rT47GcbdPHSdWj1mHBM9NxX9O1azSjxQp++8P81RPBBh8LwDfQm7pq2KvfVIfz0WHZ08zOmRPQydRDxViFk8kNOOPOBpLr2PMhi9ovsDvdkC7Dzbql687GzdvBYBRr3eUwK8GUaqPBp/cLxAfbq8YvIcvUwyQD1beIk9sy0yu8cdV7xdK5I9tOtguzBmHzwZ9ou81BcAvfAhiTzgK5A6fiinvHI0br2Px/w8eZAMPOxZqjycnQm90paZPZSmwTuTW3G9ZMGJvBabzrzsfYm8pd6XvCQVxTsEPgA9OLHJPJnyu7zwMVS9I9zgPJPND72XsR27P2AiPf9LVTykHQc9BEuIvNespDsBxLM8YrjqvKjHYjzNU+a7+ZUuvGEvorw2eyK9jKRNvToMdT3QH5Y6Lsy6PMARIj1HuS+9ZAKRvCAzSLrAa4K8g1sQvcPJsjy7qPs76OWkPPdwHrzSE4S8qS+BPGoI17wawI48SBiMPFX67bvAx7U8UK+svIWQYz0I4IK94NzCPIG0lDwm2wC9ew6CvL2OgLvqL4u8sKc+PSfg6jvffRK9ofuqPIPCEj137Ik86aiiOvKuYT2pDcq8hkomvckpzTveiBS9zldPvGpXZzyz35E9OFUnPbnQBbyVBRM9bxwnPRdVvLxk9Om7OA8DPDAycogKNLO8p89ouws/1TvjcBI9yzqfPdxRvLwqm2Q9xHcKvcxggb05Loy88cuMvWWVgDxhkQS9NFPuPJpDBr3AwGW9pukbuy7PdTx1wVs85XQ4u0xgXLzsrIm868qOvOfj7zsMSVM9WEPBvO/uTT1QF4C6wMkRPQgaRjsvEaS8NtNmvPGkCb3e7jY9SiYDvGajF71f7FW94QjGPLa1uLzCLgu9MmGbPDUSLD13AQe9bh4RPBQxA7wNnj+8298OPS3br7uqwaY9J8PlPHa4Xb1Ecmu82smUuwQ4zLxbACo7XuReva+PUTyThhy81sqPPf8dMb3G4Xk8s8Q/PXLiqjzaDEY9d7eEPAXCl7w3+pe8OTcjPejQCj3JFng8+SvivGQO/DyZbc48qJ5uPehTErytoYS8vJS0PBDMEL32bRU7dAn7u3jXybyvaNi8XHlkPFB2/zwiOYQ8WGmZPFXCbbvzl189BeJuPBsAl7zdcQq8Z4tVvOO+RTw3LS68biGCveqIgwdAJP67SaCQvJjRDL0kKlg8a8IBvT6XJT31yYI7i8MXvFSdYz2YjBQ92H2cPK5MQbyXpqw9tCcEPBOOrzx54pQ9u2ZEPPinTDxo+0e7ged6vVGH87zCv4c8fCcCvV1H5TwSHUu9Hc8oPMKaRzxgjsm84S6Jvbd7OD0a30w8XZRCPPqLr70aSzw9zotQvKJ1A7xdXus8L4hDPSzwHTyjfgY8Lu8IPCsYVbnC22q9jA70O9I/KL1yh++8dNb4PD3ywDweYMo7q2LfvK7X/7yxraq7IPu0u+9gSr1QRmg6xycyPPUP0Twkei89oiBLPHo0UL253Bo7Uv1jvO1DDTyAXsy9wKU9vIO7Az0Wx7+9vxJwPHRn/LxLopk7hH/yu2v44Ty1RAQ95Q/zPFfO8TsJw5E7VmGAPCI8Oz3/XMQ8wdo9u5rl/LzyI+O7uppVPTCQLD0FhKU8lgIdvY35Ez23rrM8+LmCPOxTKDvPE948LfhgPJJAubzP9Fa7izqSOiW1WLJVtzA9F/cFvWuAwLygloG6/jN9PFGO7TwASoU9hWhbPCt8AbxwxQm8nNcwPUlK6DwHtRu9+h5fPWv5srx2QAI9d+GOvX0MxT0l2bu7AAsWvbo6Ez0AJSU8vmKXPAApnzy0aSk7/59Hup6cHz0Ic0E8cQ2FPGaVUL2er3a9Zj3qvNxCmL04+pq8U8+UPUbvkLxU5ZO8dzrgO5mzuTsGLRE74nVuvGblNj0k0jE9G1iivFoswLugi4u8aTxMvWZMU72Pf5W8BzLavMt3Cz2QarW7LEiIvCRTXj1EvAU9/+qjO5GkKr3cGOY7ar7vvJZqD73igg096fCiPC0DXDyes6q9I/V7vUDIDr0sR8I88S/uO2Id/zw0fcE8unUzvMsnCj1OVaq9MM8/vJZfrbsGIR89OsZ6vE01nDv2M9e8l0+dvMMdd7tbOP68LoHkPJ/PiburR5c73h1gvWdsIT1WboW87yueO8MDDz394rg8twDyPP0UZzx6vxm8iC8VPADAtbbY/QU81/YgvDYser2Cwsk87MaaPU9PGr382ki9OEDxPI6RorwdMN+7b0Y4u8dB97vdQ9Q8lTwKPKFIBj3lqUi9usFEPWI3Y73JPR291BwLvbVeXrx+uli9tN47uxC7Qz3k0Kk84sABvXzHtrwYlHi9j2HvPD/YWL3Ii9y8/BL5PD6l/zw5Mt+7uYRvvKdVJjxC/Z49pdZVvXmSwb14LR68pBkJPG6e+zyQ7AS94HirvIfL6Dx+WxE9GQ4wPU1aGrwsG0a9QvcuvbW5H7yMfQc9ZHfkvBNz1Dwe/xU9eLGtu2vfCDrlyt48B26JPVHHbbwKfJ48g+sjPfp+i73pi4c9OBjAvPFg4Lxq8fy8KLRFPdnTJD2luZi9bxMuPYUZVDvVv+S7gB4DvRxnILxb0Yo8kxTkPH3GQTubi6+8BOJzO1gZxrzGVlA9GYh6PBGRn7wpMRs8lSM3O0BjsjwIH4s9qHxLPSOE1DrFJcK8FNICvRGFCbznjFM8IAVUvSdq84gpKYk9xvgTPYxkBT0T+ms9KGj+PB5DXrsz2HW867Bpu1W5fbjz0mU8SB0PPQa6GD2YLgy99C35PBGt+bzwh6C99fB/vXbOU7ywmo48qKXsvHUbYjoPraq8PBPWu3nfPryGwy89vcxYPT33Qry6DCk9WzN7OiB0bboqvQ+8VnsUveER4rwzb6u8QyDauwySkrz0pjI9AvPsvDgxojtvcZ69kCZXvRqBm7wsBFK8NmwXvfzpiDz4eiY9uOqEPfO08Dxmhas9OGMrPM5UTb31s6a9+j/pPOAtOzy2CpK8AABKPUoL57yeQ6U74pHKO0rRX72oEZ+7p2XkPIF5MTztYJ+88NAYvRsgmDwX8NC8qHN6vFSZUD3foOE7t9IuvSmd6DsB+C49WgvzPFkeGb0odXo8xgmrPDm2Ab2jeT+8PLGAPG3gFL0ZB9g78i+SPOsyLj0h1zY8b08qPIzIIj17QBs9J3/6PCrfEz1wDBK9HBkFveOwRTxmCyo8i+xYO9c9lQe+zxs9YojJvB0ncTyERki8khbXPMOjCTwseFu8aBeqPR/YVD3mNgO8dYkHvUqSHDy6fZ09ggwHvKwREr2auZo8LkIVPJ8TjjwHVAA9Pys6vZzQR70VSv08bwlavRstT73iLQC99ZI2O+YHGz3+1xc8NnesvZLBP7xLPY89Ce2ZvJfQpTyrC7Q7COT/vBEeHD0RKek759kEPGeH6Tzfmn27dAcWPaGZO73viPo7jSoFve5ZNb0oWlK9rQALPZxpfjx6bFC80FvauvGNHr14a+a80LkGPIBzvL2v9L28Kmn1vLNtXDxPNVs8aQQdPWc+Ej16tiu8RBryPHWUMb2oBIG8WaREvdFWDL3BTci9hHD/PHCavLut/Ka7KOCPvd39Sj3dO149qL8jvKjILD1VTfa8xbNbvATRhztmURu8/PYSveErcDzeOIm8zk6UvcoyLz08mgG9mSTluzfz6DyC5ks98861Owc6MrzK2zq995YbPYxRnToyL509ltn6vGPRXbL8SU89Z6MQPXSToj0wG708cJIaOkzInz0o8S89MStmvHnj/jyVTK07azP0OkDZYzyq5U+83Z66PLsX+ru8//Q8pynDvMbujz1QPz69lb8XvPKfWjzyTAG8awS4O6K1nDsUbtI9fIWqPJVGlD0qHho9gWmCPJB9ErteA7+8Jpj6O97SybtdbtA7XKpuvM13JD20ZBq8VsymvO+DVLtr/FO6H0/vu5yJnzvAohY9Crz/u2GUpb1Bilo9jNJTvbAR47yk/qi8awxTvM4GurzsEMG81FK1vFMLdrxURe88yl9LPTc7MjzLUzI8PUHCPDWMtLxy6w+8nxQ8PSpU1bwhm9M8Qrp9vH0aEz2hALU80uCBPDuGe7v2xBW9XBbePJgKhj2Pyx69b55TPCOklznpGWG9NXtcvY8nULx3d7W8W4XRuzEfs734dTs7PbHOPL9u77vGhHm8c3WtvIbUlr3QPR49vPE8PK1ekz02CFg9eieuvLEGTzsaGAq9Y3/9PBMYmDzqZrC82k2dPAFoHDw5oaM9XOaSvJYGAr37+kK8P3uYu125wLzQf4o9zQpLvZDfLjxahWE8G4fAOh/CJDzrdKO6VSrTucAvmbwDLwy8QYloPaSaqjwMxL+8+L9WPNqpL70bnZ89rUuTu0WL6DpdJh89h7y8Ouz+NL3cJoa8W+y7uZuDuDw8YrU8gWR5PaDJDD1yEJ48CuPnO9fyQb0jY+o8KRgavCQIjLwKxci7QV4EPYHAzbzLVVy8xTaiOH+aIL0L4Oi6TuMmvScchrsvn4y8+9x8Pf0KMz2aTJQ8l1D1vJ2Irbx4myA9LF4su93R67ygf846aKgTPaqzLDxfLRG8PxtpPFVwE71mhTG8+HxmPangmTyZJlc9lRJaPeceZT07PaE8LvONO3YRTzyZSPY6bEASO1j/NrsJFd08lev4u9duJj3tQm48179RPXcOC7wbDoE83RIaO0744bzRGKg8+JgUPQHnNzxF9M+8PgA0PUGod70BxVc83yArvWU9vIi3Ajk839N8vR6aqrzIyGs968bWu0RC1ry1krq88ucMPWcBurxAd3a7d7UTPSQMg72BM9o8kITOPPi0RT1yCAy9L14HPf8+ljvy1/K8G90tOgDZxboOrTC99EG3u8fMzrxzVFg8uKqJPbJxYLyvUdQ8GP+Ru0N2o7uvjr4808XnvE2BFDxeOBU9VBtSPUy4Eb05X7s7S+c+PJj1jr1ic4y9FlsdvLAVA73tdP87S5hEvPfTqDzFpku92Sj4vNCPTDysn+28q+A9OBVdU7vUCBw96GkvOzHqnTxzuiW7jxyIO4Hq/Tz95UG7PoCqPI8ceT02qrS6noO5PY/pw7wUTMQ7ciWcvPKLMD3+ZYm8VKv3OwRjwTyGLKw8a9hgvY/Ve7zXUBg9gLk4PTRcJ714JZc8mn8vvWpjsDuOxSa9Mp4UvdKAID0q7gG9lHPuPM3TnLzfUrm8mlQBvRnyDTwWHg29NWvrO9rABj7Qh9C83GiVPPd6FD0baCe77zALvUYvgIimSU+9K9A3vK3sA70620Q7SqxcvUq5vLu9gJG9oTmKPTCDK73JAuO8SdI0vXH6CD2DKzA8ySk/PUBSDD2K7lY8oi2CPDw4OLygvxk8y1x0usLMdjwu/wk9Bp1CPeD8X7342Bm9zHhRPS6SlTxuXT+8A0iNPK3FmDsmzwI9e9cePdGfBb3HCk89IKYgPe20u7zbjHu6kJHxOeMuHDuIS9K8uQ4XPQlhLjwReQg82DyUPKC8lTqix92844dSvClAOz2cuou8rztRvA4dfL0cYk29pxSePEfRuLz9Tqe8eKUPPSZOlTwQURA8uXQTPRRdRjw1GZO75QtMvdxkz7y3sha9aDK3PHXlIr1TBgw8IgGauwVnprqP1Tc8RQmoPeg+kT1fgRm93GhkvaDlA7sDosY8P/zGvYfDu7urkDY8X00QPMEjxDyAEs27RyJMvPWe7jyE8ju8d9dLvEPvzrwtsKA73HN3vaaOX729yuC7d4xKPKLpHL3Ewh08kBDrvAqWZrJndE49eMkivfGwBbwPVGU8SzORPTsLWb2fBHG9CimKPL0IQbtdrXS7t11YvBtatDzEj2+9QSYKPSYyh7w/6Ha97DkkvYQJRzxo/zu9OysjvZiPBLyr8Mq723OSPKSXzzxrUrU4yDiivc+6tD2GUoY9KRd4PSOXQb0cHIe7ceq5PHyPkLtFfcE6BnuRPBbKZzwa97U8UeU7O/+l5zymhgg9DtWfvA8zSz21fqw8FcNiPOuFLb0IPuQ8lCqFvJBJXT1t0c088yh5vNt/XL3QTuo8r5AIvbFaSDyF8t+8PPZQvWwKebyAhXy84U7TPCX6Bz2lyy69QaZVvWPjsLw6feS8LZOmvWhySz3iQZG9hrFEPG4/PzyQE5W85KfIvAcvkTzTXlI8jwYIvSoE9bsqLaK8zc8gPJBf+zoqDbQ9lSrePIs3Fz0blWc6BAigO7bF6LxdA689jqEqPVQihrzWROE7eEWmvNCUk7yXbqG8AXW0Owm1Cj0v/qC8+XaBvJRqwjyKspS8Hf3oO1nDuLxagCI8aebzPNqGhr0vUB886VrCO/yRHj3jhQS7lHtZvRyQOr1eJBo92VkqveBAibySKNC8nUQcvVAvDT0Tifu8OHEsvXQ1kLwbD0u8UmrXPJU3E71ZGF29ajFAPUxoJL1UcBq99NC7PSUGX71LWD47mOoAPfdrC7yRWny83aBhvb8SqrvDw648heL5vfe/QL2LxBG974eMvNQgxbxqsBs9HkShvPNxdzynZWU956quvJwVer2/8yu94B8wvP2NBLzof609ZjpyvPohmD1xgMs8kmS2PBG8PD3/DW28t8cNPcZ+ozv3ZpE8Sx5dvbdtGz07x5a7YzlVvcLvjL0fH429/3C4PXWcpTiKxKE8LAp0vN3/CT2MgA49gQ20vFKb8ztg1/c8L8AJvTxu/TxD+zS8FJ1/PJ+G4Lz64x28KgKsvCadQDze5z69yt7uO71SQj1HFuI8gbDoPIESCDxptP+8ta1avKt6lDceKzy8E8GJPaDq8ojktb49aH0tOq4IoTxs4xG9dBCCPSS6Fb3jcQo9T/VWPQWDLbwBzlK91N5cO2KFcz3y9Ro8ZKEGPTFXM72op6s8HjtKvebPfT0z1WM9vQJKPG+0yLw/Mle7QNzIPB4TED2eIjI8eGNXPf60ILyj3Tq86jyfPLd/hjz6Hzw9ePGivJWhy7pm7Mm8Wq69PL/1Ez2Miu68PEySPEeeCb2gFYs846t9PDCKpDz/00O8laiGvIBbPL1V/Xa7vzwCPPDv6br3HIQ9Q59+PLMSlL2VcfQ8NLevvN7uG7whPCE9tjd6vciPPrveAvs8NvaFvYn7Wb3Zswi7kCv3vJr6FrzUsb48NP++vG/KnDyWQcS8jZKvu18V/zxzpQK7V4FcuR9Nhz2WEf+8iwWSPMDQHr3/KNm8vy2lO7UGc7oqSq88sApCvFvX+TuY2Qu9h7BNvSR+bDzLC4C97rqZPe2vij18j/a8htn8PCujQLxRv3q9/T92O4J9Nb1dISW8dPUWPcs4G4bvPxM92UAnvTWgpjxQy547fdpRvJqYwLys1DY9SRapPeFwFD2IK6Q9L6yIPPB3LryTBqs8rKK7PP2ncDsrBFG9NkOPvfUNhrw5A8E8aHfoPL21v71Bofk8F8DBPLZ/fb2VeFg6MTcFPbumoLvRkj+9IHEgvWhTk72T6508o7sWvVYe+rxaR8o8/dCbvPFWWjsfHnM9LjnEPQvK2Dyn+VO9t6ALPcO7ib3e0Ok7642bvDsLH7zbf2+9GKiHvCsjjD2NRm291RzGvHB41TpeU088SyUtvVEtyrypUx+9rSr7uowZUD1Fwdw7hVgdu5Pm4byk+Qe9VQC0PJkc/rwf+qQ9baz0O84tS70MM968NCYAvXHiKrynYpw7vJJzvRNzW72iYq48S849vLTEFz2wPiK9o/Yuu2d4Dr3S4kQ87rI1vNmZTr3S98i8H0ThPGmboj0lbhI91jhpvQJVoz1vIuC7gjA/vH2BhT2rlZG9ECLePOgchb0V1r49DZHnug1OY7JAEdO8UKjjO7t13jsRjqE9Kq8evZXzITyMxNI83unGOwOPcDv40As9bESIu7bSkLyROxi93X1BvY0bxrxhEYA8wmYJPbK7CD0j+oG8nInJvKkFFL1W5a68pdYnPaqJpL3ZB1Q958yLOxiHCjzSLKc9QxU3vKEunr18HTQ801bDPD6tuT2RGDO9HZsxPfQXlDsl2S48ScaHPJobHj326K08QluCPK+gIjzyGiq8N/uwvIB+nj2ulAc9HJLcPA2wiLxhDw285/IjvKJAOr3JQSa9sK0NPf33Aj0jjV29igGGPL2yZTw3rCa94o/mPEpcGjwX7bA94/+oPTBZWT2ptps8MCmPvaaJnrxsRd+8M/HJPASllT0Zsxq8DPO8vGiwtTusnAi9gWf6vFk5H7zXVyE8FpJ7vIrPDDwZ9zA7vJwRPCcZ67xY6ps7tmj5PMtXqzsvpBq7/pcHvQCTLz2sAKq857kwPNi1+bzz/+E8DfN5u2MeQL1W/6K7JxSavOz2kzyAdzk6tMe4u7WOH70i9YU95uOjvFR/Ur1Wx2+8lapYvF43/zuGauY8NG/QvEz18Lx3fLu6dbTEuc4k67z0o+a7VjVNPepYQry+pk69YA8vuxd0TL0sfSi9sQ6suzUXQz0TsCo9gkRXvH9zyDzo9bI8GnzgvI19l7xwiiK7GzvSPHrrHD20wbW7uJcavf7p1TxwP7884QrovK4bj73q3b68vd2VvHNxLzyQ+hu8i/3vvddSe7uVkhU6SLP0PLhauzyMv1m941E3vfQ1yLzj1go8IaqxOzplPj0kt0M9l+LTPGj6IL37eAw7UNTTuidihb0KI8G8OP4vPST2Er0Ywis9HtMIvVaJgT2IeZm8pObdPC4t/7v2IS29ADFSPIvDR7r7KMG8u0Ntu4TJvLvncmK8i+FLPPWmQT2fSOA74z2/OjkFrDtW8wq9JIarPJWqi7ztCWg8rSWBvZyUfjwl54Q9A4qYPIqkPzu2OM08vywQPf0uCTxTl7W8c6M0PPQlDong//+7e0wmvIVBazxJzQM9wulCO5kD+7zaA0Y9CqHJvCvywL23r3S8p6B7vZqa2TySZoy8Js4GPdwFFb3XPPQ7nHvIPECwv7zZKEE9ozgXu/MUkjvH2wi9HjT5Ow3NlrtyNQw9YEgRvPeZK7yP3as61DyXPQvhZ7z+82s96QGxvOnRYbu1BQW6JZwmPZLFBDxwoFm853UMPMqfKr20N0+7BOnOPHP1fj1tV/S7RBqTPEpWFjtK6qM8FpehPVKeDj0Q0x49MO1EPWV+E71B9di8uD4RPQpzMjxChzm8TmQHPRgeGD0SBCO9I2eFPeI3NL1K5Rw9g0IHPT1mFz1oDpI92GhKPciX1jzi3YO9w6SoPN6sbLxylrA8usHjvET77bsYehm8NOCMvJFtbTzWcgE9zdUdvdoYkbwzi9i8jGXUvB4X5bymdDm9uJDNvNe51LtuqE47SlUeuyXi/LwRfMk8roOrPWZTtTuW2bO8P5JZverHLL1D0nS9HHyBva7nKgdIunM8a0ZLPL1TrDwFVdY8uB6sPDXDAj1g5jy8pQJIOzGsjz2+fIs92+4FvWrn8Dpife09wKfMvAi7MD0IN289GSPavOiriT0Y2ym8OTl3vYraKb0B1sM8+NI9vGRxGrz7X4G82vTEPHScWzzYXHQ8cvKdvaiLyTpBdTm8YLtkuIZRhb3KVbc8mNYFvSVWnbvspQM9uIotPQFKu7wmR8G8rgxNPJYwQj0I5IW9wpIIPcIUS70UaxC9PF+kPLIBXj0MftQ8xEyavMYUWb3cwCW8DvQnPMIZjr1UR5y8K4t3urCS/zwHc3g9ShwiPSyveL05Yts80eXNvJllc73ulYW9HuGcvEVKhLw1+Ze9R/G6PAVHAz3C4Zw7u7TCO/BWlj0txX09tLDOvEdMXryaZhE7GC34OwGlkz3UvZ47rpMePQBruTx0Bo47DXw4PP5v3Dz0IJk8tfmKvPHlHj1zFNY8aGIAvKZNxbxpHBu8cLQBPacEuzzim9+8HfcGvXBXd7Jlulo8RDfaPLWONLujIAC9K6xHPHRXKT0OtV49627jOUtInrvvDzY96UhZvFNQ0TyLpCi6Bk8HPM8SGr0rlno9k8IHPRcHbj18vF+8u1mTOrK5wDxD2A886zXjPNAFoT16a5g8pgbXPAC5Lj1EmRs9XZlBPH9iVb002ai99FReuxUBubyicrq934s2PKS0mTxRBZ07ZnyCvEgixDsuSpa8jpZmvfXFDj3lq5I7uVOEvFISa735xgK8hXlGvT2/Q717PKg89BdCPLxl4jwE/gG9m4SHvT8bZzyNdkQ8tT1UPVbTw7zXriu9ws96vcaher1TetA898AOPa7cxj3TWHy9XFzyu4bAhD0+hI+7w35svYzX0LwNGRa9EfOZPN66sbuWV469KmCYvKRthDyEsuQ8zPpbPdOU37wRQLC9jYDqPDOso7wpOdU8beUtPfxVm73gRMi8sVUrvVxYVL0leOC8Kx7lO7HBCz0gtio94ponvLPlbz3wZjy924MJPbHUpDtsXKo92BsqPZWHV70mqxM9gBQovf8EBb1nnP+8o6thPYqMTL0au7A8l/HWOlluLzyyz6k8BH9cPeyPBr1qLYc9vgrAvHnzMr2SCaG9pHYnPWrGGr22BKk8kz76uxmgFbz7X3c7aByXvFVTOzytq4G8cQZkPZFAb7xarAK9ZnzRvF65cD35SWa8yLBGPXT6W73fwQg9D4nnvECq4TyBndM7X+2QvDqAkz0Pv2U7XAacu7is3zwR4OI8f9Ukvc2iajx3JhG9XiT7vBj4ET0AuZk8Dvb9PMzAkb3Iffu8v1TXvGAmnT1SoJk8fz5RPaEwNbvOBES8WEv9vOFe5Dwtcg47J72DPI9WPj1zIwy8s+uiPaQgJzyxN3m8brvvvPH7Jr1LcrY8N2R1PGrxATz7jmm82fbvPAQWlr1YoJe8INfsPAR5njtW8B28ggINvQwmtLytiAm9SaL8PGHeXbt7olg8VyEDvadLAzwPlES8oXSbPEAvEbz3D348jIbuvPuqLYlNkCK9VPpvvOXW9Dx8JoG90FZ6vZng17yrScA49071vPHGa71Z87O6NDKXPBlDjbwnIZU8M3sKPAaqwj1nu1e9WSVyPY5sLjxa3qa8NBAJvYbZ1Dx4p5+8cRjZO66Og71K0y490BTkPEizGzuRLrq92Kp0PRzOhTwaHJW9AkCYPLtMPb3q6sU8sLGcO7Uh7zqAiUU8X3P7u1sRgjzTqP28DNMVPC9gq7oe/xU9Cnt6vdVeeblhSrY8gHZyueiLYj3vdQg9QraoPR//Br2dg2y7oWaavH1IRD2CSDI94ZjZO6AdAz374jQ9faUeO+ID5T1II3I9U17TO2Aqfj1EaxY9K2XYOTtTQr1KO8i8zbEdvdLwwj39LLM9hHIkveSLirsBF6g9hMqfPAUihrxOFva8C3saPAceFb1yU1C8TX2vvTX3vbxeviw9+ikrPdNRq7y5ED08u08zvfQa5rx6u4+8McOnvEkjprwDbHS92Q+lPEniDrzmp3I9koYkPMg2Awkncyq9hR2qOsV+jD0i8oM8K4O9PLAWer0vo0+7h3t6vbcQxjsyDrA9YrFnvRwRIrzIH1I9OVVyPIZe4TxtQjc8mwr6PGQf/7z9v0w704ClPKsqZryvVAw9sgIOva48dr0rqdM6sBDfPJTVnT2QIra68KpCvD9mV7vq7pW9mkl4PPLVeb1HbZ28vty+PEdJybzF92S9LtQjPYEejzzsI548p6Bdu1+s0jxvIkE8/rVYPP3mkzxWZYM9UTs+vAyFtT3cfKc8jSKMvKu6mzYQuFA9BQ2RO2cshTwdGRA9oOsYPNrk3L0Wooo9fRssPWeErrvamxK9IOEQveMTEDxVIec86PfSuuMXl7y3Bsm7DssSvdPMH73XD3g84RTsPGxXID2VnQc9u7zBuzB8Ab0xfQq77yEcPPqPwTz2DcQ8zeG8O4wcZ723cjg9u1WlurjZFj0KUIe9gMtDO4LPRz0rigA4ULGWu6Nd1Dw/itM8X7biPDfeHz2ZszK8CWtFvX/OVbKvuIK8+LXNvWTxjrwY1j88JXW8PQmP9DyF3YA8RpyaPJbhgL2r3lq9p307PQV1BbzCDee8G4BmPW1emDy1+em7sdWzPF4f1L241Bi9Qbmcu844NrwLS5A8TiQ9PW5FbD39t/S7LbHRPBG1CTxRj7w8uX0oPcpqxTwJU247v6drPRh/RbtqKTI8vnUQPMjfwDzQOPi8pkObPZb2Kr3Hdkq9VOSsvF7lUDzkOSK7YrodvAHDcDylHmQ7s5WoPAfT9Lyp6nm8aWtTvV3Og719O8a8J8dsvFiwKL1ViP85RRLgPJx+BL0oiYi9xpvQPG2UHr2S34a8XPcsO+gPGjylZRu6BAafvfJ0gTx9e9I8zIc1PHvQ97sC+Dy9ywsCvZ7nqTz1WEa9b5l9vOIlqbyQXoc9PofDvEe57DsrI5Y8wpbCPI/qM7wJJK46mKaKO0f3NL2I+iw8qbeSvR56DDzaXrs8l/u+PDYCDz3l5UE90BddvElvAz13AJ+8wM/VO2ALVzzMohI93E8YvGK3b70qZ7I9HVyVvFb1ar3Fchm9nx77PDCsMb2cJw89CqwYvYMrRzsThvk7J7kkO0fvIryooyq9dGEKvfIz97yfra87U6HqPHxpk7wB62O9RO3dPOIHWr1Twe88ZUAtvTNJTDzaqD+9WSTWOrk0Bj3ub9Y7NHP6PCAxoD2wzh88cHGavJGlNj0oHRg9axLYPNiryL1Vyrc76NcWPd3lNj123bM8SpnavJ23Q7vWJQe9v9mKvCE5+TzohA+9SyqovcfiGzxujzo9dpFAPbzBKj2Y5Yw7VqQTPXgPCD0kRpI8yBcCPCB617yleMQ96UAHPc8dnbw4slo95LV9vAjuibwFQPS8u2SCPdf45jywQfu71gEqvLZribzbjh28qDetPAcXBz1jiBy8SU8FPTnDCTwdydY7NVrePOA4kr15T9G8y61kOmlUqbrZ/K88cg/Cu8aTNj1Jsio9AuOJPeqKfDxeqPY898F2PMdtsruArOI8KBiBvHaBOIkxFoy8D9LBPD1Iubx7acw8uQ1IPHCmyTy/9Jc8aVzsuueF97y8pBU9FztYPcTMPj0Aoxo7f/+HPG35S7zClca77GmpvB9gYzz/X1e846oZvOm3fbwLLmI7Vd7ru1ITAz1jMbc8cEg5Oz69IL3zijk9+7vEvKObELwAIKK8dPRcvelNL7vbl6g8dZzZOjxb3TxttGa9zV3lu3veNrz04Hi8+sMEvDM/ljxUkJ68ebKJu5TWUj2wrlE8DskAPA2v1zo0bhq8M5GzPP+DgrxkwvU8FPwmPZlF17urmxe8zOu5u5EWXD2aoHi9SdUKPZ5uSbzrz9Y8WD3HPKUfWLo0YQm86QU8vICJTT3ppFQ7eJ7QPEiPITy6iTi9F9wEvcl0Dz3rmwO9yz7KPCMK+7y45la924I/u03GEL0A+Xo7uq8fvdKD2jxjBk889QcFvc2kgz1xU7q7RTIAvak+m7z0ksc8HWpfPFhK6D0x3Ky8KGyQvcQkRz09LU29A5oMvC7UCwhV/ZY7A/FiPMw5ZbzPqoI94MSovfdJIL21v1E875WdPNzouD0+elo8hf0GPLiMWLxZkV89ORRJvfkdqTwMMl49aRSCvTa647yH0ms8puk9vbmAbjzI9Sg9gJ5JuZJojTxABiW9NoczPApyOr28EEG9uI3RvCBMNr0hbQ28BzRFPImTODzzfLs8rZhTPA3Z8bvPlwU91/SmO7JdbbuL1Ww8TSypPBiUwTs5A/i8MkyJPRU8ebxt+3S8sR5zvUhhjzyW68w8wQowvXjeo72WIjq9m+CCvLNBiL2kVd+6PbgDvC0p97wlSyG8VUJqOxulrjyoRQa9DVH0vGIPADze1f+6vKSqvZyoib0yU3G9xG5HPcVflzzNVte8m7F7O5ToyzsOn6K8MILivKnuEr0wZQ69cx56Pe17DbxqUiI7iCNUPWWOrzv9/qI8zeoyvCSYmzwcNrK8QB4sPDKIeDuQM5q80pqMvJh4cLxsrQW9VpI3PfHTmTw1qHk7YHfvvGwLV7LLLnq8PYd9PDzoojzMLDG8/F42vYrLzjxP0kS9Wf7CPI29Z7vSj7g8dABtPXJ+Ej2DhQG9rgZuPJ4T2bxBWVc9jrzpvMBT7jxHqSG9CLJiPd8NETy+B0c9TslavAibGT2f3Q88XOClvCg6jz0OXW09qFxpPBUJCLwhGUe8vq3OPB1NezuoZC28ogUJvEcnJL3TD/I8UwS8vKvUeTzHMng99TIuvIZHizzT2ca8WymOOhYdBr0wbiI8jX5tvNGdqbxcRLG80EL5vA4rg7wnhIs8UzPVvd7YvjyYwDg9TTL1u4a24rybh3y7N4G3Oz9OXLzzpWa7gJKEPe5w5DxzqeC8dOhLvcXTRD0C6Go9GcxjvWVIFzwIov88BvImPfJit7zTpmE9F94IvWTBQr3rO/e8nUO7PNvkGj1RPNk7kIOvPMeKer1a4Zc9T/iavSW+3Lp2sGM91ecqPRqFz7tejzG9+YkBu/3Em7tnFgm8jR+5PIc2Bj2OptS7ElJJPaV5sLuQtzk9q4Ddt+xRrz3KPyo8utezvBAKIDy/kwS8S2hsPHk0Ar3KSca9Rr73PA5tq7rjkBg90G8oPYUpQrxi4sw8tRh0PFD+Er3WoXY8G1OnvbsWp72pJiA9xVE2PZT/Nz3XJbm88jB+vTAfEz3bBge9HuNVPQGtgb0CODC9TFxIvb9Nir2oHTq9uPefvesIEL01xb082r0YvBA5yL0E0d47CyoGvEmK4j3clQe9AGNVPfKemr3gcCm99i88PBPPJz2rCV66/hacvXaoQD0YUkI9EhmqPSiQIz1wEKu893LKOxt4CzyH8UO7ZZoePV7lpbxESzY9PPjivNT9WL3/dzU7qGddvWEQbr2JE1s8daypPet0CLlpZiA9OgAxva89g7zhava7+npJPfU16DnmaZE9t+o8PNt70bp6P4O8DsBIveP9IT1ze4O8KtWpvGKKnb0TaIA9BBsWvCYd3DwQWKg8aDC4vNK/sbw554G7/2ELvfdQ97uE3kY8THY2PZDtF4elgpY8CpagPdcHB73rqwu927tfvY18Xby2HIm9D62uPAHn/7zth3C8/SI5veIdOb06/Qs9ywaQvTJ4Z7z7gA892dHCPODz0rtFqCc7+LOyvBJMGb3LtZg7Cxq0vJZ6Ez0AuuC32Gg6vZj6szxK2rS8eP3SPfLOcTzwoJI84/ASve1ODDyBMfU8QJiqPUIecT1y8zc93v6uuyNbojtlxI28Wy/LvQqBxDxmx6I7raMMPX52/TzXNU+8Mk6bPMjz/LvE9nY9EsZfvf+CFz0yzQ49NI6BvezE6jwmCKS9Try9vLNCALx4JIg8ldCAOysZOj1omou8iJSkPZCYvjwZeei7V2vYvDL5k70LMvu5FnazvKQagr1RUr489piLPQY3qrvHYsI8jFDNvD2A+juNqTC9P4vrPH3Bdj14vnW9k2LduxvmLL0bJg29oDFDu5y3jT2FMbc8CvVQO84rZ7sVPWO9R3fJO5j5sLwC8h28UWwWvTPqub0jthY95TiTvFiXZQgshkw9PuEMvKpXjjxC6Yw8nkBWu+sasrsMCkQ9pbMgPKCMbDtnABU82y+pPYu5P7zLzvQ8hfsAvasSDzzf4eW88PgAvVNTyjyVJay8/yP0PKBh7Tz6IdM8eUxyvbZnaT1I6kG8Y89fPP+WFD09KfI7UnQeO/SZJD2IsFs9ZRJNOpOgkrtQnos9uhXdvGMf47xvXGg7Vse8PXFjLz2gcKM8cUw4PZfL7Tzk07i8s35DPSuY9TkACcq8rmTaPAAiZTzyWJq8Hq9TvYu0XzzEBpK8K5mLPDn1ujtouq88hjK2PGcXNzyU3uk8/Hu4vTOb6jwJ+AO8hwggPRHJij2KFG49GCaSPX1p/Dy5wiW8LYa7PEAUQjmAaZ29fnHzPO8KlLsNIoK9+vsXPWVEhDzlHAa9h4SEu/Pcfz0iuAg82q/5PfJizLyrUM67u3wgPLmUrDp+Qj+9sjRMu0awBb2gZKI9qwoAvfqqs7wgmDE8bH5oPZW/TDyU87u9EROjvBo6VbJiiBS9Qvj0vFQXHj0/yAo71HO+vAjWBz3ac5Y8v3pnvbfIeT3w0d+7XkFcPT+HDr2dQsO9rwA9vZUEFr0EIcc8G9P8PHV+VTyhun68ZFmpPfy4gLylnBk9rFMCPWdCjL2rFf47aLsFvS45o7yR7Ia8HlQqvRZQazwm2w49dsyTPAxyIb21QF+9e8a+vcNJMT0kE3c8hy+BvcHYTTx680q8yuJxPcRTb7z5sge8G720vBP91Dz7/Sm9ZrZAPWBN8r0bUTE7VoKwvCj4sT2G6CC9H9utPM4vvjxc37a8gM+AvaDXAr3WpM68FEr6vLPhqD022jg9UtCAPXCGcz0DeUm8jL+4u8ZHBT3sd6q8LqkWPcpqJr3XMk69aVaOO7x+KD0egB+79vBNvf/oUDx6goy7FqwQPW3iy7sub1g9xMoPPX1OxbyNm9Y8FF+BPGx0HDtS3sC7CW2zO+s/JTrUPhG7fE3JPF3aerzfFQ09iByoPPRvh713FCY9wIhROpydTb0WpUc8kxTnvAv0zTsCQGA9JashPCcBj71nHBq8uXmqvBY3rzwLUs+7+DkVu61eJL1n+1M8wqJRvZDY3rwq0rY8lbixPE31ajz9OPe7ovvPvIryH72rE8Y7+QSMvCmtcD3XPZm9SwbsugLWV7359da8ziqfvOtwRzzBsZK8HUagPeB9GruncW29mNRavQKI3TyY1RA7ZH7KvFe71rxEtT29tYMDulfrqbqgSbA8/ReYvT+DaTypEhu9E4SCPKgREj1vsBu9W85xvYhSOL0+Yzs963Jru/5CKjyo3XQ9MOdpPWajT72WZ5s8ZPpqva206Do7Wvs7vfbWPE5aQryLQ5Y9iP9WPWRmB72SJ2083UkaPcIvBz3lq7E8diNTvM1dhr1g8IG6gzStPK1ryzveb7W6tg54PIlBjzyFHiO8c/EbPVZo87zcH8S8zYnCvIDfr7sCzr67PVEivUnyHTwk+Ak9fBCkPe0LyzwAzzG8PQUAPZ33ez38hmG7foKsPAgpEInpub08ZbJXvceNMj3tw0W9SHsHuz8K9TyokTw8CjJtvK53Ib39mCe73HEevb4JNz1YKAM8oDwGuoslT7tkSIc8CWXNO7ifZD3eu5M95iQFPboBezv/U10897W9PN0SXz0A+TG7+axzPAUKEb19mhQ9POuOvJGWQDx6Rze9soymvNeXN72J1iM9/0NzPKe8Pj0x7Bi8boUxvS6ieLw7O726dWdAu8BuBrwInYE6OcC+vLfymDtK6jc9BvwAPThbfr1Vkdq8wNqjOQIKCL1z/3q8ABvCuNJq7Dy0how7UyqYvKL5Dj23liQ804NSuzm+SL1tuWu8XKH+PPx9Lj2LTdU8+50oPbCbkr2XcLU8RWN4vIkEXr1CXGo88ypHPFJeCz0bivo7QOqhOfxPVDx2L5Q82iOsvFa8SL3sJzu9VXpYPZ8bszze7US8yvljvYYWvbxQE2c9yyWCPfmwJzyo95c8/etXPZgyJzzWir28AEJxuRVDIb0ey3W9wu9+vI4wHoiwuTm9lPUrvbF7/Tu1xEU8zUDeu9JZSL3yB2+8Z21ZPetHgzz/su48L5kZPCZfWb0Tzha7JmwuvaU05TyfGIc8CxYwukY/3jx5s9m7IhwOvaUUCb0IkWo9py8ZPMsf+zobZTg7x54uvQjRC72mPpW8+9LUvSG9gTybk9O8Eo2cOyVpkrwPL4k9wJPJO9/sOrxUg4A9JWXoPK/AKj3toQS7OdXHvMja07oLCM45Hzk3vEObojx927c6TsiJvB7ojT3DwJY8BeZXPAPPBb3XFra81tOePI6XLb1FuZg8Y7c4vak0K7yH4kG92sJePLtLv7z6sAG9MYMBvV5xAbt1Jn089h0/vENUkLx/tae9vWKsu3G6Dr1Pce67nbvavJHDT7tGyk49c7o6PUT42TzYf8K8yjU8PKAz/jtmMg2997mLvAc8OD1LjKE8xQHcPNtOWjvxBt48n5S2vW3ftjwELv68xV4JvVF26bzMm4O87HAqPc2eTzzumsC8u9P/vHY9abL/+qy9614SPerl6rxMJTU8wSHFO3Q3gT2JsFg8bvQsPIndbj1InVg89uo2PUmuPTxAui27+9InO94Ez7xcKO08IYJoPDyA1juwXjg9uDlLPWwdWT1pXSO87AcUvRP+GrzAJdo8eQ+pPKGSaLs6EYE9I1eGult6GL2ZNje9CPTyvIou1ztBHB67hRBevAQAGL2p04I9YGRlOnYbLb3ddmu8QQI9Pe2y8DzySz29lhBnPJeasrp/xBi9ClYHPAU3rzyr2nE9Tg2Lu1YzoDwLjy69YZNdPXmul73BPOw7ZeaYOxc2RTubBxK87GCIvFu/vjzwXzI8uiQ+Pb3hoT2rNHk4K/livLWy7TvvAx+9WJ7kPMtnOr0FD4W9re9xO+4aED2uHhi9IbqFPAbnD7v/kzc8M+Q3PYwWl7xNPHq86g6nPdjWTr3XdQ89FJSOPdHAnr1fEaE7S0rRPLKRgr3xESo9OALavJOhpDyPTjC93k2Mu93f2Tt2D8C8+dkvPKhrETxVDZ+6nVmePGOhwrxvyTk9DXiVPEOYUr0X1S69cvwaPVkSCLv3bKq7zRrrvDDto7yBpUS8fnUGPLVYZLx3EI88IiZbPD7TqLz9xV+929jFu96uzrysWCu9ZOWUPFPsFD3w/BM8prcevUJxuryiFT28nWDRPJGrKDsx9Fa8DxwWPDDLiT1W7qC8QuCXPOwIOT2CkjA98yiHvPvNcbvtUgY8H5qyvIlxqzzoGsi7sMXgvPq/QT3ZfD29jiPAvBONbLwYuTm9xzjnPH0TnjzFk8m8z/yWvJVgEbzd12I8M2xRPedAHL2ojgM9mjUZPNQBtbwOKpU9obULOxEIJj1MePo7NIClPF1OgL2S6ee8bMI3PQHnzrsSoqU8Sjx8PEz25bwMSii7AMZsN9m2fzsfEWG9LM8HveA9dr04p40838OkuyBVN71hPtW7KoMWvQ15br21zjI8hWW5O8gAErpqQ3Y8CZLyPLNFxLtiSAk9DoJrvD6KK7x+ema9DpAHvaQOi4k9h4g7Zma7vFf41DzySSi9LtcVPeT8MTwDN3s8XfbAOwnFlL3QECc6FWznvCPkHLuVk+M8WJFHPc13aT0Hbqu8Q7NWPe9ioj3PFS+9lpJMvXsaSjwKhQk9GQcHvM18ZjuAs0I9IYtpvOSu6bwbVa+80MiTu7JkYTucNi298eIWPLAM9rqQ/m27G7KrPGa+fzw34vs7Wutivf3lbLvmyqK9X7e+PJh+YDsa7Fs9EC+4PKfq6LxDKIA8flpCvSu88TyPwhO99s/WPJ1phDs9a8U8ETw5vSlkLD0hb0A8r9oJPKsDH7zqUGw9dAyjPE97aT3gpWA9kL3UPOrLM7zxOEk8gsE0vVrAPz3bXl28tdZ7u7rVSz0l0wE9OUlSvAL5kT3rwp88utpMPZb4U717d647wISmvGH9973Hc4c76lAMvTILr7xBG1e8UMpnPHsGYrrxXiA97nlNuqWHNzv8Dco8oKPnvG+KGDx/yIy9YFULvOs6Nz0QHP28IfoTPD1P8wdyuOU8K/SCOwxHjD1Pfcq8aHSqvNWh7bxPg4U7R1O0vSj2fTzCfRo9S1sjvVR/1jw2vlE9iPoOvcNMjT2g9Ae8mlcbvbPG8rw2Fbc8q0q+tY+e27zPaUk9Kyf1OqRyoLzRUyy8ILUDvQ3vEDzhhIm8SVDoPIO3fjxP9L888iUXvSR7sTulqdk6XMEEPaciHT3/Ixw9lJ6lvPrqEz04tZu8acphPdEARzwakQC7+H80vJaLFD1XTa28FbHSveeiwT3zg1w8y38KveTl+7xAYN26/bv+POz4h7xIiRK7g2TrPButMr1ICbg8sslZPcCqGr1M43O9keeSvcgipzxS0xM9LZ92uxwzRL2MzZq9IzOWvcB5dr3jktC8Z1P+O3utozyYX5q8Qk8xvRFUDL0lwuo7ysIIvQBWy7mj5W27iH4UPC7nkb02hmQ9mN+lPBUvnTywYNC8CMoUvX89xT0dpBw8IbyPO6JckLzlY4Y77QH4O7Y8zTx7NbW6lu+BvNKXU7IJBwS8eCxbvNmYujw5nBQ916k3Paj6jTwR67U7wQjeO21PlLrD+3Q7jZFnPDAOCTsYHY28adoWPIjwUj2VIAA9xu4EPSTgDr2KhvM7eUVpPauMiLk8Goa8tSFPPIynqT1xH1W9YNx8u2bP6Ty/uv08GJLePOVvnTuHq149PywAPUON5TpzTE498GZju0MslLxZobI7v9w7PcbBFL1mbCA8jqnEO7K9Hr33qii8QIyBPFG54DzptAu9ccF0vR5pCD2lYSi78+1evYfh+LzccVS79tlkvJP0try0nRY9QNvnu6eX57z7io27apDYPOp6cj0E7bw8reMovNnCbj2pPnU8T4+YvBAguLy+yBC9VbCCPVqM4ryheJY7w7OpvXMhiDwawQa9zRyLO1unBr30z9Y81vaUvc/S8Lt9lJM9oZCePSOPgTwam4o9OTUXPZmzoTzZ0QO8yH2NO3/Em7zRqKw83LQrPWF9LD20j+O8CVV1PQKRnj3QX2w7GadJvESSTTz/ub88aNeFPfrviDwDno48OpRNPSBkB70N7469b+uXvKwW070xNYs9pR4MvV23xzqkdnu9fq+DvQiH7bt9iF29bw9BvfQzEL3uSNU84MxBvQ1BCr1Qe3W635hJPFRPBb12xWs80Kqwu+7iSz1xLP07VjXZPAawoTxN1Qe9xkUEvLyHaL2y1II9uQ5dPL/QqD3CIbA8EEx0vajUX72hOUK9wEOJO4PphzxsliE9YVF7vVX1Jj2XcNi8BbRhPeBgM731fZo8TSn2vFmCiby+geg9kRZpPWUHkzxMc509RQUnO0CvrzuaT2W8y91avA757L2+91s9GhAIvP0AKD3WIOO8dfqpPGk+s7x/Wxc8X4oMvMHFmLweRni9l6gvvZny2DvApKI9+T0/PQnPwz1QaqC8g6yuvN3z/7vklqi8DU8Zuyqa9ryA97u94RqfPD3H2jz19iK9lgp+PIDg2jw2U6M8XF2NO5yf6rvbP5a9L3L5PNNzAr2nEWC8aG3Ou2Q2pYi8Sf28IP3ZPJSZVL34rDa8mH50PZEtbL223CM8mjVtvM8Y0L2fpwI9Db/NOxX95LzrvTA8b9P/PTBl4LtqRI+9SQwCPLrzpTxnDo69MoRDvZh5Dr2f2V68KMSiPJwYLD0qHZA8aaXIPBLazDzjMQw9WC+7vE36ZDuqM4S98RHevEC1ujzKMG49qlBavTiCgj1FPBI7/bqsPCnzpLwSi3Y9caNSPK28Wj09F4y9mXMhvXN0Kz3rEgM5YWiqvAyMUTw916g8qWlfPcwhVbwKMUA9/thxvQ8ATj2fpxK7Q4mGvTISiz2ujEg8wJSkPRlyWrz9xay9vrZqvB0iDz0rWrs81dtKPR2teTxGqzk9qoj/vMTPKjyrmUI7tmaWvX4xgzytp0e7faCSvZGOA7yOnUK81YR4u0O3gDxRHEi8k1lxu5DBkb3hEQM88rMHvWKNqrzsUbY8u3XROmDlC7zRHQm99NsyvLcb4rxTyUi9g8g6vUh/Rz3qbaq9V7C0vF4IhAg+I2E9qPw6PUEVqryB6g49Bn4ovZYLjzzMr7e89LbEvFUWDb1X6SA9KX5IPQ4Da7z+0r48a3sOPRE5MzxzT/o8HpbIu6fAw7zsvvA8plkJvcul0jz1xME7g7l5O1H7Sr3jxiu9txGZPL7ghTw7Zau6Z4RwPO2qhr104HY9AI7APDNxoL0CsFC9+AuiPbArGj1XeQg9lejpPDO+lTwsr5M9fbQMPVm+kjyfh9c8SwxHPRlIIryc00A9U1LfO7paxDxOrbY8BGu1vJLgiTycJi+9upwNuu9virypPRi92lFYvdw3hTx2C4i7C0WBvC1ZrLwFoCy8K2pqOgb95Dz5iRu9u/IVvU5dYjxIkre9gjOVvA/c17x+nmi9qUAKvdkk1zuiWdq88AlKvdaMgb3AFsC8zI0FPa+afjxxSLw83NmPPdWTR7pjSq27UEM1PUt3Br3OFo29PY/qPbpROL2TLps9tG0KPT2iJrxhpSS90MuHPBNRpT3qSym9xnNHPcQiU7LEwUS9rkqCPU8s67ykgdO8FtAJvVBNHT3X0uS8RSU2PUg71brhQKY9osQ9PcZhHrwFQaS9if5gPaRkV7tbpSI96+HvOby+czwKmJ083M2bu/nVaz2gnzw9bI1nPdNm27xXlOe8yYcqPDrH7TwdIAc9ssU0PABJOrtft9I9AujoPQ5Hm7wZ7be8SpcVvbLuIr2mi+w8u91GPDT5AL110jQ85vyZPXmjHbyh0Ya9vAjZvAdAl731LxY8Iv6kPbvSIL3yPlO9IyvVurzYC71ijQ08z90AvZWkoj06LPg83JIJPdovSL0fEse8TkJGPCkpLLzX2lm7umPdPOsgGz0fp5871ZFKvYCYDTscYss8h/EFPEqRWj00Cyy7UWhivRQvnjtm/DK97wsFvLXJRznRvH495pwEvRMmqDwuum09c9wVPeahgbxbjJi8Qb0rO5EtJr2r00C8kEZFvTdhWT3NvgI8wf8KPJVH7ryTrIm8UUbcvG8sfrzh6uG6DQIaPMS4Xj0/gWW8FlZavdjdCL3q85U8+aQvvEAp8rzyXQi9cJDsuziJuLuXbPM77yb+vKNnxLxY3Ag9To6rvNUNbr3rYWM6pkhZPTPjjrwYG4a8+O8NvbNLK7xUMYa9/D0ePbiWBj2FvzM8VksmPBFoKzz0PSq945i5PBZvlrwQ4cI8dzKCPEoHEz1boDY8PMxvuj0zL7346yc91I9mvJWYWL3xmH68Pq/BO6+DE724vA+9KeWWvTPcCj1xgg29PUupPDVVqDzadR+9/VK4vRagwjwK/ys9WnkgvUeMozzEi2G83T5QvIAAPL0HEtM852nQvBTFdb16MUI9Ulf8PCRJOb2J6h48+FaJu4xMqDyUgB29iTrePINYtrr2oi29Czk3PV8dzDw/S5o7nb4NPXKCkzyGV1q9aMeDu8H0Dz1p4Zg87/ywvB0qZ70P9Tq9beKGvLgBiDvl4BK9nV2JvPQjdj3Zb0Y9CsipPT1r6Lusz5u8eIZSPNWR7rwG85A8Mk4APFA4O4muOWk7i0ptvG/GzrxiRm49UfeGPXYnnjzBf8A8RhzWvEIaz73/6qa8y4eNvDhP6zxPSCm8/2YPPSfXrzwSbGe9K7pmPCZy7zwBGRA97IMpvVV9X7gjDQU8/3+fvE6tg7uAqYU8/fAYvdLnuLxgajU9Ywftu2BJiLzM4YK8D96Tu8J0zbxjdww97fVGvPVz2Tsnpp68eWK9vP1g/7ytK0y9RSvAOzr+eT2uAQu9b4rVO1JH1Dwvnv081g8QPUUhmLwpJZw8BXZRPQy6I72m/Mc8yU2YuxP25Ds5jII8Qd15vKJTzzwrk+e7LGwSPRsMM71JRjI9TagnPQ9mLD35RLO8S6lmOwrFnz2sskU84s2QPBC5KD0OiQQ9Kbw+vQRnqjy3oju8XZurPAp0+TwlyI+8nfiFO7uZrb30Vmg6OCwJvTSGSbwEc0c7d13evAS3dj10tTs9lYqOO5nO4bzXJSY9hG6fPTIPJT1qSJg87+GUvcpFJT0qG7M82LEOvaJOsodjJBy9IgGLvLJKv7zFd0i7RdpQveDCiLwwZgs80VcNPdscOD1VRWe5JT3DPBNofzw2agM92zE3vFftTTzSUZs97yGmvSB5wLx8WWU8zj3cvFlHAb3r+t87/OIrvGx51TzAX029Urmgu1PGmjy84JW9kD1svM7zH72kGj67AKGPO7SBRr24DG09vDHGPL3UGL2NeaE845YkvdcR4zxpEva8o7XJPGSOgDzL3co8luSRPe+/lrwIOwQ9QLmLPMctbT19OGQ6Bfw+upbjJb1qqFu9+6U1Pcy6FL1e7re8ybOAu8Tyozzcvms9dcEtPBWvvjvzX5M7iBD0vKjeQr3vAwW9jBHyO7j9KT3tJcy9YSmBPfhbgjyCrgE9KNNivBjZqzwbmI+6xKNCvZL/mbyx3EK8BGUPPan5qDwbY3c8FblxO0epJzwWDIw971O2u6dC2zyahoA88kIYvdCtpzwx+4E8s8o3vIyljjxVx3K71Ho4PUI8l711Zvo8e5WrOzIpfrL88867/+3MPPWJIL241A+95uEqPVzN2DyyzgK8F+i2O80utTzAL2g9hTLnO6F1KjyHVbu8PoyuPM2vSD0YyrM8TmcJvZASjD0mxr+8Zj4pvIiK0TxacCI9j7toOxQeujxVQ0S86KoFvVt72zxsq7Y8TGdNvL14wryWfi695S7APBWYAL0z90E7mzOfPfwxCT3mRAQ849ddu/f7kTza9xk9jRAbvI2TjbzRGPK8IyUIvGwQRr31kRe9LgT2vMUZVb0nNQW9ZezGO+pMrbz0TEe8oKXvvO50jzwAvBI9K59APZlVBb0akmG9rcKWPIWSfTpft1Y9B6yHPGbORT20B1i8BE+hvV5shLzrRmo7d/k0vWtnET3vFei79OP0O8nc2zz18s877EaiOpYEjTwycPc84L4xPRMb3zwVoa28foKWvE0jmry4Ijy94DKLvUu2kL098HG9oKJ6vc+IGbxV7aA3hSg8PGFDA73rSGo8kUzlu6tNyzzQ+gI9R6AAvbvJLT37S9e89tsqPQnH4b3NGXQ72CZKvCAS/brKdAm9d9NDPfA+nbxmgoO9e1+Bu7HbMTz+SlK7wVUiPWpL1Tvuc2C83+PyvHwbKLttF6C9I85+va3WOzxhQQE8eYf7vDkyhr0Qh8m8NTuTPPqnxD07sII6YAGfPWdSs7xctuc7RqjLPCCg4TwwNxe8kx7yPLTB0T1Iqgs7hcFfPXnelTyplFk89CndvGtWdT31N8k6DcuZu9RG5Tyr5P681L3aup6RhL2YXio9ld/XvRKkXz2yakO8BnA7PGX3urqgcTs86nvDvB40cb2jdvU8m1IzvXQUrT2z0WI8SfHhvPYAmr2M0VM8IutjvZf+Db4kSXs7AnXiPUjj67yLSCk82I7qPMq/BT1cJQQ90KfSvHqLDz26F108JSZjPTqOCz3kXh+9pjcPPQN8Pr3JG02932B2Pe60o70HUsU8xt5bPaNzcTw/f5m7pWuJPZJjHzxZKk29X1e1vCQ1LzwgENw83sNKvczG1IgUFSg9FFKVvDpkAD1GR5Q8485TPE8XoDy64RS9qzLTvNku+7zXgna96C1vvPJNYTzavy694D1APT1AhT0AwIu9G2wDvAD7hDzo5G27GH0dvBaDkzysTdw7CRKSvHHo3TvdZhG9DfqKPNuQez33SKe900gFPQ3bZzw0lEo8JDofPYjF+Ltx+vK8FZGrO8AzSb1bSCg87TohvdgfjT3HD1O8FgpFPVVPQ7lcoUu9yo/XvL1t17xz1bY9aF+NPQ71rTx7Sgg8KpoBvJYY5DzLdo08nfPSvBXyK7ubMQ67G3mPPMfn9LxGtDS9rbOIPVa9abyh7Fo96Q7QPDVhEz3tVgC9zAsGvcCpvbtNR4I8DfFOO4hGOr34dZg9akCIPGvCED0x+v28fLB0vZAC47oPGw08DddQuwoxDb2LOUm8UbTNPNpVJL0PjD29jkPPPd63Vr1bn5c8eMsou/Qg3jyY1z+9aGYlPcNzQj3UVni9eAyMPPitTz1eEXM9BzxMvZGnMQjFdo+9BD9/PfNKWr0lOW891HU9PXk/HTs3hKe83uo/PS+XcD2FZF49BbSZPOxVFb2Dv1W9P5mKuw9Ywjz8c9u8vmarPZceB71t1N29U8BKvOK7Sb30b/a8OKMfvSDimrspjUk7dJdmPJaQjT1/FJ09wG42vKeTDbuzeRa8jTcUvbx8Bj3A5vM8zRHcvHnB3zz+hO48e4Z3vasprzyWEAg8jPRdPSdl3bsV7qi8MNBVPDXZZb3bdrs7ET9Kveeaej07Oh+9cEWZOrOkvjzKRCY9wbFFOx2YlzzXDCq9EgsPvb2u0LwgdVE9lbntvFInCD3RcsK70dY0PKHTNL390t+8VCc7PBtaWr3FMdI8ynkcvVxXA70Bjoy7gymRPeWmgDvqgZO92nAzvVbVDL1YPVG9+oAcPaAoMzw19z08KlZovYzjMb1VWyo9AayuuyFWULxXCIY8RyWVPSJ5uDwrIS09lbn+uvU7Jj3uVdo8cZrhvBD6Xb3OWAw98LwaPelVcrLJyqC8/3rLu5P3Zrza11w9Zxo7PSpTVz1XaWY8IbUsPaAxST1pJga8BSY0PFz6Ojuo16A8gd+9PPuD7zokLW48fCU5vWjFqbxxre67bdKqOsOHJL2bS8o7RrqkPFOFN730hSK9L2kNPRWwi7zo4Pk8UagmPJTwirwWqSe9TlMxvBZerbz8PAi9MZBiut6eWz2plSa9/Fx4PJzW+LtNajG9WaBrPBShmDyN/qY9fta3PBrfab3IByQ7nCEBPZH0Ub2Quko9134XvEj0eb0EqQ29JvhVPUnzbT30A1M9toOZPJqThLwNPLg81VABPGLPQT1etJQ96gqPvaf/AL0dV2k8jrSUvdWT37urx9+4ANqZvcCzxzzoUoi9E6YDvdLiHr3h6cM7YBRQOseSs7wYaRI96Pp4PRBbU706EIG9OzdBO1Lxt7y2Z1y943+OvWuI/r2h5Fq88koGvatFPr3wesK8MKYqPZUIzzwllcc7oqmgPAak0T0bg/W7YqgkPfVcLzzt4OI8eaNFPdNw0b0nvNK7RZhlvYJxfr1eMF+93uh2PTojwLtY8ly7+bL0vCeJjbynB/U84t+CPR7Rn721FjQ79EqKO3A6obvrQoy97uHlu9J3obwNWRm8jQIGvUfziLwDTEA8lMHXPOp4aj2pDcE8pJSXPe1xH71Wj8C6Ue5YPeCSrj0Tkyy9BkHSPBcmnrxN6Z08X2GMOpi1cDyyspg9xzsPvbjDRz0Ebu+7JE4gvCrJazxdHRM9WZ+CvPrTiL1KSDI9VPQ9vYGbRD3LAoY8672NPLDHuLw9Icy6dqu+vOSAXTuTU409aIG5u0iJhD2yMxO99AubvCsT3LzE2FM9GLjXvFCEvrvL7Va8OujUPfCdirx7K8A7QLFovEN/R7wGJTM9as+tvC5BTz00dQE9App1PcNggzu16bQ7lOotPEclVDwvl7a7QMvJuVY8YLyCRGy8Lps0PZO+kbvuadE8ZA8fPRLyDz0A5so8a0AQvHWk3byi+IE8MgswvQVvDomKfou8peI7upy6DD38Tau9r885vLugCDs0tqi8zOyUvH67E7zKzDW9KVLVPAtBYrqmM8y8tRvxPAaGlj1jvFa9Y0tmPeuXNT0ZksS8FZNdvEvFcD3nhom8Q1cXvCYo0byDBSe9jdnUPcwdrTxzzUe9CZfMOxfzAz0akfm8jGTAPKNCQL0uqo689RgiPViENL3UIzU9joVhvbt2Gj1TfCM8Nso5PGRs+TvSW7O8pzsvvWvYer0fM/08nYy4PLuIHD1hB2s9vYR9PepBHryeM8S6aKW0POdrB70Nc9670WnBO2DCyzsUBxO9pLfcO9XZ7jwzRYU9m5UVPK368DzhPKw8mcSyvGwN9Dubgqs7QcqRvAOnfj2IJqU94WsQvfPKLj1L3rU8Y7HDu8w+07x/4We9thPrPIXKD71c8+W8MDwUvSKgar11WRc9vdlMPaVseL0kWg48ZiOJvSbcEz2I+aU7tjoavN3OsjyWDL28/hiiPOVlhjyM2nQ9eS+gu7EDiAiPYam9x3J7PS0j/7ucfB096w70PPC0er1X6t+7jWZdPCoWrD0uODk93Bh2POUoR7t/Awe80YXKOoLKHD3xlze76BZgO+MZeb0sLmi9CN8fvWf5U70QktM8ywvBu/utGr3Z+xg9BzLtu8ageD2xL3w9a/BQPVpmX7xthI+7hzmrvetim70JboY9HYIhvNCLvjtAhXQ8HaSIu1teXzyQusW6Q7cIPSaI0zyUDDu9bAIFvWB9eTs+X149CVDevMBanD0B3ho7MuBrvdzpPD18fnQ8VzO+PAzLYT08Boy7R1THO113EL27l7E9G4VRPBcLiLzhHTK9zPAUvYjbVLwwf4w76/ZbvNP3dLxgFLc8BNG8O0euAb2ihUe8t40kPfO+fjzt9o+8yzQsugRUDr3zctq86CCBPC8i9LuYmOK8lQh9vbwrW73IPXE9KFOUu9WPc7ldLy09ahqMPPrWPT003jo94NKtu7E3eT3UVtY8h8BhPeEiKb0SkTA9Ly2KvA1sY7ImNBG9WDAtvYRUsTs1M1M99YGJPY1stDrcVhk9GOnGO81bhbmhgcG9iGhTPIGUAT2krxk9YP0/PHG7hjz0tJe8+0epOpUPN72fioa7HKyIvOpJS70jZwS9kIMtPHobMb0xezq9bDM4vKIQYzvRQS09Xx3ZO1Vi9Lgd8a+86PpVPCTb1bwAoQG5Cz3/uYPw2Tx15Ia9f4inPJzTRrx4+O+8NHUYPA1xhDrxC5E9xq6MvDLsizzJP4g8+xtWPW7YV707qxQ9+aIsvG78cb2Yh0Y7PsZnvOqjV7w13r49W7ohvctDy7xQbAy9ZgwEPasH6jwM9pg8nUkhu/Zr6rtySb28vLWOvD8zmr1tuR28cyABvVLgxbxobcC7meTMO9chlT13DTo9WBZ2PV+Rtz1ZbdI8Dyq+PTCZG7266KY9UYN7uydl7jssdYc8xoutvQdRCr4qagm+lKU5vSuxyLxz/Y896/IgvKCRO70axpO8mUVsvZGtN7xMyww8GVk2PAloNL17jZa8YYMCPbK+v7wk2EQ9sdwaO8tYrbx6l8u8jFYYvIV1Jjy7lD69ww9DvfCvMT3Z+mu8tTO/ueGxjzwvj7I9ifcDvPtEKLuSSAi9FW8FvdrVmTz1Xim8UnvAvLFzBbwi/ZW8HOMYPWIblD0EKq07cTvCPeVe1byxCES8TX4QvHVJLr3VODm9NZyAug9Q0T21Svs78LlnPQcRPz0Z9Sc99V7hvPlSqD0Gm7I7vHP2u58fabyzpLy9n9qDPPzb1TyM9yG9aDczvQLIwjydMUI9WVk7PQZHLDwdDRU86wS6vOuXRb1Ltfc8nuGHPHX0/D1vHVC9PoRZvMAj672Dfts8kLPOveSAn732m5W9/6fBPdMzn70aDAs8WHQsPah8hzwyydS8u8qHPNvAV71pEhk9PrbzPJqUfT07Lhq9TuDVPNdEj73tvK68/ESDPdMHJb1aqgQ9UGkGPTDa7DzGShM8pnd4PY+tTzuph3M8gQlSPMwcAr3jUGo7+BwTvcicOom6FLe724aZPVMPVD0h/jU7Wx1Vvet1Hj0sjzQ87Q8CvHU1Wb1Ryr+9oTDfu7ncnbwkkvM7SYgkPfF3RjzxMNi9/iE1PTHbrDzgs2w8jdTzvNMRTz2GBh+9iZMnvTtoxjzv/688Zmn1vMFFZD3g4EU7KUNZPAKHRzx13Vc9jIpgPd4K97vAY+K8xW1LOxVUbr2l7Ac9sCmave9JDz140ie9kWi5uznhCD2MVA09Gx5DvcYgG719lPc9tVtePY7k8Lzbpc08knsSvHyFDz0NhZo66C0AvZpLSjyiTwK8uPtOvae7Rb12NrY7bh6hPU88er1RB788sifBPIlBGT1AxY89TrKTPN+ut7oo5dy8hOgevSkkET0sKtA99E0IPX8ZPDzLCPi8A8gZvTLHDr1vIEy9CfCYvcPXHr3fNJs9F/AAPeRxTzzvniK9uX1PvEVhibrAJpw9Ln70Olm9WrsJzoc8OiMrPagBrDuvN5w8YEodPQh0EbyhrDo9Y0O5vVKjwQgogCe9gFOKPN6GKD15G0k8ilNdPXIIWzw2U4C9OwpfPLv1Kj30/Vo9YmIWvbldpDywFYm9c1iFPB+lFD2kOqq9Fur2PfzGU7zsr+S8TTtKvW8hjb0MtTe9Nc5UvCC/9LzNsTM9KfXivAAhwD3XV8I9OWk/vIIFVb1GP7o8yfnzu3OKKr1uGsG8pAhlvAZ+DT2QshK9xrtJPVC1f7ylVGu7LTdaPfYZa72NCeE91seYvajeZ70Ic+88dcSMPbTGXTzWXzS94Y6GvPZslTwDZce7jJybPV01hT01R+68ipL3vGWktjxExCY8O4nYPAkSkr2CIUu9qhjkPMxZtjvDFA89IiIBu8mEjb2FgkQ87+b3O3Sa8rzm+p688u0/vfiLTDx9o/E8xmahvI80Qr1kn6a90iQCvUVOfLz1nKQ7fQDlu5L1qLxiggY9SLoAPOpHf70Z4Q494k7EvFLObDy/wWY9XAOAPSik9jzC42M8XN8IvHmVFD17wUC9VxQYvD4BZrK2AA29ldc7vTLPGD0ykI09EOMzPZu1lzxtE5W8Z8uPPFq3fDx8drY8yEiwvHW4ET0Jr5Q9xrOQPFm8JD1/pZS9AqaXPB1igr1Y/n06igoPvUSlRr3ioOY7EaJbPZCIjb2M7s88w1wsPQ3wn7zIUVM7qyqtPJyeHDtWwRS7d1S8vD9fHLxPak28+t23PJfqpzyI+5i9MhZFvLLJd70ExUy9PagYO4/emjytVc09IbCbPR6KkLt22wY9T3kLPABDS70uhle7fOquvdx/UL3m20a9HjQ8PcTlnTwkkje9SmK8vDTkIjsQXCA9Lyj1OV8ytLs0zSs9d3dpvTXkWr3v9cy6IQFIvfRLLjy7oz+9UJuMvHWglDth6Xi8MSR8PVhPfzyVsc4852JWPCdRsDyZI0a9dQhHPPJzqbsTs9O8sPqbu2Jwozzdxdq8ttEnvYxklr3UDZ68b22mvex4NDxlVmu8N9SDPT+vPL1iS2u5DCKGPHYp5jxP3Za82UNPu1HXRbxlY5U82nB0u71Un7w1GI67K+0jvS6uhLx2/9W8U66ePCMYDL0Wxwy9ydgJvf2WJr37Jsq7ELVVvB0nH7zFaYw9VQllPZsagz3IqYe8J5XpvHx3tDxSYhC9jODvu2i7tLz33u47AjpVPLtbNj1l53k6NY9FPVBx2bzYp8O88z4BPcmyGj2ee2y8WtCfvGjFoj3FJ0W99vqKPHKq0TxvdpG7NCljvawGkTvwn6S8jIlivJfoTDzhTkA89IxXPE/bl7ztHXs8vpUrvWdCHj34FJg8HXxLPCVv3DyOyUI9VFCaPUvu8zyTngY9w3KjvLD27j0swCY8dWjtvN02C70xZI87HshCvRa+b73Y0zW9uOKKPVmfB73d3Wc8GbWHPCInn7wvDt48rqUJvDu2IToOgEk9A2MGPQd0Yz28pvq7BXohPAp9+rumaUM8lbAIPfyX1zxvCya90K3LPLYlqT0dk488YvKwPc5JWT3F4ys7eiKOvCfmrr3ICgi9A5aAvYqhZohYrw8811QdPS4dhzwOZTe9uBJkPB1gBT1Frcq7fQrlPBVt1Lw/MFe9XweCu12DBLvyeIS8CWktPegSKz0LSQ69yGD9ulTVRz02uJ47lT+6O+5xQT0aC5u95iSiO93bWDuFXac8ZaQeO+Rdnrxt88M7IbIPPXtukzzwTSC8lTHwvKwinzwnu2y9VZEHvcADZr2LQ6S6PPUkvdpqMD2z/c08Hr2XvLD5hDwTL1K8QFXHvOLV3L3Z1LA9TtOePWxa0zyT9Es9UmcJPflZgjuOEvQ6FDoIvZcZcL3RFY28p//2vBe6srwFuGu9wbpqPMzlfb2F36G6u38CPdwVGz0YnPE8LYyhvcftrzy8sOA8UCICPLVzGLv80y0995WCvViNbDtiMn89BAxMvfNrHrxuuxW9sTOWuyi7jbt3JZK8+cl5PTb4B7tzNLS8kTaOPZRHCTxM5QI9kycbPXWM2jxR+TY9vWEaPQ9u1zvHFbS8CefSutotEr05YzW7FJSDvTary4fgvaq9crRpPTzACTx3m5K6RpACPUugwbu81Z48tFqAutH/sT1rpSs9RDvbvFV9BTch7eW86nNBvHxdArwY8kS9WcAHPEWSdr0iS1a9qtKYvVyw3LwkiSi85Oc/PSl4tzuDQA89J+m/uwHQDT2DQxg94xfcPHdkojoMbjo9XjChvStH7rvQ2bE8C7PAvMb5PbyIog89P6gCva9fqDxezJC8PjOKPdKbjLyX7PG8NNsuPIIS57zJbT28AAjvuLL6aDxV09g8sW8wvbD15joATAY8xM/UO0QKBj3vmYa9LW4LPIPhKj24XXA9J8FnvOQC37yoPyO94zkiO7npODtLGIM9yWCKvJ4P2rzWkYQ9Em4VPQxd2bwngB69Hko0PUU8rjzaKiY9NnPovKZmOL13qHY9ZCpSPRdgzjuksoI8SnrRvFCqZ7xoBAo9NOgfPe5wG73Xsgs9qMAEPMkgyLtbpVI7bAgcPGxROz2NJBK9NY/fPNv9Cr1n+JI9hZPdPADFb7Lzpg28v7VdPJeztTxwug49nV27u00K7bz/vew82X/suwY++jxBpEi802dcvCyd2Ts705a86/K/vEzgS71oakm9j/oWPfPhxTybXW47BW8WvUwXnrx0W8A7MTcOPW/ZtL1/83W9AHDaOJiY4zseJEg9lFD4u9xxwrx85aC7damnPLDBlruUlXa8MLCePKIv0Lwf5oK9BXQ7PIpDf7wPleo87pCNu+AqyDr+nWY9Y4KFvDtfX71GYQM804gZve8cgb10zlQ93Id0vQQJRLxrCGI6SRsxPHNZcDvUfio9k5WSvPntrbz/SZU7qMAIvaRouTximGQ9Nb6nvZ5NCz0plcy8qcGmu8aR/7umKBw9yKk7vaZnlD1fhsC8pOziPfIuST07uX09sHq5uy4iJTxwvQU964k0PcV97LqQHoq8jscpPcOa6LzJsWU8Fj6MvY+Flr3NbZu8c3OPO1fDLTyJvIG7boJGPLcSIj2B7iA7btuMvJ54rzsSbI+8baebu4SUvzyR+t67Zozdu7ZWgr0LAwQ6cMyduordgDxmHic9G8RXvL7RcDye3im9hOUkvSmulTyvQpq8ZteiPf6HcL1ccFg9mVMbvKppSj2XqyK8F2qavZ4dzzxXY0k9iwUAvBUTALxukfq8IIGsvT/gfT2tzmw8GVHvPMZc7TtgHgw9q8u1OyT6ST3lAqq8hFsRPUtawz0w9vm6RxfHPQbN2zyIvHg8W2UjvQ9+UT2xwA08WAJ9OwZZJ70QL269T+ZAPZ9MM71LcmC9tO+hvaKZszx72RO9VbzRPBerxrsY3wm8dSWyPCssFrthfiE8xt2YvXmFATy0LME9ZFMCvRTnBzzakOQ80dhSvbT65bxnspK9EqYAPm1sjL1trEU9v9cZveiioLulJwA9Vyy6PJ89zDx0V2k8AuwKPbkWpTwFysq7K21mO08exLyXd4q9LMMqPTzkZr2dDKU9SX8rPZknOD1z/jW9kYzWvEVjPzpjrFa9H01Gva2zB72oqME8bY/tvWdkWYm+H1U9Q4gvPex9QjyKhTk8JLhTvAKZITuHKT29LolLO1qfjjvtCma9FVKTu9selzp5m1W9TmzCvLGvXz1CIZ69YqAXPd9kIT0h0nC9cl26vLqlKTwsndO8LHOaPPIcgLze/Ra8f1W+PPDeszxKynW9RiydPfxTzTwFNUQ9YtnBPJMuwLxyweo77UThvH9Gsb3bW8S8blbcvGBJyjy7F5O9ryeYO1V5g7yqx5W7LNp4vQd8hTxj0aY9S2FEOzyVczztw1o94neHvGVkdzz62T68FwtVvCoJ9byLiTe6hVEEvaa0Kb2eOEy9ax6judG3lLzRGfW8iKTyPFMclz03SiU8AwbTPEuNM7wi6Uk9FL0hPZS6JL0KsZU9aiTtvA5AFT0Sh1e9leBKu6OKrbuDW5s8kdNevGXIP71a2fu86o9oPX3/Gb1y5pq9BSxOvDCDkzw0YXk8Tf/oO8xXh7vbC6i9n42KO2RrJzxePCe9SVBKPK5rSTwR6Wk8KpP0vbU/1AhTtj08YcYSva0+I72wdbA9NYH7PM5ZV73INAQ8q8wQPegHg7p22BI91nVpPbGYizwMPL2945VdPMBWjD1BlLI843TIPY24k7wBPgy9zOTYPATI4rwnLwy8C0yXvd0RnjwmdZg8op3RPKDupD0K24E9uLgePbOf9Lwru+G8emWXPeAytLnFrtk8K2ALvPV/RjwW3C89K8sCvVlQVTxMgJE9uNJLPWFTKz1RM1g8sTAdPS7vO72JmTa9MaBQvTpQMD3lOq+853ahPIW/HT09WPu8zWuHvbxRg72/0Oy8LtOzvP5UCbzeZEE8EucEvk/NnTzS9qq9xiMKPNBcLz2z5Dg91S2ovSp6qr1e61+9HdZRvD6RZb3L77q7zwZbPcS9n7ywcKO9fQwbvMcs+byMJnC8Oaq0Pa8WWT2jG+E8Y8IxvUesOr3l5308kA9TvdoxRzxD0p49S9otPBZcpjy1jTY8pCYFvejk6jz/Xjk8U7QrvLUrMbsV7Rk9KpOEvQD2cbLmxQm902bNPLHOXj3IiiY9DeGPPSaXaT1RkyW9Zhm0vNZvETxKOJG6mhw6PAjzAD1sTrK85pe+PGUU5rw2/x28oCCavZd+CTyFVZ+7Vc0avXOgCr15iUg9QZstveSbV732ddw8+7b1O3MxEr1bvXa8jXrRvOMiGD1tm0A9QJ+NPffrVL1cRkS9Q2BaPBfhoTwIBB28+vQUvfaEcrzumZ+9/a0fPA04mj0v1D08ZQUEvWUE4Donx+68GCefPF+fRLzbDAk889nivIUFY70Mv8S8KBdUPRb6fz3ZNJU98AtgPTbknDyJ9Rq9UUNpPYSqKT0Yof49f4lgvS1op7xTsFq8DyJPvTspJLwcEpA8W1gkvWSTYjywRzc8+Y1DO7xFwzwgiDg6LNifPCvhc7o0aUg81moGPSx5Dz3Qlt26q3x3OAXMjD10IQg8RjUVvRcggb26KBO9PhCIvaGIkjyfBfa7xA2CvKS78bzYyE87/HGzPFvphzxDUw+9sOMIPbB607tkBne9tmZvPLUzjb0ywLA89YaqvHqLBL1cAEq9DCaVvHjV+7vnS867GVfiu1hpKDygFAk8a8kXPMULEj2Uq6a8GmNBPZNL/rs7tLy8iAp3vbAqfrwo3Ei9aibNvPcEM72thzW9dU2EvHARMDw5hfu8EXvEPUk0gbtLt7s8D44APEh1Bj3Wtxi9QyMIPO7ByD1Jl6E8NXtWvNUOqzw+3cM64/NqvbW/Xj0LomW9tYPFvBtvE7yeB/m8W7FFvQGwRL2qTe087IajvNBPWTxNAdw8stPFvJPClTzLVK485ZUkPKMuxL2GCgg9BbJau4g8mz2NIH09Dv8ivdBiyjz7mq0853r2vOgIib0NhKi72GJ5PUA3v7xmYTc9W2iiPGvQh7yr4iA86xGIvOQT3jw6YtU8vhzePFV8Jj3VQdC8i6qNPF7qqL3CRhe8/nnBOxoUHL1Td0U87d8DPW/apTxVWB66bns5PaZAqDule1e8p9kOO38puLxOT+K7GR4cvBlQMogchX49GuN/PVnlfDzaz/c7SJ0/PZULb7p0cIo7yCfsuypewLyN+EO9fZX3vI3a/rzAnrW8rEpfPchbcD1xqbK9blf9vJhQlj2nYio8pUmPu+OYQDz1QxG97UPbO5Y3Fz2R25M8VQLIOAkj8zwWbCS8BP4avKW/qbyT4lG8CzjLPFlNK7x/GwG9eb1qvCAXKr1cQti8WZOivXxVnz3O3oQ83+3UPOCnfDwBRdu8Zhyuux/xlbyLoYY9x6MFPesuvzy47eO8+oikvPjWmj1zM4S7CvnLvBg/zLyVmIG7FtpRvAUAXjsTah69DO9FPZgcE7xISYA9e00PvNO1p7vVkU48HKAdvQT8oDvQZwa7zPYDvT21+Tzm5Ry8IAMNugroSj0wA6g8cCqlvZGBljv1zqE8fl0wvU+FUb1+FYu8nbejPJ+SoLrR64+9ePbJOzBRQLylGAs9EhbNPKBJBj1pDIy8cXQ1vYByyjwtm/G8ZHN7PT9yJbzA5YC8oBlBukeqsAaiEvm8pF29PDUiIDuJcve7pfW7PZolDT1X9vm8sp7zu2dwlD1JQQY9RUMHvcWfVr0Op5y8unXWvJt0q70l21q84xhEPVqUG72OkBi9OF/QO9hIBr0VRes6d0sYvLdVWrskvmw98XQKPG0UMD2GX7s8NF2gu7P2hDzo7SM9AAqyvf17nzwcqWG85E+uvG/XRj2eDkc9CTTBvK9E6Lyjay09bgBaPQsAJb0rCmm8r2mNvOQYFb07kX272Wy2ve8CSz22pzW92LtWPGfALrwRNgg8W2aZO8i+JL0aNGm8HJvvvLZS8TsO00s9mdrEPKFDlDxQwK+8NHA0PG7IPjyX4Bc9C1sFvBNOab1vAAU8ExVuu2F6JL2UkBO9QXonPcSwnjz7djo9zlLavBFgKzwrA9S70C5PPd3o9jq7ClA8tuANveLVjL3gCKQ8Hceeu3wb5zygE5Q9V/yhPXeSmTzA9Wg8LAftO+qCVzyxBrG8LmfxPF2ZAz2L5YU9CXuoO9pFZLKdekW8AC1/vM0IOjwIho09lWYmvUmjqjy4FE08/RHpuykoFz3CeUq94BLJvIHxhbuMFI+7FqawPDxPXrz9Qc284b2dPM+Gx7uJq0E8wMXBPLyrSLvFSz48xH4ovNUQOL10R2u9zGMzPYE1Kj0D0v48sxgJPbxmzbsBeI47tfV1vFi1BLyRHDU8MSKOPGom2rxK2w+9f0HiOyY007yIeqE7yFhePGQfMj0vIrk9VV4PPJlJ6rsHNpg8sg7nPI4yWb0H15Q7xBNSvD9/UL0VRNK6IB05vGOqKT391LM9mZ66PEjhXDyjTHo922XDuihmTD3uc7M8EsPku9zoDL0JXis9LbtSvUs5TzwCIxE9e1/avEiIZz3DJ9+8kjazPUXOnDxEXx49LrC4vKXlKj398rW9M6YOPY5S3zxwPx69QhWgvSVLTT15fXk8Pc4XvSPtq7wXTQA8p7QhPXaMGj1tJIm7oE3rukhm7bx4xsC7BegbPPE2JLwingW9jyhGvaXIJjpQSrw8weBUPXTYgb1HEuo8GXaVPLodCT3ViS48+6XgvOS227zuoTy9ByvwPKDj1zwSDoc9/7ZzPKf/STzuZ0O91dAIPQQK3TxhKHS76jdmvWkOkzwdvt68nS9ZvETQtLs2Xks9mhF6vXZNdD3wT0g90K6RPZfCCL2KME492TLzPERfpD3X4Ai9/EguPV5yIT3yXGK9d0d4PeJhjb3+Vym8Zb53vcsJMTwnLJW85tZGPOp8k7vpLmm9+/msOmmCi7shZSy8Le19vcg/WT3T9M88pGAMPBq2ZDvzHCG8JvgYvV/5sb3ZQBG71J6IvR1xmrzcR4Q9ZTauu7dhW723KH48U8NXvU2Cn73i1DC9BWCwPSviuDwJmu083YyXvPv2abyl0RU9zZG9PIpIFT0s9oW7WwH7PJ52Qbyye+C8062DvE69gb1OMUO8M2MZPTHW7bz45X08VYrxvLX+nTx1zL+95LwVvLD0yjx5CrG8nTEDPYAiArw7IVa9LSU2O/dXHImpyVI94430OzgJjj3QwXW8rfyYPb/QjLzGq6M7D1suPHhOVr0bcLi8Kx5qPLliQr3NRmm9sNACO1y/lDxp+gk8zXtYvcHZaD32d/I86eIEvIXaIrp37Aw9VQwoPZCPCT0c04Q9gXryO4IXcj36STG9X1EsPQSshzzmtne9SY6APZsOjzwewPG8Z5WAPSQT1L3M34W8NU6hObfAdzyZvF08zFACO4PfGjyvZ7y9kFBJvQS8ijxFM3892bMIPIrZnT2N/cy7qUDvuyoWgDyyvS49lrnHvWEGmb2FgaA7IrbLvJx8srweWBQ8XP4QPSG+Nr0Tlqc8VhEpPK5uzzxDiWw88VbHu5m+hz0w5Pw8creSvKTPHz38Stc7HrZfvUU8p7wtWuu8fVC8u3LEoDtWvTs9zO2Wu9/dLbw4sI68QsYmPSTlELxYEKK85dgTvaRRYr3M2K68PvucvYMugjwhJVO96nXuvAQAHjwZj6w7lxAxPfxVDb1bEwk9r0rIvXtypwi6UN88FIEyPWXikb2veEs8oH2oPOAXWL1mQA89s52aPSpvzT2P0C49KnMAvfcIGr25dQu9PnglvalKmzxNRrC8pbzsPY5/Gb0dNrK9niIbPdn2CL14hAo9fVsJPWq0Kjwq1qm7WtxRPdUTij1vy2s8hd/evKedD72Al0E8IDn1PABQjjyWm9Q8dHu/OyooyDxT98A8OGOTvev1WLz1H2g9NhigPb6vhr1WYo487K7yuzIOjrxY6Ma9ivyJvVRzxbygGN08p46vPXqZj72evX69Rzq+vK6lLTxSH/W8hTKcvXEMYLxpgVw9GExtPSXVC7xVsa29LNe6PCG3w7wgtLo7ffnSvLSRjb0fsSu9lXAPvDxeurye12A8c6uBPSVa57nYQd48GwQXPBfHsLwtXpO8hVIqPRtM4zwl9ZG9QljkvVKhf7xOhpW8NN4EurDiKD2Rgcw881F1PPxcFj3Cjy09u4wEPS74LD1GB/S8r+5YPPDd17udFis9SfE4PCzDcLIRYBG86qnQvKAgWj2gEYo82EMKvH0IoDzI/Wy9VZlSvPxlpDx0qZC9m3CUPHpGjz1oHTo96xk4PfD0Qb11DwE8t31YvWHiYD1L/pg8bDBjPO/xdb1laI285YqcOibmyr3p5GW9KMFhPWMkgb1igQs9GNx7vRQ8Izzw6Y49MgmyPDsRjzqQNCA7GpH2PGhQzTw+zVQ85cnVvOz1zztfcWe9RnULvHk52TyrARI9PZE3PEMQJj0gtZ890QYnPaHHM7x0qkE9IH1YvBgq+rwI9ca9KrdpPLrrXD2PqU49jxXKOz1JHz2nxU282Y8GPSYGWD0ETVg9HUR+PWQYRLvxVka8qwU1vXjvLDx3S6m7cZyLu49uiD2NCf+8AK/XPfyzyLxhH0C8qHOQu6L9fD1W8RC9SLGePc1CZDo1zAa9GhlMPHwCmTyI+jO9i35mvShtyr04eKG9K+JsvYKddTw8r1E8URaLvPwpWL2q1E68BG7tPKMIabsw5vC7GUbpPCXKMr2yIBA8K/kOO2H8srvQxiS8a8eVPBiY/bySfuY8XZ5tvL1qJr12YOm9DlU5vS0CET38tqC8pG9jPZD9OT0mC5c93vt2vb6PBj2udLI8O1yovG6FIj09KdC82HCqvXMJ2jyzgo88PZAIPNrYvzwZHC895CMTPTgiCzx0wyO9Gvk5Pa3hMD0zEUw9zQ0YvU3UGrsBcma8Ay3du6Xf9zyNcTW9NkedPEp2Dj3cnNk8Y7GZvItT+rsXDhK9LU7VPPiVwjtmq+68B5qxvCJ6iLwHpO88evB5PcZviDxx2iQ8UREXPWrkQL1Y4Gg6DGKVPb6EMT1RFkk8NX9evdgI7Drnbb48updOvQQ0Tb0FAIk8xSSsPfi3e71360+8KRiXvCbyZrz9l0E9xT+GPSAHEjzBUEc895y9PZm3AT1vGJM8Dqg+veVwQD26kYs80ReUPCX22DsVP9y6goEUPQ5vkj0tJnO9COl7PGeJpLzHY6a8KBaXvT98m7z1wpG8aIqtPEgyTInNC3I9T4rvPXWEezyqlpA8tNVIveq9pDxpP9C8SFrqvLqvjL1+qka9pVUmPDdHnrz9huG7Po2au8uhfzw/AxI9Zt8IPS7mFjykM2y8bkJRPZjvQz3m4669qwxKOi/Wj7yTNkE84QQnPQFWhT3etWU99ahfPPlCKbuQq0i7R0amO8zQLrwE/LS7eApgPS6jw7xSolE9zjXhvEQNmDtTeIm9hm49PZvgvbolKva8O4kiunEZxbwuDJw9G1oiPTSgKD0vrJY93cNPPbkbm7ycKA49ADBkvbhpeb2l6zS8vZTfurQ75ryeZJI8zvBrPVgLGrsb0sw6CTMcPKvtx7yYeFm9sSzNvHmVNrxPnUK96997vH1bZz1URZk894o9vc68n7xt1Tc9gFKDufAVMbvv59e8z0oZvcLLwzx2lBG8JGH7PL0XZLzv4fa8bu+LPNTWlLwMBuA8DwA6vWw9IDwL1148eiw7vWIzGjyM7gi9HxxkPH5LOrzRJHU9d153vexGrghge5+9MSu9vCu/IzzcN449BleLPMYgtbx6WLc8PNcNPSPvEz1ACY49dM2IPTxuCr2V7bK7WbjDvK7Thrzj2nq8QLSevJNgYDwhb7m864PQPFU6Mz32pXe8kHSaO146TT1UA6k8mToePattdj3b71+9YAFdvF6lxzsS0F49fGxfPVR2Ab2/fN08vbGRvMvNk73t3oU8iDWKPOZLWT1K8089CqGRPYJStby0EBK9VQuQOXnLh7099Ti9aSJXPNXbHj1aEbi8iEVvus3KHT3+aBC9eKxIPQ90MDzvpP665RQxuyuaPLqvXno9GCAxPMOpVTyneNO8BrkGPONGrbpCbws9LIHHPAd5QL0yvoA8RZN1PJanEj3G/E49c5BsvN3RKL30DJk88Pabu+wrIz3iviC938ZqPP5/gzz8PFS9JAKKPOK+EL2Z3Yy5HpkcPMmj1DvmDDY94y83vQq5Brw9NEi9StKhvKRMvbzomkw87/29PKZfHLz49RK9J20jvWJiZbJQdE67G2wavdz+Fz06Pk08MfMdvOHbpDwGTA29JEi/vXwZ4TyJKzC9/p1pvLcK87yLzie9ZEglvain4rwrvoK9hcQyvYHMMTxddbi8V0ELPCtpcL07Ucc5ojETvUu/XDuSKB29KKO2O31lfbuT/t08e6jGvInviju5bAg8wVZxPDQ2KT0UnsO9P4VpOzdpBD0fja266xSRvBc60zs00Pi852pHPKRi1zzdASm86biyvLq+mrxEQK08ftwvvBU3Lb0sOCa9dCGpvPNR4ruat7S99qTLPFRg7DyF0jK9U9nbvNEWyzy9EQQ83L1OPTbycrzXVuU9YxPFPGSanjxRdL+85xZfvY7jhr1x4Hw8pm0AvfYnEDzZHvC83GCjPeWD5jxc6X+8bkuxPIW6oDs+FY08FfMnPJ4bfLxVa/y766EIPYH2Gj20WRS9ncmLvelJjb1plpC9kcZavZRZmzz3Y0g8trqMvGsu47to9Km7gUgaPS6MOT39skq9m3akvPlaxzxYSVi86jm5PD4pvL2QAOU8N9SePFTsfjwTIiO8lx+nvJz9Bb1cMqq8y0NovHJC+jucQLk85spkvRKFaj0cVc48paGwvAeRhz1WsBm9uvC7vaIXJz08OCe9RUN/PFBavru0g788QVqaPF1Fdz1dCpk8ypKDPDrRW716GWu9dzmpPNnlKT0eH7E8zjMbPc6Hwj2kEmW9lrTZvNtqQjyH10K9s31Wvcf4Ij198Lo8LGZsvEu4UbmLNYS8M2WtPAdIZzyO5ps9iSq9vaX88zsoTKI8agghPJE5orykG2C8wWyTvHvzvDvCETs9OIV7vVnvWT3d4Uk9vakMvX4YK712IBi8Lik8vRrYvr3LGc+8vta7Pd4RMr0Gc9Q88XNtPAVKPT2XD0a70McQu/yrmruIAIE9VecvPbtLeD3oEhW93hiWPCN2M71kcAq9DbnHPcCuR72jw7C81QOkPVMaYz14QGq9MmucPF+HtTyDYIE8uOMDvSXiwjv+QCU7nimqvdJEHomN1gC7LBJ/PZqMIz0rfrA8vq7fPFBzWz2QeeS8TbLEPLY2Tb2rub68h5NZPJ+uqzyo63O9rV1mPf9S4j3EkeW8wW7zu19FoTwMMKe9VrjivN++tLk09Qs8aQr3u5/7xDzBbCG8RJYXvVjmtLtkdzU8gOXlPHuiQjzXvvK7znoYvSq5pDxXxkC9g1j9O5vhFLwdsJ+8gJ2cvdXTiT2wcxI9jvzIu1szBj3aYfS8uxVXu4yY070gFok9XtigPfCdnryzZsa7ChhRPByvyrzajZo8ipGoPP7ewryiKjQ9t2OpuzYC0Lw2Yym9HTYhPV7gT73BhoI6SZCdPVVmGryD5ZM8EU53PF9ebry2PaE9574Iu+OiID2mv2M9oepvvD3XST2LQKc6RQk6vdzUDb09fVe8RQXOvWCk0rxjYxc9qo28PMIarbxt1ZO8uym+PFEvMzwdDWW8hDPHvKRsVLsciVI8LkUQPdgT2Ty61mS9Z6JaPOlgUT0lKC49XJaXvRPswAiqz/W9/fbIPH+N1zy6LFg9PeGwPQVflrl+X8W8tQNHO3Ixoz18EA09iB1RPGJRsTvtMKe8eg0hvTOOSz0qrqG8byfrPGieZb0jPoi9rwWWvbKFfD2mkFS91xSEvJ1CmLr0AmK7rWAbPCmlNz35vjU93r4KO9iMGD2LCIq63PDqu+9vLz3H3fu701mYO2KeGT2e9la88XzDPMmGobwtaiC81KfNPGrD+jx9Z1y8ITC4O/JoAb3cJak8ay/vuwWXFLxAd5q8h8s0vXvZtLrcKg890RQ+PdtUbjzw5gG9OKwBvaV1hzwiog09QBRGPYOneDxjR1S86+oluu1Xgzxp1Qo8Om0RvG4it7y37is9aDlwPSPjLb2jxSy9yNJLPcVDj7w8y6y7hMfDvFa6RL2NpIu8J8Cru4BEiDvGeZ28Y6w9vQ/EpDvvqaE8BXzduq2dq7wdGmE9HpJjPbrzBT1XBIs8LnI4PMpw6Ls0chM9QAgKPPROCL2Dvo+67GIEvSLgWrLH7BW998QBvSrlRD0NfBo9avuQOiV8K7zdBTQ7aKCCPBWBrTmfzVY8puU5umYipDwex/w8EOYQPfiivD2x6gu9cfdcvBjpID0syF29icbQu4rfhTwuJLs8g1OEPTRBcr0iGD28x85WvH6zBb12SRi9VZ+ZO9hwcT3i65C8wJIqPWvow7txap29tc7fukDj+7yBwYq8YQtCvRD6UrxtXWI8CkQBvbfT5rw0tY89o1BEPdKDKrwbSGG7uFxpPBqNg71o12O7dJIJvZS4G71fnnm87JYWPCGxCzzO29Q8kby7vC+JSjud0Yc9vFXxvA8HGzzRnIk9cekVvSi3tTwwa9e6q+bSujL3lr2v4H69lXcvPVGqhT27oUy8JnrnPIV4yDwYhl89BQYAPOdwKj1Lsy06+lZPPbeyyTz489s72CuqPJMeILxeK4O8UaVQvSzFqL0wSoq9bhXWvEFfkTsV+LQ8A5dLPbDRx7xzd4a8WZMou7qhq7zzo208/hohvOF/SDzChKY7kqkaPXEtlb1EgQq8n+8svBopvjtQObG7KM+xvJdoC71PA2S9i0qUPA4mxTxxo5w7S92JPEpxrbye6RU9LdKyvXISlj0i03y9W0P9vKp04TzY80k9RI3Wuyt+JDrexg29iePIvJIVGj0x02U8xxUEPcJMVb2UvTi9fc7qPJp0p7xFDGI8C+qyO3gXrz3jD6C8djVIPHFLKbwRWfy7BpgavRGOwTw4Ci88TCXfvHcHiDsvY3K81B36u6w4E72dXk48bBhIvLCzZzw/ix09Eva3PTV9Or2ttLo8uRvDO5B9h72Stg09tf05vavjsj0byV26pHbrvCJWn72Y6zI8dPObveiwvb0dj1K8J26jPay0mb3yLRA9Mm+EvNAVCDyVlQK8VcsXPHK8H7wART49rF5BPbUQoT2ls8Q71Yi0vHvtJbx8UFS9BzcHPrxs+LwY1Ni6NApQPQteET6EAZ48mo6KPEKGzDxpbA88vzbxvPJMyjyNRZY9j7xPvS7jUYiMC8w943jVPOTWFjyYKKQ7EFtHvW5S3zwCTYS9amOIvFBvJL0ez1K9VeDOOT8blz09L7g8U4QAPVc0vj1tXy69q4Hmuzw9vz3L/yM7s271OlWikTxSEFC9Pm6APGiJPj1eXIY9Mf6wPN9CgD3y8TQ8WsQTvRnssjzkJLg7HsjtPGgMqbwImxS9C++FPWVvcb2IqLu8tuOBvM0xBj145Ny8VSIRvVhkzjuOfPK81Bt8vedh0L3m9Z09k5ORuwsf7rzI67w9EvGzvAdSdz1YFoi8fSTVOm/TYD3OW0g8R84JPbfN/Lw+mBC9YxuiPUhyHL0PALU7w1GUPMVdBz3iH669V2/RPDNDNT24ce67oaiCPGIqqzzbq3U9U8QIuySBeDx4RIe81ESAvbQDmrzWjvq7De0FvDDfjLpUxkc8w4xLPThKV7wBLtC9m68zPaU5eb3rx9O5N+PDvPFgIj1rD/O7vSXevIIyDj0YLA+9TKcrPdDpoLyO1jM9VwbWveMUpwiF/NW9uTfvPL/Dszyc6Hg9KnjoPAtjtbzxWj68lXv1PKjJwD03eyM9G79IPLqzfb2As5q9/HElu79gCj2Ealq6BLQAPSKGrb3Pgne9nkw9PC1Tr7zQSG69w72bvKZhorzvAIk82C8gO9U8Vj3Foxi9ITGnvNgAEb29dgs90U6yvAzkfLzE5uk807SjvGvTLDkszDe9Q0WoOyAEhTtSdcc8OVWMPe7DzTxXYFy9gxP4PL1qUr0hD449YKUsvfaZaj3/CE+9VkhuvM2W2jzYbu08NrvAOoCns7fDc+i8tcZwvUm66Dxvu4W8U7fkvFpwArxRY8m8ekGkO+ARpLyKhnQ8m5moPBAbXr29qVM9r+eRu1n+WL1cbvQ8EJiNPeXDJzyXXAG7Dz1pvSU9DLvF4587Pt2WPNMsELw1eEK8HB62vOumlTyizAw9LGjmPK9sx72u/7g8MFECPbsdxDtaLI89Qs0APWsoJTzImZk7izGbOtgUtLx8ani8wYyaO6lvV7L5NoG9FE3uvKdAOjz2DDs9Ydzzu7+wZD3sFgs9SAeDPTc0lDxSSss8iL2XPME+lzx+n/y8Am41PcEcF71tgYu9FSeRur+ohrzshnO7lm2wPKpdsLwDIUs9qpHsvB0tWL38bjW7/5YYPMgzO70PVxk7BtWEPI+ySr3zR/o8VyKou69vsjwFNH+9FWauOVEbMT26kIy93qONvNfM3ry+/om7fJsDPSnRVT1+9bw8ITedO+HMJ713r/U8kT1IvEfGHb3xqKi7mkYcvUuxR70Fq2e9kQvtPPwZAj0C+sU8hbz+uwY0jDw1yu27hjSAPZ6Lajwhk149UoTpvFMyML0ctnQ8pnhpvTAMDLsvllG8M311vMLugTwUoym8MSB9PNeVxDxB2KS8gkhyPER2Pj1rAQK9jRZaOxWUy7x52zG8uSLPPNfkAr06nia8CE6bvL+vi72qB627i2FGu472Dj38nhu737izvAt3ab0VV5S80S09PXdCajtdE4+8yefAOyZiLT2cFHi9jHeSvNQO+7zpkgk9tFd7vHRNVj1+YZA89/nQu0ybGzyyvqe9899zPLuAmD2Gz3Q8FKOJuvlCajypdQQ8DC2mPKw3/bybiJO9dyeivY1SyTwL5ii8uSKRPCqlnDwk/Pg8dyTmvOmYgbzlEv687lgFPe7UJr24L705tQi5O9g5CT3b9vm8BC4IPNPSoj3qZtQ8DFQKvPs1U7wzUpK8rq5+vUlOiz2kiNq8LY49PZjhy7zRoaW7fJkEPFu9RrwNww68UhwRvaS3MT2ssdY82iiUPNE92TsEug89kdyovLRLzL3qqow9hYooPPKyKz3ObQI+BgmNvdswzbyUnE49v20hvbGu1b1jdaq8R69OPZfmir06sKs73UKcPCp/Zz1RvCm7QrvmvHqYgTznuTk9J/R/PdpaLz2L0Y07FrViPShCRb0dDQI9HXd0PS/qF71PdUY968pzu5z40T1LsxI7r4HLPJNGZDwjhV28k8TtO2p0Eb3QAgY9CCTsvLCp64ggz8c9+OrEPR9sxbvxFSs8aUOcvDvydDxQYo296DEnvc0lKr2LQQm9GZMOvVR3aLy804W8yEunPc5lkjzbCTW9YYwMvYi1oD2tzp88Z1sZvKmmDDzQZ7I7go4/vcADtLsBPH89Jq4OPT9e7Tzeuwy9BLKlvK1ESrz0FDu8Cuz/PDbxnbyj+5e8MtNQPXJAZr2wXUI83RlYveAKij1RQJQ83uUVPat9HT28ERk9VEQ4vRqLrbxu5a09jbBcPfiZBDpq7UI98B6DPKxjRj3u//G8ET6AvNTVFb0YwrS82VLVvIREar2YbdK8tRZfPUGb7LsdO349t78JPaFE2zu0p6S8ICmWvA5bBr1Wzc+8KrInvb6ENj1hSrI8C7X4vCUYgjwIEg898vSGvRsBUb0Sxto8XZq3vNTZEb0EKZu96BETPQ5wFT1ntBQ8GPaDvaGrUL2IcQQ95d0hPBPkZDzgqvu7dxh4va3qcjzFui86AQ2XPOvhOzwLPKU8GVXRvd54Bgh1DiW90St2vcj6oT0rmms5NR1sPd8U/bl4mdA8QwVMPe9cUj0vZxU9Un3ZPIh4mbwwNgK9CUOSvdX8czyd4w47ZG9WvCFgFb00FQa9YCrgulF9FL1ObUu8m1eBvV3mBjuw+sQ8K/Q3Pb6hNz3nwtM8EWdhvIZFF7yT8qi8L4lnOysajLz9UFS7Alg3vZD8Kj25lg29hVVJvdADzjyXGKs8LFu+PTHj6bucega9Vt7XO+8OnjqLE4a7RWqpve1ueTvtOwC9TKdHPUxdKT2bFTm8NNQ+PCOx4rzyYti8iQ7PveLyST20ZpO7lz3fPA2EhDsjVhW9xnQpvIYagDzQon89Zj6TvaDjhr2BLYw8hb7UPDznxL3HLDI7JgmmPPhujjw8tg49RdhpvRBtAD2QI+q8PEWUvFAyp7yJZRu9vNRGPN/jNb2oypc8U2uZvGhxirxKKIM9F8naPP6nkLsD/bc983cDPTZ/X7xGdYg8ptQ8PLiorLxsl5U8W6QIvRzSWLIGVfc7ohNlvbmNRj0zWWI9OXy+vBpWRD3qXoW8fdgKurrDPj0rQqQ8OPHNu24G8zwk16G8yH59PecZEz36xAS90lJHvUofjzv0JaM8u6gbvN6OBb1uwnk8TDfGvCcWYzySZi09fMOROyBeobkrH6q8sNwcPKlmzbwbx5U84GKHPFluQTxMp4E7TSKZvC2KNDt9/sC8HqtEvZGBp7zQXyc7G99UPWGULrxLcuQ6f6yWuxz1RLylHkw80KkuPatxb7wbGZG8D2ZYvSR7Ab17YGa83WcuPQLHtzyi5kY8RMGou1Ho1jw5UZY9hdQtPbOtiTvaFqk90hsNvETjNr0mMIy8ac7Gva6hezxNmuO89mIRvRRjj737bKC8t4aiO+4oYz3r2qk7HmQHPLKKXjzLday8uD5pvBUyGz00Gge82EZ0PIhSwjwpuVM8GVYzvTa34LxMw9u7/kFAvT09Br3+e0O7S+9iu5a/rzuUIoy8mxoIPWzn0TwJbRm9KOWivJ1ClDznJRC9d7wmvApyHb0LO1w5zGVGvFtVBb1lvdq8Igi1PPe4kD00WZS8l6jhPNSOFDxVyaG74P/UOwDWeLmk0Qc9H2wvPDYP8jsfwLi80LpVvH+hhrw2K3m98fd7PAMXnbvUZui83ZshPJc35jwFVVk7eE9QPQss/Dzbu4c7vcATPe+GNryenEm93r8MO4qT9D2sqgQ9YkvCO7vwRTynhEA9+tXPvQTbGj3QshC8OGb7vCBFND3Ik0q94DUyvae4srzElJu9YTImvXWaY7uErS093g2CvGXWgj1G2ta7d9+FPGZgbr0lGas7DaY9O1v+iD149o285bMAvLFCBL3Z30c9ZmTfvLihdr12aXC9/wZrPSedljxriQk8buUOPfHyLDnDMZY8kOGBvLnAZryuo5S8l+MVvR0mvbtgBZQ6Y8KNvAOFVbpZVZ+8OJm6PHDsE72IFPG8LpGiPNjpnrsbgp+7BsAYPbipAj2ySr683tsXPcPQYbznjn08qVQnPFEQD4n6diE9HNfkPN7T9jurej+5VsVqPRugibxRZtI76DuvPLdwMTwTg288mHkHPVOlgrxe37C8DqF2PU3PJz1Bol697RqrvN5ABbwZ5Ya8HyhqPK944rtYLeq8vR4GPesVn7yUfQ29K7C+urSIKD01pFm5uGvBvK1OfTzVYT08Tw3LvNyOUDyf5nO9khmBvDwBNr1bLho8Crlmvc0vTD05U/s8vpueO3tJEjyA/2G9VUF0ul0YTjzpR7s8aOeRPaoLUz1Hqbe7QiWHurKzSj34XjK7YxEWPCjYjLztsRg8wmxTvOyDEzzr6na9u5jou5uytrvQM0Y9UgmDPXzR5LxbgAE9/sbqvG81qzzwhII9M3HevIrNkTwp+1K9tEZRvWOrZrsq28g7w3zjvKCtwbxPyKA8UVADvRwrP7wnGGO8HCeEO1ETAjsf5oW7G4IIvW5rR70jYsS8na31OpSuIz2yTMy8NTkHPN/TOT2tyVa9vPjHPK/O9DytXkO9qmTUPMTUbAc6bqO8zX9ePWC0Ob0gPr259lGdPUfiC73FBSk97RG2vA25hD2XLJo71hJ1vf99HjyCWX68zjBGPKzyUz1C73S82+38OyxfBDz/P9W7b40LvWdsQTvzISe8PHfDPIhvlj0LSG47rXFlOxn+f7xd3Jq7O9Vlu5YuiDt8ZeM88R+HvQs+4jxYP5Y8xIugvbZWYD0vZ4k9DLJlPPwS5zyFsiy9++MfPURTaL1y5to8VRHLvEyhu70dzfc8lUq2vHj/PT1HlzG92imaO1RzOb3dS0U9T7hQuwtk9jvs8qQ6EcmMvWY9GT03RWu8OfuUu+sWsDxNtGq9dApyvILaCr30I8W7qEGOuxxZYTzX0Wg9jBYxvVASHLxD1KG8bWxbu8uYfD2IQA89mDqGvRxhj7yNSzE8BlcVvaS0fbymiT68m0fNvDoFOL1achU990WAvB7TlzzTgG08uoVKPQGfirxrJdq7DdCsPItSkrrLj5Y833P1PHHpSjx5u5g9X7ZvPW0fabJz1/o6/08oPN353Dy7xwQ9vpnvvB2HLrupTUK7MUq2uzgMqjzIAxi9W5wDPWAbkLzJ3JI8xItJPQtJJD2uswm9Y/THPGk0n7ttzsE75fj1vKr4Fj13L/K7+OF2u7iqQr0dL8y9oekSvHI8vbyHB6C8tEsDPXWUjj2K6Ys8xnyhvJhamjwsxFU9rwqXPT23gL2G3qu92YS/OziLcDsggaK7xw8PvAwBgz2ctN88zoSzPFVv7Dur39g6PwcCPbssiL2AT6E5C4OWOfMzAb06geC7d0LQPG8dKD3Ymxs9EaUgPbpzyrzboXU82A8lvU+9Fj11Q/i8yxnnO4eDTLyc/zk91jJtvD5C+jzk4l29EAyOPOKRQj1WU667WIvpPMV66bslcww9KIYzvPyseT2esUo9N6AIPcQWJL3Fbj87VSarvA+iIrwOijq9zvm/vdonjL19K2a9ULKLvV/3tjyBLZM8DAGvPNphVb2DA/M8ibE9vAIGTDsBOIC8qyYxPTjjCL19l9A8R4TkO28qKr2Feku95hfGvC1vlrwVxxO4CZAJuzzoB71O36m9iMiBuwc1tjz5wHq7S/6WPTMYrz1W9R49XTeEvZMTALw2QLI8fd/xvBqoKr2NxaE7FKEEvaueJ71WEZ28cKKAvPw0nLvIWs48zWgMvBPlcb1cvxk8Q1UkPX4zKTysH6c9w3scOz5Uij2y4M48nHszPFwPKz1Pf2M9vWO1uk57wDwc2II9vudjvSo9vrtxTbK8V2PmvH6EIzw+PhM9fvcAvYdCaz23+cK8OLJ/vMxewDzfZrw7CFavu1WLnbng4yA9FsAevRocOD0hpqw7gNHvOriPzL02rle84Qp3vfga77z+CS+9aBBlPVaDSr3FqQA9LhkYPU5Whz0t9e08jYGhPbPE/zyWXI48XJsVPYgR9j2rsSa83121vH2PGr22fiW8yjcdPZUzNb2W2Xw89qBNPcrM9z0pnPe8dXGBPG9PED1DXkU9lnkJvJuI/rzD64E7UyaJvarMdInMx2k96lUYPevltbzDusi8+4PSvPFMZj35Mkm9FJFQvfvfAL3AAoC6iGNWPW9Fd7wO+kw90NZCvBAynj1BoRE9MIQiPa7OYD263YI92T4Vu9gMtD0d8vy848alvPMzijxG/+88waSdvOhxuD3Vs2y9NQBROpWCwzyI3WC9au2UPTZMDj0UpRu7nqUCPkBhn7vDD5y6wuZqvJbxcD0lafE7Z7MSPaWAdjovy968s2Y2vdJ6Qr0pUgk+lFCHvMH/Djzgi8M8ezLUu2xezjsk3o08FdGbvTfJvrwaEMC8aSDZO2y3EL2szjK9MqUxPdHGRL0v7848hNj1PJ59Yj3EgSS9EsokvRcyLLycmTu94R0gvUAtCz2Lf7W8dGlCvUWm5ju87ww8chD1vBg9lr2lerk8TKRPvA6gGj2bhP+5TVW7PMDOqzzjcNU6BHiYPLec97v8tU69NPB4vUszFLma50o9WsgQvXmtlD2f00i8ltU0PbCrqDvwAFw9sxDsvdnn/wiqy5y9zJkWO98OgbxG+ca8TmelPKp2sbwuRvw8zUfgPIDqoT174bg9Li4CvcnABrw8WQO955A9vaBVjDyQ++E8kbebPbsn8jwv9um9SlgVvUFXv72+7QG9sWqbvNUSGj0VCmg9FfPVvGx/Fr0Zm5o8IG9LPbyiOb2ie9S8bU5Eu1AdlrwlXOy8c8qAvWm4Db2Fs5G9TscTPQMnLz1V+bC75NknPZf4JzzQrJu9DMrRO2+bcb3mp6Q9hEOgvEUc0LweDhq9tgjjPODzCD1B4Ky8ccm/PXufOLyN4ni9mBFBvE1bUT2WlxA9Y2Q9PUkc7bv4Jo49O4OAPBtjrL2DrBg92DkbveHuX71YDVe8cz+cPHAwd7vqjhs9Gyvzu5BevL11bhu7oeZMvFYgpzxt3Uy8INwrPWDXHb0X/Gi9S+ErPfqtdDzUQVQ8pYcSvdVud70Ii4w93lkpvZzLKz3quu68xNCqvB9UoDxZM4s8hQwQPJyLMb30Ef68zCQnvFJyULJ7I5M8fviyveiaRz0vmqk9RGQ8O4dhDj0q8ug88UbPO9VIRTo4NcE8F2hqOrjD4jtlAiW7FFuGPLlKbLxxaWe94jdDvUA1m72Pq8A86lX9PIFpkL2wgwW9wpJMvcYy/Lw8M8e770vhu8CdJr3GVoO9ZV1VPMZM9z37Q967nYx9vFBl+DwapAe8X8eXvbJ9kz2wpSe8M+lJvTiUhLxjQ8K8Nh8yPXlm+ztBPWI9O76GPJIBO71wTzQ8+6qrPSi/vr215wE6FkPtvP/dEb0hwAq8bFVHPSKwRT0DtQ09yYCrPMRMID2M/8Y8OrEHPRa7W7zUuoU9rUUdPK5/XL3xL2M7tnxEvZbglrzhfkW7y68GPdSroDw0r4m7dgAJvZnJkjx4cpU9XXuYu1vBTzx7Vms9UIqaOpfyaD1AHS49TCuAOkvhVLtE74m9vdSUvEJqfr1X7y69wAMmvbW9kLxZiT09xOehPP26abuHbIq8rSi8vIeTobutsyo9BSqzvBKDOb0Pzom7n4vLPBw9Pr1jo/s8tra1vGXNHr34v5s8cVxRPPiDQDtWDMC9mQUDvYwhQjwU+dK8hDBOPORHDj3HMmo8TNA5vWh9iz0OkbC8mgeAvbWsHjxCZdw7a7cFvP1Avj1gQB+9R0DEOs5okT1A7ks8ZwPTPF66VDyP7im9sGZoPZJu/zwFZue7oV/iu9xouz3mfps8Gdr4O8fSdrx3N/s8hGBpvB1nWD28dCG8FyEtvKaMFj29PRO9zsqzvH9v9jpYKAq78VXOvAGLeDxFdnu7M0xwPT8QW701PVg8bTOjPb2lN72efBU9lZdNO9Vqvj2/cfE8qTqGvIpI0b0atTA9DLdfvZ1Kp7wyiYK8UVKuPSgiPr2dUo88KKTZuys8sj0bGv48EdmPvJrnOb13j/m7f48TvBowhzxs4Xu82A18PNGKrzxyxFe9tEDbPGbB9jzjp+E8REWkPV2i0T1rqY06/QyIPMB92DxDRHI8aAsSvc25Fjz2WdI8ALDvO67X7oh5mIo94Tc5u9joVz2KQoy8jsXGPFv1mrs3pIK8vKogvZkWdjytgMO9qwdQvDFKc70wek265V8LvchDaDxb9lS9XQsqPBsAsD2wpC49vL24uyCNMzyYp629WzW1vNeaqzwxK/g8c/OaPJZY3T0sMyu93I2gu1jNQzwAls85F5tmPYbMNr167vu7GAyePYgX7rzx+Dy8Rm6bvGjpCz1R+z+8ObYNPQRKwTyC/ki8OIkZvVpLwTzi85s9JRLIPK/G97qaZ3I9HviavCTrKD2jy3S7O4YRvavMML2LATe8UpJpPAMBNrwN1qW909qOPfOUyzui8I092iwIvGFLlDwRRg29rxB5vTm5ITqJBJi7YO20u0YbfjxBRo68j4K9PHI2GT1JJIg7xCqHvet1GDyCTjs99Sx4PZiCW73H1di8ShJmPWYa7Dxz/Ty96/4gPc9UI71UU608mQsVPLik3DzgmVE8Cr4RPC5aMjx0GKa9L5quPAn1fjy3nZY994N6veOErggAtBq8gmwYvUyVq7zLevE8BDRVPRlyHb3uaiq9dQEcPTRz1T1CUPA9EHUHu/oAFLzlYQq9naVXvYKoNDzXE72860HIPUIsyb0D6q69+dZGPESIXb1pOQ+8qaclvVIk+Lzm6QI968FIuZq30j28VSA9thd5vAzXAjyQ8kW9i8+Uvfo1AjwvCbo82O+nvKCLkD3CZU+9jf+2u0YcyzxNHGA9t9/NPSuna7w7PkG9Xwb6PB/loL21ESg97WxuvdbR8jwqEhW9yo05Peamd7wad0a8s/6muzcd0bwPi0A8U2iJvWa1MjwNKcq8ijUkvcShgDyMZI29sLmLPI2ySbtgMK28aauCvHGxu72lj9g8SYcevGAM7LuptTm87O7wPCeK7Tx61S+9qWZjvbwPSbxFb7C8v22QPZ8fNT1NzJ68FL0svWDEoL3zFh89pJA1u0fZzLwb+xG8ITUbPZ3OaT2BpVA8qMzpOwC3VryZ5ii86RtDO9bJM7zAWlY9mfn/PClOarLZWEc82oXAvH1q5DsZ3fU8qHEGPcKnpLwFx/Q8zDYIvcRJTD1VSnS444DiPEbJ4rudccI8vHMVPNCN8LyhqD+9MKYyvBeYcr3F4zQ5ZWYvvSSog7yfdqG8QOI9PCI9TL2n7NA848QDPSIoXb0pzKg8CddKu+Wbp7uQ3gC8yWAaO4yvCL2v60q9vu4kvDlVKb2JOVq9tkwUvUsXGDmrBRm7h/sjPXj17zz3DmM92ZxmO3kM/7wTYcQ83P0Su8OMGL0ZW527/8S/vIujAL4jBwC9wOG5PCgiPzwewk89o3ABPWJVLz2uGeG8DTMXPdKVn7xGJ0o9bzazOxH7lr2QThy859oovajgRL19NPe8wVm/vJNBTTv3aQA8p934PGKpJDz/0lk82sYdvT1Wkz2ZlB89Y88SPUnpDjyNXQk9pDSYvNVFhLo7uv28rfnmvaAxOb2Owsy9kzhWvTCfrzovWLM8Kmr0vC0a+rvwQY48y24UPBB7nDzkSW29zL/vPCA3zjz6SVg8sHXgvDf+Qb1QWKw94yCqOgx6kLwocNE88VvLvOFozbwS21e9s8kDvfOclDplAaO8cQ0AvV15WT0pzb09VSZ2uXUEQD1moxm9nWyivSXnhDuU33G99jzpO85mgzy1Y0i9OzMtvaIeyTuza2S8lWlEO4Gp0LzDaQK9OFpxPeDbsDxBzh28gxJyvO0J2T1aG7K94HE0vcayWD1uVY+9Y8KEvLhvwzx0xRg8DcvdO9wI7ztFz5G8RBo5PRYVEb2aGRU9OQjJvEwVLr0oyRU9DOZdvJbjNL3Jkdo7E+ezOhSOqrxSIMo8N8dwvZqCMj3QsZy7AllAvS3M1r1gIbU8BspfvZRayrwR8Ki7Wu72PSlcer1JNB89gWJ2u45+Fb0APnW8XG0VvYAYC7yNhiU9hRKgPU+hxj1vRE+9vjv/uwwMBr3EWIi8ApmcPe7VMb3mpJ+8Hc7fPGkB5z0zYaa9Q5QMvHulZTwPehw9I/sqvfCn0bzc5xW9Z/BDvY2oV4k3PO+85dpaPdVv6TzPFEM9yZnePK+WLT1tlgy9JjeVPKxIl73U+/e84asYPZqv6Dwkec08SXCSPTTAhD3C+rS8r0I2vGtPvTyGugG9+KP5vDYVCbyxoI489QBUvD2aZj2DFs46sJgWvZtfCT07IgY9LPhnPdtpH7qxPpY8bEsePU49aDzopUO9Or0LvNMgFjzQAg68s9jbvXpCJz05wDo9PNs+vQTZPzxUqCq9/8dlPPt/e73CBNk9RPPdPICQ/bsAlpQ8jPxqvFAEeDud/Vy8ybWGvFU0yjxaqeE8nCI6PJxRab3QxIS9IXfUPFCVYL2nK848gRZPPSEjlrvqS8A8bgFCPekMOT13vh89oKUPvSyL8zwR1Em7IUOSvL9Ouzt8+gq9G8MVvab6qbx8fri87T3BvYE3Wj3C/HQ9frChPa52TL3H5h69UVMrPbdTnTwDUq2823pTPF3QFTwlHJQ6rfIXvMg0sj18rA+9Ci1dPTyF6jvK0YY9/nEyvP/T2ghYvFO9AhkTPfITqD2xeGE9siquPcbJIryblwm9ci4CvQb7sz1GkY49YKwLvZQ/37vtDEs8FDi3vJeiRDwzhw67VQD4PatT4bv/lqK8QqoXvRcCIz2osKm8ZzMuPGfZpLuFo7a8JPCLPEuu1jw+iiA8yWdNvAyTwDt1GsI8IZsGvUqtLzy5n6O8sj00vXJimz0iiIG9K6KTvAYvorz3fhC93DMJPb/k/7wRy4m8WBwaPR7Q/Lw6X/C8n0QdO0KDhLwtWEq7/ckaPDGgq7z0KB89i0axPGzqWLzR/DC9yzw3vBrlgT1OFQ09QSaNPPxx/TyT4to8YljkPIJ8IzwqGPE7BSmVuxd8sLz00Ss9VUK0PH3dlzzn8HQ8snk9PFYZyDxzYlm8pXCYuVX+HL0ODq+8r4zevFziRL2Ci8S8jQwvvSQFwbyavjA935+NPPVWujlq/Qo9bNkMPaUMpTz5Xb07JqeeuxX7b7ubFOk7mN2GPAYdpjwbARe76T+ZvAWhVrI+pJa8+4qrvF7TMz1K1y49lXgJvendFrwP3ay8eEJNvCwpoTynVaE9M3OIvDKSPT0c1yy942aOPYAWGLoSlZm99w6PPIGh4jz52TW9FHfuu38qELwZTEc89zKxPJGxBr14cTg8JtFcPAhOkTw3b4W8EYXROpbe8LzGQD+89O0yPMOUebyPswe8yP08vIbgTb1SWHa8GNykvC9XsrvnHdy8Co2AvFqaeT27jiY9WuQlPcoxarwwUuc8GaE+vGRHGb1DW9O7o9M7O9wPQ71N8Ie8fJwHPbNdj7zo58S8HaibvSCe+Ly95SI904AePZWJyzwo/3A9mVFKvQDUU7w1O5w8pGAxvVY0wb1P3De8QqvvvAkeUD1B81Q8cvoKPStFxDsxKXW8y4GxPPULnzxQbIc85nZqvVDwI7wHJa48MX8nvU+3ST34eYC9fC5lva2sL71noUO8rsvYvfbrh7zIwEY8azckPVCZ9jyDWI68KQF4PS4AvT2A6dC8Y2CnPBbKer1JyYy9lFhhvOkhlL0Ecze9Zm2pu260yby+rY+9vTLTPL/tSD2mHKe8faCwu3/lx7tBdYE8vLWmPMDWoTxM44U9O1QtPZ+idT2BS0G9/FeLveL78zxN4Bg7UNrLvMEzIT1+gC28v4EnPZEDkT0czYM8rn9FPf07J70otKc8n5sLPU7fcbvfbFa8ylesPB0CkD1MfKk95x49PJrccb3no6w8outpvdtS2TwpoLm8bdw2vdh04DwQsxy8gc6lvBe8aD0g6kA97Is/vaemCby9Uai87cMfPduc8rwbUBM9E1PhuvtcCL3dqQQ8ycCVvX+F4T1gYzY9DLLVOyVFurxc15w9haLHvHtREr0/2V68pLmDPTl9wzy2nY67UhZoPOIeYj0eW488KdOmvNL8frzlzqE9d3RTPRSkmTwJgby8xBvwPKzw4zxCq7m82tJ9PJ+63jwUelu8n52rPI4muDxOJIu8SJ2FPYjedrrJQ0g9sBiLvDVrIz08V8w8guMxvTATKonoYgs9+zbDOykweb0O7wa9QhcWvVgQOT1BR4Y8ijhVPcVRwbzH5Hu9SHkRPWi6T71g1gS9K3P9PEllJz3qiSu9h0Omu9oTljyRn6O7AVoGvE/gbzxzN0m9odZxvBApUzzXnk08e7OwuhnOH7vWTai778WrvEPVUDyE6Oe7lb8ovYL3Sry2oTa9xk9ZPVO9gb3MdUi9tHWUvYsCPLvkLsc79FMMuuKwlzxtLBS9xI5Uvfx+Wb2C4FA93tfaPJAvDrrfGhK9Lu3Tux8h4zw3eN88PI9MvAYc3bq9a8q7g0aDPXqf8bxvQJa83LEaPL0fQ7yPjAS9FWchPTsjkbtPzao8vyM3vbO8kbwxxmo9P+naPOP4iT0uaVW9JNi7vGs9rzwasl89kNFIOq+wQb0mEKk78nyHvQIjFr07a6S8slIZPSOZPjxC7iA7BDotPZolRjwwZoA83PsovH8s6DzaIgK869WDOhjALD34K5i958yhPdKXKT3kZdG6yya4OnXMDAmGcZq9bX8PPUKvIDzsoUo9UlhHPJFED7zpsSA9VXtWvFgZ0j1lZYQ8y//tvDZPhr0XhOC9t4YZOxYKPbym9Aa9pdDQvJcLmL0BbJw8kxQwvdefWLzAC169q7MTvNgEsbwg+Vo8qKkbvBP5oj157HM9IMupvGsiVjv42LI90yS8upC4pbxYwwC8IE6fuw8KizwNOWc9yoC/PLFo4DtV3+G78ehRPZqBdDwrGao49jhrvSVwNT2Ed1w9r8uQvFClcDyJ1sS9DBnEu7wHNzxmpZW7yoKEO5QEeDxJwJM5d4vQva7W6Tz4J5I9RMtcvNjmaLzOV708XMjrvDePJL0rufY8gJccPeC8NDwJ5oE9CEg4PZW2ebw8Pba8KTgPvV75wrziEjU9sQtEvPAH5zzJh4M8QikQPB18Rrsp17k8Kw43vca3eb3Tsr08YpG+vFIm7ryASDg9R5Z4PahvUz0sjAM93ceRPK8UAb2gLxs9/8KmO6pwbL2tqN68ziVtPTqHRrJ8o6O7C7PRPKsy6rkuCg09LuYFvdawuTse6mw7L6kOvYv/rj2OdxS9O8sXu4xXiLvy7g09rN3+PDaIkTwnQEe9j/XvvC91qTtG0cm8D6tIPD9p37sstNU8Bb97O6Zh+LwqM+q7H7vovJGUzz2SNWk9vQw/uiZXAb03xTK9kE10PEjK27w261a9mvg/vKa4XL3btrW7gPLlvCkp1TyINF08daCDOz6b+Lx03q09ixsVvejgibvXXQs9kELHPHPh/7wwVe08xVg0vfziab1IJwm7oT8dPc/DLrz+C6w9kHf6vNWbHjzKwY07W1D+vEVBMTxLbW09i2aTPDGyibygF4s8pD2nveKTerxWMCa8AnvfvNc/Jb0oXHm9BdEHPgJ/hbx4wVg8qalsveX/+zyLfQm9JYhbPUhSVb1Y/BQ8oTlLvAP0jj390Jg8Yq98vIsVWr0yatu85n7wvK9rVb1TzEy874VOPArcpbzXNai7XEGJPfXlqLyCrja8BrouPSz6vTp7vLM7oS8wPbTFwDy12a28MYglvZLPLz0j1ri8JNCMvTZ/cL3e1py9logWuj/FZj3NaAG9Le4UvKTtn7yzExw8r7R6PFDmDz2nO7A7yutBvXOY2jxtSAW9EVodvNmPaLy5+yY8HDTKvLsoDTwG4Us94fB1OyiFJ7wqOuW8Q+MRO2r3CD1F+Qq9SBGVPIOXYTsv1vU8fAzlPPFQY7xGmMo8/1qHvT9mTT0qu+a8/GmCu17ifrwZ5Pu8sOF5vDW0DT2jthy8DYjgOxxi9DuxChC88qEvPL1rlT1TLh46ZmD8vIc58r3EU2q9LbtAvGloCz0CnHU9otGOvXECDL2pLB49xSw3vTU2aLy0OYW9HJvOPXcThb3kKh89e2kEvMz/HL25Xw09G6soPHrsMj3Ro6O8V6cnPcUdCz3O/rc7TsN7vLaVULyZt8K8y04wPWVFfL2J6dS7acANvBbsPT1CEs28okRcPCD9J7yUEz28dcnrus5torwZPKS8cwBXPNBKi4g0iKE8EYrQPSceMz2mukM9FicRPEvD/jvVkDK8btf9vF5ix7zy+Ii9jrfjPDy6TTxCCU09eINWPFycaD0xQYG8lJkYPcQGVD0zx4c87ZqfPcsEFbxGELu97blYPftCVT0nMz27kFCVvEazgTvKVJE8dp78PP0dQDpTN687AjIEPXO+XTs5MHM8DB5uPNZ+oLzl3UQ9gI64vHhEGDs9QBo9QkeJPOviZTpkaJq8BoXYPAN3u70lT2Y99pW5Pe/g6jyKUe48obQNvY9aZzwIEgg9/5s9vU8fsLwXoA69Ezq8u0IiDr3z2UC8UeftvLOqmb1UNQy8n13PPDRERztgeuE6LbcOvWAMpb1hZiw9UsgavWU77DyyiTk9xv7vuzMbPL0BXdw8AGQIvQAU+Lv9YMy715Phuxslrzxbb5k7IjpLPcCJljzSNaS8eAlBvewlOLzolIU6ytuMPKTfDj392Py88PavvRNz1ztSQuE7ThxtPIb/QT31XSc96eDcvbeiSojqsog7yMpSvTwfbTtPgqC8yuhhPWcrU7x5hng8koidPcXkPb3uE/G73Vz6PKMdsTzCVZi8KZotvKTlNT0dan89jS40PTvTcDqnDI29LIaCvEkHebsngXQ9fyKsvb9kJ721mlw8P203POGneT3ORcC8mwR0O9ChDLwz8tM7Z6XLO1rpJ70DVz+8ZGPBvNj8DD19jpy8nrxtPXNuQL29Ppo9KgAmPZVYEj1IqaA7F+JKPL0jJr3a0JY8cj8uvTuCyjzrLSi8GIVXPbhZmTzXxVy8WdHrvKVCg7w19ly8gQFxvdo9JzyNUt68pjQQPbOhEz0LlIK9oMI/vc3pHzwJlcE9WhA4vRfuPL0mRRa9BsgZPWenJb3fFQm9M7cnPe0kGL2zxCK9isMyvKbWMLwGKi68UFMxPeUEtryP/hK91xgtPDUxTL36Jis9cI+MvbElLjy9KyA9jzQrvQcrTDtl8OA9FAg5PSFPRTzfzJ88ayNkPfVr/LwN3kG9Qm5pvXtibrKin8y87a/BvFEqyz3MGZA9tYCzu3sPlD2DUQo8uguSvWx+LD3gUWU8fagZu+K74jzahDI8E9+3PLAOuzp7cRi91je0vDvnrz3Bi/q8UMrtPIyJP73NNlU9Ag4jvUqKNb0wQtO8Z54vPfsdIbx6piC9chmmvJhaAzy/VYM7BkF+PelJMT2i8rG6sHmRPJ4X4zwxYEW9jIHyvLo/nbyKzxm9tLTOu5W1lLzlWE89oVO7PB2AUbzxNRs8VKmFPQxIF71bkbg5HHC6vNQ7ir0CUl+94j/kPOphojxTKio91IzXvM1ZzDw+SJ49reTzPEVBmDpNbbI8pKeJPYooVb21wOa7aHGgPI0oYr1y2RY9n43lu0l3Az2uuTe9NFXEuj18kTyLfXC5A2YnPVfPbD2UiLU8hJkWPGcrhjzV/zo9ujqRPUjrxDw76029T8mSvHWi3bwBxwG7PrK8O1e8ODsOD8g8nX3PvG8HMr3k8we9iZI3PRRwFDyaCLm8mydvPIBnaDwtUyO9gtwOPQDrA7vvkb861Rc7vdTQ5rx+k5a8wccBvTHnHz1OYW68VtWPvDuDpjzfdS48bSNmPNwKLbzbaxg9LD0zvd++zzs7NjO7AOcbOnTddzxjojU8t+0jOy1A37wkiRK8BPEPPRUHoLzjwde6wGYRO2yS3ryaTmu8LRpRvCtWAz0FpWy6xpsOvN9JwD0hpnM7QOoIPesFozz7JF68Oo+xvQlLIT1tpBi7ldmPvGMdGL2JV7O8fes6vEd1H73t0oi7xlxyPIQMhT0Nj++8H/YyPQJ5sTzORBa8sKPyPHi5Sb0CsHQ91kEzPbI8fjzOZIE8jKaEO0yIUL0ow2Q7hOuAvR7yzrwxP/G854pbPbI7B71Qaf48e32FO5UMvjuToFe76TNEvADR/Tw5xFs9QfBDPaz6mD2CUsc8/l7fuvevzTyJx+K7h3MYPCknq72euQe8XI6ZvGOc2j3AnOY6MGxJPDABIL3m/R28ivs1vIFFAb0Z0ZY8KKNCvGRNIYjNq509Ggh3PTgG4rxC8B09izpfPa8JqDyohvO7jHThPKGAlL1dNhy9tEI7vRfiB73oJ0s8WTjwO7gDQzyCPJK9ZqMaPVpbdD2rKPE8kFGlO3+78TyhmOG8KYLXuzJnxTwCURE9lGHSPZqDdz1W8PQ8nRrPPH/6o7xIo+K8YTJZPKqOHz3jllc8hgOfPaKX/ryLIPe8/rJvvFA33rl0h9G8uQQ0PLzWR7xOuo27ijKJvA05q73Orq09MlxNPZL9LTyZkmo8aij2vA0eBT3fWIG7D3J8vVNmkLtp0FQ9W9iwOwY7oL05dfq8UzMIPfvUzLwt3pM8a/KiuUqG4Dwa24+8lQ8CPQpVGL1UnXO9eYKavEdoGz3Dlgm9DX9qOwjyVbzUAzU9uSS/PPi0lbxt7QW9y9gKuwbyZbwY/946Hgf0PFh+tjsataO8YdwwO+e3G73va209bc9WPAr4xjz8Hcg7QR3xvEsyQj1AYDm98uSBPIODjTwRdBg9V/k5vcBMqAS4B829lr3BPMedoLzzg0o7IFvkPHzCETwiIgG9rgOxPWKXLT2P0hw9dHtYPUThDL3/xtG8sKFnuyJVKr2PHUO8foIFPXhpMb0esE29NbwpvdrA5LyXYJS8iehNvZg3OT0/u2u7KbAHPa2vWz09gco8DwoFPXA1cLzrGwU93ALLOk6ZBr0jGTQ9Q2TnOzI7nTzX+PW7NosrPR4ZCTxivP48he+rPXdJ07xa7wO7X+6PO4xtNLxXpQm8AaXLvFGQa71Szla8/kNJOyImmTxcymi9ofKXPVzy0LsdgC+9QJZJvbUFJD2IkUu8SnUjvIaQ7LwlG348uIMHvYdKyjpbqq25vxuRvIiiXL1jtYW6IeU+PEj/cb0EcJw7xT4aO9GEzLwos1c7jXX2vLF1Ez29I0i9Mt1WvF2osbwRfhy9wiHsvNIoSDs9zV88qz9GvcL7hzwyKig9tI4/vEjTgD2Q0HI9yHC/vA7xsjzNaqc7swZAPAe4xjzGsTA9ZJuivLUXabI1AUm8QPo2vR1SqjsJrG68sWsuPR0vujxIpw89+2ujvH0xmDwhpUs89JsEPKQEkTzuLYe9yRIGvD7RITxDlKO9ZCZevV5mNb3o6s67TQj2vKFOIr3gWPY8MitqvU6TGrxxV7U8ObhAPP8rxTw/mgw9vjg7vSiI+LxVTKe8he/8Oxl9e7zESwm8MpoLvTu+jzwPrhc7uT0rvZkUkjv5sGu9bKNVPYtSDb2emB095lCpPIjI0Lx56a88rOJyvIVqnbzLequ84VVEvVdDJ72+h888USs0PWpu/jwakFS81mytvJoIhz3YF7M8SxeNvBSd07sQ6Zc97NL9vMmkJr2U6yI8CRaWvW8no7sHXdk89lnluhW9ST107Ju8blurPSDNRT32dN88pt2cvGHWuryRo7880FaQPd7EMz36xlS9jbN4PG7GcjwKi5I7xBOfvYackr3T3WS72F00POCiYDs0qAe9UQdXvGmMf7tbL0+75a8UPejghD3gDwa96r/6POi/NjwgUq489M4yPRr3aL1qyv48KgXUPMtCczxBK9C8Sem2PNeuvbx7BS69r+QtPfmQ6Dx9HBA9pubPPKONgLxeeiM9FaXQPAexbzwDAqe98SpnvXxTZr0LVG86ayMrvMx1Wr1VGoA5cj4QPUfopD0JHWW9HJuVPbn7HDswn4k8+OwWvQwSkDucWIW9KnJxPaWj2j1QEWE7ge5YPRzzzLw0Qqc7W4iBvew+rD33eMc739T1PG2O67pk9Au9VymRO3fhdL399408MbbJvTtjBj2bFi697YsbPSDlsTtdx4E8MJlevDI6zbwPVA47wQf1vaAYhrsFXd88WgKwvC1+AL3JDx88k+o6vPKAz73UUZI8pAsjPsWCcDzl1Ow8Sm+WPCp+e7xUJ0k9pxvFO+a2pDyaug89+NeJPVgQkjwEuEq9kLY6PeFlmLwdRzO9KDxrPTNbOr3UX008S5mVPF/QjrygICA8n+Q7PVKuubwxSF69R1XCu5KdqLtrdW87+ng7vR1PAYn1v2Q8ph4EvMnSBDy04qI93YsFPc0oMjsMyXG9rI+vvFWefztQCZm9EDyJvH90TD3gFNK8WosuPfTkoT1Atau9HtnbvN6Z/7y+Uws9cOnevFos0rwAroo6GRzHPHKYSDzejN68DRQKvD33ED2TfYW9rxUnPfhxILsVTAq84Sv8PBMLq7uYsXe8LHiCvPbEUbz/L5W7vbJMveqoST1oNyy8fpcavMsVgLtrfRu9iBnZvGmW5TwcGIk9wLcYPdyGVjwdclq9mINxvR+UOj3F9gU980wGO6hmIb3eEDg7Mx3SPEmTBjuB6Ku7FUB/Pf7GLL1LS1c8iQ8lPY3yOT3KSxA9lKGRvH9S/bwqsns9OJTxO0vpBbo2tes9JW+cPEB4pDwrFpO8dDWPvWTrar1i4+q6iA5KvFslnzzm+Wa9F26dPGChZTwiNUy9QXNoPd8Zvb1WP3U9Xxymu+pTeDy7DGC9gwzgPCY+hDwN81i9/tQTvMW4oz09EDQ9HnWAvUJwMQkys8i9MbJWPVmrn7wBU5Q9m9YmPeuCxrpxkJy7G2IBvBDznbynUce75s4/vcz4H73AIlI7/mukvJ3DsjznQXq84E7DPQDwGTwgoJ+9M3i9O5+Cyrz8aL88ellBvd8Vl7u8Pl68THAePdPukjxeYJo8lCeku7GWGbz7IrE7+MiBPJ9SLz0+Iwi9yAwcvRcarzyPTCo9dgg5vbC/V7xJDds8paV1PWtQfT1ik9O81X0yPelFKr3Qf4Y81ViLvUt3Yz0z36W7Ifc2PJx6I70lLZO6oAs9vVoWab0CGqO8KhQFvZoTCbslzTI9eyynO9BFUD0zNl+9s4c+vVqnqrxx6Zy9eb5PvJohiL3jzWw654kJvRF837wyMA89hnDAPTczOT10VIm92HXhu+JxMLy0V++8zIpqPI/V6jyPG9G7aKaqvSZTjb1X5s66hURbu6NdCDylbba8xsZUvOk4Sj3SLPU8u4XtOmyKazyMGxg9U6KIvKsIQjuWzbo8z8vHPJeUWbIx+Yy8be1ZvfMV8TyWNUE99QtuPRwI8jz9/dy8vd5lPCxoJD1BaK+8gfiMPAIG/byBi4q8/kfjPIKMerx8gAo9pcU1vYxqoTsJ50+8ncrBu1lC1LvceDg9b9cAPZFLPbrd/ey8gkmmPLiUbTwP1hE9l6EkPGyulTyTAE+9G3gqPeItH73g22u9pjVrvFKyJz2csMe7OTsvPGWq1DsLFge9jPuLPdjGyDx21Z49VckRPFM5hb3F2fY8xGgZPFNaar0PWP67qGGsO12REL2mEjy9pld0PQzPwbta3yA9LhnEPGflsDt3O3I9zG45PC79HT3mU349Z+1ePOpcvjyNfYW8ALueve+DwLtf2go9VHiavK0T5jxwZ2m9pMOEPRhcwbuPdbE7FQR6uyqK+TyH5+68vKxtOxfsUrx7SqU6FYcdPUKiULyoywI8sTl1vW6JJL1K4Qi8/G3cvTk6Pb3wPy697ZlXPDvshDt/MCi8SfeLvOPz7DynqQK9CXLnvPNFMjytfUy8UhaEPQjKoL3raYW8FhdPvDzBTLzuwVC9j0xaPOaNEr02HSk8FKoyvWpDkLy3KN07h4uGPDLQVD17mfO8H5aIvA7m8rspGyS9BQENvRO13byi7+I8vMjePF0u7LyWpoa9i+v3unrjLz3hj/Q8Hx+PPOunPryc+d27d+1yPY5THT2/KrA8KClyuzpzMj0f8iQ9yCAluxgflrzQ5tQ7PllZvUPDtzzmi3q8H70cvO3mCDw5PCW9Wg2ku4QYlzyA/IQ8Fhx3vdndMD2eDoE8u25PvMowEj2yaQO9tEoKvfellb0nkCo9xQfFOomREz3C/im8xYDcvEo3H70yCB+9Eo9kvQKKAL2VEzG9UJrHPfQLjrxI3MW8C9/suxXkAD2Px0E8DMmGvEIxBD0E1wq9PJ7Fu/h4gD0U3eW8KJvVPJqyzLxRClC9IZcdPIiX+7tGLMU8hiXUPBScUD30lk697D6APL+OLDwsOee8rmifPKVoa7wEAHc7M1Z7vaG4eogy6XU93rBGPSXqTjwPqIy9cw8BO0mhBjyKt1G7P+68vGtVvrrPLtW8ZFG5vF6O97sBKi292AUMPRa6wT2ev2S9mLYiPCtyOj308De945PHOiF4eL1f0WS9RfwDvTZipDyj2Ka7xes3PafUGj1jdgY9YH//u8qyxzwhRN68Va95PdvmlDsUCiq7bXHeu7bbgLwGybG77WBvvGJcij2QX5c5DNZBPDDqBj2KNZK8UzHlvMwTdLxxx3M9oxpHPJygnD062rm72imdPHxUZj0PA/O87spbvSMJNr09goW8yXlRvEsS2TpPYTC9+hctPLXkBDzH7Nm7VAUNvW36LD07m8i7yBAhPXXeaD2dkWa7cQYSvIPHFbxUTZ08o75YvT/CXzzPFpM8bNnLvFbUlzwHChy9QekRvay11TsgWSy7IHFjPTanDL1p1BS9TgxtPAcTIL1cCDe8glVsvFA2Oj1OhuK8zOI4vONwErwJzBe9qSKkPHoOMTxG1/K8odYvvcEeZgcaD4W8N6ghPJruP71LlCE9LXJTPbUoAD2lGpE9lksVPTlnkz2HQzw9WCkJuwGhxbxKYxy9yOcOvWimb7vW8hs8TJVxPSw3h7xJQXa9bjc4vQ/Skr2+sdO8i/mCPVLKu7tTkwe8bRWGPH8tQj0WgUk7KIw5PZRG47yX+Yo8csiwvG7DXjxWJYg9qXDZPDiO4TzpuqE7e2F/vAXSfjyYIEa9QGYZPXNXML0L4Em7hZ8mPSN1Wr0L8Li65KmlvK1/Uz1YFIi99GB1vNzCh7wrlg095tC9PNtQxzzhx4G9ONf7vGs4TDymqdY8mb8mPRXckzyOusS8bbCTvGhM7bziajy98YSJO10HPDur1cg6rjyOPIxMKjz1xa68G1B7PRd1Rr1ENlo9drSpvDD71bwut5G97yLxPPckMj1wZrC8P2RSPAdQBr3kMjo9Fq5APL9amT2e8jY9IP5IPQ/ZU7y07mg85EogPBFfDj0uzwm8N/ySPYXNSzyrs5E90KI/PePhY7INUBw9Y2X5u8M2zjwJLWM9EczbvOk0oTzJ/dS8098oPWcKzLzDm1m8xgZQPLUlhD3G8bg8etBKPK9ErjzAX/C8dg6yPFaEXD2Ce467Coo5PccTFr2+0A+74eHhO78H1ruUvDC9asMOPWzt/rtRgCi8a26uPOVERD0QhhY99qqQO5BuED08YiE8m9+KOtNIhzzwo5+9kWXfvEXi2bpCPNM7DaR6vFmzWLxlE4s9tgO6PJhuUL2+9a68qYOZPe5H0r3C/NE8rrdTPQC8Ib152ck79JC8u0wrzjyDk1c8O+AkvLG39zzMoBu8w0/uPC00GD2x5Bs99mDwO+F8Kr06Mio9YBmzPHM9sDxc92I7/RqMPV6+gr3PGsC7TKk8Pdyz4zyulYQ8T8SBvGtp3bk7+ik870MoPZFg2byppqW8LiiFPZwlKj0AOHu5I3yXvNbyZL0n+a29OzS6vf+5G7y8nDA7zggjPZIrCz3lI+K65mNiPWCijrw5CYC9JUedvWX0djybbEM9yqMWPfnOm70dWb+7fzpAPcFR/7y9K/+8VPBfvfMuQLyBoTe9PV3JPLN+pTpNS+I8hkyxvGaUZ70Zy0I92XjWPPFxOTu8IxW99lPOu0RsIr3YlPQ8MybsPJBhoT2YMY+96eVGvMhneL1gfky6IpFIvPOEoLzIyw69Yr4GPV2FzDtIXy69nuMyPG8EZD1rBZe6V6r6vErSPzxBlpA8T5XIvCvwIjw4XBm9A+rSuz5XCDwNDES9pUOmPLtCqTzHzNS95DMavBYPmr26UMi8emf2PAtWZ736/Nc89aAgvfYPaL17xdW8vUodvEHhYD2iqQg9OOLaPDlDmzypBOc8VA9TPRr2ZLw8zVI9xHEtPUjc7jsh1QQ9YL0DOkdWM731BGa9lUoiPGtjtLzucIc8IE7juq+ggzwCOc68tlDRvK0q0brj1UO8YxLvO3QLkDySUEa81FiePISPDTyAAA+9UAemPOKdbj2LNri73OTsOq87T7w05om8cKgfPDQr1oaJxtM8i4bEvRtKnDwAI++88vs0PNdLPrzzsKW8uNCXPLOSsLwC7Rg9LzUEvBzhLD3UlyY97M7gPLywgD0U9pw8m0UVPA/2qT1hsJI832YBvEfNMLykYbg8ZqsZPHiG4D37H4s921q5OjfWabxhmaY8Qn7ku5EEeTxu9Mw8BsQCPLXTjb1WYYe8Sd/TPP/TVD2tAHw79IxgvS/UqzuXIEK88U6+OgxwvbvEHsQ8SYt7vXA+3Ls6zwk9JVsiPOTnHr3bw0W9i4hkPIgNSTsaJwy9MHvIvNnBiz3z6jM9mj3VPBRcoTwtVVM88W/wvIasID0mBxy9Yl2RO5W6i7ycxfc8u0urPEb6yjyfDdk8Ja6/O1jnIj3DYYE8f7s8PHA2mDwFIEW8UkhrPPBGXLz0FZa8nGA1vOF6lDx1jca7bc5YPCxJZ7sUHLO8K/Q1vVJYUjzeWWy9zeyzPQPQpjxEF348CLvjPIC1sLzigr694a1zPZit4zz6gNc61X2bO5eVKomGRg29h4aQvGwXVrvLUbM5uT+MPFQxg7xj0iw9uamavTPV3DyF5Hs8nJ4dvJRzhL1c4I08+Q35vCf8vTvHWia7m1oavFKg5rx/3Tq9MgcgPdb/Sb3b7XI9qJ5JPPU8hjzwPVE9LwQYvJSHIb1rQFy9cN1DveqBFz1UcZQ9hQU4vXCgTLlZq6m76DyYvEj4Hr1JvkI8HMw4vdJCZzxp2DC9gBjJuzuA+DyzM4E9rDjoO0DNg7ut7GI8y/6RO6/ryLxxKv289JtXvJcZaL3VuE08eiz/u3ecPL1MAgY9eQKWvbiHnTyk3ca8aMh3Ow7rZzxEaKI8PNeJPdvCcTuH3So9TWenunJ5zLzPKwC97JCSPOD3u7sDClW8VAImvKHzNTxi1e88KpqZPJ9R0Lx6zBA8gYbQPKdq8DweaKS8lWz8uIcRIr22dqO7B+4tPQyo/jzc+nS9Ms5qvQcHrzt9BfK6L3l/vH9S3Tww+z+83nOSPFhcA70qsPy8RCy0vOgIhbIpqVK8VyCrPHtBUbva2ZC7eJB5PdNGk7zHLam7UhKPPeT3iLq9fS09acqrPBVK+7xLHZK8wYs5vJLoFryUpyw8eDAZOzKW/ry1/JU7NH9xvAA5R7mENSe8oKEhvWajvLz5Gos8tT3oPMPhSbvx6Yk9RZsQPK1JOLvQ56U7RTKzOw5gMT09fU68qlW0PQFXgL3P/3Q90g+lPN5XfL1iEwa9jktNPMN8Njxg8kc9APTCOyUk9bpYWym98fYAPZl4Dr2/TtA8Pb+EPM+7kby1bRi9QPQVPdlRY7wDo407qz6APWoylzzIB7e8YZeROx1bOb0vRRo9zMFEvWnyz7whvbs8Fl84vcvcSru3cyS8JN8MvNGWHT2dCDQ8ZE66u39hE71ijos9BoS9PVcKLDu96h88n89dPZz3Rr2bg+48NB3svHFACD2L+FW9ddV2vdzblLx6Ej29dt1AvGhwLr1OAeU7SXnuPMBnBDnPrV+8CietPPKJBz3K0d68s9KQvGqfK70QufA8FOgpPV3LTTxkmLy8FUO4ukM82rxPicC9YMltPUvmEDvatE+9kFKOvQaaXL16CJA8iefzPFe3SzvVeU88j/U8PV9xtTzp9DY87YtZvdW9Db0TyIa85DyevZ5Q4TwZFqW7HlArPIZ6tDzU/4S96QBQu+Vc0712A+w8+a4tPaUgjD3W6xw9LbwCPJjpLbytvig7KMvQvDRd/bzvMsC8uDONvSblFT3sBRO9y27+vK40iz3tLao8KyRYPSJeUT1NxeW8h3SxvHTQSr3ToYg9L0GRvAZ2Ir0uFTw85AIROytKZLoMvR88/gT0PBOMwLxIgRo9iNvWPO2WVLwdgCA9URF+vVzMBL1d+WA8lit1PLmtejzs8Y28hnMTPLIznbyqU5A834XbPDRyPb0yMls9TBr3PMufrzsAnqq8tAB9vOVrQbzitsW7jz8juxRnCT3Lcpy8ZTU0vUOMYD0Z85Y8sjyNPTmLKr2YlA88JtqCvRA8cb0VXGO8tT1mvdo5nohJmpy7BXcxO0I22bwBOI29dBkFPdAuXDxc0Sw89kcKPVdpQr32JrE7YepjvV5LYj0g78M72fHrO3K3Jj1GQyO8cCepuxjOrjrlU0Y9ObWmuz/n0jxArv+8ECzKPGZ8q7yPTUk9B1X4O33FjT1pZae70SGdPSZmQjyevgM8LIcivC+ynbwLdyS8rGZtu1DhwTypktq8pfyCurlJybsRqfo8q0i3uVWgoTtlMki86826u74LJLxioLg8CrDePCFm97wGMyE9gEWpPFmktryAHMi7ZYdavC9BR7u+pxI93j04vKKHBj3m/QS9bWUYvf+Rs7qPtKC9v9gqvXHN+TuQiNQ8DYODveUfe7wqTxa9xYE6PTFDDzx+59K7u8k6PB/eCTzuEuc9RrHPPOh7xbzLvg29cFI3vJ+mFDwC7NY8zv0iPSufj706YLY7kEDtO1mkhj0Dksu9XWzvvDdHRT0qbYA8isGCPMMPPzz2gFq9tI+AvI5CfDyA7mG83PnCu5684IdObw69VCOLPJDP27zdQ4c9Q7OdPKef4bvkmTQ9RCVCPXeaW7uANTY94yrSvNG47zxujLy8OZc7vJJ2Z7x/qBW9cvewvO6F5r1pFT09Q/oQve+ubr01Xa+71XwvPf7sabxfFlk8sZUDu8NcirtvHUs8XEKNPIvwdbwwSre8CmZtPFbKa7xG7os8/GzfvAAIwrw2+NU8aA05PVONBDz8xju93hAmPRccP70ZdCk91i+UvEB2Sz0m9S09a3UqvIlZHT1zc1w7iCcZvc8GSb28O4w8Gw0+vGc8bD2WXJq8KKKsvC084TvO+/U8fXMzvafyAbxJtwM9g3y+OwErFz2boAs7nTGRvJPYSjybQKw78f5dvDcS4TuGpRq7PdqrvYcYKr07M1w8VumIvXwyPbyVv9g5H3TjvMYVEb0Ryy89+/WMvQDWJTpj+F49OGy4vOWsuTsYfTs8a52Qu/ScVj2wA9w7sKGvvKCF9jxvGu298NiFvP6T+LwCtRw91+Z6vcZkZbIsFlw8dXRpPffiID05TeM8vUagvIW20jwe9qI8561nPaIAQT11FNU8TsYrPE5Vo71+pa+8q4BGPC3FvDvI/2Y9j4qsPOJ2fzz26cQ8T4PYvHFVl7tHdXU9dGtrvGUYqby4aKY80gGyPRLupDzsc2Y92IufvAiv1LyGa+y86uSOO9uizDyfNDM7DOSeOyTfrb2m8JW9QJZqvOAfRz0Yyw48nyNZu3t6kz3J7JE8u6rlvGTcAj25tzq98nrMOzcH4LtmOSa8NMeWPd9ujjz+EXu9mPcHvcKmmT0kOZc9by5MvICAWj1W7KG9e4bEO1wQzj12pgY9o8zgvEtyD71eqk67JXI8vTALED1ASow45ejYO8Voa7wZhMA7seHqPXscFL1VB3Y8tAJRvWpc5DzUxDo88OPYPWbpJb0GKbW8AEPIPHGYnbwHjzI9oi+pOvjOiLytRHa9oZ4AvSjvE73Kr7Y8QkdTvclZ0rswzb483Ly8PEu0ijzQt/q8w/+pPKx8Sr1NHim9JrOEPFestr0w01q8cLFHPb5KeLuwJEu8ZyZGvb9h2L3YF4i9DmW5vDKD0zzTKQI8kBuYvOPGBb1rr2W8q1dNvc4rLTvM35u8jwHwvB1QOLwsuLE7vfJLvKWGUb2518u89tDJO7VLhDwy+nk9RWtfvRhUvLrgQLk8hwNVPfJ6Dj3IixW92G/MvN0JvjqpVwM9T03JPCvwGjujtQq6KBSIvc4DZ7sa/t88KfcdPd+gAr2lK9m8XdMUPemGULttr9A8ocEDvSkDlTxmgUY97B94PZjMHT1tvxA8s263O6SCzLtwTOk86BpgPLq/Bj23LBw9DFlAPWfxjbsdUt28Exe5vIcnv7wOuS29KSnHPT98oTvtdBI84socvaNUqrzoA109n7oZvf/VPD07yO28RaCHPcNWY7xDgsu8NPG9PPe8WL1e/oy8/Fgeve/H9jtf1289KfZDPHFTtLx4ea68Z/44PUqshzya2K+8/RpcvEEj5TwdRBq9tZuKvMDX84hxNRS9getBPb8AtDxX7IK8mVT3vBEW3bx+k9u7GyjCu8knAb28gQo9WpaEu5tI17zcdwo9zugHvKfatz2S1Tc9FbPIPFdDBjyPQhM9qzJzuCOu8Ts9fZu9rCpRPRYcTT0YNLK7aKisPNnTGr38lUY9ESKvvOL1Az1jGYW7PV/2vEE7pL0injo9dYDbPD5Tbztsf5E9FoX/vJN+xzxdrui8CZlnvV5gJb35km+84pggPetNQrqDSKc80xE4vV23m7yVKqq718I8vBK1Zr1c26g8dUJgvKDKQDyNVZk8SV3eOoNY0rzm3os7PGCpvPXwvzzTXV+8aJD6vA5Tyby9Cwi9Y1xdPAqdTL14iYQ72iqpvc2wFbyYo4a8apANvd1eVTunhbo9YmuyvHyD1b28Hbe6hRctPF9KOj1ioWw94wvIPANkJT3R1zW9H+MHvPvByTzTpAM7ct8TO9gUgLwkCMa8kGZHvPQI9Ty55+88So6CO6pxLT1A9i+8gsUTveedJAj81Xq9o6hjO0Eiw7yDtwA90baRuyFUg7wDZzo7n64RPfbdyLvFfMo7Qiu3PL0MKbyfpis98nlgvKVqJzs6dok9GWagPHCsMT3QMw29tZISvDBlvDzWvm09tVA2PZjJujzUIxK8X/SxPN6s3rvHdaY8VTayvPWrszxd5S48RWfkPCCU/DxycHy87DqYvNDbUL241G89dK5TPe4r5jtDSa88D7QlPTtKMzynU5m7HbFxPQblsDt1Msg7XefGvMnlNz2eWa08QQE/Pa0ILb2R5Ym8+N/QPCoVpbyG3iu8seSlvLZUFLzAfts7V11bu6CEPT2Evi08jE5SPK57TjyWW9A8tYnpO1B5C73fvuC8LcXCPSZvBTtMFYi8pzaSPA0WljyTQAy87v8pvAxpzjzw+qW8gncwvFJ0oLx9pMy7G9nlPBHZ3jzPOrA7kuTGvME8EDzTZJk8O88jvEyp6TtAi8o57s6lu8QgFL3nCb+7+yTEPNBpBr1Kw2e7K0mPO0YlVbIhsmC8P/8qvUl19jzinA69y1GKPA6NnzwK16i9OA1HvGnXZbzopeC8emt5Pei7Lj2eJTo9nR3KvLaYXb1CRRK93eDlvPUgZbzpGh69aU3cvI9RojtNggQ9gE/MuT4PdLySJgU9MrXGvPRyKTy3bss7pGlrvAwWczzA7DG9qbuVPFUTazkqUG28bvyyvbxVhj0Vry08BqoMvSOFMb0dxdq8K02UvNWPGLydEd88UGWWOZdjTb3zQYg9UHPePGqxJL0JI0I95hMgvT1SILuN+mC8QjWoPOfxcD1FnY88ou9WPEzkpTxz4408vDEhPe/+tzwfYZU8Ig+UOzZygD2HUgC9zMGZO1EDyzzz2Ac91tiDvMPyvTvvzpi8XX99vDqaYjzybxA9NzRNPd7iR73310a85ZnSPAhROryfKhc8/IRovE8JkjxrrRg9In8SPQ+MNTwW47q9AxOOPMpmALtLiIW8MBueOxRwgzv8nAO9yxSuOSnNebwCxdW8oIb5u5HMWzzasjg9NWeiPLrYnTwCA909dvk3PSyt6by4kmm9gbpFvIwDSjx6GA+9ClQYvYiAT7192La70+ZtvXB4Fb1452q9BHVIPeb+Gj2cvhC9EhOlvdZECb3BiKK7RuLfO7BcEz1RDJS8mDl/Pf/g7jzMzF88P49QPGK8ebsd5ag8LKp6PLWfZj2a6zq8La4bvIE+Xjy40m88WEjavBTzCz1tN6483CyLvUJsi73gbIq9pSuWvIK1nTsTae08mS2/vDYYMj3QjIs8NajUuqsoATxmJcO79G2rvT0Ngzxd63g8n8XJvKXGhjxB5h69A0/JvAS9LL19GOY8p3AYvYt8ujwSxE88oPkIvfdaxjzO+u27H5wrPICmIjqNGPO82+z5PD6zW70SJng9CORqvE08pLyqcSe89pJhvHpClztEdPi6Muh3PAlSL70WEYe75QZpvKy0/bzxT6c8Isx3vWriKj3XnpU9qfFfPSEUCL12zjo9AiUFPJuU4rwRMPQ7D3mAPIja2Yi9guc8ciy4vVSWRz0v7Cw9VgcQPuLIor3qnlY8RUVmvZTdGL3dJTG9jnROvUHgMzywODw83aYwPerkeTygklW9oQYivaghQT1qZRw95fdEvfqp0LsQvYy9pGMAvfnl3zsCx3I9Dk8wvXo1Rz3LCxC9db8SPPqRK7zaw+Q8fPIHvZhKojx7QVi81x6PvGbPGTz3+yq8bF16PTTfjL0cWgo99wxDvArBtbzZPqC8HHLxOzeILz0S9728bOfKPNAmrrs8g3s95AczPG+uuTyOugq92aSgvJPwGD2+EFU9FmvqPFEA2DxVRXO9T9L2vHMu67zyBYC9v8TOPJD/0bwFfJe8RLdAPVkeajwzo6u8cbQKPWNqjDvVKIA9XDZSvIFsezuxrk48rpedPMpqejzjJSu82c5gvQ3AMrt3kOO8d5sQPbmMoLxvvqg7YQImvX/3vT0pkuU7GA7ovJkNCD3YC4o9iUfSPApVRD3r7Fc8UZVAO/r76LxJ9G+95ou8vXr68ocd6uK8NNBwPOgLcr0Kfy89rPoQPVxzVzwgoY89chsTPQkziTtl3wu8pKYtvdVmCz2vQSk9NfXoPHjH8L09TqI8sAQYvfESkTsilo08marzvL0+T7ytfqS8s87dPYrLyTyxQ+u8IY25vNDRcTvrDbw5+JSivfS9FrzDOfA7YKUcO2McATt++BI9hT1WPDIuJLzP6g29F4KZPUPE07ueHTm9f1ZwvOnQW72Aex290OIxO1JTG734cwq9FnIaPYr+qrszPji8nEoUvWYzgL1Kkw69eHT2uoE0bjwyylO7ixsMux7xS7wIj2k97o61vK9FYz2jrLE936k6vZZSOD0VWCa8CCvPPF3ie7wMeF29U3piPRT0br2EkLQ8vFG8PDXW67zcHf480adRPRP1fzuBDW29QIb+PC5FKDzcPhg998QUPKDSy7zfqns9ebhwvVP7Sb3RC8s8t8fgu02dvj2Ohq87fErFPC0g+jysn6o8N/DVPBKCEL0C5EA9qIDhvMG7dLKGnqo87sA9PVaFX72JtVI8jG8/vav0ujvQa609QnI8vDDpuDw1krw67jM0vbDMJjtzQly9zGHAPCyukjw2tqA7V38TPXsEKD3M4BK8k8mQvd4Pibxettk8Jy3EPGriTLz444U6G+6vPUye6TxvzES7wItAO1AlhTvwzWy82zn/PAEyq71FrEY8PJjCOrUoEju73m6904gkPLuwujxVOYU3ljxQvZuPBTxtqyo7FDtVvSFRabwjKoE77AGsOwt2fTwuVjC9WwMRPf7jYT2Efpy8617NO8MFzjzD+hY9VCJfPUfJLDyelk686egMPAhou7z8WYO8t6EzPTM6Jj16oQ09XZyAuznnXz1xNqy7VUtIPWAW+LzFmBg8CLrnPCSI2DzIgTK9rDy0vBYUBb1nz0k9YlqCPBSkYLxfU0C9BlwPPP3ctzwTlRU9VZeuOxzkJLyjopK64wajvW4oibw4eJ47fnGNu5ugAD12XqY6C3MWPF2rdj163a685+05vD+ZsTybqpm8AT2oPKwksr0+7bc8xZQuva7OJr0zViW7qxCOu8g6AbxELQA9wsr3vGUn5Tx9biA99pgUvKD3aDpQvBY6UJYWPIAlM72Vi129MZnZPCOnM7vZHBW9+vH7PL1JDT2gvBM9mL8JvTwQvbxygQq8ZkRUPcEDNjt1teg8jSdLu8GxYz0NAQ28nf6QPYtJ7Lye6ic9vRu4vONj4LzPbi89ulK6vLtTpDwSS5W8VunJvDRS4Ds1eCa8Qng8PONmk7u/AKi8Nal7vZWTnjxg+wW9/4ZNPE7rJb2t5cM822eIvfLylDwQCZe7EZlcPc/ExTsjWL08rK8uO/v727u8Ogg9wJ4VOgTnrDxXWAO8fpaSPSiDWDwj0v485fG8u08gGT0ycj+9EtI5vTnbqTxlFg88hJgavftJv7sNIdI83tWbPPA9B73wdIm8YX7evAgRqbtIVfw8O9AYOq0EwjwW9HQ9dUQ0PYG75Tug1AM8fsewu1s87jwr86U5G6eAveFHmYhFnZI8KvRqvI7uJztNAZC8pj2OvT7AYryES0o9nyblvCQwsrv7Kga8ReCsvJ6xDj1lViO8IDk1PUjkbj3ccFe9kVAoPUyBmz1vw608uarxvMWi5Tw0FWW9RZW+O9APAr1tYD499KvcOvgc17wg+aA6T3REvRs1SLv3yog988sAvcmwSb02LOE7MoUtPRacdL2yZ4E8T5D3PHxBGDxuhdC8QeutvJqT2Tw27Vs9buYrvdYQVr1Uc3U9lzNpvEJXMz3dehs7NuQJPCKOvzzoxfc7tzQWuz01UD3wWwQ9cxjKuwjRzDr7gn68lQl1PbI/lT3poS+9r6c3vU/qVL3c0PY8/3UkPHjOlTxsTni8lMTEO129Qz32dxc9DHe6O2dzNbuhfr89UHlcvbfN8zw59Jy7y2u1vAabdb34+n+9gQsavYWkKLtx9vA8a/wwOuh/3bzIUxU9GPwxvb1pkrziXx+9DmetuwsKg7qw8Ui9dkILPfP/YTyTP169J0EovSMATAjyLc88eGLQva/2Mj1aiIA8aGnqPKhbPbyclKe8LzQEvV1gTL2bc9M7mqq/vOr9Ob0R8fI8hlwEvDLiML27LqI9vyO/u/87P72quSI8dCz9PLJaLr2on2Q9frfcvJGgPDvIlNC8rktNPCbH4bwCoIy8d/T0vKU3SLy4OTO90AcovWVLSbxVQze9nmskvQTsWz0twcK8QRXKPJMnhDuGFlQ9xG79PG3R0Txq59i8C+exPCREErsqNia96t+bvUAfBT3/iS+80BfaPK+2Q7w/t3i86WABPdI3oLz/w2U99PrvvHhdk70LHq28tQ79PEkiMz0GGRM8l1EsvL9pbrvGjJ68lAdYu0BOCb12EMK8Lj8bvTI3uzwiTjQ8d8SGvBsqgbxq7wQ9I8q/OgE83juW0C28v08RPdRzVzwwOhI80k0APQqbm7xz6iw9nWmduvYLnLyopoS914oJPaaBgTxAGgc9iDaTOmYDAjwZkh+8VxbQPPijyjr/lME8EMWkPJGiVbKr2wM9nK8bvRZSEj1jnx48jbgxPfMo7bys0om8I5eFPTqHmLw/zxC9fKXOPSv7XLmzQN46VgvuPIUhAD14gVE7nhmKPFaoszvexpq90FSqO7wfzbxkx3s9R3rluyN+Bz1qXpY9Z4JnvK+0hD3QMrY7C983Pbxiyrtdriu9uLc0PRNzobvTCiK7XRP/POIAiTxEQWM8clYLvI3eM73EuQU9xz0qPOnVezsOxvk82GcyPI38IDyCWgS9vr1vvVIcQzxZ2V8911oqvVNE8ryHQ069DlvIvRe66Tzg5lG65wAWPEm9F7wm/6I8SkPzPCiStDxF6BY9pg7PvEsznjreR4S8zHOtvTLAkjwC3jW7Bb/LvMjQjD3Mym67TPnTPIazgDzUw8s8pSOsPBBfNby1jX49lUtyPGjRIr1gbhC8UhoivRrPlzwdiP68NK3dPAVQjbwF2ce8dKM/vQM1zTzZt6y8bkQovR75JzxS+uU8365QPMG6Hj1sgTa9KKx4u79AULx185+9RsGsvAjzAr4kWfq8S319PRC++joWhGe9diUEPQHxlrwWely8OGP7vFHT0bwY39U8SF9MvVgoe73ZVnm92MYvO/rbgDxEIJO831SGvRWuYDzl4SS8f+2fvNx9MD2CFJO8GoGBvCkohjz7hec8k05qPSt8CrjkvQC892UXPXvk2j1Keqo79UkvvRuyEbxomfy8Pa/XPId2obxDRsa8pNCPPANyJzvjhxS9uzEnvSU2qbwoRkg9xE0WPEA5JLzARy+99CYBvLFOyrtyhcI8QEuFulx0wTyJnb46gHmOuqGvB7371HY7tNAlPDZEWjyXbmU9q02BPY9FPb22ffk8GksFvaqF0bw49RY82KMIPdUSoLzf1aW7vySoPQDEODgE22u8ZuiZvE+987xAh7M7RXxJPHY88rsYP8S7/JqoPDCDcb0xste6DnwkvNogorwNb367TNOSvJeg3jyWFlM8yYGePR/QhD2OPsm88BfHvHe6kT3eXpS8D2/GvFkUyYdUkx499VaAOxWhvrz2ED08cNKIPdDLQj2rpX06Ic0DPdpdQL1O4JU9j7kCOzUnCT33xmi9M+49vNmhQz0rJi29AWyqvKfzTrzKZ5i8SqW7vf0unjs7sCc64EweO8NAqrzEzgk9L34dPRXDAjyo9pE7tHkovQAwAzxD6747I4daOw24RDz5GA48HU8ivAaC9rzEH7i8kaxwvRzdzjxm1y29SCS7vLTzlrwryP06TbuKu7sTEr01v1W5psa+PahnjzyYMTw9Yyq5vO3Kk7zMw1I8ZRMnu6l7sDwyGLM8S/BYPWNsmTxdUo48UpaJPGmKZDuKMxo9eXnQPIEGET2j9Zm8bu1pvTkP2DxbRw87U3CQPKY9izuZ/Wa8XcqjuxoMD7s8aK892SPfPERq7TwOwuC8A09bO9FClrw/7HM8dbM8OrLBEb02yZm8AuQVvV2QuTx8P+I8ZAb7u9phGz0eAzA8BG1tPINsnLtGLnG91MgGvF7egzz/A2S8c8vyu/6RUIinJ5Y8du94PDFmAbwcvAc92V0ZPbtx3Ts/TrU8LmA7vRCrHrtcTa47A5sJPY0DgT0YfYQ8eH/6uysCq7w7xnI9MfU5PUEX+7z1ceQ8UBeuvcQAVD37EYa8aXjavEGAGr2BNkE81o7MvNeLlz3XF408N5llvcfgyDyqHgI8jUFEvMvv1js05r287dD7OzubvbyoFAc9s7PIPBZ8xrpGqJq9JN3/POIJ+bwSLew8UtHovIMhz7zAxG080tYVvby/xTucmle83FuUPBVcozt2l7y80Q3OO7tUOjwq1g282oSfvBT7Cb24Tsu7NQHsuzQpvTuo8NM8PKKLO+qqIDx52U+9lWn9OrR9Bb2NR1e9+DPQPN4ROj3zzK68ko+UvRuJjby34D89QLFsvJwXaLxzX2C6WNefPZKiCbxJ+x09VgU0veQTqjwXzRY8Q+aqvFI0gbr9uZ28ORQgPafvIDw9bxk9TT4xPSTlbztZ9IK8FCisPToNMz1DuNY8tOjnu1VrcLKTZx29O/PcPDgO3TvGnh+8ZuoVvNs8pDyaSjG8MDSHvGMOh7yT8FW8D6wdPQfjFjyx7CA9ajIPPcx+XLxRpDg9jTmSvDyLHT3oHNm70qMQvZRCETxGnag81DsaPdO3Ez3WkIq8hw0QPZwic7w5qQC8T1CjPPDiFTyUWiW9bLJcPK/fWTssZRy9iPcIPQarNbyBr3S987EPuvpxED31qqC8QWR7O6lpBL0rwSo8S0LCPHVzc73Vm4M5F9yBvAaaGryfMdm8IyzbuzAqAj2Vg4u9DaSOvN4DkjwQ6aQ96zWfOV0P0Dugi1s80LwVPIsHS7sPqRa92968uqswebuFQ+A8E9A/vPOLHD17kKS94dQDvS7vLL3NULm8M+OPvDEAILzQXwM9Skq9PGI33TyGYoU8Ep4IPX65eL3oS087RGzVPPXqVL3biH88S22au3qIG73z5ry8TyyYPKi6Gry+Dog8w0vQu+VVWLyXPaY8vV6uPFhChjt+AHk8lff/PBwmgL1+Yh48LXZ2O1s+8ro+q7M8hhNCPdZMNTy7Yi48RsDFPMNmCr0z1i+9DedsPCFbIzx/UJy7TBqNPVED0rx28MY88rHsvGtvObyqINO8shXPuzMV2rwKPbc7GqdEvCDoB708sQi9v7mUPejJhzyRgi+9rPyavEGP+rxxJYm8lkTeu+NX5rwsFkK8oN5EvfP9kbyqMik8jibnvDRBBb1kYYS9bWaIvTC6srzcgG28TzHHvL3zkzxvuxC8ojbtvLZAQj0IBlE8qD3WvI1iKru4VzY9gbyrO4ZJKj2jD2Y9BOx5PIW+yzp7/2Q87FkzvR4YOj0wLMw7BSHdug4BlbzGxmQ9oTEYPQOuV70SrRO9CeoSPZzWGD0a1wS9sauXO0L6Lb1FrEA9y7eWO/4DTD24pJI9fKEtPTbxiDwchS69qVAwvPdGe7yIRxu9WMLQvIuWs7pLFTS88oijPEFFQjsr+GW6je+3PTCB37wQRY27+rH8O701Mb1nX3C97rKqPQpIAYk4YNw88D4JPQ8dILpmCJI86YbfPBH0EL0OXoM9+3eqOxDDBL3Mo1S9FZV0vWnpLL3oqiM95omQPHUiuLvEnZC8GxqyO+i8pD1GJZ09S2h5PBQMvrwekBS8G3ANPZ7t0Dw+3Eg8ep38vI+P4jsjR3g7aEAdvYC7IbwnuD49AGHJu5GX6LxtZni9G2AFPT02LjwVnmc8ep1BPCVi6bwhmsy86v03PdjAj7wSTI48YG1jPRC+frtwg+Q5ErrGvB86f724Nyu7RkzVPK4dKr2vRaE8KnksPVAAwbtWTbA8+JoyvP0gOrutrvC8U3ikOlEOKj19Twa8B0AgPSupALhVkRS91kCQPR0Her3MYQo8QdKQPbUogjuhgkA95ZX3PMuOK70M1a886cEEvUep1rwBYay8oCcCuvHADz2Thzo9vh0rvTMQcDxZYlc8gADSvAJAJL1A0S+5C6ZcPdPclLw0AiO96MqKO/39Krs6J7m8vY8ouwDOUjx3wUi9gycgvcO5xwZdhwu8eZYYvfs2mLyIOPk8Az5mPc+7Lj0huYw6GNUBvJZBB72oZRM9x5zRO3c/QTy02N07ZkiAvRojJT2Fmlm9yyECvesP4LyHZTq8qJo/vIk/Jr1Gqpm82XGyvPvbmjxOwAI8EU2WPPZO+jywJcU8U7MlvQxNpDzpvSs8+OKrPHoEkr2nF349iTadvFHH2Tx5/748up4EPqp9tDxS8og9AaOyOwT4A73qaeI8pZA6PHQV3zwMCTy8+P2MPBUYsz2OAQG9mTOnPPpNFD0unmu8k/GOvAlFGb1ipMG8mT4iPMJFfb1tjYs8KIMnO1yflzvkpNw8rm86vKuphjj/1KM8uNTjvCwOZL0/9w49UpZCvY5e17uJOca8oTZCvM6NsDxG9C49Ov2kvBZSMj0HeHC95wptu7YMDT03NBy8ADSyO6ebOzxXR2A9HCXzPOQQhjseG9Y8QsAzvY6+iLwsJRE8XB5nvIW8Lr0no0c7kRcuPfEmeLwE2H888wemPC7JXLLb6Mo8PordO0Ct2jgl2rw89gAUvbonnD3vL3O8P+zNvd7Arzw851O95GSZvP+9Hr0HV347OBamPMMFeb2wbnO76wtVu5rTxbzGpPY8BPHFvJfyzDz/K0W995AhPRxOjLw4MUA9Bd9qvAmdHDzZoag9i9ZTvQnH8byHgQk9N7PFu/vjwLp7mjm9wsVtPTxdYbwzLZu94qXHu8G9+LwCP0m8zd6vPOvpNT3eCWa86bnGO719dL0Ms2K7qy/OPEO/kzsSss284B41PPGKWbuCqkO9bhgkPZypKz0Wcqs8qkcSPWq1K7wwadu8O0uwPAbH8jw1fBQ9MgOQPW/UEz1Zkk88+gS/vM0zdLzdiLW8NM7fvNCwEr1aUDi9b1MwvYjJiDwNtz47xfKYPFhkDLz1i0o8ShBBPAoRoLwJRmq8GP/8uu9IsztRXnE8PDmAvNFbtL3UVLa8L1XWvMPxxbwUjD07wGv0O/2Xp7ySgDS9GOOCPG8nJr3m/C69FD27PBzhkjwgE0Q8YhfWvFVukDxmKqg9CTTxPJgPF71Nb0k8rO8PvcDi0TxYw8C8l1avPEj9ADwfUJW8203WvOrkL735jzq9ZDBMvBkIwTzhbqi7y9+IvSv/GDwBIQc9EK/7u4lG17smUGs8VuvNOwgb9jzNAU69J5qiPEcYhjt6N8i8F+P3PA+blrwF2eO6TRDpuqgSQDy7Fww9FRD1vNGoML0AmaU4DOREvTK3A730frU8mymdOzEtX7zBT1Q8w8OAug7z7rwp/do8Gez9PAq7m7zEgyk6KhgBvV60oz0TAkQ9wO2DPSQMwTzfG008tMWOPElNgrzzh+88xc2kuptgAbyf4/y7HT6hvKLGz7ymoYw8m1Y/PRnnLjwl4Zm8Cs85PeUBg72b8mq8qzlhvIaPazvCCZQ8y8A/vPeR3Lz8qnC9qucSvaRWtLy0Acq8jTAUPVDUnD2Cgz88oxfnPNN9Db2ipKI8lfrhPJ2+I7wWVmy8gjlXvAOtXTyT6bC7va/yO+fP/YjZjcA8HQ5+u90rozpqHHE8a+qxPYrJCbxTCNM8iflGvQ8cmL1M16o8T08EPAdtKT29H8W8K7sEPTkr97yrTYa9cNd2vOZICj1vED48QLrpO5qCsTxdBZG90ixovft/Xj0up7c9s9USvayyIzyJ/Q49z94Xu6moHrvbCBm9Uu/qPHJK4jsrc9C6nM1gO1e9Ez0FYBO96qe6PA9Nvjw3R+67tdHGu/gp1jxBMr27qBmKPI9jsj12A3Q8e6WfO+CZEb3Yy889lFoRPVL8fz0j0Li7IH2mPfDPpDvTJW08SjWeuxlpDTxZ92q8twvXPN1ttDsFuBS9oFIEPZ6HB72sZyQ9wdjku5hqErsg9uu8Yo+CPC7ijT3DW7W71HxsvZUxNjxmUGc805EEvUk4hzuP++O8UkbNvHzQHDuq7HA8ITbMPJ+eZLwPCNG7p1WKvYQ4njwXHYw9Sy0dPVgZ67xg1CI9UjA4vYGgrDxpAY88YJoEPP+bZLz/H548HU1EPQyJW4cebAg9kkWhvHTQ8jynOIo9hJKEPOFzMDylLj+7/KRovVlnLT0Ibaw7ChC7vBlzATyInym9KUY7O0QrsTsq52W9JkRVvD5nGL1WEGo9hcnmPL6go7wn6rS7SDrOuyvuSjuEaq28MEizPD1oEL0R/8s6naO4Ohl4xryra4u850BsvPxTJ73uXyK8peFevLupZr1Ll2q8DvidPUTnDD2MuTG7i4LTPKq5arzqgBS9gikOPCmLr7yEKZs8YVuHPb9OobzFfKG92x6oPKjiZb0rLwY86i3TvNm1jbyAeeU8ex0SPcWxlbv6aoU8io1/vf4+Ez0A5EK7pn0xPaRQ4Dzxfg47Y42NvbupJ71eEPY8Jxk9PQTX5LyUPYM8aUrvu1IH7ju5d9a7NYInveEWMj34LtO9cAilvBD4cbyCjHi8aougPZjyGr3aWII986wovdy1cz0cwLI7zW4TPfP5azwZOyi9LZZAPbCokDtYYIu82gfGPIIwAD0BRpy8221Jvbo0YLI0uua7EV6GPQdg5Lug8eq7cN09vAWVobzJgLm719mCPd5iabxNWm473qdAPR7VuDvHnZa7SSvyPLXeuTuQHLO707uWPQtxfzxUscG8TeQuvEIPAb2pa1i7GzUsPfWAzDuX/RW8WMI8PHUyST3gZqc8WnNfvZk23jy1dAU9Ka3zuhw9iL0xkJw7/w+EPCJBtb3gT6Q7emzZvIrbMD0H7z+8E1scu9AGTzywzwI9W9SNvCswor0DIEU70XQRvBfCer2N9+I5VZzQvFP3l7x1vKs7UixDvfY6nD1yHJs98Fw/PW9vbD3nClM8JtmqPDU/2ToKAwO9o7wmvXiMGjyM/Ga87+iCvfTS7zwtl1u8/NiUuvZGFb1eQaq9+p22u71wqDzipCO91I6MvPvcnjtNLR29k4rbPAjmirwKpec8PrvYvU7idD07WUu6ZfctvQybJL2usc+84lTavCWeszma/nO7o7uCPJfQib1I6W08BG+XvG+qDT2vRtm8DWyPPTLmHrzi5Ji9U9GvOznbuTy/CyG8pD0SPUc0db3cDqo8PL0EPILLhLxm0aa8huwOvcmJVjva8nA9fU6MvF7lY7s1xrU6z1fwvFGQFTyncF283YGGvK6R2rsGbOC8VmKZvFUpXDmKboo97xo0vHc+Zzx8iFE9+VafPBxq6bw3XKg8prxGPBihm7uqeAG99RIAPKBkOT0C0iA9KcZHvaxcOb0nlSY9e075uyqXAD1gaww9Pie1PCh4Qr0KlC29O4opPe9FNLwk5a28nUhgvQKzLr0ZWFE8e9MBvJc5wT0wELk9O6lbPe1757zCamK8IR9SPWMyODv0udC9LKGqPEIyAj3DXHg8G+Gfuo6Gl73g1Fu6R1z1PcFA/zqJkM+8hMZZPWqHnbxen468jEcePC1eRzyL75a9q11hPfWvdDwoWTi7IkY3PFv+vTxtkYk8f8mQu5cWBb3pjMs7ls4ivUQsMbwGElI8k0CaPZRhhD2lR5o8ItFFPR+S/jykRSI9WMV1PTaiD4la7D687R8Yvctr0jywVLg9dGSfPOl2OrtvDks8J8I3PV3esLyWDc289oa2PC0JuDwxf7e7SbuBPJxqPbynG5Q9UuwZvYHS5jy3KfK7/HE8PamrHjuzn5a9BDZsOw1/sLzvw5s7I2gkvZO8vby4CD09FNIVvEdkGbtEZmC8/MuovCPrq70DU7o9cXxyOxDm77szgGA8e9Blu7zIp72JcwS9mNw6vTKlDr2F3gq6J/E7PcweBj2uiX+98/kMvQRcL73h1O493ijovKbB47u+fWc9zhIBPNuvK72Xeo+6agnGPGNpbj10ZT+9fpEsvFm+OD2BgGK9y2+9u6ller00zyE9vKSPvVmVeDz9vmm9VjZvvbo4Xj1F4f88gO5aPMetqrz2nx+92Dyiu4ATEb0/o8+8I4nWu/gYkz09+o68/sUevVdw2D2qgIe9+/9tvSukFj2qcAA7CR9lvdIkaLya75a9tK3XPJBx0rxDuZy8vmg+PWbogbwRM0w8Wis1PVTLdwilZQa9uipZPRswkjz35cc9hZnSu/2/XbvgKIw9NJExO8ZmrLwOcVI9cDtTPAmruLy7Xwi8b/Glu0z4I70NUSe7v9GPPLyeuL2s6io9LLAUPYLknbwwAIo9EZJ1PdiDNr3uVZi9XbUFPb9MUrs18pm6vq4KvA4RQb3k0tI8x362PDnIB7xoEow8UQ98PRdYxbwUTeM9q36MPb/5yzx++WG8plYQPbWN8DtjiE+8ira0vCxbkbyrV8k8210MPHnM/ztxHZi8uFALvHwyvby7bmA754ZTvGWx4buWA0K8/JYbvEEsSL0QJ3e7AcjNvBXIgz0KY7c64gyCPGdtOzyvf/w8135fvRDTHb2NXL28t2uNPCkziD1DmEs9aK3ZPLbDRj3F6RY9xm9UvdiFoj14/Be9HQNJvVnXM71QQ1k94g08PGteA72YMhO9O6SvuyUVJz3n5uG73GAGPXspjjzr6ok9PwM+uhL/FTsfMKq79nLPPIAZorwUE5A7bQqAPCHLVbLgc+y7yBFKvfhhmrys7OI8IPKIvULuybybBGm9p6GavakkrLwH3Do94DzWvOWZDjy3noS8ERgpPegRHrw8AxO8bOIOvS4SXjw50Zy8UZWxu3gGpLwCtaU9egUzPeCwYTuKQUQ8ZSM4Pe3uND3GRZ09xc1zPMJrwzyl3Og8KQciOz0Ve70o9i+9NPK0usgcjTzVf8k7kpeBPSqYUz3qI/88rivcvOlvwLtcukK8ljzovFwaiTxJumi92tA5vQCMW7xMsBU9i9hhvbxD97urHym7H3FVvaWmwzybhg+9pOgfvK8D/rvSxUm8fEU0vcDe4Dwx7X89JBoZPOgGIzzQdOO86163vEkWSb08KKo80ZrRux+FHzxxqCm8ogScvEItHz08inG9T6LTO3Ao4bweEIK7MzD7vMNaGj3VzI08FbB5POXEqbxyndi8Q3gQPfesAz1bs/a85sUAvaUfDz0gNOo8PxkdPRA/2TyYisA8EBgfvc3jMT1qsOm8YuqVvDM8QD2cpXi8x/WRPNNL0b3jhwW9FyD8vGZqaL3rDwi9SVYqvZdgQ72yngU9rqInvbWkkzkW6y49I+ctvO2WPDtvxyO82ksSPdBRLz2TnAi9HboSvUj+zTo1C1a5KzS1PagUuj3eOYu7YV1VPDG0Iz0awtw8mvZoPWjBerzeQ1O8mwpOOzQBVz2J9667jkqwPNcvIj2O6IM9xZOzve33xzvH3bG8ZwcfPs8pSLtoNno8QfmWveyu+LvnI9I7GmSuvPlgkTz0QYy8aK/hvAfE7Ly3LQI9CtopPUd7aj3ZnPM7u45SvYlD3LwYojo9RVp4PQHG+bwW3yA9mchZu8uSKjvQ+MW6yWEtvYXqTDx+ohO9ZqQFPY3F1zrgJIK8gsiHvEMvWT2E+gK83JTavL8MAj1+Q5u9syfFvN+clj1LlQA9o7XGuke1Cr0OGiY9I+z9vBZhl7zELwG9Xq3AO0hIkj3gURY9YEGpvPbmHT2imwW82h4uva+5HL0FJza7MUhFvFTQfIjwKx499JFxPGvR+rxsWHK8r/vnPIyjPr234TQ8tXmNvMzDOby2SRq9uF6tvP2ASD1TIuW8bkPtPNPWFzz6Mpu95ldCvaHOyLwA6sG5iOGxvMBA57o1Myi8XOWQvAzRLb2gzTY8wl2uvO3bczwbMgo92B9EvQ1vPzuUdQe91VY6uUpRzTuRs0E9TI+Wu933Er3sMh+8vdP6usFkFLsXaEO7Ue+bvTsZFDxtl6O8PXLyPC19JDsq+BA9Xp5RPUtGAb0sR0U8NTgBPVwcPb29vkW9U9AevYR/lL3yZjg8mYzovFpNgTwqBtq8Ud1GPE9ZD70kDK29SZfFPOC70DxIuFS7lyq0vLd66j0cQDq9sDjjOnEoKj2sl5S9nqI2vDla6jyH3108d2z/uyyBGL1xSo08UFE5O1IdRrx/SI285JCNvQdf67tzK8a6tBqUuw+8+T01A0M9sDSwPL9oOTzZwRW8oT3FPEIejz16Yza96BvrvPO7kT1Xe4e97ZKTvF6ynAcowBM9kT7BvMbbFLyjdQE9MPLlvB3emro4i/888x4iPTAZWz09TOm8aM6ovZAQnT3soHM9agOPPPwdhL3O1oY9hz4APdarr7zdHHw8UxCEvfH09zpF+Ei5GvBBvaOUvrwCe7284kisPOpq0z01KDe6n6zlO7U6i70yRqE96FgwvVlOUDyfXNA8tZGCPDnKxzzQYEA9X42NPGl2B73qBgi9/UTgvCFkhDt45oo8/AMyvQOhnbw3iuA8p9KePN8WcD3GbiW9tlU/vZK3ujx9rjo7fxs7uw0Wyb2EFVq9O9+xvOQsjD3LBMa8iNMUPTVC6LxAiyg98czYvLci7rwAjqK2kr6PvVerCDn4ZVe9d2TaPF0DDj0zI1k9t7qpu+lFiDyNGFg9R+ocvTU+SbzFxVW79cKSPddcpzwR0a89VYwkO7nYxDyamWA9y6DhPC/Hvrwh8PA8oPUNPcvuSzyWcvA8xBiMPKdRJz1zXdc7LQHzPMlAorwKDWY8fXhnPGG8W7KvxU48P95/PObwxLwrQa483DOMvOp6Pjzno9Q8xqoDu2gnRz06wwq9Lamwu/5+Bj1Ayo+9tkLMPHFUDD0uYRM9LBgUPfUUvDyuExa9UaEavFg9aTwYEzQ8tZgLvbHdPbsvfBa8bSgoPNp6RLyukpQ8wKmXO7DKo72kwGi9TKsIPdMVHrs1l1u9y/TcPJ2IK7seVGo9LHQWveM5QjwQpzA88+kaPFQdnLs6EyU9HRQjuk49Zr2DAvm8TCviPF/bRr1WPRU9koeBvFg27jwisja8I8UPvbv6MT3laP07b5JuPdHvJb1G4G+9C8c3vdBehjxtMSg8UlQSPZzs7ztHedQ8LLSEvYBT1LpllRe9LiV2vbSMiLsn/Iu8dR6HPYDwxjgXRPa8gXjBO8jYgD2QFAo9hV98uis+erujVRW9EymUvJ3cBj3ZTuG8XNkRPEEccL3683s8LmvlPI97br0QErg8m9FYvUiyarz967K7yHiGvEBRzjvLOei7rR8BPHMmAb01KkI915QLvNWiYjwSZYo9DqdwPZSeWTwoRFO9lsE/PJJ9T7xnQRS9oxcsvAEThruUjF87AywivdFxHr1GsHc8/4yVPKQ/37w3D008uZFqvCSFobxNZSE6KJkZPbqUPj2N0Ew83eIZPf09rbw0wFa9PX/qPC6KwTvbvDu8cChSPePaTD2J/FC9i7V1vXRMSr1DnRo8lKqdvTlFqr0kSgc8j2zQu7xSK7tmVC69WND/uydMOT31l4u81EI/vBqhTbwTf6O8KGmJuzOeGTz+DsA8mYSovOl28bonmgs9iUkZPMPXdzys2dA4E9APPcKRATzq2lW8RfgjvSDOLL242248AM75u+XURjvpn0G9iOdWPbJSwjwPYco8WsOOvOBuDboNEXI8Zry8vNQlN71C6KE7GOa8vNHypbtUFDO99vFpPLlvEb0tAq682WP9O1T0obwm7lO8IJWEO5wh/Ly8GeS8zsGUPWmNmTwyyLa82f6nvB4SrTyrBsO6eaXgPTSw7YhZmO87EddNvXHpw7x+IxQ8wdmoPOTUnbxY7ia7tai6O1NGzzo0h907c4R1vaIcp7y5apQ8cZNnPUkA6Tt2OEm8r/0GvQohiDwCXVc9wOdAvVU9rbz7n7s8+yQ4vPqdCj0KNCg9zElXvSPQOLsU1eA8VVjdO8vUlrvkgtA82BJePRQpOb1w2Kw6dd3nO34tTj3phmm7lRsevD0PJDz5vdm8Y0M3PfJ8MbzVy1C8tq8ePf9QuD21eES7dykJPb9Q1DsAO7o8Oh2VPJwQhzyVbLA7U8n/PO5PXrwA+Go7NZfEPOy5oTzTY8G8dFA1PatuzbvVIw06DCkpvccyUTwXiGI9F76SPKhxjr1E4DY8vJijvSeuAz0YQyQ9a7uDuKHAK7wM2Ts9ZQS7utl+MTkUAla8N6OBPYSjvLyknl+9X5iVvBvaIb1nwE692C2svJobkLwi4ZI9oA8VPT821LyGYyo8c1VBPf0BA734MQK9prcEOxkHxju+sNs8cZNLPKrOi4i99d28s16fu2zrp7vyeqU8FdCXPJ5DZj0aYd+8eB17O1tllDvz/IA9W36cPNztMLywRsk7jcq2PBos1jxdNr08h57mPBD78by9mrG8wSpaPc2dhb2/1o09gV8APZBMWrv2i548fNYUPN7Z+jxOARe9ViR9vSCWC706Ysk7vHoavYJgZr1aX4k9+ow6vapKyzvhxhk9eJhRPGNNlDtpJ4E8BvJpPRtcGr0Dizi9MZ4+O8rXCr2Madi81fBhPFm20DxNwSi9kLeWO9/Gp7159qK6ptfLPBaQyDzqW7E8YPBIurM/7TtaI9A8QG5kOiAg7Tx98Sc9ZQcBu3D5Mz2tw+a8xxaEOuZpgb1MAem8KmBmvGs0KbnNOTM84gAiPK4bFD1MA5A83F2nPKRwnzyPzWe9aS9DveKUh7yuJS29rWgRPcH+n7z8Dy+8qqjEPKNEAj0JU4O947UbvetVGj0xUKK81RX8O/DcRbx0yk88poQaPZvUzzrMNSc9qNMCPQ7tgbJ1LjI99ekfus3WrDyUBvm7eS/OPJG82LyVEBq6r5zDvGCakDz1cj86ldCMvLX51rx/YbG8p3U0PNSnBLw+KXI80mRCvEZkWTw6BdK8RdyUu36JbTzNfFU8Kgv8O7XxD7ouJuA8scrjPGTgGT2G5EM9iiKDPP3epzyF1EQ8a8RivNJsl7zXI9y8QOBXPUJ6hbxYtwy6wYgdvTvyGj08gle9uQZrvKBhMj2rNhg9DGtLOv8koztrzYq5/3wavQiyDr2Kite8jqfYu0+O4bwfi506VzSWPKNkzTx7ijk9pxICPLHXcz0mGp29wJu8O2SKtzz4Bny95O3gPGJtvTuhAEu9LM4QvHuy9TvWU2Y8Bs5OvZlOujxqfie9yGAkPIxoGT1xrVQ85ikUvXarUT1Ij7U8jRwJPW4TKrz4f4e9ffMmPXDOC722poE8CjAqvcC/Fz0pwFu99S0bPUSMnL0vTx49i3+uvImi2jxrU6a6RsSEvMIaQ72mIx29iJiPPFCCirxPjwS91RrWvPWOnT0zkt880YnXvCY0ib36qDO8TiSDvCG+C70uHEU9MBENvBIv1zzd7RI8zn8TvKzZVTxrVBy8toGgPZLFHL3XixK9sCW7u8+avzxAqjC9f0ZaPaJSX7x0juW8pyBAPCw/PT1bJ8Y8nYQnPZvGPzwatJ88kpyxvCO4aD1PPTI8F80Ou1FStr2yrFS8tktEPdB9Dr0A5jM779isO/OGljyPyww7qvW4PAAPObnAc5W9Tx/Ou5yg8rsH+lg9l3IGvSjKsDxIl6+8oA6KPW3NFD1LATC7yZg3PHgBhzzQ/yA8xwlQPGj8HryOuTk9AzRxPHH20jyQIKu7F486Pa0NVryBtrG895uPPTDJXrq2pEa9MhezPE/YmLy7xj886xOyutJh6jvM3Ho9F7UIPRhbA70X86O8MGE8vXUvGL3sQg093sQKPU0pcb2mQJe8/eynvI5A97zL+jQ87NUDPTYRH7zbPqC8nVDYvPZ9zjzZbZK79nndPIy6FokCdDo9l6Hzuyz4J7yHB+g8tPUBPaidGr1pp8I87mC6vIjwajxgC/K6U6gkPCFcsL1V7O27kKtUvflOkTrVtOu86BxqurjN+TxOboy9kfzivK4A8juLS8i7WxWnvOqN2bySgQU96zlUPWGz1byvS8E8jERRPf9rBLyVCZk8bLb3PGE5HryIMOu8AnufPOyakbxp9Fs9CMM+PFk2T713KCI8zNK8ve1qRrs2w2W97VmvPIxHaz2KeuM8hQ89POOlyzwO5bk8Ukt3vOIGmr0Yfza9TiItPezYe7wJsZe7VBFdPa4+t7xJsZO8sdDqPDKHjzzpKH89rqxAvA3Qu7x3EAu9K2RyPbpvPrzeFw+8vquwvK/b6DxcsBC9LgYGvQE9Fr2MrJg97Z0yPDbQnL0wrwW9l+hZPAZdLrwG2Eq9m/XxvPMqmjz1GbG9TCVyPF4JiLw9dgY8Wg8kPR4XzLxpz+w7t94+vYNWVD2ES9K8rUg0u+7ggrwpAIe8VoQuvT25pgeSa3S8vK28vNMPrbqknh08Dq4NPaGzXLwtC1w8PpXnPDwfkDyXhnE83dJRvCNtmz0WK0g9QJc/PdZXULxu8nI8nVbku6juI735bhq9JqxTPdSrhbtYQLs8BRCLPGHd3TsI08m8mH+QPQKlUTv75uk8DT4gvHQKNTtj0uE9FSeMPMwgMD1SO3E9vfvDPYy+dz1KTC89TKpZvcgp5rwvTWW9x74MPRa9Yz11xOc81aPEOyrtbDwsgqo86UpaPQwoOr23LVe8jPZLvFgrvryrwiW9zzCVPB/g/DuZ1e+8bP7TvGqQ9bwwWx09mLBovKFjBr1SjjG8Gn/APABSa73XgBW8CQdbPY3dXjwV7U68qNNnO+Zst7w1wX47p3kRvLvx+TxLcEu7eAGGPLPPnDwVkEu5GO5WvZWcgDykcdC8gUYJPS37XTxMfMq8XsE5OywRwTwSqCs9jdTYvHj3CD3lJSA9hpXEuyQA5b2r22W9684xvZ33jjw+3Zw9VR1uPGAxXbL9vAY86pFqOwX/m7yXXW+7JGi1PWKHrL17pRo9wZNOvcRH37zeQfM8SlmBvaDFybt8tPq6zsbjPHpo4bzadY69Cj/dvYHwWD0FBoo68IYYvQgrGLwTXi29ri+zPFQha72vd449kr2zvF1fFj24f8s7mXGLPL8lLrzKWXi9DyuwO3qHcDyUCwG8Oq41vZUV4bvyn3s9PlNDPd+HhTyvKRu97UNcOwoM/jzlj/U8EVgZvdkBG719EAI6fviovO7OJTzz6lA9BrcOvAi8IDw3hR08MnQovB6kMj1ZViw9H+CgvbVVp7xM+fo8WWI9vPRhcTyjTlQ939SdvA+ss7wHHxA8rR5wO0FPYTseZB47FdvJvFh8Br0sv8K8JGMrvassJTyTfi88C7hTu5jFLT1YEEW7dBVUvQO0kj3ZnI06fOD8PBPzaLzbkL28ygnOvIwri7uRCxu9oppRvH4bRzxCxvC8WqKyO9CPubzczHC7mOIaPGuhg71VdaQ7tQ61PH8Inry87Mq6jcj8uz8DOT2Pw6I87Fa8OxjlU7vO4k47Hn//vA478bwjOpm8aD4zvfw3lT20r2k9EbmtvK9uIj1U0Ow8SXmCPY8rCD1aFrC8TvcJPFZsErzOEr68PYpovIPB0jqmR428rCuCPWiZhD2tGzy9MJOdPES9Fr3n41C9a4P3O9qVkTxt+6c7bYIivY7zuLw0WjS9Q4ciu6tfUjiL1H89pu9LvOrMozxfZWQ8NnZivSO1orp44Vi63Hs1PNLWyzyZQx+71o8qvSkiIDw2U5c9FOaOPSbK1jwz1gU9i3LUu8xVErxDt2C8F2v+O6UEJz0xHps86PNMO0KCVL2INs07/rlcPetLnby7VaO9/QOuPVyLJzzbmp27As8BPRjLB72cZQk8KR63vMi+hLzEVmY8Kpy2vGdFa72ss5Y7Dnf1vHHGqzwogQM9QmRTPWQlrb2NHl486iSEvEOZK70jQui7T/0IvcIIj7y1fti8wWNMvQpPZL1w2nk7IrMhPRrbkIkEuRC948iSvd/5Rr1gMps9gN/euxR1B71Rxh09EDUAvJlGLb3xn1g8M9vlvLKhSr0BWii9ibdjvOZXgz1WaB49xJF0PL0HNz2qUna9QsnXPBUqEj0WQxC9kn+Lu4eMhDyg8iK7x8hVPTeZvjzt4CA83XDAPDCVrby953o9jagtu18cETtS/Pe8H7PlvCuzLLkg+0C6JsjoPOvLHLzHfDG8z6guve3y+jyqj1W815BpPJxoRD12iFC8JRT+OwUDCD2KBpW9p9iqPZngVbxgD/y8rxHeu41GUj2fzdu81p1GPbTh3Lt5c908QvdFvRyInL1jrac9xx1ZvAduCTxP79S7HNRuPZgJp7zIRrA8OA3cOpemPrsHADk9MdmHO4cwFLzGg6o9t7a6PCiyHLyT3BQ9dTfpvMp3hb2yLOi9R/HYPFQMPD0i3hK9Pgf1u8j0XLz+l069rVqMPOF4KbwjjCE8mVeAOkfMoTwAo1m9Fl/YPG5+Cz1lFAk81ckhPE7WUQlZ8T282Tk/PbwhybwLAJW9LrQvvRQBm7yDMAG9LyLQPONhbz0fVzI9OxETPR3+NzyLkyA9cs5WPKye5TwIof47FCQuPVWhqj1+Rcc8bgBNO3CPQLzzR4A90K12uwQ+szwzfyy9SrioO2qmxjv/qzK8DinpvDz4mTz55VE9oFYyvVCHyDxkjvI9hWKDPUcYtjyKli096n8fvEliLDu8viW9eiwJPT2Giz0Dzsg8AuIePMdxMzyAPhK9uZKvPVn/fr2iUdW7JCsyvcBjzzuV3i+9i6BxPZiQQL0x2OY8nqI6PUnOXj3Gmje9aR6PvTceRbxArwc8gBa4PDmkIDt5Uvk6HxWwunHaQrupRVu8O4e4vOmw/Dz8pJ88vaJBvNc9LD0Rhmc9OOqdvPTeFDzYsyA9xJvvvFr4LD0+fBG9iGibPOXz+juLQYi7OXiTvY/Zbr3hORy80MCevHFPFz3iYAq8fFYRvVCKq7woCai8OkUGPf5EGD2zNHg9PeoLvEFDV7KDfVG8ClUVPWqBqrx/AVe9bSeSPeRHsrzr5lI9GsWvvTCpTrzC9pS8rnaBvfW2pLzKqo+9ai0cPBVw3jzcgoC90ExdvScNQTwwQ7q8u5SCvKYLgT1IoTK90XeuPLAmL73J1Rg9+fWIvZlt+jwQfMk8OPqBPMfTYzyajRy9CzEAPXHHrDwL8XO8Fc9WvfO0xLxlgJg9WacwPSgSxDyb8IG9UxjYPOIaqj104B49q+tRvEdVgDpOSr486BaePQihozyRpCM9lp5DPWHgG71kXTk8ir/OPJdbjb3i9xS9xyd+PGwkrzwvlIW95iXsvMH7oztU21Y8PMpWvUsq5TmtOfq84RIuvalrBj1mukq9Ah2EPMXNuDvc3Fu8pmIlPTynvLqRsQ+9DYtEvWmm6DxlUdQ8LlGcvaSxwTtWIUC9q+cePRIoPTz2p/E88SlsPYCEPzwIACu9rFUsvOp+HL2BAfA89fSLPAB9Trgy/Xs91Ve3PKVrDDydXZK82aILvaIGT7xM9Ek9npAVPKXuH71xypi9owCXvKTyw7xwwUE9COQzvXKgB73qDBi91UrbuUsbDDxqOkq8pbM+vQl9v7zeJfY8wNeVPYdgDr09LCS9DdJOvbJDozxSVN29t65BPdsJgry1ZpC8mf8APYItNTwUiJQ8y16ZPKOeCL1UNp69B3dUPb4nF7zrmD07NtSRvFRveL2xBxo8T6tNulxTO73n7oM9sueKPByyi72XGzc9dEcavUEQgbzXpaU8vKyXPGPEMz1r5Z05gIv/PGnaMT0aE9W88doZPQGuHb0fFyc92LQsPFbLBj3wv+S8zvPHvDlHijsVv5M6kUBAPa//yr14BIs97QxTPQ8Ykby0U1w8nc1iPeQMArzbdGy8sErVu2ZepLxZNIO9xqdVPOGakr0Z+9U81xBkvHVH07rY/Oq7GvujvOD3kb1gbXa8uBGRPCmThrzq+Hi9t3lIvPCvWLpGnkO9ncq+vdBI8LxTUUg61Qm2u5CYlzskoLc7/PwQO45w7YjyYig9VAQ2vaePN73soF48zZ4IPXEZYTyDHQo83JfqvIjYJzuGfsK88J8SvRgrvryV83G9mimsvOJ8OrxaWho8/dOrvJlOdT36pTa9FGpfPfimZj22C7K8MsWAO5XJsDxXdb88MTwsPXbpv7yfgYo8HIQYPXAplzxuK1k8QUx8O5uRwLp02Ue9RLl2PCQcIj0peVm9kJjaPGtdmjoX1LA7eemxu8XpOTqwRDy7IFslvXmfGL2KIDq9T86cvOzQfj3q7VK8n7uZPXDiTr0qbQC8lsYsPY2evzyhFJs7uBgYvGDJhT1i3Ik9JdpwPTEQOjzEKk+83CeCu5w9FT1gGsW82QYxPUuKN71mN1M8ddltO0XaDr00WQw9NDwIPVuL5zrKqMG7ocOsvNNwJLtQVYk8vrfHvRMZODsucQq9k8AyPdFQPr3lnZc8SYYDvTv8+LyoupW5F2qAPAjBC71wHP285dwNPb1jqjz6v5K98S/Luzf9Bjw8vxy9s/a4vI+Vlwht7Kw8EZzzvEXLMD2qjUi9zpqjO40OtzyEonk9J2p1PIoJojzPmsI8Vt2/PfsjhD1R5oc9kV8DPZsYCT28bnK900yhvKWSPbzcITu7dIZRvdOFUb1rt406TqwMu5g+CDsZj1G9RlUSvWckOj1Dfhc9TsQWvRkDjzsYjA89ANUyO4fdjbxjOA49pbqvPWdGNz0LhIc9JgcsPX+4fjzDXo46N0UUPXHhWj3pCF094eR+PFTJJz1x00K9MmMqPZNUC71PphK81Tb0u6GDSTxAPpe8zSGWPe5spLyIPsW82LvyPP9Y8Lvbe1g9JZxDPPmoyDx3P8q8E0jiPNTkCb0lgnm8NPkuvS/8Cz3kNS480MkJvagLLTztN368WJcQvfj1rzy13Q89La5IPetRhrwtbpS9TyVovCEahj3phlw9Ko2LvApofD2uyJC9tZNFPTj+wDwIaQi8XzGSvaiiCT16FGO9uV+mPOaR+ryuWas8KC6LPYS36rwGnAw9oViPPBv/W7KXVae7UuXuPPPXczt2a6W8/JCuPbHQlb3YppI8Q/ifvGHeS73Me708JJGvPR4Umr1glom66x0OPQ/OiT1oQ4s7rPh7vAMbAz13ivy8izJUvAFHFj1XQkW8VZtuPa1f4jssVI49lLKfveoCTD0koxU9K1EIPWMkpr1dH5W9VuufPUPMKzucSfg8WaA+PY2XC72hY0k8xBsgPRFnCD0AU7K7+W6/vBCDlj1VPaC3Sc4ZvfLXCjv9EbE8mJZgPD3O2LzJ3ss7qALdPOFMkb3fhzw9/tKiPON8YjwIvIS93KDOvKZChru0OI08eIkpvYX4M7wXNkq74KsFPW3qDj41K/M7fbZsvfzorLwAlYE5ZuWYumUjjL05Cq49TNdZPV7EILxhUpu7rFlgvIRgAz3BCXA98DUKPVXTELmi9zy9s+xHPGsIGL3s3GU9SwGvvGCjh73D0YO8Wie3OyF2Yb0v+Cq9ahVYPAZhLL1DoOY7LPo3vKTSg73Keqy8MjhDvBpsDD28+O28OVanPLJ7xjxXsg67KznyvNQ3OT39mNE9NgcEvbsHK71lORU6E/8GvWZLQ7weNdo9BhRwPZNU7jtE+qM981qJPTrEXr3txNs9kquvPDhMZbyMpyC9TLu2vL1unLvNz4s9I2ntPFrMKj1Fr8Y892ATPRR/Qr2bTHa9dU+IPRF7ND3muAG9I9UzvTxwE70QRh892LmYO0yLzbw1p6o7UyySPMv/IbxHkQ29TkaZPAjw0rwgTkK6I0qCvELcxT38fcS81PHNO1sqNDw8n+28ygg1PZwmDz0U/Fu9rchGPItpKz2UMGy9rSaOOjp4KjxsU9+7D+eCvMz5i728Gl88T5CoPVVwdDjg5AC9CmqKPUmNEz0V95+8yAXrPKd8Fr3MtIe8NxiRvXv0ODtxuYg9nvgVvWslKT1Jgpi69cAfvWTtxTxbXyM9jm4qPSprC72gqe68vUnbPNCEVrzwWp48veFOvZF39zzenzI9Nox2vWeHZ70A7Js3y4NuumEjGYmhixS8qpoVPIRZTb3q28I8ZQ/GPL6iJjzt6Uw9BD6WvCjgHjyM8yg9YAEROvr8Bby55FC8+HOwvb5FHTzccRs92p/nO5yOiTzuDmy9f/sBu+QyvjwHQQc9mMigPIExhLuxAB48EJw2vZdO8zslMuk5kU4DvfgDfLtXY7a8rDqMPUv9brwtjmS98v25vdrdBj0gFIE9JSQgvUVKizxr03w8pNbZvLIZ9DysZkY9mqpPvUk9Fz1+zAy93AXkO3ZWhj1tLdU8RFbxPCYXab3Wwdm8KfhpPFJZfL1D4u284MI5PF4mDjt6NaA73Cx3vWUrGL2EXII9mH6/vEJaQrxv3R67A9jwO61sAryPz2Y906M8vHJYNr24K2I9PfzWuyCEb7xy19G8NYSqvJlbkr2YGo09cQlnPegI0LvBGIG9q9egOlJVHD2gyOo8nXomvZB0yTwUdzi8hU76vM+MNLsPs3o9ZP0PvNdJjTzHNAi9xFElvKJm9DtWJnS8EgoKvbF7jQjwqrc7ZfVsvXi3Qzy1gFy9jdhIPdR9lTvzyZk6FTNZPZ0pSb126sg8iH9/PTzKHD2Bcxk9JfajPLV/BD3oPh09zMKVvP09Kj1iT1m99SrBPQ3kS71pJXo841PxupS9eb0QHMK7jM8dPAosV70a8Jo9EUlsPJMqLD10zr096hOvvZyhID03U+c9aOIYPWx25bsxflk9rPRWvTh4yjw+soM8ZQFEPX9kgD0IUgK96A3OPCBIXDyz9nq8LBkBPeGfg71m4IM8ibDlu18oRb0WnBe94/olPfUyD724Goe9UGZ3vO97lD1A9NO7qyuMuO2Gur3j9jq8rv53Pe05ezxfrLM8eJO7vDzaUru54uA8BBFTvKlqt71/LMS8EWAIvQpu7Dw8VYE81JJOvMAXYT3Usci9RRqfvStoxriFCcK9GpwbvXc1ej3M9hC9nC98vS+BH72rhW88T7PvvHZHKj1BG/s8u9z7PCMVyztx0kK9PaMpvZUQRD0XoAU78EBnvES3RrJbeP+8qExevBKbgD0V0MM8tYavPAs0zLrl+MO8+ZHiPLxDXr2nScG9qAMbvaSbrzz9YR88ric3Pf15pLylta88E6AdvV56gLxDLO0888dIPamqlDyCxTY9Qlv9PPEUQrzOMuc9py2DPWyWDLsAir48N12fPebhfjzc9LG87tkJve/gyz2Dtc47hoTavXjUhb0P6CC8PUEdO7kLNrwbXwe9jjAdPdQl87tACA25TWLVPHxkl7wmqRq9fHAyvBmvB73wc8I8oTwrPJIl9L29Yys9Hlc1vNvX/TyPig08sBfyvJSNw7wgS8S6f1aTvfhCKzy3ojI9Sw+fPQxOOLyFy5m9m09KveoxGrx1stE8pQyJO16efDyDV4A9w1B2vEP3eDzwHmG89WG3unpjk7uGVCo9LAhAPa7Xj71imA699Xuruf8mlrysCX49xHuBvTZTAz2HKhW+guXaO/s5BL1pxgu8BDy7PY7SqD1Cino8e4OAPL7o7bzNgP+65LQyvUtLoL16BDC8eFEXO1+00zuRY489BrwYvXaeOT3ZRJY7RCPAvGA/c70NC8C8VHc8vRMio7ysW3W80JAZPWdjtruXNXw9c/i+PcC12bzW5KE9DHJzPHR7rr32Vz89VaYku3l0oD22DQ478CO4PBD5u7yIQTc81H9uvIsmMjxA5YW8iOgZPWt1Tz3LUgU881nrvN0DCT0JOEU8djVTvF/fUr1ubtm7G4cJvIpDHT3bvTg9YJUNPeAMFz1QrMw8FNPevVMmQz3+ioI80/KFPK+PYb1a0g89duwpvbbE2DtqSZi7ZsZ8PW60hrtRRCa9xWp3PThqHDySuk89gKdOutBgijylisy7QLcXOv7QVDzzukE9SqYQPaKc3zwAe9S8+ecGPR848bwg9v+5tAAevRzYcD1sT3+9QPnjuYx4WT3huEW97fjoPBp7J7uIyYE9QuwBPnzpjr1+9mO9ROfcPP4eqbz0sQS9l0OFPMotDrxiUtI9NuJLvZtur7wVju257dCTPGtAVombAhc80eU1PXwwrjwa/4+9xpkxPXzomzyHuG09ejeqvGSh3bp3CVI8qpmGvIiA/DxkHoW62F18vEzeg7vV5y88KwTsOxWzLT3YOmc9iKV7vd4ahDwBthw9S5zpuzC41jxcWS489akSvUfpzz2pQ766aAksuzIeQb3bahi9fswDPB2+mTvPPIO9jIGHPEV1qj0qBl29guwkPJom/bzyPGQ9qr80PUpe2DwEgDu9nDZkvAVhFj2VqIi92JgbPYuoFr1LfTy9wbeePHA8ybyq0Oe8anZVvR8Pp71Hf5y9VjvSu+0JMD19Q+i8NneYPOysE73aGao8VsbKO4Sri7ysMsC8DnEwvVCKFr1fooK97KK7vH1P5btaYDc9kh+HPNopR70KpCe8R1YKvav1xjyC/tQ8KvbEvBF/XzxPfwu9xW0/vTmOv71UKUa9WZ5avaK+8rxrcmg97focPOz/s7zmjEG9/jK4PGZ/DT3DOoG9N4ogvRofIrxOan+9RxIQve4d3Qi35lC83uCyvbm6YLxr8gw9GP0LvDZParwAVtO7LSmmPUviQ72p+tw8n2nUvDKp/7vYbUg9AyQRvMgkg7ynqG089CntvNqMwL2bPQS9nLYNvDC047yrgp46IPLyPKDfFT2qEbO8gXlOPFTdorx1FpA9wzSFPbzrF7011z881USfvRx+iLpLCpE9q36qvI5pvDtcLPG85if+PPKWAr0hzAQ9tYM0PEpsk7zHpDs8QAKSvBoAqTyuxk094p2uuyaLmDx0MVA8+i2fPOLXZz3ZBKQ81fYGvf1NbD3tLIc8JThXPC4UzT0Ez1s9te3pOSiuhTudFfc6QOiYu1oSjT3sLGG9reJgvbZKmDzLs6k8WPXJvD/Isb01MdQ7n5ZcvfYlAD0UwFI9wBgRvPyq2TxPGtS85UALvTBX/ru7zFC8PyGBuxXuDj2uI6c8ixUdveZWhjxjoF09LXtsvR06nbqQ48I8lTc6urBWDbwfzbC7FmG8vHdOzDs8B/c8quX8PLFvR7JI9ky98W2DPRFLHD0oQkM9EDwhvewRrr3p/VE9oTr7uyyyOz3i45u9jn7avLcud72Q/g29vmHAPTLgQL2HHFc8KOyrPWM1Tb1nMVo99PorPBX3l7yw2Pu8TOscPfAgNz3Idd49JrB3PUpDQzzMuPQ8btdSPKbBpLxnEds78gAOuoTnZTwATEy9hx/LvOQDh7xtlpW7uVehvCcXDz05To+7ygRrPR3Jl7tgKMI8DB9avSSzIT1qTkS9DP/ZPHTKL73AYBA5K/Wdue6mRL3XMyC9iDt+PSPdxjwajrk96hgXPQ9xzLwmJMu81a0QOHVDRT2rGoo9pxecO4VQBj15XjK93BAivWA23buxTOI8GCRhveVn9TyYWD+9sy7UvEstYL3+RZC9hEYUPU2uDD3eUgQ9hKS7vUEgdDytQxk9xUh5PQTWUD2IaaQ6gOBKvemDyDx59Qi+sR6Lvb8eWjxzzGg8zFyNPOZiKjykmoS9V8GAvX0PlbwyUK28P70pvXEFrbxEjFI95QYqvYVESDs3Zuq9mqI3vL3OBj2k/zk8/KF5OwlLb7009j49oafku1XItTxFfd48d0irvJZ2H70KFhw9j4iwPIEql7wcr2m7mnUGvc/77bwt8OS7alfnvBfZ0bz1lm28x0NAPeAhfj2G9xG84D5oPYfw2rys68M8+SIzPJWUpzxVt3u87iLwPJ0npr3Nqm08c3hdvbEoJL1GJE491WuOPKxat70F60G7G57Ru6Z79Dzg8i88D/ZFPFQQy7x0Xlq6jGEyvVD4OTyXVT47ok6xPADrHL3RsCi8XwnFu4yDOL25Vmq8EgGku/W3SDx6T1o9qufIO7NNUjyWeOo8JzYUPasYA70bM1q9O4mkPU/rCjwNNYs7s/MTPfEPJr0zHrS8AdTOPBGwTLyhCQE9rfDvPHBd97pLwQ09AMiXuJdVQb0P8Ha9FnCgvL4xNb1ixgC9WPlpPZZ00jzZfUU90XBKPV5t7Ly6M1S9tzi0vPhGf719E2y9dtP4PKBNBIlZrFo9WqqBvADS+rz8OuA8ga/SPEnUbTzDkxE9fwDNvOp5Zbsf82G9cPrjuiFvcLzkxh69qXMAvfJugz3ofJ68rzTYuy7cET0N2KY8yI93u1+CCz04sCi9vChXvdFSfL1e8aU7OLJVOwBlzLYI5ng9FEpfPB/DBzxy3g+9+z5GPRC6prkTTam86p9YvEEPuDzC6qA7a0s+O2KfFz20G3y9wn2oPOOXoLzcFT27gi61O2/atT3VY8I7N/XQvAIrF7xO9Cs96C6svG6fXr168zK9I3GJvc22X7z+kjG9Ex9Fu5beuzwA3ee8qXhiPEFavDspNmI9R7aXvKfSoLzjXbk8BU+6u70/yLx4+iQ9/mYdvPHjDbzgGbk71UYvvdaXiTtZDQG8qdpdPdSV67wuO6E8OzGsuv+V5LwgJga89JujPCztg7otF5y7gm9jvUi4Sz3diIE8TuWGPWsIV709h1k9zH2hPZoujz1Vx7C8aJJYvCaoy7xHdxM9KZLVOxaQGAZS6sS8sedHvC+yZ70PmJO8Gm56vS8TwLz1FRe87FBYPbIfszsgs104+fRkPYVT5rpeo5+8gIAmPVZYwDxSE0w8Gzy0vBgRCr2kYHC8/LJsPMMBBL3cEhK9Nc2dvEOtxTz8Nk68QhF6vOytlzzeAGg88hUNPRbJC7xoT/k8s0MrvUw+b73KlTi8pjgNPaz1ejzjepc9A8eHvaarpzwmy1Y8LFcBPZtrJryYgg49Yl8qPQzbsj0t4Rc9HgSYPVvaiDwPdRq9kKMGPJ4UAT2iPgK9B7iAPK1h8LsxB408OsWtvI3PIjzj/xg9h7gLvLgnMrw+E5Q8KUfHPcc42bzd7l69fTEcvPNtnT2AruS7FdPdOPiIQTxyros9+w2WvfSANL3PxMC7Kjf7vGRcMLwhG5+8lBuQPYM99TwVIok8YWscvbE1Jz23CpY8P49DPAHdeLx5YhI9SQnpvABJlD2ybuc7+rIhPadvKrxrYSm926xmPMa5Zr1NBN47Mi6GvDTOWLK32r486oiaPeYtdr363Z48FJafPUBRzDycBxa9FgUNvfxw4jy/z3G9+pIgvLhpuzwlJO+6ehMoPcwoJj2sO/o8kRxfvXBrnbpW8ic9Q/glvb3BkjqTHZU84mSUPU+3uLzL5h892e4vvdLPHT13chQ9HIWhujTegbymahS8XDFEPDUULD0R2Te92IkaPQamCDzWqhc9ptfNPGxchz0v+B08saLvPKf0QjyhVu07vkuKvMYVrbvAKa07WKsbvd6yYb1a54k7nV6HPGp2kb2lADA7kx1BPfUV5TwBpkY8yaYNO2zL3bzupyC9TMJzvPscIzwyD0o9U/iUO/W24Tod6Mk8dSJNvUFXEL3cUQG7W7CpvcGF3Tz45Y06pDXvvC+D+byw+0K9bCTgPDqIFj0FUVs9hn9AvWO9oDyNdeI8iSXpu+hgWDvZA9M7oTigvDpDIT2DpHW9wmcjvfdajLw2Owq98J8NPbZX7bxZVlY8Yu5Hves6yrzREqg6G7JCvT5MSL2r0xk9dKFOO9ljDr0edI+9HJI6PSc0W70MDb692KmcvXXFvb0AGre6t16ovLUmPD3YV2Y9ReEfvQ/bqjxMHqw8gj6CvGQnLz2nene7S0KtvAzbjTyfKno82mMYvdmwnLusyLe8qBT9PEWU+Tzj0IE81ZQVPTjLAL1/X0K9U4ZgPRozI7x77yM8fNMsPC5wGr2lKAe9MwzovV/wzr2ti0S89FX5PG92ULwmdZ+8on8UPds6/TwXmwi9YcaguxZwOL0sL0m9OgbGvD7DE73dBDI8FpWyPUYpHb3WXXm9ySAPPZwh57yDaNS7XpIKvDYYDD1CNDU8+McCvMMB27tlgA+9SMiRPYWEmbxKOTO9MkvPPT7S7bx0BU287D64uxJTpLzwTO86MLIZvV8CvDwzkIw8FVoUPYBBz7kzjTW74U2LvZbctb1LgQy9Sb0HPM46lbywSYw7fvYBPCurPzz9PRO94LovvSxwbb2Fi0S9Dq2CvSu9Lz1PgoC84CBaO2IIbomkxJY9ltmPvYN8nTscU4I86jwAveU8/bvq8Z68sbfTvKxi57ypTvS8xtONvM8RLLyuVPy7Hx9YPDtFtT2YAN48oosrPcr/bT3ioSo905CavCf5Irx38ha9XwclPADjN71wR928u0kmPVx2qjsxggs9ZcH1PWqTjTyzaGm9ydocvTPUxLyQiZK9ucQtvNZs/DzfpGS9YPevOuMuYT0xPf+8AkdfvQPxi7wbBf88+wrsvLCKJjseJrY8c7LmPLCyCj14SXm8D1cmPaJdWbyyLdA7/AG7vCN/KT3niLE8YJ1PPNAVVzwMrl09u5pGPMZZLj108Iw9uTmcuwFLezwFnq67AfXou2SPzLzzrWI9lYSmu09LeL3l/FE91jyYu33xhLzFEwA9eUr7PFMLtr16WyQ9K2eHPI0WabwMrg291CaLPZApZb1mE3W9QCopPYlwFT2iQPG6nmHxPD8/R73sDSG9NEgyPRsLJD2VWq+8EnzFPHRjVDyhO5U8hf1xvCBl8gjslqe9zrgZvT5x17z3HRS97ElIvaujd7mt8ik7PxVdvNTkzLyW6oC8FfOmuwNRVzxDZmw93fuaO7xqCD3Il6C8pg5vPIgA6LzW6I88BEIkvYlE8LzbbZa8l7MtPf8Xy7uBu0275FLMvEtrKLpDcLa87menvLEIm7u3Jvk9uVa2O6SqVb1FrT48V47fPURU1LuWNKy79F+uvDwkSLvCHmu90OdePaXb5Tyspwq8rztTPbGFjj2S1/q8WcWYPK0OIDxvR6Q8jTIKO3rIbD1rnP28Hq+OPRzJiL0osgw9M/5ZuyAe17sNnEu8XNYvvQlIBr0bhMa74+NcvP677Tz0hS+9eQ2lO0tRNT0yvH09pZFYPea/Mr2oE5891YC/OW0DhDwFXI09VOEuPc1Zjjx/zAw94WsPPItxXD3gWI07mUF2vG9+JT2sVPc8JgqJPV+m6zv6Ptc70Ki9vErbwzwMEIO8+soAPRUcNL2BFqa8LmwYPbBdDT1Vo0U9jyccvd9FV7L7JR48SuKcPCpe7rxeUwa9CMgnvYZcgjxrMHk93E+XvQkzsTxqA2M9vzCqPKqmk735zTO7piNTPc4fIj2dF6Q7wDMhPbVClD33wC687bSGuw+N1TxOTyo9ZywOPM515DyoaRs9e52dvNoCKT2cAKI9dXxWPCFXHb25pA29d+NsPJRysDufgA+9NDstPZWW5DvPeH09lXuePV02GD0Ha0O8tVU8u1UrFT3gMTK7YJ8AvXXwrry3ISW9jU6HunG3y7z9YlK8HBeCPen1n7zskIs9jtrgPKNqT7yEQoe8UnaRPGZXuDxyXaC9VZQcvFxRND16upk9T0KOPAPxdj3Tvok9ksf6uyInmD1V8M67ZlUKvbLnkLxifom9fgvZPG/yYbxGpgi9VQYGunnVZbzSlDA9p0TCvAp5LbyqqRI8O/5EvAaKFT2eJG89Gl3YvcQPU73HOC+92fTCvTDB4Lzc9d27cJwtPajKsDzWEim9a1F+u6DITzyGFke9S0POumFFUDxbVYg93f+5PORX/LwO15k8BXSOuyf54Tt63R09EDDBO+8fIr3zRlI9uqfPu5fiMT3ksB89NAfxO7PdYDxQtaE8PFN6PLbGqr06G1y9lG6CPMTXG70bek29bfpTvWUpNz0m6Ic9NIA+PdKF3jycYDU7wf6sO+SuC70Z6vk7+ygdPaO/GD3Ay+y5MBj1PF4OIzw19X48iitDPb/t7bzr25s9oClQPDwtAD3cnai8C54evaBLWDwOf127iJGaPHidtrwgZ2U8pjaXvUeJQr0hx7k5WbQqPeX7/Lr3nT29f2UPvb8SPb09Aqm9/csNPdGm/jwqXAM9k9+4uwOA+rsWETA9QXlTvGMw071Y5Ee9LP7FPVhaBj1pA4s8ZR1sPYw5gj17PGE635Qovfw/4Dz7bNM9kOmAvdOqobtVjqM8nu/1PLleCr0ot4E8J2d4PN0Py7r9oEk7SLEmPVQtcT07H4I9booJvHbuA73jQCm9GOZ5veMnBj0kYoC8eoLuvFDHg4jK4JS7ysUevISLp7wCRae8tELqu7nwpjyCLCo9HIcuPFHZ0Dzn2yy8DTmWvDReT7xnRJq8xg7RPGAN6j2nFZq9IyUxvPzdUj1LK1G7hUaUvZ93mz0Hmsu9EXREvQrzi7xfOqI9XhvuvKGy8jxBMNq81SJXvLkZjLzV2rs8q3+OOnPhhL1qLzm8Szi0PH+MWbyVnIK6BVxGu7SAtD2/jKw8YK+kvZ2OGT3wnAq74S70vG1NHL0aaC89QCkKvdGzVDziyze9UCwmPS2TlT2N8gw7ZtCDvO3bTz395FW9E1MjvD22gj2ig4c8tn+mPQuk2T3cnke80FOLvWIG0ryZcnE9v5sBPY9UFr1W+NY8YVJEPXcc+7xN5kg9jboVvR9cLb3AHoc9vOp2vCGD6jxbEyQ8u/JqPF0r5Lx7Zxy+fBQ5veiJPb3u2q49fMjbvPJvML1tOaA9/XhPvWDAD73g1Gi9GI9MPLzfdDx5arK9f14XPY30JTqhsoo8o4+tvf9nBgnzc6k6Bvb2vWy6hD2mcyE9CCcMPXUyfzw4dtg8cHwKPKlFr71t9z+9MjyJuxLQz7vnuVE9QpTCvMCoFbynGQU9Q/JaPbN6z7vPZc089rK9PNv9Ur3g9pE8wSdGvC/+q7wM5Dq9YPvwumbGa73u/CY82FWbPIwJgDxGRO28kpdaPdVTM72xr2o7x7YzPV50wjweNSU9rA8RvUQKXzx1IJg9iO3APbZulDo9/yw8c3ugOzX0FT3LTd48zcphvWPemL3kdTy9xwCTPblqez1aj5q8nuRkPGKfgjzm/yM8Ad05vVy/I70hOzW9zn4RPUd9srxIB8U8HskDvTqwgr3klzm9peU4OzCa37sOenc9v2+PvKiMlzzmhf88NbVbvXdCcjwZ2Sm8jR7SPG3Ag73cNdm8UfFKPRgOHz1AzuG8VeGhPM5+3jzA/3g9RdV0vDsbJb2hN7+9oXThPLDmLLzuRLq8PN8qunddjbzk3w29MOVovMsJVz34UAI9oynFvP6oYrI20j89B9kmvcjMOj3Jolw82eSCPMO4T7zIaTO94TTsPdNaFT3fifS9Z6SsPR26Ab0YH4+6V8gRPYCwZD0iMqw8DDuGO7cP8bziCCo89UIBu3IBJT1b/3U9eOmdPOAtET3lUY89LoYyvQ2prj3TMac7HMU8PbCDi7pRJB+9GaRYvJAOpjswsUa8CgI7PekuN7sz5LW7Oa/NPNMehDxGxcE8ns3MPOLXv7l5fmC8cd1bvCvzRTzen6S9UPVZvbPoEb12B9Y8YizDvM2FdLu1c4E7hMvPOyA+h7oOi9G8yEY1vIty7DqEEh67tvSVPEVUoj3TUSi9C/8xvDmqbDwVOVg7GUOIvZwr6DwpQyS9qM2FPZ5kzbz2sRo8fuNwvXQYrzzH8ke9tsKSPXguO714T4Y98IVVvSeOJT2WIsi8jMwKvQiP3TtR8EI8ouqQvGb/V7xt+W69qqyCvS0olj3oVQm9itP8vB8I57xWdj68HH3YvcNQyryIWSa8gE3nvIKcHz2kuJ88B/mivPAmFT0rav48S5CvPRy2ej1w3QU97FTrO1AQBjsEo6a93HoiPWgn5ry0dXE8OGnuu8xuFb11pE692uzSveNNXDz7S/G8myFKvfUK/D08dS48OclMPaxFiL3iTES9TXu5vCSMLLxoqpW7WWZ3PXbjFT04/a299N2TvOJxCz2VdUk9Yt3GPERzaTzbzVw9MtBpvbw4Bz22ie28Ep+ku4rGaD3QXjq6wESHOWAOSTz7Ptg8D6HcPEYsJr0avhk9pFf2vKgNTD3VZMc82uEWPe6yBb1KYIO8uvsyPYSvTr1iZj48DvyfPbQ9x7vkMJ+8kny6vNKC37t6gFE942ievJXYGr0PHFo90CR5PZUfczz0qS28jh7JPOY3Yr1SRbK7Z7/UOjgo1brFaNq8PBBRPc/uiDs0IqW9g5WCPcuXmLzSt8089BkwPe7Mf73l/ko9XvrgvCiqt7sMzJE7PmSAuwbkY72P06e8HlZRvWj8d7weMnA7JMIJvtLCMolcrNA7G1zIu1yE9LyUosI9A0cKvF3WD72W2Fc8PCJMvSRsgD2AVYi9Gh2zPATTdj1goQE9tAljvcQZMz3Q3wy8WRysvaZFR72wkAG80OkzvJGF2DyO6VK8t40zPZKJ+jucdhE9ntOUPBYofr0w0Jy9WNAaPWRGMj3wKMK6yXzrPNNQsL0UVlq9b/NyvPVDGD7FeEe9KK1nvJIzkLzm3/g7k5QWPBAirzplaS+8VJIXuyHcAj2IiKA86Oo9vLRJibwQId26a9O0vFSIDTwMZys8ikTvvX4Tor3quZE9HSWLPYlCirxnOUE87leLPKUKdDxkfgk9yG0kPbWxrr2pKni8akd6vbo8Xj0D5fK8YuDgvAdJ3bwY5Se9fNXhvEaxo7ujdjq99JmQvZbQkb0atgQ9LImhvN4dhLysnG69fZURPesdoLsoltG5Imw4PcbN1Txdc4+8ewRjPKgHpjyDJHY96Is7vLhHurr12qm7srGwvHpQ+TzeW4i9AdKNvbVM1Yjqc8e92aWYvUBM4rmOfn892q8SO9oA/7vjaAU7Mnt8PFdHW7yQSo888UoePM35NLzgJ4Q9uoN0PXLYMj1Wcxq9oB1qO+03VDzjqQw8yLZavGQVBb38/zk9HmdPvCzcXb0GC3G7wH+RPeWeubyCB7W9EqeWvRCh+zriMmw84D4nPehEmr0z/yA90ezbvKuo1DybqqA9vA1RPWXDfjxxodC8Sg1lPagESDxbVyM9nhvPPF9Hrru2Bky7Oztgvb52XT2m7IQ8HEb/Ono9Wj2+nWY9b6PcPN5nM72YIhs72L6tuyizArz5GFS9UHNKvXINUT3Q6sG6RAvmPb+WUb0NN1g91tC4PGxHVbzMe/S8t/WEPGU1nzxcFbK88hWAPQc0SL1IdVS9ywCAPL1an7xcUDY9lqYnPTi36ry2qiu9KW0NPMok6bwcu0u9+MFiPLgolrzABUE821bcPKV1zrwTWoe9nSkUvQjJGr1Kdmi9yT6pvW4tTL2cFq280OZsPQJprbIE3n87PRAfPKa1BD7xwtK8eJ9MvUAndbz0nDk8FFouPSQFb71Y9Mc9UiQavXYPvz2GN3y82HbUO3lo7TxeXLa9aIrAPRcBZ7vQzF69XNK+vPctYrxqmc08ALhvPKhqM723o+I8ZQ+ePMuvhT2Ueya9JPNqvTy0/rs03WO9Hw9ZPfqvUD2ArUq9e/y9PdoFR70QGss98jgyvMCut7xATMy8TBelvGZuWDx8GY46ITaSPV/7Fz2qMEo9akmpvYK/GT2URqc78ys0PVzwHDw0eTi6Lb2DPUEIEb2a7469Pq+SPTT8Cz1yqRi94rplPCaDZL1C05I9JBedvL9otT3tLI89Yk0DvcGVJr2gQhq9eJSMvJQGj7wM0iG86vVfvOIGLT0wpza8iUlCPfbagTwg4aw72q9dPAXCljvXgr27WqhxPeGs5jwgmXC7FEoJvan/rzxwVQy9aKz7PKxM5Lz6ZQG8ZdqLvBT8hr2o2t+8d1+GvTSYlDwNpgS9HV3lPOVvlD1A4yw8UG8nPaVsATy0rme9DMVhvA0SKTx+1Sg9/IhEPWuFXT15rpQ9NlgCPTpn0bwvrbE9IJ1+vfLgGL1faSw92OV/PbWwDD0aBH29ABMnPDPREr1YoLc8wE/ePHwe/L3syaO9obtlvJZ317xSMem8hGKwvOQedjtjrWu9PfsvvKEXiTwPzAQ98jNpvdQS8LphpAA7VNyuPdYJq7tUEqk7p7YgvXBYKjxcojC8jBipPGBmNLza1jI8OnnNPIiQtL2YeT69aMy+vanRJLzRkIC9ghDFO6NQJL1gRqw5yVWIPDhEAD3eH4U8FEyZPG8sqTwK5Dc95YnDvE87TLwAnwA9MOJbPGA/n7w1hhY9EEUYPX5wgjxJ+m09RnDMPbgpxjstu/K8XoBKvRNjvDxOaWo8ZCWqvKx6sLzaWUg7DNwDPUqXqTzmYBq9rcskPcrEqL2RNTE9KP+BvM1WLDwAGP84ougNveinyjy0ZFu8U7QXvD9kO71cqsY8Gp2jvfpKoog7EOg8Hv5hPYLo3bw/zII9HRfCPPZWOD173rc85XswPdpbVbx/egO9ojGQvfUB6jxY6zs7Nq/gPNL8sDxtpiK8+dCQPJ7ywT32pRy9vrkBvQrV4ztrw+C9Gubou2np/jzAc4M77UIDPQBcyDn6wRk86cOPvRtV+jw2IEM8UrbePB5JHb3AF8O8iIJ8usw0AD2eIEg78tFIPUyx4Tyx+1i9JFOTvbxH/Tyoip+8MI9DutHkRLzs9Ki7GhQWPXtSkT38GiC8OUAbPcAM4byUUnS7fcWSvfwUJTz21dq8Sm2ePEz8iTvKe7c8FKmHPPh4ej0QedU7+CSnOwxCoL3M8b48mVOSPQLrfz3AjRy9STqzPLKHVD24w+s9mld1PbSeWbsa3K68KIyPvQbeEbwYcB29zfYsPVCOFb0a8yS9lHjZOwZRub0rgwk8KZHqO8CHG7yQXHw8GLzSu3JXobx5hAO74TqHvVKkrrxdC2M8yKvgPHI5xrw84Ue9AmZMvH5FqQg/Zey8XpeBvN5iBT1KFRs9NgCWPAC/tTrMlQ69EKRzPdWVqLwXPzi8Yx2mPZm2Hb1yUYE92LLvu+l54TumGY+91rToPDQsT7yGMKm8B4LdPOcv+LwW7e27PBkQvVIHNj2FOTC9zbOGPbKdpr3qlhu8t3KpPEwZoDwqupG9cXLSPCiKI70+NxU9UoJAvVlZvDz/+oI8N0GXPXp8sD22MVE9edYJPQCFA71tGBa9mncpPOCiJ7oq8zm9wiU/PCNzODym6Ho8dnUqvSaYbL2okDc7FtpcPc2+Sz3QYRS9+NdKvfpqUr1G2uS7cpZsPFYkubwabQm94AJ5PUKlH70jm4A9oXzJvIzeXr0PZQG8SIe1vJof2LzL/AA9Ag8qO2RTNj3mJAw9vwLjuzEmYb10G928tbSqvJ5YLLzV+lo9suAhvRZ3irtq+z49EdoGPWGm7Dsl4wg9LPGivLSQ/ryQG/46QCnRvMJdFD3yWwo9EIqUOjOUTj1eSTY9wFBCvM4TebIdkhu9yHvePRBiHTs0Mw49AlUtPNt1pTx3LzG9rIeqPYBeVDtD6Jc8Ti8EPIGS1bxmCe28YKMiPUz7Lrucbxm9gA6Huv3Fwbz7gqu8Ke9XPBoGLj2hbZa7J9j4PH9mCL3wuZg90ZlvvJWIvrwUCBQ9ZqElPeqHtjxnU2i8I+LKPACyn73ak4a8FoekPR0r67z0pTo8160ZvJc4d70UAE+8DQtIvAf0Gb2f/Mm91+YjPIyNWz1J0vO7uvrYvNndI72QM5M7HI3XPBMIUDyQSKQ7cLMLPQQq1ryf9pa9TIZhPV1uBzykN5m8wAguO3cV97xIp4A9zNHUO4Ad9jndXAg9kAGBvCuuE73Qsu+8HrcuPMHTVzx6uM08QSaavOxGVD0Yov260kzNO5K3Nj00JGw8sm+vPKo+LTw4nWw7KogxPWoeZj0o2Nw8gLwnvTqnCjvWJ1O7bvb6PIz577vKKHW87EulvKQt1r02PxC8ygxwvVyIGbugeEC9hj5rPZpeej3kD4s76mlDPQHJ7TzGiSS9/gI2PHhD2btI+IM8XM87PSTtEz2W2G09msqVPNb7iL3YMYg9ur4YvbxBuLws8u882j4rvABL0jyceoa95RTLPAs/Rr2YunC81Au0OxPDA76iqay9wKUyvavPXL1bC4y9ku3dOyo7t7zC0NS9AA/dugrNh7wMBig9GsoavfJrjTw8Ope8M3fJPazFkrvy5MS89zldvQrsf7zc+Ty9AJBCN89gFDxoXXi7XR8HPH62ib2MbTu9Fx5/vSVstrzr/bK9gvfXOyZGnLzWego85uUlPZ6aZTxgbAy8FGMOPdFbKD07tQs9tFa4u/Ct6Lpi19A7YlRpPf7wA73Aulm5aiFtPcU55Tyfrbc9kyeiPYWqED2oYiS8P/SlvPHoFT32dQ88YMY8uoJWtTxoVC49XcrxPERFsTshbi69ZUhePdDgj73GACI9THCfvYsHaLwcFLA8NR6Lvfk7qjtR2S68esrBvGjKer3yezI9XsiqvXGIMoix9y49sV8GPZcbB73DrrU8KrpMPbqoKD38WkM89rHoPPYtKrybqwu9LuCDvSqkGjwI4po7Vj0GvNkjvjwzMYO80hhovARR0j3GDyY8F7dZvTmGBr3oGv29nnWQvOad3jzY3ps8HFOhPNL65LxWqU87WuU3vTJANTxEoOq792c3Pbig3bzxsyi9GMGGPQD3fT1EA5C7iS4lPYRXbz0xnoy96wmPvWQ5Grx+b9I86lA6PHtExbxTazi9yD8hPWIRBT1A8Qq9aOagO/3+IbwRDUA94LeAvXCnSjuaeuQ8+AgMPeOK2DxUpQ08OasvPLVofD2SeyU8bGdDPGFRY70ixyM8W7SxPSYpVT3Qz9O8DBUnPSxAvj2rW4w9Ue0JPTQ8bbzp4CG9hJVhvcWQwzz4Boo7roShPVJScL2gUAq9xgISPWxIl7zDIoc8qN+bvLI86byWmIs8ONNEvFbSEDzSDbc7bZSfvd/qCr0uqJa7CCVmO7V4Ar1cSzq92BMSu+0UBAicov68N0xQvcITLT17v6Q9W/cMPYb4AbxAysW6xwGPPd84TrxMGwC7BiSCPZKO8LzIYcc9Hc7UvIelFj2c0SG9qM+OPJwEb7xEHOs8IHX5PCw4Uzx9AQs8toxTvZmdFj0LbiW9H4KAPWZomr25/w+9HvHJvDsVOjwwT0C9j6zFu+u7Db2irkc87rU0vb7f3DwYhao8/eqOPegAxDyTGUA9UQk3PKJ7xLv0Aay8mlRGvElcm7xKmte8arQHvb7zr7xI9hi8u2IZvTQcT72EbZ+7FFLgPEa0Mj14cja9n08evROjubwEIZc8cqcTPe6EWDyUFTu9cz47PTA3M72u3Le73sySvD3jbr1a84W8ycESPNwIML3qp448OQsAPG3hwzzYFZk9p1AGPDDUbb3HymG9ACgXu8sY5Dx2nEQ9ZmzivJbgFTyLRxQ90GSIOe4UMT2S0ZE881OxvEDBIrqaOgy9+lLIu6pUMz00yhE9DRi8PCLhgj30/6E7KFA1vd6ygLKq8gW97zZdPetXgT2EI0M7mwy2PNK3lTyVl0W8A50DPZMd4TyLEi09LPmcPTNzI72FLpm9DnI0PZgRorx6AHy9nfgjPCgyBrzUONi7AEkpvFjhszxIjUo98EhEPVHYCr2E4Qg+vXWdvI0y37um+wM94RUyPB1wCj3ALgS6BAEVPV+PiL1gcQm8J6BFPUhVHLvIR2A8U2eiO7RVir1EfZK8m1rfvDIwBr0ecLK97hOHPClssTz3M0i87CyavI5zWr3R/TA86aAFvOHPfjyQTqo7eIRAPV7PFb1TU4+9oGMrPcCZBj1rn6a8layEvG9sB722mHQ9yKt6PICz27s84wM9AF+8uqSrmjxkOai8eNEVvJBzYz3g6kI9/t+1vN/NUjy1pVY9usMWPTTEnTyOi4Y9RGtlPPS4OLtWBxe9niQJPUox27zS2o09a79CPdKSETxnoF29P7i/PXTMiDxKxOi73RICvb4mVT28QLO98PDQvWtvqju+f1W9BTTgvCQcGT2280I9fyi5PNGPkz0LrG2990ftPB5yLTyAiYU9ViwGPSbFebwiGWk8EDxzvIhtazuAG3E99MaXvCfe9rzwY+O8HFROO6zdgT3AfHa9VeWwvLloi72TLe482yLPPYofy7xQM968VlCiPbT7pbxjARG9EE4GOjqPcjs2UrO9oDJiPfjyobuAVEk9wiuqvHe/dD1QbP68oKLXvGjxR73jXdc7mqVLPMCddT3zsWq8Oyf/PIIN0Txr+Gg8t13FvMSRGb1khIK9FuUOvWCRVzzKFFK9uwPrPM1G57vIqpQ6yKAgOzBbZLyupQI91kmLvITjsb29lVE9CeorvSEzVr1CWSm8MmsoPUgy/Lwiv+g9eK1/PDTLIDwRJxI9AwGSPU/wL7zFzFq9N94OPRmQjDyYNje9cmQBPDrxyrxH8xS9MP5xvFwnkLxUcai8cm2/ux7/r71ejiK87oJWvcEqGr1qEPI8Xl3NvahDJTt/jS09bPu4uhSg4b2w3xO6GkYzvS5FaoluoXc9EiI0vFpbFLwHvYa8AI8tPIXpnDzamMY8EMGWvGsbAL2EdT693NdHvN391T0XhSa8fH8bPT6rfLxnNbs9/FgcO4J2WD3bYIE8qcdyvTDDfTxsN3i9jHIcvRW+gD02ENM8c2XwPJkDLz1ii1W9Bop3veoAszxkoRu9fsPju9cD3rzi0su8OEQNPb8rxT2iE4a9YxtZPYCpDzmIWgY6+oVZvJrFxbuXpME8sm8svMOivryDk/G7nhUlvVsCZz24E6w9oPGfO2gOMbptUKe8WBTCvSACArlrDSA9sxwEPRCeb70MN449c6QEPKa+jrtwmds7A66rvM5ku704lJa8NsrcPG7B1jzYP5S92CsSu7nFdryDdCQ9bs67PFIbpDzgfJW6PnymvGMhOzyAl5Q8IJijO4b7KL0HRpu9rCD3PIspl710IlY77cC2vKCPsTt1+A49waocPTJ6MT2bq6m8QIIjPCGqS72EJDG8RONDvOYUF72e6Gy9dLNkvdZtjQhV70E8Hqe+vTgwjjxzI4s8E2M5PIVzjj0AFlg4WEYhvMy62jyTmhY8SvcEPh+Mlr3e7+08lIPPPGhpxLt51U69+r+tPGHSuLzcq+S82AwfPd0wz7yKFeW8t+lTPeorij2sN6Q9kKa2uQIEVL0UCV69UuZRvVbLwDxHDhI9Gg1EPZoUEL7gwqE9MNMgvc+Y1rzoWfI7XmTAPUDjIj0pE0U8RUrMOyIJwrwA0Q08pdgvPYNqhbyys0u9znVTvdm8QzxDhLc7FqDMO5jHBLzKRBO9IuhBPRo/M73OquG8zphGPahCBD2FvhM8b39hvLFNp7uAKcM7aEK+PWV6xr0jZ5A9oZcmvUrLi70Atbi883HZPFGbhL1m8aS8igfOO6iDObs3XCe8worJvLjCdLwozdY8kiDMPKKserxrkRQ9ijM7vWq+uj2q4H092H0MPWITKz1yGpU967F1vQLfEL1cT7q9YljmvBc5obyzuYu87GIVvAD/JT0CBAQ7TGeZPExkcrJkdGO9TaLKPZQYpbwO6VA9Gu8PPamDYDxdzi09gginPei4Z72yMqS80kF3PDu0o73uHYW9LioLvSkdhTtLz5u80hm5PbCwlr04fb67yR7yPJme6ztnRGK8emM2PaoPyLz0Ty09rI70PD6XAz2GkFC95/KGPZyuPruE+D+8PJNRPEuKsbyZcI+9zO2qPUo2ujv1goY9XGlLOxTsW701uDc9XGNiuxMh/7xFMYW9wPL8u9/lhLzypFW9RGZkvP8LGL10XkY8hDgvPOUbCL3dTE69W6ylPWSamjs+5Xy9aH5QPTIRxT1ce+i8MlZTPeevoL2CIc09UJXEO2tMtj04rDo8yIBvvaz8ArvWuFW9dHrFPBCHLr0mgVU92ZcpPIhHiLy7xGi8+5sJvWN6nz0VAmA6oucnPZMqgrzNIT68wlpiPLk52jwpylk9HrbxvMGiKbt+GCC9QtKTuoAsZryJgcY8dFobPZWYkzoLvB88gb57PAPZMT2yBgS9Gcy8uuvFj7mPsS49cDeJPcDDFrxKwMM8T500vH9EtzxBqSW8QCkxPW3Hurzl3dy8vWxaPF8UEj2PRXk8Sx+/OUsI5bwQutA6tY71vEFBM7yheS69P8UEvQBv6rwPqyQ7pLQKPDB2Sr0Yqcg8CJJOvTVYAL11L6Q5NXK2ubBB1DqLO3G9vwWNPKHGrzz34Lg9rx1Lvb5ukz39vDg7aR6nvGJLl7zUoQ49y6q6PLof6jxnOpM7OmwjPBWJUzye2Ho81fYGPdKHqr1jXhO9h7EuvUNebDwR4Os8x4oNPQfilbtCg4I8i51UPbTKijzoCBU8rQ+eu2UtTLq2w6c8tt3zOoG8f72oJQU9n2ODPPSnHr1UlCE9+/54PSRYVTtTc4s7oPL/PDb4jTwsC4K8t+omvVU0Bj1XEXi8/G13PbU4YL0spQw9lp7cvAwigL0MRx29FJBSPMVUEL3DmuE7xOGZvBAfY7wh3iW7br1pvWPNQrzrBJa8G3JUvWcYEL2m00W8GQSDvfwWZIlE6Rk9sLCyvKiyZbzSzoU8eWmSPFemRb0fAcm8ZSX8vGXZu7qTjS8879/QvFb+Fj3J1HC8yYSjPcXLPTys0qY7/tlIvFsLZj1uhVQ7YZ0CvJvAUTsCSmS9VjwBPTHtiLxU5Cg9LdhAPe5QxbypWg697kM7vIaeuDwg9NS7K4LhvLtArTwhSDS8RJ+MvPXr9DyVWIk8MmNLu/gzmD3PswG8n/gfPX/5sDsntUg9ceEOvSQvETz9TMM8pzCkOzhHCD3yTZk8qlC9PGERBTxHYuC8BNI6vfq5Hb1HwL+8EdpDPZSos7x/+dA84AXjPELtDT0axAu8EBJRPeCy/rqvv/I8cEWQO/VGYTkA/AW9TopevTZvaD0PBB078H1FvT9tpryM9x69BAmxu//WTz0i/kM82OJavLk477xF57K9h38CPb2ORLwDryA7TYMSvftEpTxroES4wf6/PLw3vDxYBFe9rJyJvEg1UDtVgVi9VbYGuatDpbxk5Yy8AGJHuQEyfgg93hm9lwEbPR0ueLyhgd48QvEOPcQqmTw8bL88jOc+PXUM3zxpQHE9mVlCPUU2nL2mxs+8rmUWvRYsGT2sHMC86C+LvfPFvjuyJGE81T+5PJa2D72Vg/E8QtmDvYQU5zxoNKs8z2mIPEpAb70oQ748wkTuu+UBOTswWy69LllFvQcF/jvpAT08Z52cvS/wqjxCbbM9I1uCPEf1FDztxgE9H8jAPIrTjzvjr2G9ptdwPXiNX71+wWO9MvhbvTtO5bsUmq27IEVAvPPXpry1SZi8wvOPuzY6Kr1SSsW8NTIHvSDp3rxuN4S8M/OZu0QtDz2xTJ29u0IWvbqolTtVjjy5q9nWOHUnnb3Fj/y86xdmvCOfY72MTks8SqqIPMo5mDzxz7O7aUmlu+Tuxrz/yz69IpW2vCUA2Tz1trc8YPiJu/NjejxgNCc7ncV2PDH+qT1oNvg82I87PVLuQz3dkQK9FXcxvN7u3bxDa1072EFRPeULij3zqZY9IQLtvBBrarK5Rga90aEFPVAgET3pXpw6gf+kvEAtwjybBma7/WFkPQ3LM73NptY8SjYwPUgQ/rs/Ds28NjeUOzWHib2ACEo8BpWmPEd7DD2FWEq81/sJPTjM2jxYzKM8Tp8tPb54LDxfF4o98wiGvUDgjzu/89s8nhYrPZeBjD0Fgae8GpDXPCG2Az0wHkS8885XPfmMyLxtiQu7M4ITvV8YWL3F5S48jlRYvHBqzjrXqqi930UAvRC91j1UztM848BGPGgPRb0qfsI8j1JRvCNVNb3mmM27UqE0OxpXBTwz8+y7Fys1PRiQZjtTy2C8B0vQPPGokLyvDCS82QuhPGSHgjzaX1u7TC/wvKMcRDwQyo+9xbpFPciQHTvA9iI94qdlvdca97zmZmE8SM0AvY6Kqj01HNG6wyKDPYdPDr35qOS8HDv1vMWvfjtTsck8Jd2fvH+GhbwgzZa96WvYOsk1KDvzqvY825CzPBcpuTxA/0e5c9AeuzmJ4DwE18G8HI5pPHzU7DxACfk845FSPYAh8jzq37m7kL4/PcUkkT3qtsi7aUyku8fgJr3f0dS7rkHZvDGsDD2tJ4g9mQ/Ku/jBAb2FCVK9ZZZUvQO+qLtapoG9gCcJvUZUQb2iT3i8Tb72utK7Rr0MpBs8DVCLvIGcSb2rk6Y4Op0cPFUtJLq/lHG9YsllPJsnU7zEp7I9/GI7vVPMsD3MPlo9XKmNvNfwYLzDzak8bRTWO/oVAj31kMA8NFyivAVZEzx6Z7Q7Y+R4PWiO2bs094C9AaNJvaH36ztgxZg9pm0xPPTTGjx9YQs9s96XPce0bTzA8hO96iE2vZ2MErzZpoI8PhXtvBB2Bb0JiLY7+uphPZJmQLxNSxC8JJPDPdIi8byOciE8e+b3POs8zznOdra8jz6RPMmR2DyAKBS9dExtPRD+bb35qK48mklIPFmaUb2841K9+XOHu3eCNL0zahW728d+vfCX/rxlDlY82idvvWumj7o143Q8+wuiu4FnC73WhPM7ikgSvRXWiIgeBoY9K8PTPAjwGT045Uq8wV8QPbC+BLsP7zs8HUQ3vWz6LD1BWs88vTqPvBj0rzxISsA8vMslPRcNoT3ITQ89FRpiOleKpzzKcd48NsqqvGF6HjyOCfC8a/CWPLRflryE7bU8pPmJPeQxnbwYvB69zd0qvBCW+TygRsA5gTnpO3clijwrdLi5q0S+PHwz3zxiP3e8BMyBvIvimD3zxZ+8QI7cPEmH+rxGWwk9fFgivTPVr7snzas8N+6DPdaEnbvMQ7A81slVPAw4SrtJbKA86j96vWj4fL3veHK9DTEnPX0/ybrmORy80GStu9BNp7vsGPW82liePBxit7t7gmQ9nSSKu+a7DTyr8H+9dOWOveackj2m2V+9PtajvNEIa7ywDmq9kzBLvb7QXz2gWgu7lF0ruxnxI735hU+9SYh2PUdOLT3qHAm9j6alvJH7YDsQgHA9HzfOPG2BvzxvERe8rdFyO/v0i7yGmaG9v+fpvLY6lr2CXRC9X2ffPNfwTYdJB2i9KKY3PDM4BL0d2n889CjxO+AaIT1LLhY9Z0rJPG1HWT1KeMg803X0POw5n71Nc0+7tOwRvVzufDzvZqK7ri2+vXNU8junIMK8A7kXPVI9wrznMIM8whRdvZfVtDzAWLY5e2oePQnFoL0cJ3U9akLLvDThoTtqYAS8vXbVvDq9jry6Jo+9ALbFveWRBz1CL4w9vJwiPZmIJr2mtgM9JW+XvCePHj2h6pm9iAqAPfoeR72hERe92I1nvbuZwby7qi877VEkPOiZUbyCDH88b/S5vCjpjb0L5By93TflvCLdzrzaOAI9WDaNOyqOYz2cAJO8FxcNvX+Lb72X9Xs8Tb7ouqldY70jzLy8NrQoPcyXp7xqmLC8fM0WPU5W8zzAwwa9UKhzvMxkoDsPl0c8SC1QveiYmDwAu708gx5KvX+mhT3GkZK8YeqSPMtShj1MFaM9g9K6OxYkrTwQFLe9bq34vGhtvbzU22o8/KQ1PYQobD3Rls096GLHvEwCWbJGkna8nAfEPOhcoT2ecRy8TGTevNpHojxpxBA8S+F2PSciubwPDjQ9EWjiPKo2Ob2uLn69Q7QDPcvrn7v3+Sk9QcrVPUjKDT2IyO284IBCPWD9bbw4DEk8UmAcOn0iLD24sKc9lW87vYuicjx9ijw8m34iPZPVaT18aNC78hQPPCuXgj0Muai79347PSDS8zwp2ac8G2OAvNNg4r14D+K8EJL/vN8i+zxEYX69AUhxvBEKiD0nJtc8OkfXPGmKtL05EQk9yD0Gu0yWrLzREpu7YBihu5eul7xHxXe8fWAhPaRQcT2EAXc8SoPAPAdpijzROxU83D2aO0KqHzzcQda87Mkzva/H37x9Tfc7RJekO8BZxzyzhY+76/53vcABHzsmo9K86DExPUrFGD09DgM9Ti3+vIWxnzwW4BW9yWY1vbwBpDz6STI89TkOu9UcCb3Ziom9c8O5O8TluDyj0Bm8nmXIvCsHWLzMfGu8c6afO+aW8jzbRIu9SiMlvb12nbwM/x28QQuoPGtd7rmkgQy8KmslPePsb7z1L3s6Rx+4PNoF2rz1E8y702ngulNhDrsNb7I9w8k2vaFwurwK9ri9g2PzO8vJ0bj0CKa88hFUvVNHrbwVdoS8TbY7PTK5DL0/4Aq9wbO7PJSBgTzrSKe9K33KOyMSE7w9UN29Bg/9PBiI6jsLxmo9OJ1YveCQfD3ypAA98Y1UvA8rkL1+toK6ZrBdvH4HRz2iXTA9O0eZPGcsIz04m8S7C6EgvIvK8rsqbAu9qnouvf7Ztzzb1I666trFPNo6l7s0rS09algzPWSHqDz3UcA793zbPO8BAr2kN3G7p4EavIRvB73rExK7G3GXOwL9nL0rS0+8Z5y+PYm4izyF8y+6+V6EPT3uDrwb2Aa90U6tPGZy+ju0UBE8QiqNPIbYvbyPggK9HvYePftQorzy2fa85ZCbPEsyK70jkAg8JLesvLHIUbyxrQo9AlgPvemNHD3m8c8874hJvLjjwbzcyuM7Oy8mvekv04jTLZI9hhnKPK9nfzyQnY88tZO2PLBdcT0WHAQ9Shk7vI3qB7zoXNE7daIsOmusjj2gPRW9PQYdPTbngT2IOg89iMEavQgMzjzp0Dw8brb0u2KXRzyD2wa9vWyAPODXmjulbZ47JWisPZGsibwAKAm9blvnOzMhzzzE1J+9drWpPLPufrxONoq8S/LbPGA6XT1jK8u8vKBWvRSRUD31uVy9GG+AvI8+iLyEsK+8DLsyvfagtjx9eDs90uL4PAyHkjyI6E09zdcbPTB+O71K9j67RGkqvT++Mbt10F+9FcsHPU+lizsCwTM8Yc3kOxUxYzxL3Tw98+BNPaUNab2nBBG9R7lIvTRx4DzFbH694fYxvcQn6Ty9Ihe8vzWFvdi7tzuC2Pg8FYhcvLvUCzy3tEi815F1PGhKG72mMbW8H79ePHGc9rsU2Zm8EGyOuw734bwVBF87QfRyvKaaZT0cEMg8X7jeuwff5bw2yzW9I2VNPBWxqLoLsPY6V2yPPC1YkocrTAy9eRJuvbxCxTu2pQI9O28VPDGGsjz6tUO8DwDAujCGiz1NeDy7sznxPE6OJb1SmIs8GJ2lPOgWdTxaOIm8eoCivC4gdb3WwpQ7odWhuysKQzkEX3U9t4jWvAJFkTxNgVK7yGhAPJT9BL3mPdI7cxSXvMT45jssB0c9pZYRPJwmW72Okhc9bbhpvXKvFTvQuDY9TH2HPVp6QruG5R49sKBSPZMQA71Ju+w68FsSvClBwLwpayI8mDJTuxtUy7yNpGq7LzwpvLzHJb0f2468o4CDPcDmDL0tUTW959V1PPLgUz3ViLu8L6RjvFTDjzzJ99u75/AvPWuGFr3/VBy8JcNwveAjfb25kAG8/EyhvI8BhTxHcEc8qieXvcZnAj0FO5w6APdsvV6/OTyRTEc8DMcMvSHSfzzBeSw95quQvdRHUj1YtqU8jyXnPCIdszp+K0Y9uee8vMvZhzvyk1e9RTj8uv8rgrygm968rcNUPflw3z0x+409pMXqvA02ZLKDyzE82gYmPAQ0YTxbjog8b5civVSSpztMEwM95ZZhPItvnDtShz89zr6DPH5Un7w0mQO9ZqDXu0YJPz1I6Fo8PEI/PZ95SD1ETSe93ZnWu0J6mrwjC948ANZiuDuky7sqY1U9VFdGu0o2iD3RBJC8kBPvPDlkcD0V3G06J+QHvPA9hDyahs28aqLMPFO1hzwWKIA9ll5GvK4TWLyMX/27/bYqvK6xBLwprpa8/Ac2vKIliTyHM808EyhRvJRN6b3bQlG7PsA7PTksMbzeOZ0720LeO8tv6Lzwzb66w4KBPdmUlDyKWLe8uCa9PGn3SbzjQ8g8DbKMvOt5gT3ZjHs9mTy1vSTGeTsTfQ69obGNPDdCQLynbgQ9B12ovdJtRz0kHYU7FuybPCjwkDzLD0c9aAg8PZjVnzvNG9Q7FvOqvG8aobyE0zQ8SAjrO1n34DsIhNM8aWT5PLuuh7zUSHQ86O8pPO3rNjxcbHW8RlTNvKymWj1h4Kq8qKGoO+L6Iz1szjI9lv1NPdpKcD1+m7Q8tsXHPDn/CL0EMCg9HXCWPPzlg7201Oy89lqFvCgNHzyMGZU99ghqvTw3C72Ym/i8QKVlvURLnLzNp8m9hBkHvTpbhLzamsa8+lwHPbi7ir1SS8o7EJPSvA4DdL1b1XC9sqnFPOn8JD1Wj869OuIkPWCeMDzV/rg90KSGvYvAkz0AIsO3cs/1vGEGhr0AH4e8qEu5PN53aTylGig94HWTvA8rxzwvu0w98OaXO4jj6L3o1s28GmmGvA6BJj0xUE890ZOFvGZ8djzqJJk9hgRFPbfjVj0gud+5q/pNPdYgwb3UyAM9TGuxvJJ9i73eQ5M8ZqcrPc5VYr3bA4g97nCwPdDeU7sQHDE7dC63PUYXWb12yzy8EIsrPO6OwzwaBiO8bhRnPdHt7bzsfNC8BBlSPYg27b3OaAC9ZqdlPITUVrzi9uA8eomgvAwVDz248Fg8WyTIvFT7Dz0EbeO7+JmlvPrCgL2nPaa86O44vdH1n4kAzEk9/FJjPaKLe7236189sWeaPaMNJzxIBMU88PUeO9orp7uAFJg5mDu2vP/UEz0A91+7IauVPWYbBb2eKaU9ecSwvXGeaz3ZUsu7wqF6PAS5Czz1e8W9RsMdPfMZVD0iIYo9d0T1PYRKoTsQGza9NzMkvah/tzwuaUw9wlMHvTblIDxsjFm9K2LgO3QqAz7gfx289hUOvRKdaT1L/Na88hKGO5QUBr2q9Yw86KJUvd478jzQDf66GjOlu+gY07sMJ+I9ELHbu0R19ToyTuY7MFPwvLvUNr3UQC88MTWUvOvwn7vSNsE7NFoiPUj9sDuIO8w89arPPIJypLwfIc+7svcdPKh13LpCj9S9AhlCvdC0yT3OQli9duCCvZjrijxoEY29pbWgvCNgmzvKihu92+GTOzLnob1BfQy9qWpHPHL9P70boTa84LfluWdC1Ty5M9s7eFCCPVctPD1X+Ys8EGw6vRaOObw65Vi7QLD9vMW1WL3X25C8wTZnPT4poAi8FRy9FC8avXB4x7zZCs47xuS3vOhzTTsBAPc8m1j5PEX/OT0+mGU8ZAa9POpabr0fq2+8AJo2uhdLAz1wcWC9fGvNvWa6K730+TQ9ltCDPS4YQ7231d08NKgZvOyt0DzkjlY9pbJSPBrLgr3BX3C8qwwFPRRSi7yssFU8ZyxLvLl5kL25aw893AuHvTJEvbzjyYA9QXf+PJhQwDzYPDw9MLNgPes6EruTVKq8ez0DPfxmPr1KQaC6z/OQvNj/9LwZd2Y8v0djvdxsuzyPq6u87Eo2O2kni71sHLO96YNSPRzPAr2UoR69+O9XvHRoQz1YmLq8r99EPfy8krwg6ZU8ywgTvSETB74T00q9FHBmvIyKgr0rkbO8IAtCvencE7uH2129TF74O92Taj3GpNe8sAr2vPQqj7wdvGa6LKVzvXToAT3McZI8dMDyO4MggD1VWTE91DMdvbodhDw9xxu9HfMovRmYJr1M/hO9kJ2LPfKIOT2mz4Q9g+SCvRcKUrK3QXW9Fh6mPfcfSj06iQO9EYk1vYZfAD2MYBA8Fv9xPHDf/7x6KMU8AGuBuEVnwbxaXG69zAZnPBC0jLxK7js9rq4vPXvJmDzAWBe9bwfBPEKO+zxMAMc7N/vIO5rOFTx/xpw9iJgLu2LjIzxFpZI9TOgRPKbCgDsv8y88y9uDPQ0mZD0ArBq65OVrPQAkR7kmgpo9uNmyvJy0BrsABpE8ggSFPCCmYjrGrKy9uPaGvEBG/z07ug09YgAfvCDYxb1YFrm8eKA2vKyMYb05bjK9jnuePL3Nhzury1G93q1fPcM5KT2MzzG8oiY+PQ5wkL0hevQ7+JJtPXxkhT20oeU8JuG5vMyYd7whad08Wve6vLWhL7uFthE98ZcvvYVubbxaOTc9fCvsPPc2gTzUO647QYFCvMYubzvLOoi9tqeOPPpBSL0+/aE9RCWBvT6Vq7z9+wW9thQZvRJ9uLrG2hu9f98IPQ3HJL1WlUK88CogvcCzd7rT/na9bqliu0ST3ruTMVq9F79/PZ5r8Lu+DB+94syLvQQMCTyYcNg7oIY8PY5wcjyENSo7Yn4CvbrDRr3eNms9MYQTveHkfb1Apys9t5FJPf/TXbzKTDO8kyruvP5DXb1Z54g8CqKoPCDtkL0Toum9svI+vVAJWb2hSs87EF3fPOEUqLx/WMS9+w0oO9gbIT0vFt49ew+/vfoiLz1haBy9ph1vPTAAYTx8KuA7VmfAPIh9rbztvWw8yrDYvNDIobtaA7O6QN3sPPa+vL33HwW965jRvK5gF73ySAG935lkvO+GAL1GM6y8HgeKuz9GsbywTiy9hkT/u7M66jwiTQq86xPUPDP3vLyPlRK8sFD6PDKUF72LMN28wpQgPUCwLDmafSC8HyBuPWjeTbxmlBA8C+URvKTyKTw4F2i7mN4cveLftb2Hu1q8ns1FPOIROb15MKa85bmbPV4AX73Lhj48IPYIPLi8Bbr8H547FnqJvXKWvTwq7+s8ImA7vF9jQ70ALMA79uAMvUAAHInlp1c9goybPbeYTjza//c9xIh9PaYrbTwQlZo889MmvZ8hkLwAKTW6nM40vbuI4LwQW7I8wm2DPJ0aTj3Glp08I5gIPIB8Jz30Odq7GTeJvMorhTwibly8tNXBvAhqmjzinay89GOFPWB3VLx3lJW7FrmRvMorGD2g1ds6+23BPIxGe7zYy0q78ZZVPJvMqT2U6209b04gPV1daz0QNQa9j8PXPMdOb7xoi4w8duwJPYSx87zDL2Y9Y22VPI9u5Tw8fOA8qgI7PZvTfTzMW408wlqxvCoYnrzAXWI9L12ZOwpct7yPfp88O8M1PfJmCT0Qlfk8AdYqPeSTk71rpTQ90gNEPdgbiz16mIw8B0qivKO48jzcYCk96L1bvdYoQT3kENE8H8P1vKDARjziOuQ8ShIivMiml70l1pm8LtKKPTWgx7zBASE9qcKxu400GL20uqC9rNgTPXB4rzyw/Qo9jLNuO+/+ED3QOV49DAkKvaR7gT22TN+7CvMZvTAlnghyLce89gFavdR28TtSubC7rmeTPcmCLb0TKT88aIbWO4v7H7wSBCk93im6PduQYbxCd4k9Hf6TvCMQrDw0TTY8aOE5vC6Psb3r4Yo94E+iu9CpSDvl4rC8hOBrvQwaFT2zA/w8CIWzPRnHyrxK63W8QCeMuzwSIbyKro+73INlvfYHlbwVkzs89s3uvMANlj04AbO6PIeRPQB/yjn4Sbo8KQoIvHsTM72egG68XcgsPIflS708MJK8xhMDPQ4bcbxbb5e96NSVOx4crbxxGta8aEbAvPxJ6LzcvmW85O1ouya1hLw+Nu+7Ry9jPfQZhD2b+2m9EBQYvWXEirzULII7kIaZvFY8fbzQni88Puw/vPqknb2J4ZI8hAv0vP5rqbw+tNo6CrRNvX+xgDtmV0i9MLnDvJ4pAT2vPgA9i8fZvKEEwb01JJq86mBgPNcNlT1COus8/BHfvPG9Nj3kTtK70j0rPXSesz2FuXo9qjCHO2NLDD4/Vbi8RcTevDLtTbLBOou8HinrPFWvYj2EuGm9aN/avKcdrzwshqS7MT36PBoQ6TzFs189CCJ3PADOBb0IY508TtpRPdiOjLsKlUa94MafO9wzuTwUFhW8hF0FvdqKZT3jwDA9FIduPUqZBb2E98U9AIK7PHDtZTtyWie9iOW5u7V0Qz2obei8fiK/PAZ6cL2TMva7bGqhPZTXnj2r95Q8XXF4u9bvn72N5UU9yxQ9vRyGbr1IGJa9PF61PDbliD1bPw+9NdvRvBcI5L1mC+A8QIj1PGaGVL1Z4qW8pPnyPEgyzzzMp7e85oROvHZZMz1tPAm9Ep8wPUU2QL1TWnS869eRvCBAM7uKSCc9SGT6vFc6oD31l928yb8sPcgGNDvwLaY7ncsVvD40KD2bk/U8rxldPIwXLT0Zfms9th2tPb372TzLrnu9kNu3PFWkybxXKRs9ZYxcvKu6BrqGf3S9voEzPW5+vzzVbMC8fyqBPGS3Az3QW7a9mQ1uvfRhVLo6lhS9yVlwO3tsljw/YLE8Wf5oPFRonjyQ2nQ88Q5rvFgqqzw2Sg09N0N/O1TogjwRrd68pB7kO6LOJzw8jiw9wisvve8+Z72IbjM8ypR4PFxPHj3d0em9o1nyOtmuML2b21a8a8ntPLH+Ar3RcjS8z79+POaM8rw2ag298WwJPbAocjpVdbO9y3ApPNXmKz2kcOk82gPeuhtBxzwwKuC7mrPbuy6pfbyBf4g78Os0PJKv5DwfK3e8aVAbPP1qy7yQJuK8KbpYPERaSr0uVBO9cYGivcWZ3zwY2XA8KSR1PYXfHLzjv0k8wpCfPJudHLySHBm9gNm8PEScE72ggOM8dX1ou79MqDwwg4O7RLlGPSzpVr0qVME9auKGPSreBjzXszQ9PpeFO7DSpLwrhnC8Gm7SO5G3EDz73pC8nFshPZ3h57ytoZi741OsvFXREb1sHtO841UuvBfwq71pX1I8WYtKvVjf67xlJYi8jI4xvU5KHzyVIY08QdBwu1AKxLx9YgO7NRokvGgJbYlBPvg7C5jgvLIwB7wZ30U9gKf1OtNqfTsN9FK9zzRNvScC0bxk2ya9pze2vNwYmjx+rxQ9h9LqPJ6ERzwK8Ek9A6zdPAA5kz2xB6c7V4wtOwscj7w7oYa9088RPfFj3jwLECE8L80UPdUmWzqQahu9wXmqvHO8vDsVuhQ7AZ6wvISpnTxsCs68NWW/PEqNjT1+8Su8m0MFPTiiaDyAK2I8MzS4vBskxLzk0349DyzLPD0ZXzxtzxw9MUhxPM5UAj07sWI9738mPFvIn7wnUrI8fvVvvWNaqjz1Eas80qilPEZixLx0VQk8AoQ8POQebrwCOB89szgXPe6sob1pSN27BM0OPMw4bTzj1Aa9TakzPM5dozyfK7Q80M5JOzDDXLw6L8S8n58LvVifIDwTqGy8ZdOFu2YXx7yAvVm91aa8OeBEGbtXt7a8C9d3u7Q3Jb26Kae8rQw5PU3geDzNw7q8xysxOxs0KLxierg7PdcoPeCoGL1H2hi9AU8dPMUFCwl3evu8nWIYuyfm1zzSd6o8Na2ZvJkzWT17qic9+WBJvNDhiDzIEVO8YOk4PRTfF70vYRC9DUzQvKigHb0om2C9ECoRPAi6abyDIXG9CLwPPUT17Lxq5rC8sBwUuxPsCz0mPZo8H5aEPYjnXrysVq69OGCjvaSqe7zw2AM9pbc5vM6Ucb04hq08yTSMPBVgijztArw8UyLYPGcA4zu5eJc7n0JmOpivzDzUCHi7087qPFVhWLcLg669Ek8rvcwNnDzG/gQ9kBMFPUMPtbyXcuW8rQUFvYpuSb2vrPi8qdmYutf0kLxhuvo8zsUZvI9o8DzGBUi9suqjPLXxdL1qxcM8AqaRvIXDkL2xUFW9Q3P+uyQSJDxbWhc9Z+ZjuxnkFzztncs8h2TJuyo4TT2QzYg8oX8IvIC/Lj2regY9OTsGvVxRPT3blHs9/6hoPdkSlz2nI048bCxmvAjLMTvcE6y98onYvLsxEL0bja88o/ArPEeJZD2L/ig9YNQwPJ7HUrK6iPi8sNnePOk5/zw0M5M8vv5fvA+irDynza87jy4xPNlQPL30jR29PstFPHDgmb1EiGu9iZvWvIUlwDyuIaK8e/REPaZK9bqmYV68ReAtvc9hFrxQF0I7SHfXPKU4lTyVHuA8qPYPPfSk1rwIdQ098GoBuzmB6LtkHZo87mSHPNUcNzy+7DW8oqa7PfnFV7yCTbg9nSgDvJdXg71TReM7hX09PLcFwjznqhy9rRdoO6lcBz3i56G8WmhlPd9vsrzusky7Wp95vL74rjz5IGO90+UrPU2hsTsmdg69l+TEvAMUxT0+Emq8I+kpPcuHRjuNe4A9E2y2PF40BD3E71W8XhLBvIrKqDxR27a85xoJPHt0WL1SVkQ9+tJHPNcE0zt7a4E8URhUPdnTaz1cSrI81lOfPDFWxzzyWTq9p6KivF4zEr3gmGq9W88XO9T2QjwLuUW9QIuBPaO+2Tyicm28Ebp6Os5sXzzr79i8pVaNvCl03Tu+sbK9tgtGPdYTq7w+qhE9wXCovLscgDw+wBw9HDEePRWJ2zp+9s48KosDPXj1TLziqIW96/e2uxi9WT3pN4E7almnvFs5H7rwGGI7qBxiPahQFT2GseC8XdPZvC83o72AqVg5T3Q9PQ5QxjxVjH08NjJMPMXRo7z6h728Fg2JvQNsMj1tUbC9HmTtPBQdmT1B9SK9K/O7vBSHhzs8h6i8ICCWPegdXL0DOhW8mmuFvKYGkT0ehRW9cLmsvIVTCz1knbI7ftMGPe5pZb2KuCO9xbKTvHcHCz3QUwQ9QWYUvY1JXz3EsOQ8dswdvd/2ljz1Ksy4VVANvfAta7z/pxk9JCrdPPlXUbzDsmY9rbemPJ+mqL3zwkU9+74WPhQICDzGTt684NgOPU0BWLwCuBO96qiNvQxrEr2U2V+8L7gMvG4tlrxagIM8BrKSvYfwJ71DHB69Gz9RPbTt9TrNi7I8Tg6iuwMAOT04mxM9x/FDPKbgnTzy5mG9Kx8oPX2LZb2lsqO8MlwWPXWwr4mzjlw8mb2qvGSpiLxCz6w955S0PGwNEz0Y5Gg6SdIVPZh/LL0KSOA8kAGkvBeiZrwytXW9aERwPMzfdTzgpqm73ctEuyLtDj2fB8S9DnUVvf5zi7zCAPs79jPnPHU9urzYc/+8+7vCPFcSerxHkVC9cDH0uuR4MDy/UGI8pwOXu480Q701LZa9mXHVvGn3U7y5GeI8lJvsvDQugzzmjWK9Z0qmvS592DzYB5w7VwkDvUclQT0zsmM7RgtTPSufGLpV9TA9R4adPALkhbwkfv68iuMIPaAoPDt44628YVaTOq6E6rxIRbs8NztFvdqTo7yTrY49izW+PbFoIb07GaE8oxWavTdQdLxFWpk719UjvFoJgT0jWEW9StqSvVvJ67z+NkE9GSlNPHy11TyJEUU9JyJpu8DJ/Lkr4fW85RahvJTx9rxAFMK66FurvECCFjwooEm8nQj1PDxhhTx01oy8JfQzutLmwLyUZQY7kFRSPLLNFD38ADs9nrkdPfbtAgl8pJE8VP4MvF4FtLzoMlq8rnznPKSomrzRc7q7CJI1vNctEL0mRw49FIkVvcOqFbx8l2s8LTTQvJMb9TwK4TO9MkaWPZAzRzoBNSs89DD1PAj5ery/wly9TpNQvZHQyryhjTo9F9YcPVWGEj1CoLs8ECGUvbjYozxxjHE8QuLUvDABdD1yMQg9YluPvfucHzwFEDk8/7AtvaYqIjwKZxA91Kh2PQEUSb08m1899SBxPe4Z5TvJtne9iZ0xPKcYDT0pol884WrrvHuyhb1/mNc7c6tAPPjNl70a4Ou8U90dvCNdbjvXUF47j+OqvIUxJDoGnJq8fOE2PRKaH7x84T48a38ZvCxsmr1SrI+9taPrPM1s8Lok2D+9lXxOvb6tCj2hN9+8LteHvKtGY7tVL8u8TyRovIg6Tb2cNyC8HyoBvWLwub2jLTE8bKkYvUaQsDzkHF09tmklvHx4IT1mfIm9COV+ugcNaDwnS+48xVuIPU8btD0uxFo95xMDvUYOfLKLdAq9AboEPSteLz3fVEE8Ork4PRHPaj3tU7Q8GdBMPJawB70MY0+8pRxOPMi5Tzzh20A9T9DFPCvwlLy96pW7nidyPeJggLwQaAe9TJEVPV+UH7y5Yk08aT8WvQWul71wu9u8VH9dPGveejm994U9r2y9uhUXDD0OL2Q8QxiTPVyhG73d7ZC8lcQZvdFXeT3YrsI98twKPBrcyrqh6E+9oBdkPZLGEz3s06s8/magPDVZHr3TAKQ7WtM8vPrrFb1QEkK7QvIVvWQwAT0zN9q8/jAaPdlPdrznaEM8XaiBvFe/hTzd6tQ6mo6HvbMvhTwAss08XTOcPFBONDrOlDc9FyEFvdlCJ71ewo+749LgPLPzjj3DpCs8Y7mKvaeg8Dvznbc8puQtPYqwyTzpT4o7u8Uku9EGG7xVZ/253JTrvIDwt7x7npI9wMMMvSCHmbwJLqS9WBqVumAnrbxKn3y8nEN/PAsEgLwibKk8FyAkvZt75TyRb5a9wzcCvQnArTsN8pY8U1QCPS8x9Ty2y+q8LfBGPeGLFj1z6eu8FD33O3NYjLx1M1K9MeM8uzWnsjyX4UQ95avJvLDmirwfoaa8+OtOOuzgkTvqB5u914MkvSfwfLwQgNo8RBotPY35rb1+adS8dUjJO4nFMr3jYAO9keuWu3VbZ7yxN+q91hdQPDReJj1eppM9RCQlvW0E1T2Auhk9mpB4vcJmTr2YiVU855EnPYeVwzwHKvE80WHrvLRPLD3BUng6bnV5PcU6o7uGVR+9pSmXvcK6ebugfLw89dTYuXSZFLwJLiu8sBN1PdW4Jbut0LW889kVPPO6rzzNEWE8EZ5tu6u2Fr17jem7ACsxPekKKr1jRUm71N7hPa2ZkrwsBZ88cgKUPVI9sTwpaom8itKNO+E44DyollI7pmoTPQkt0bsbgaK8Ww8WPLTvPbyyq4i9TSK3PCpqXr3EK7S8IJ4fvTBNhDt5HUO8MnZRvSMWqzwTMZk8fc8ivKtiRb3MVL2871dbvXKmq4iLXEU9n9HaPO7VED0sNMG8SpIGPSuK0zhTm/86vKOlvMa6Kr14FYE8BW+rvJsBqT3NN+u8+jD3PJYdvj3BXxI9x4XcvDDWYT0vOoE94lItPIEnhDwQCUO9nYSAPK/6fDyTqTs8CduWPFtxBLyJ26O9fplDPBmC3Twu5pa7gRpYPdHFJby+2NQ7VYONuuqzST06jn291DowvSzo7zz+nBW9RW6EPGxZhzvVSRs9h4/bO5aQ6TsScT+8X5ucPBvg2jt8zSk9CUeSvB9o7jy1Qr47W1favf/aqrxFBiG8XkNSPccmwzoDf5M79Y/IPN60Kz09QwC99JEvPQYFqrwuuL68NQoTvcwXErup65m9kBRrvRY9YT39lOA7u8A3verkBbuV3C48pdqxvJtYdTrQ6iY9f1LzO8jv/rwPxe68ed2XPINJmbxt1wO9gA4bvE6QoDscGm09cMB9PGMFdjuKW8A8Mh4zPKnPNLyAW7+95EOPu83A87ywHji9qzINvei2XQiwBMq9NkmIvcaU/bx7DzI9JNhEPZ317Lpr1Um6ePHvPBYKCj20GL08eA0QPTYZOr01XXs918yWPJbxzzzifWa92agAvemCEL0WN0q9IopJPKDEcL0by7w8U+ZKvIpIsDwvTTQ9dvz2PHCepr3D1Qs9na/svH2HzDyrORK9UdAvvPbk1r17e3m8eLaDvbHSOLxregM9A5rjPOdrxTwm8qU8obC2PFfYmDuAWVw6mgEUPdWinbzJ/KG8vqFKvUG8VDzmlVE8CnMuvL3JRDyDIXs8gSkSPYWzT72EwRg99NS7OxOjAzuZizm8Uw9NvBpECD1MTTG9CNWqu6URh70N2vI8xDwVPIdMxrwfZzM71zMfPHGKQr1mI3s7MflJPczVIbwqKi68YKAzumpXArxKVsm76E68vDBlMz16d4Y8qDgZveFQKD0PmiO8J/11PRmxKz3mHYE9qMruu/YpCj3yaqC9DbSdO/ZEejxuYk+9pgA1PYbYkD1VeK89g48zu1pFX7K6wOu8hlDSPHJivD3L8s47EM4bvSBpkDxM0qY8DYsHPQBg3rueWao9wmH5PEC3GzxCnKG8VT32O2/Clzrq05c8Nl62PRhXerwnj/S85WBKvEXC17pqamE94p9juulDBT0yPJU9X6jivBMkGD33wIE78RyKPLu8dzzUt3i8g5VLugQMlz0JZwS98CqiPVR2dLwUy+w7sgicPISqqr2l0NA6s8cvvJqUkDxOEeq88/S2vGkntDtp2BY8AI57OjplxL0q5OU8l0FSPSrXtLtfDlK8MycsPUkxZrwLvjK8vsq7Pb+LpjwyeO47EjosPWv5ujyNfUM9DVaGvVZiVT2lGao8ed7svSoQ+DwO/ta8AfXbPLgAITzPE7G823RKO1fuqz0mI+u8LW8dvF0v9bzk7h89LRK5PEuJ67sUqa08uRNMPLRZQDzS/qg6fk42PQef2Ly8dII9KbjMPBoAIbwlnyS6jjImO3kq2jv3etq8mLk/ve3MqzrsiyE7ScY2vf70PT1zD3u8OTIrvNXxZb2IonY9hccWPXblSr03taQ89TPpPL1g0rwB2Lw8IJCZvVxE+7wvZx4837SSPD5/D73COwS92w/pvNQsGD3lM969da50unzxLLzbSKa7c5SjPW0G+Duslf08HSxRPN1sS726wHS9+itVPQB6n7gb4E29DlM9PYpJeTxIt0E9wGAAvHqJLT2OCWM9ycTNvSvkEb59or287x9UPaIIaryZsrU8gw+NvXPAfzy9mE47nz5pOwSXTr1VTSS9oOo5vLSpUjz8FHI9kaDvvM4rGj1CDDU9JXotPWHX8jznI1Y8eOfCPAaNtr0V+Cs9R7wMvH1G6LvGLE09j+xNvJjUJr3vi7U7Uc+YPbHHCjyeeQ69v8UVPHxhcLodr2A7q620u6WgKL1VJlG9Rh4nPXFXSTyV4ym9VRVduoo8mL3el4e8oBC6vORH5TvqKMU7SYYQvc9UWz0jb3Y8nYIzPFDmnzxw6L48QPkAO7oYibzRN4y7c3u+POgIvYlmd7M8Yp1evNDXkzsDGUw9grktPWbi3rw0IDI9DZOrvJYaIr1sum+9N2j1O0nDvD3EtMe82RSyPJ4kR73NGbW8Ur3lvNmfaD1NJjY8iKPnvMgbBL1snFw8G2IgPEiN4DwfgFM9ZUEgPThcKL0Sww07OH7wvPNYObwtMtU8zz6BvI2E67toIei8IRkgO6cLkDyIBpy91gXruxy3vrzfiwi9sNcNvb8K+jvh5QY8W5DBuvZODDzYxSk80ujOvL1JC7veI5c9LfJUPM6ymLxieKM8kG7uOvzM1bu7gho9pJW8vJX/mjj6TxU87c3QO6o4xLzo9BE9d/9DPDcMaDxtyFu713AOvbcfozwuFQm9HrDxPOSgzDyy9Yc8V77zvHkNGT1h63e8SlIJPKMAtLztscu8vmCtPOdTh70sW3q9fUlOu0mTKLyZrfm7xLpBvIqkLj1rLeS8IpQ0PEwmrjt/BAk8nWnfPHWoobzpjOC8peHUvMV7Zr2McQW9//xROo6y1giKr8Q8OXKTvXzlqbuAHvg8v2lMvX01pzwrtIE8wH+jPS2jUT2SDMc88HEKvCG7WTusyYs9vTHWPBUxETzClAU8TRaJvbLwory89po8tDHuu1wUdL0qNOM7VJOTO+mzC7zrbc274ombuwPKhLvsDYS9YQIKvRCfW73Si8Q8ixMVvPefhr1W4RU9TwYWvMRHdLvPgjU9oDRGPe4+YbsppOW82nmlPdXjl7oApTU8ZrBDPADqM73Hs8O8ViscvYAxZz2X4WC8oqUJvYTetzx84hy9FdbOPKnDpb1NPym9TjOQvHWuNzyNV4I6yD5yPBFlj7seDea8PVpcPPyEQb0Ml649iZ2vveIdUb3DG+y97RK4vIczSrvZ3IY8EPqxPKJ0czylWim7Iz96vK6FNz31JxE79lsRPMhJIbslbOO8kH0DPE49Bz27oto8ROr1PN99pD0EsRC8Rap+vONxGT0M5xo9XXM/vAeGJ7wG+Hy9hJEmPauwIb2LyGA9kNHAvJXIYrJodBc74K1UPS+C9Dy42ME7qhhTvVlPcT36plY7DE3FOztFuLy+YWc9koXcPHw8mrs1M6a8R/09vGD+l7xWHJU9pJMBPRA7FT0jyHm8Q8+nPMCDxbqiK/E7LmqiPKCgp7tkHpw9/kJ0PMngSz1pzKA9Nq1KOyDIt70VvPe8aMwgPedmjDsPJZK9CpSPPSreJz0ga6M80DX9vLQsCTxVXAI9QD6xvKWDWDzR9hC8QyEEvIjxNj2xQxs9wu1OvOgAsryTaVM7rKevvLJcDb3ee8a8CyNTuzMT3zzs8Bm98FoYPQNe6rydq7e8n5IiPVvRi72aVBY9YkAJPm7bhD3fPfY8/6QmvSEtgbzmo+47MePgPM0r1ztC/MK8r0C9PGjzJT286MC9JkRVvCBoDL25wRg8vdyFPOc4FLyGyXa8LMAYPdfvBr01xOm7KDNYPJtOrL0TwwU9NuszvQpQhjwBfZa8q7l6utU+eDwMel09UuXBPBX9cbrtWYq6zgjtu2GYi7stn5g7sF9COxXGqL0az5s81YMIPB6WO7zfsC291G34PG2CiruN8eQ7O2sBvRcR37yz51s9Tz4KPcA+Jb1R3BC9z+Z2PV4JB72h46q94kEsvBGEEr1TD128ZogFPAAH3zyEk5U9825wvAmYODxWJd+9JBEoPZ74Nb3ar9i8/TfLPNooNT0C2TG8YKOSPNYhmj1azTk9RHkbvaVM/704riq8zw+IPAw+CT2+8ZQ8XA29vQHR2DzUl4K8Wv+pPESO+jyQg169NDhQva7PP7v4Jok94VLfOlUXFzztLLI7UC0pPSuJ2rw+UjA8vUSCPSjrtLxj/QM9ih8PPLYfnLzmC0U92bmYvN7XUL3vjKi8rX9ePR17jDwHf4e9y6oruwuQq7wLRQC6mhNfvHHasTwbBFS8OsGfPcvfwbwrmpe8A8QOvJCja72c3z+8LE4MPAIQjLzs7/Q7o9mTu7PtSjx2xO08Y6IuOy0bVbznl168OLQuPOsNezy8SBs7lWYpvAfMk4m3A5E7sM7SvLJnLbz2zk49X0wlPR/eDr2F5hw9wVb/vA63Vb3NTxE9UurFPFAqQT3zCua8LtoyPQ3MqbwkZWW9vKq4u0DgwjxGd+U8q7kcvSAUUTztJXE8wH3yPKjVnbqs6h49P22BPK1mjbze9Qk9rgEsPZ1mYLwr3AI8e0AVuv8sML2yljM8WPgZPfmPpjvbcQK9fV5YvMfZYrxITIu9zO4EvSb0qTswbbA8Z41CvasEtTmoayg95SuqPCtW5rcENjI9FSvqPDRyb7wcO2W9p1QLO3/29zwh8h+8ZqdiPa7KCTztKPe8uCfEPHCkYr2hcWk9w3zrPFPL0TzO6qs8sNxCvQihNz037h28EzxuPPKsOT13niw8DaMIvc2CzzxCUxE9OBecu4XPH72mqvc81hwyvGqwDb3kqwC9Dj+JuzKZG71KcZe8HvqZvEXNSTtHhVs7eSDFu0PD6ztMSDw8IhahPABj2jyjkKS9oNwXvZb4LzyNyzG8rp+OvDt/yAiwOYa852r8PDCxLDr61OY8tYG4vJnWjDzUyku9OxjMPDXrlD3nTFu8d9qCvUBfzjvfrtM98V1OPFsGZLx+nVo9QgqIvAs8wDyg8/K7vSs0vU/xZr1rgm892Lo6vRxUFr0EHu+8FnW0vFD2Az1MwH+8vp4Qvfjfzrx+B6W6jR7sult+ibyM/zs973twvGhZBTypOlE9THd0vBm/ijw180E8lrMoPZQduTxSU7S8SLv0vMoF57wYO728nG16vF4mXD0nr5I78dJjvOglIjuq4ru82QMIO2aZnL2Oyh+9TQvMO3jD+Dz7rxw6gBHlPHgCc7uUU4e9e/xkvQHturxmMD09Md6zvVaFkrxvvNC9HvCFPD4yrjw1K8Y55d84vQE5uT38j5A99MlQvHPIMjz69E69NJxwvDQodTzl1O+8SIUUO9S0DT2QVB878jJRvO3yWz18lv285DACPT2mpz0/YR08TSq6PGJO3rxvDYS9MKpwPV2ZnjlChhA9uWcTvbBBY7JYENI7S01hPE77lT0tf+27+xtBuwAxnz1e3Q28tPeCvBj17byUHQI9VgXsPOaObTt7kwe8J/M1PGJetby/q6g9F6iIOsz0CT3Mj5i81MMWPb4bVj2J5bW8rDeZPOKzJT2/Bpc9OQx4vGop+Dyu/iA9uf76OrrEvrw9TLe8gGZbPJ6Tg7woSgO9BJ0EPSukiblqk0A9790Bvaech7xXYu88nvYKvZAGWD2bX8a83lUevAnVoLzPLj49FDGHu7UIWr11GPO8BhzGPCLgujwHXge9lIK9vDyPvjyapD49m67JPPNucbzliAQ8rUawPOTcjbsOE4k8ewPVPcCJxLvPz4u8d2guvc2unryrjo+70z7FPELiF73GM9e8ZszdPL5ngT08u7S9vX+5PCV9/rxus3k85oqXPIhPezx7cwC9jrq0POqVwruoICG9FIwJPVOqg71BaC27DCVGvfEatjx39c+8PBLuOw6KRz3VrhI9SSRLPP5Sxzwz/Mq8bRmuOnst1bucFE49Y3lJuoCiQb0lS6k8TtdXPYfaO72eyY69EIL5PGTwq7wGw4M7oCaIvC7Xnrzm4hw9X3CbPG5yD7wdCJ06GUJrPZCXPL0ti2+9ApyfvGbH5LzwSAW9NYlcPPrS0jyJAUw9ETSUvFrR0DuhQPO9VxD3PKtmlbyMKcG8QMqiPPTE3zzTto+8pAGIPJ55jz07QK09BLECvVYKCr4U+wy7zdaUPCj3jD1d87g8/rvXvYhXyjzHTIy8ZRgjPIo/jzwtskW9mxBGvXd4ILyuSqE9+IcLvYrheDzDn5I87jaNPeETKDwK/UQ8QwR9Pe7HvLyZ/wM9Cx8HPfRv8TvzpZw9/m8evDjEV73UM0u7DQunPWRD6zyPDq69xdD6OxAn1rzazJO8jEY6vADRybjqIIy8VOAGPWRElztOkoe7+FkbvTmXi72EYc0712SwPMQubrzRtPE8W0cYPGujTz0IUB89gFwfPcyMJ7xOXLq8DinmOz4c2TzVcmM8oQWvvKDLjons5zU8j+bJPPp1nryol+Y9ekoxPalBabyy21M9AyqcvFdvc70Look9YJVFPWkgjz1IWUK9a8lVPRUnVjtOKbK9AN7ovB2UNTxKpHk8C8YzvStAEb23OKQ8I1WCPKy3Czwlcjo9NQfGPLIULL1XvJ488sMIPeB1ML11cNW8givHvAtjIr2fyK28G6YWPQBBITpH0O472nU9vRgS6jvHuMG960eHvXA0AD1vuxA760pPvQD6dTixRzo9l45mPHEPijynyxU9pMvaPHMFTL0Tpme9gLi9PBzkNj1QVeW8BVvaPDNQLbsxD128gYqPPMLeCL3VKSE9zrmXPSOyGrys4488LzxgvZyUCT2jgPW7wtQoPGW8ZD1oIBm6kTFxveLK8jw/Mjs9TZIuuwatyLyW4D49qrvRvOnbXL0IcdC8WPbUO/9oGr0pAR88tAsDvEVp4jw3Kna8NRP1ulu7IztNxFu7tTISOnMGGDwW6Qy9+cvVvFu2lDyEe5072lTZO6zAvwi3zbs6xLVxPMMcOzp5oZA8Xg/EOyWWMjsNUgC993/XPPGEkz3qMim9Y0ynvU0pPDzYbMI9Wy5hOzneAbwBeYI7/19+O931uDzc8DM8wnltvREI2rx2AT09C/O1vb9kmL1tqVi9y1HPOdk6KT3lNCm8vX9uvSsDGjuIXgY9sWB9vE4dNz26nA49DSojvehy6Txn0ic9Fy6lPCVrzzvjohG9IBZtPVQOPbzxviw870QAvQFPPr0tOuu8iEYavAp2sT3N6/27RFtxvFJdtbxs+Ie86CiaPExO272hlge91h6OvGrd2zwieKS8jJOwPJWzlbsz7Vm9hWOuvNQ4Ob2SwJc9P2favXFzFL3+O8C9CW4SPFObhjyaYKe8ERlSvdIQiz1N/oE9foYjvfaOjDyBJyG9Y03WvFhfoDy61je81+KePMZJmruqMLw8PNbVvJCkmj1hKnC8fmddPT3shT3VURq8BMAMPJXpuLyqNn69Oy+FPdnRFT2IRlk98DRKvcaparK1k5a821OGu3V5jDzjdBk83+vvvB/FsD1Aj5e55MnxvEXl87yD/A09tSSePNq89ztmCGe8d3WKPDWdd7yMqKY9yemUPMlguDxE5su87g4MPXgXSz0cKeC7hrvCu8oCEz15Yhs90X1lvH4PED3ROcw83BqZPPJSpLwTHs674QDoPNmajjw5gQ+9Z7OiPDRacLyM6qI8+egAvSfkNLw1Fjq70BAbvVDqFj1pO4u7DIK+vFbYVL3OgQ49/8cjvUKGUb1WWlK8pzS1OzGhWTwtBWi8I8o8vfsThbzXdC89ZF94PfvHkrz/QgU9hC/VPMJjjjzY5X27qojNPSRZGbuVB888MbwLvY6vWL2BoUE8yg3tPI/XOzwl+xu7OYYEPXEDpjxgjQc9B4ZZvKva6zpIYpQ8DEwTPTTmib1TSNK9zhRMPV3/n7yaadU7A3SmvZqbH7xMZRW8u96XOgprb72aG6w8jRnWu8SoiD2ACEu6/4SgvPoHYTxcAww9+mgHPVkAsLw0eoQ9GvE7Pe9dWrxkKkQ9bCpDvV4EC72anrM84JM2OoGUqbvDr4y9G5ezuyKrAL2o2l49skqXPaQSaLzYdtq89gKmvGPmWz0lfrq95ucwvHSzd70Gqms8A8HNPFfXHLrc4V88xbwRPNLZcb0sfzc8s9VDPDKRGL1unzs9Iy9mPQYcUz1NXbu7JV3vvACGGLfAF8e5UaO3vCTskz2Y2Xg8nZQRPAHHMz259YY8nEVRvWSrAD0Yv6+8PadkPTf/ATy1Gem8YMlpPa6LobwZTHw8r068u+N2Nb0SkJk8K53ROdCvGj0NJWq8s4oRvVOGKb0kZ0e9y+MfPXJuDj3DOce6pSaeO0jEM71nxfy8iGp0PTHc/7w+8yA9tHX9vJv6kbytkJK78Eo1vJhaFj1v/Ki8xY7HPE2akr3mqwG9xBoMvWGMCbyqwYu8IBCzvCIrn7zTaNM7tABcPG6TtDu59Q091WpvvT05cjturhW82/qDvLDVjTxIs9u8VrQqvQ2+IoojFI69Q8iyvKwnM7zcd6u6rgg2PeLy3bzX7og9hEf8vE5zLj0hHUQ7+iIEvVR+VbvZnoO8qu5KPfVH0zzJumc8shy5PMaGTbx+IAs9S1IPvRFu3zyQPLu75LoNPA+5M70hSZa8+IfWPHWs0Lu1Q507VdGfN2sAhLrPFXM73EEpPYPCzbzlHe+80mMRvJyFXzyI9zC7L856vO1RgrrdeVw9PSZYvH4kxTvnmSk9XwKZvMZf8bxCR4g8cSWBvNkO9rzdhqi815MMvQMaOL05IVe8ZqBAPW0elb12+TY9t3MqPPUZJ73h6J09QGDavNY94rwE/UK8SSXkOxngcTvbNrM9LoTqPL2TY7wYJwo8oABePSfrxT0S6A68hbdfPGdmAj0jQYK8v9MNu5KF1rwMSeA7KtP6vFqTfr1J7SQ89FBUPHD5Tr0binE8iFs6vQW8Wr3+VdO8T9kaPR5Oybu7WA88F17wPBo14ryJtym94frPPEDiK728fes7mF+bvcrgmQn/qya9pmKtPA4tkb0CgZo9OZ7JPIjvVDyPkzC8IqIRPUuzj7yr2rw9EFUfu3zEs7w17K68Qq6bPAvcAz1xyeW8K8Y/vfQ+p7xVCbQ8QSdDPGA3H7tyNiE94s/DvB++17w3fqk8NI7kO+aK/bwrwj098hE8ve6Z8TvJiRw9JhoOvavaVjjJFYk96NWFPbyscj3IStY927BfvUg4Cr2DsYc8aJX8vC55qLwRFoS7+iE8vV1rpTh2xUy7XxzxO0Lwe7xLJA28vmwMvc6FELxXzmc65qySvK7J/7x2gYy9AF15O/iZWb03pAM9DbuCPEx4CD3OaaY8Lh+kvRD5WjtOYaQ8nQmbvckBWz0vA7M8bHpoPZXJUDzXm6Y7m+JEPbMHmzwzKRY9SbWCPY09Nb2d9GW9iDB1O8Q5D7wc/uS8V60HvemDPbz0a669GaITu1O+7TwPyZA8S8w8vQeTEDxiv8A8sww2vXVEKrwhurg8OfmaPBy1nb1JPjU9fBPSvfRTfrKylUO9rNQZvJ6naj0Jg/27XpafPWJls7yH4Q69zNddvbmvxTvTBzK7nkdbPc5VKL2UKge9KAANvJBcVDxRzoI8hWsnu3+G/7pHHlU92isOPdq9zz0Zaxw8p6omvH1IDb1WOJI94qSevT+gdrz5tH098seCvchVoLuaDCq9wnhxPb6XAj2T7Tc7nX3Tuvxahz18OTU9czE8vQwcXL31eku8jbEGvTPdRj0r0h87JkYxvX2kLz2S2OE8NcXVPCb+L73m+I08XrIGvfG30jyGrzw93wsCPTArbj1SyxI918PPvBsrjzyMkeK8hlpcvQTevjxt0Yc8W61KPdyM+zymm4i90/6TvSJLtDsN/hq9phIMPZWjALosDso8nYebPGgcKz3rypo8PMv5PI0JJz365Oi8O6KmvLXY7LyNcbu8QAhGOtqmVzzvSiu9XtwgvG0GAb0/so88zTVBvYStjjye6Ky7TEHGOhEdgzyrotu79lwVPaEcuLt2aTO9xhMDvOhigT2URCw9KvcvPLxUHr2dnjE8L3WfvA2zxTzvCvQ7F3kHPaJHv7wy9DW9Mah7PIMcJ7wLYeo8jPeFvFB3PjsSXwu93bVBPCkGMD1RvIG9P5a6PLTkFr0Wje28ZQOEPUx4A73rmy89BavVvDS7az0L+Aq9aDhSPeuHOLwgcCG9RgqvuxJQYT14xfY8wURnvMMe5bv9VZa7mVGRvEbBab2nvAG817i7u9lg8LzoLcQ8dJVQvQ5oPTzBCue8mhVBPa/jLL3OApm9eoKfvAAp6zjzp0s9yBQOPBNIRrxQf2S6h42LuyGlzDwFLx68Obq8PAsEwLsKS6E95gs4Pbjfj72aiw891PLJOwT4Pb1CimW9kAOVPQJu7zwmKfo7lMYJvUwf9bu3f4W84eyJPMBosjsKt9+7vJj8PFNyVbw930m9wnqKvNfd3rvysg49tcdqPHsLVDvpp0+8h7ndvP6thryPT4y7pTRBPXcUGj3Zxs28WtRzPSjqj70Kysm8kEdevBJAP4n9Cy4872s/O4Eopjv3Waw9udimPFVZLL353q88aHTpvNzHzLyyVAs9tO3/vHdo1zwqa1C9t/O9PJrTsbyRhc086AhlvaVKbT1x+CE8BoAgvdwxCr2doB+8XMyiPHolR70AvwI9H29LPSuH+bzEw4a8d/UbPLWtcTyc8ZK8nlUQvVV8YDzCEe68t/Pnu0NcuTsLXya9WKucvMUqNb3v+GC7i9qdvTDisDrbHQG95bP6OjA1XT3ECQS92k8rPENUgT0p0cI9P1DiPCRyjTwtjsU7S+CdOwU/P704WNm8O4SZPBByMj3N+hk8MYUFPSAZ9zxHNx48GlhBPYHsGbyjZk09K22ovVjamD3C65C8JGk2vLUpJDtDvE87tMjcvEj/fzw8WD88wwZgvBuE3rzNcye9KWwsvC5GJr1eLPm82MgWvVMQDj0aUnS9L9ZJvaDUD7pBODK9qlw4vYjfGzw1C3S9wyV+vPVz0Tw2rp2907aDvZ48Mj1ashG9+1ryvDa8OQih5Qe9F51vvLPPKjyhfA09tyEhPTQplTwQmCM9nXnlPDikgT0mZ4o97bfCvIdzc7zo2pE939jSvCG9cz2JJiI885/0u2TnpTyAuSC9JpUzvRDhKr13ndi8VrJoPCDywjtj9Ja9EU5jPcANAj2ZHk69dv+zvOamkDyFraC661BZO3NMmb0lRuI8PvfAPEKgQD1JG3M98JCGvHVQjby9Doi8A3RBPSm0Wj2ELLe8JJ+XPS8CBb1Y2AM9otlzPPdIsjw+1gE9ol5qOzbl97y9kkM8zMqEPCaWDr3ISh+9VI98vMI1Hr2XGLm7M9O+u1FVrbwti6a9VeutvGrPh7xQtds80/I0vEVZJLwbGpy9xCi4urOTIjx1lKY5eVJcPW9YCj1yHTg8NzhTvSmvOTwmk4A6ExE9vVskrzzQhDe9JeKNPKbrkzwxfES84Hk3PRDiRj0Rz5O9Cqvku9nZFz32nQg9mYyMPHcIsjvMfVW9pEbdPK7ZVz0pBpI858CtvI70cbKEQlA8WhqkPYuTlz2qoK+8+xcrvXTdvzwEMsI7jXAnvOaSqbwin5U90D48PQ/fWDy5iUg8DYY5O42xrTwvil09uTv8u8hIPzywcsG8+Z/BPJu+CzzLcAw9ZL7pPCJLmDxx54Y8Z9qdOyDZ9LuDLbY9sCL6PI6OALx7sY48KuAuPPRmBzz0BBS9sH+1PPVSuTxOQok9RFIGvPLHqTwIWTA9U7KivbU6jrylnKW9LYmMvC8hL7xi6T09PbxGvRI5OL3PYaA7trgLvCwwyzoXvVi8iyNxvOe6lDsMWs48FBW3O4p5OL2ufhk9CLqrPECKu7wgf5k9eOlIPQWxST1jy9u7pAJbvQox7rzn4to8gEz4PMNkCj0nolk8hHB7PPPbkLwiKq48StwdvNVbSb1l5Mw8GkNwPF9zOb2yzbm9vFQbPWxlOb0aUQY8vox1vXIGBL2PogO8VFEePIMSir0rM2+8ogOsu6znZz0D8mA7p7yUvK8Viry2Zfw8EoElPYwFRr3Ef2s8bG5KPVIXZb1ToW49d3covZl3gbwF1iA9E8AJvf5R6bzTFoq9aO56uuUyrLz26eg9NLfAPXzED70O5EK9u818vMO9+jz7jsy9TfDFvD4oBLyOOl88gLuEPPex0zyrTNQ8mz/hO0U+K71Y0JY7oCJDPUnVt70xByc9nSUgPdXETz1PIow8eJ3XvB9zizxIV3Q8LCR8vTQFXj1JWTM9JiDMu0QUUj3keSE968Tqu82stjzb72G8iYiPPXMXlrudQLO8F3YkPNTdwLzp/Vk9HdO8PCNMuLzmS+67dW3Du+pXiLzXg7y76NghvQ4kLL1w0oS7jvwJvHZuijzVEI86AIQjvJ6gm70gXgy9i5iFPRTV+bydmwY9XEdtuzDUYbx8s9c8DgfFPElEKD2XcTW96VaSPYEinL33In69fRqVO5Q827wdnke9FgStvKtairzong681scxPSmVxztCr1M9h3OSvfDA4zsQNG285X4EPWykNz0VkTe9MpusveqGGYqoAgi9nHV8vZAyIztIqq681AxEPYBtk73Ij4Y8vCgGvVDT/jyd+0E7O3KRveOMEToIDte7QEGgPTnhfj0PAKu7UXrAO2v2bzuqiRQ9LzggvVlRDz1W+Ji8Ba9XPIBrJTl/hKu8W4j4PC69qDytxeo8tbB+PKMGvjpfuMc6VyUoPW7hLb2wGza8zOMDPB8+vTu3p1U7TxVDPPToNzyil2o9UzpRO+l+NLxae+s8jZUGvaPaGb01QgA8OeQVOg9pVb0F4y+9Ji8bvWStUr31l3e8iRWMu7e4V71qOzI9zS75PD+vRbzZ+Ao9fZomvYGLYryJl/Y837IHPRilCLxbc5A9hDp4O1m0pjweOQU9JAYnPeWn0T1Y6RG8wKDmPNId/Du22wQ8TmGSvC4+HLuHJ5A8/yRkvCLaLr1ej6y8qCf5PLT9N71b84C8F0gHvZc2LL2Mgq28KXk5PWnCgLydD7G7/5yUPBzKjbwu86K9W8azPO4bpjuNf7s7pxuRvW6glAm3QIC9+jmCPF7Wmr0CJY49sMGXPFG9Hzx69GG9i9jAPIsj+rxG2Jc9TFsLPIxkYLy3dx09J91dPJJN4DxvIW68EeqGvddTvbwJ/ac8e4aTPIlZyztNFlc9AWYHvA0LKr3AdMQ8+z+JuslzE71Bh0E9ci0UvRxN8zy6oK08ewyHvCU0Db1K1149HfefPR5vPj38K2A91PluvXEOO7yZtfc8SzlvvNs0VryCBAC9eJ0evdiHrrxwzwa8egCtvLGFzTzlx6i8CF4Yvafy6Duw0wY9rIL2u+OBlb2CI229BbnIPPOC8rzqccU8e0tAPO8NiT3q9sC8hdR7vfI18TwdgDi8EB9ovUZ1Vz0GBIA8I0d9PcjNNjwd4tO8pRt/PVzGQT1B4088z9K9PWavIb3C/JK9uJWSvBiMVbzr9L68FfspvUgaCzxq2KO941xIPG20Tj1GFng8778nPIT4D7yQAYc8s1nAvIugSrygxBa6dvlSPQlNRL34d1k9tj37vXwqebKNAc28SxUIOv6loz2FPQC9zoCEPdbPxbzUNR690vCUPO9r5bwHxju9WJztPADknjwLbZO8eLmIvG+RdjuJKMc7t/G1PKEpXTwokkE9VvorPSuH4T0y2Xa8z7uEvLIw2bxt3689/fTFvW4AYbxNL0A9OQ1ZvSKoED3DyRS9gBKVPUYVFz2debS86a0KPSA4iz3iAYQ9VDGIvUhGpL20Kwy9rPkOvdEgpj3b1xu8gbzOvDViRTxntS48nPg/PT0Lob2BH9A8GkfVvK+MxTtBGy49p1qyPGZAoD29zhw96spZvDxCXDxvA4a9B6CjvPYweD2T0TE5KhaGPQ52Lz3Ihlu9nGNTvWClGL0MEZU8a76yPAhghzzdEIw7FpnMPO8xU7vxLdE8uRxwvJtrJL3yCx88QJ28PJAZQL3imLu9pkArPVfeEL3npVC7FflkvZuEnbw/oyu7m6NuPImja72FWM+7sBPKu4lzcz19A4U74acAvEiN8zr0/w09jqcEPZdDBL2NvdY8oUIIPRRuDr3DrUU9YDxdvaITm7wmwAM9e5OkvCmwGrxQSn29VVT7uuOD8rzYfcA9yAy0Pauexrz6KPm8BS9ru+UFOT3kxNG9191rvDEXCb1HoT88mzi7OpW+xjzVEvw8sCdjPLW5Yb3/zgG7xqcpPSq7sb3V8F89k780PQFscT1iJJU8Ese2vDo/Jjw/ayC7+Lc/vS9WbD3uwCo9IMgvubopUD0JpAA9m+sGvQIp1jxwMoK8dkeePbUx+7qF07i8Too+PQInzrwWByg93xiWu/fA37zIXvy7GWFmvJXRqzo9viu816Bzvf1bC70Cexm8CTzBu7BI1Dy7JAw7eA5tu/VRkr2aMAO9XVKKPTONIb1QqyQ9F3mku40G9Lt6GbM8VneNPJl6Ez16fDq9ThxoPXNxvr1Cjo+9UprDO5wf7LwEryy9paKlvHWJ1zqhgC+8xKUTPUw8dTu+gG49+PSkvfuOpDugBQy83BfhPGbSND1sQj+9BNBuvdjm/YlEeEW9yIsxvchjKLzochC9dMAYPU3XeL3PQKU8DAbdvMNLeDwI+qs63mJzvRg4OryRxbu7D9uIPWWJhz0Mrsi6CAqKPNXGi7toAA49W4xHvS726jzNB568tEtyPJmDEry8/9q8KxesPNfekjx/F7Q860rGukvTo7vp/FY8BsY5PcfIAr0hqXS8tYVrOutR5buIlTI8iq4SPPeVhDyeHl89iwfvuX1YK7wzeQE9ouynvGnK7Lx3/ik8ZKxfu+eSD70wN1O9wHQDvSTuTL0wQ5y8itqgPLRiUb1+0C49yLKWPE5/t7yR7FM9aEYbvQzfnLyAz/Y8DsfQPN02FLtXfKo9/6b8O5hczTxeCQg93asvPXFixz3snpW7rirAPBr0kTvwdzG7/Fy6O4Q2EjxIM4M83qaZvNsFN70i4YS8gunMPLTwkr2IHlc8nUkxvQdYZL2uoZa8IX1tPespzjh2Or07QRXIPE61iLwiyH69pHx7PLkON7zUT688FyWivYDZXQng8Iq9D0s9PGtwm71cx6s9a6EtPWtFkzvO3/+8VkhzPKy5abzxP6w9MieSPOD6CL1RB3k81I/oO9/xBT0AIyq6tRCIvTInoLxC/QM9BWk9PbTtzjtSOcU8JCIqvKysLb0WlsI89Truu7pymbzsPEI9OD0Fvf/ECDw9cBM8362kvDAxFL11Np89RESWPQvTRz3nc5k9DhqhvQFq3bzZpfs8aRDKvFzkZLtb83K96eeTvDSaibwvu4i8wjHNvJKyrzzWBxS8VdkhvVARt7psl848mL6cu9J6pr1ZInO9KMf4PN/LOb3aHuA8DLiVPI5GOT0TG5O7QkievfhF2jzrpEg5T3ByvZuRYj2+uJE8bqORPQzzgjxKkoC8b5EzPQ9iRj0O+QI8BwG7PQKdK7333JC9o5tqvCcurLwtXKW8RAYJvZBuxbwv8329d8RxOj9ZGD2+OKc8fmhAvLg6Z7py9PA85FbOvG4jk7yuIrc8a8v2PG4giL3keVU9u3j9vQ1xZ7LqRpC84Pt6O+iKwz2nBOq8v+2yPbxV67zdKd28FdctvHxhlLygili9CAMKPYwXGrvx2vK7WaipOlW+fzl8M8o7+p+tO+rzbDzq5mw9AsVNPRCS5D1YJIu7lHhjvI/CfLzxuK89mYPGvWTSubz7Sus8ew9PvZI5pDwgYeO8ZZGRPapAHT0wxhS95i2hPHm5lD3WJYo9h6RUve1Zcb3ohS+8FQ4BveQDlD2niBs7kXjxvHNFmjzzbKU8Oe5NPemglL3xhso8er9gvQJ30TxHGzM9KW/GO+C8jj0QfDk96oa0vIuSlDzSKJm93H4XvYNaOD1a0wk8Ck1UPe5lBz03Hoa9ItSivXpZrrxpH5y77pYtPGb1jjsfbUA9mBdxOwy/lzwLAVY8+iw8PJPrfTxs/kg9lBscPeXah73RMKq9jLIXPVVuI72/baw9DgLwvbqJyr0txhk9ALLAvL/ZTb1KBzO8fgW+PN7l1D09m8G7KOjvOkidGD1HavG8LVO4vL4sBL3hEpq9NxYEPYMGEr4dAjY9wJKovPODarzQEHK8e8CCPJJnzTwrmie9e/4WvVxAlzxq7D49Vh2LPPa7pD1AOOQ7KRsuvCTELb3EGBQ9X8Q8vNbCRr0eUZc91FI7vDl6ZD2qAhs9v/zPPAbZ0bxNvSS8AOLJt2XYNL0aOCW92bzsvI++yD1RPOK9ADJ2uSOy97zwBw67A646vSxL5rxYxbk8GZg1PHrwqLzOYE09eAScvchjWj24LuI8MonpPKBnjzqk+5g9LAuBvFBsBr2GSlA9c5tCPEdlnjvAYqm8PPYyvWpgWb3Sat477MmzuyztY70FBge9VgjFOido/TsNXhM92ujOvHpqB70Qxr08vL2JPXa8PLvueje9A19WPYiazbyjjz+9oRsZvYIUAjydCX08LoI1PEDZtrxY9/y7kuPNvBCu2rlpWKk86NuNumCoXL1+kaI8VrURPNjShb1tmPi84AByPATjPj2U6au8ho+PPE/+gbx+ixu9tIKyOxr+X4n87/a8XnTCu5pSlzwCnBo9kmefvNTNJbvBE3i8xI6KO55iMz247UQ9NHI1vWwdVj3S55+7LIWsPbty87zuYli9Ir3qvCztHDymhxI9UJDMvK+IajwoRDg9IGU5O+ny5bzxei69i4Xdu6YGITuouQq8kC2cvOMvKLwfUOW864CAPYIUs711DRS92ngHPWSKR7z6HbY8vdM5vTW1cjwE0zi9fKcHu2CJxrxImLm9RA5OPFKvAD1UxZi8xbcKPX2atLz2QTk8msA1PBa4cTwS6PW8xQ3HvODXNzu6Iak9+ehLPWixH7vhlMU8GkvlvLiJ3DoiVSA9ElJqPABPnbpT8yU9xufOvPAiertg+tk7XcVgPM4BIT0Yv506yGkGu7f+yTzgC3s6WtwLvfT/mTzJdOA8QqqBvf12VT2ASbc7OFLyvH4b4r0gnUi7NrdovFxKLLuTjge90qNHPWYRUbwTiKe9toELPeuHh7y+QS29lPTPvKoyCjxgr3K7EFULPVwzBIirAD29aLkIPSUQCr10mik84sDRut6V47yVdRm9KEgyPSqBmjwiWb49sF5BO8Xwn7vdpTA8YjSkvFuyCj2u/Tg8IhuDPN3IMTz+Oee8qnryvE/UozxqbtI9L0clvdiiYrujd7a9YMc9uqLPobz5/W89LGpuPVBVUzo/u2C8dENYvWIy0jwwGaw9XEJSvShL4TzYQPK8LiG8PNTdp7zzW3G9fKH6Oxxo9rwLAxI9ygaIvEaz7byTAB+9dpJIPFpSX7yyB688vggPvYq/Zz2+ooU8kvn5vCrnWb3zO8u8cnCUPJgdiDyUZ+y7JJahPVzMXDsyzE29mGJJvSWBQD2Adr062s+nvUiJNzy9/Ae8IPsrvZx9+T3ByQU9XtAcPT6ciT3hjF899AR1vXrAjTwaOyy9cTy/vHtofr04oIy5Is9pvUlbAr3gVtC83XnMPDQWwjzs9SK8JQUlvADbTbjU7Y88BvSsPAAgaztuqL88mNoGPcoTpTwCDAq8C+gKPd+OcbIc0k+7yAwHOwgYeDqltu+8BwKMu/DcebtuaTc9fZq5PJD30rzWHtK8dmRWPLJwvLwTcgM9CcQWvWHwbj1Md9I9WA+lukRtjTsI/0O79HKWPOLRlbwNXFQ7wR6fO96/lz0kZJQ9uvbcPDwTBD3wVy08IH1YPDDCVz25czU91LZIPbQgybwAGbE5HQwcvTouzTxAxTg9qBtsvW+fgLw6/sa83FVCvFTX+TzwCmE7I1GpPBopG73jQD099x2FO5y1W71blzK9ED6/PIb2mjzrCBi7d+6vOsqRrrx2Y5Y84HpQPKYUFLyQCV29nAjQvIBMbz0Mjya94gr2PYyZWj0CYeu8Pu1yvWDFE70P6W08u37IPDWmazuGJog7HGfXPHg9jjw6tMe96VSovA5rBbxLZHa8LicUvdm+kLzl1yO9Nzh0Pbw5qLxGfE89kTZWvZ4dxb1yhQ49Z3OVvNVsxzsSCfi820rPO/QqrzzXD9Y8OOUYPMoOgz1/0vw7j1Y+PO/f9bsuEMU8oBlcPWhdp7xtMlI89W1mPCAu6zx0MQu9AwZuPVzqX7xCGeS8oMQAvdYdbDz3GWM9sui7PCf7+ryJZcO8lUkkPQg8Nb3w5Ja9e5myvKZAJL3obA09nJErvCYcFj3ksxE9250wu2tsYjpv2cS9UMxyPYjADr0qaAK9gn/fO/oHOT3Az9w4D0CtOl+ogj2Wwy091Vh0vGLTl71Q7V67kgkLvdoHaT1N3Re8r/ogvSQMyTxq3oy7BuaaPDICar0WCqe85ekCvIs39zy+tJo9xg8SPRstXzuJdm+8Q2PqPAx54byptl+8HCZzPdK5Pr0chrm8qS7iPBmL/DqpITE9V5DKusl/9L25Oyq9sBKlPf/YlzwDzoa93YCxPJ4LKr2kuTu9WWWzuztEJjww8zw9q9OAPQRRX73m0506/++lPHIcFr3+g6o7vbeIPd5g/7yVsBE9aYyuPHHSQD09Z7M751F6vdXDazy8Lo29X7z1PLdp+LsclQG81AQAvK63zIffRx89SGCKOzk04rxCBgA9f58bPQ4RIL0PctQ8HyE3u3zJX71piw09i9vIPFvxBL0H+Xu9VSr9PGaJ2LziUI+9AIaLvTMrCT0GIxs9fbdou4PdEjvWMwU9LfxfvBn2irw+I6e80HWDPbVmSbwp29y8EiVFPWvSIzzIADy9M92iPBbgQb33tWS8OtVSPPIIxDtdA768KjC2vGiCI7zGH8m9FhFtvb8TKzxdpyW7D5CCvVcftDz7JBI9LPIevET81Dz66SM94OnavFGayLs0ixu92BAIvYFV1zz36Ss9sEXCu8YMFDwJ83C7jIYFPbWUCTzVvsI9tctuPSoP/TvYSl87en0gvTWuxjvG0FK9QMCdu/+rQj3Fn/o7cXUovTiMjz2wuBQ9Tc2tvBCofrwS6vA8K1YzOZJNOr2ghgW9OIkKPXZTpr1Atie8xSetu+w+yrycYYa9clNtu8E2BD2Ux5m8KinXPExYkTxoTO68x5GjvANnprubHMY7k9qHu5TlOIdmV6a8lDCBPVC0Pb3QWwg9r0jGO0NP2DxFKIe9rYm2PFsQZj37EpG77DahvC+IwbxJYkg8qQOkPNYeJz0l5P87ZtrAPBDfNT3UDl27Z5UzPIG9yrzXwb89K9rIvbrWnrz+EhG9Um8YvSvmlzwfTeQ8k4tevSNOIL04x4k7l9agu9cKxryKPRE9vVD9vI1n6zpyKXY9iWkKvLhzGbvvEEg7juPoPXAbKD13KTC9x14yvVfjsbyH2Qi8wojyvNH2vzznvTE8itakPNd55jyMFkm92k74u3H9Z70xWDG9Ge1tPCM7yj2KYZ6896MyPRsn/ju0Q8295GnDvE7Wl7yhqdA8oBc1vWGQLL1orJS9oEhTPdLarTtjVSW8q9kxvfPqUT1uP6w9HjkMPWd4ybujYze98aasPKII+TsIydG8/pqHvZQtTD2bf+C55kCJOzLAaT1R85s8gtqVPUXMmj10PT09S+PoPBMJ+jv4hnG9+f4+PXUKfjr9yo89/UCWOzcccrJZejS9MabwPADPKLlIAhU8+TNuOw25VLo0cC49i9O/PLhXy7z9Ap88TE0YPcA/vrvFHHa8Zd6XOKBYsztkhJQ9HjBivMwC6rtJFXE8NVzRO3KEhj3LL1q8X2wJvNyNJTx7FOk8lG7IvIEEIrxIc2Q9iFx1PI6D+bwGTsk7NeV8PW4njjzOCrw7yTp1PXmfXz2SxIw8sn1avde5RrzDWhs7Jsdgvd/4gT3cvoe8NqgYvbi0Bz1W8A49DAaUuxoZs73Vyi69yj4+PadluDwp1I68XC4XPT5VEz2OAeM8IC3DPJOce7t15q45JEG9vF8XPzypZZC8WwsRPnhqcL3//7k81Q+Uu677hD1RbJa8GlKrPIgSy7yFFiq7c7toO1bLhjy7lOy9gVy5OiNj5DzngtG8rx/4PJxKB71iN0W9e1uGuzPGjr1yrU89zkFbvTJGYL2kwWA8Xu9bvRczpbwmFza99g9jPP2ZOD0ZiTA9u800PX7pXz1jJFK9Y9QbPcnNWjyYHk89d7IYPNENL72Ma4K8NF+LPRinnjuhTdq8j+IgOwOvezvomry9DmiNvBiKNTs0Zl49P3WGPFVEbrwPztQ7TGwHPWr+Bb2GW3e9wGJjvXgqEL3yTog84cHwvB7EmzwaV6Y8AMAXPKDgTz1azQ28EKKLPes9jDm7B129AJhJPUITTj1B/FS9/6aPPN4kQ71qmk49A7Q1PKQZ9b1dKwm8Ddd3vQQ5Lzv3WFy8RDSbvE16mzw8dse8ZWpYvOI+wDxnPJe94RWtO7jGyruzKdY9BzkoPSm44zyhNs08T3Z0PCpPirzArf070pooPcI3A70uhRq9CLwJvLkkY7sTK1E9jbAivWnWxL3AYfi89noMPirUlbu9XDy92z9aPGVbjb2Sz2e99m4svbnWCT1bvkw9AxLyPP2JnrzgnVW9NBdNu1Z6izxI4548HZCNPGBHujwDWIc8wNDAuXQmMzy19gU7X/UcPXVWyjwIRqs8+fjQvEOZqrw5I7u6CkCnPI0NzYi031E9rox7PS1RYry7sNg9pAtGPGy+ADzrPwG7ArK5uqcFuLwcEtQ9A6+fPQbUKL1o4ZC852OKPCi3BLzx+Ny95JMfvf1yLz1a1Vm8b+INvYNF3TuGnb28GuD9PIFDnTtR1bg9MYegPTdXFbw1RTa9EpoEPQ32JjvY7y48oj3Iu95ri72GelE8B7MMPa3dhDsD3CY6M3JTvbuXDj0yl1e9xDpsvZ4fJr3+nU28KJdavXB/Gz2ug2w9U6m3O3WiyTzwOzw9P2ZsPTNLJjr0OZU76HKQPPH83zzX9Y282ZySO/f5Jbyt/n+9wQ9lvL4W8TyTbH09Jz2ZPXbmsrzLdws9nh1avRgecbxUHJW9ydogvTf+XD121Bq9JJy9vTwp0TsqU6o90kLLPOa1IL10FhG8mhAAvU7zojyPTXG82cWAvUtYVL0gWzI7gh08vU4AvDw/e0g9xDPbvOqhxLuNr9U7H7FLu+R5C70BikW9vHi7ux0D3jwYw+a8YBynOY5K1ocIJSm9tSMdPGc0iDwiugq8QGEWvPZcb7tjJ0U7onrSvDRAYj2R6Aw9ghdlvQVf+DzIXAQ8vo93vC90GryW04I8I75tPZsxMz0pGIk7qVJ0vOyECL2rpTc8o/05vTMXP71MGZ+8YKXcuxmC1z3HCuw88P/wu2z5tbxEAwM9KtgwvUP2bbwuflY8gNxyvawU+jyeqp09yOdWPRvEeDweqHe923awPf+xLDyHYIq9KcufO/rhkLxQWZq7c4hqPHB6mjsirZa9OcedPJxe7bsC5J69MrPgO16tOL2uwny8dcPBPLqiCz1jbsa6V1mzO/OXrLwvPC29nsLyOyV55Tx5LS89iQ/Fvd5NmL3Krb+8pW6OPPrJi738oCY8RmS7vXDGjT0leoo9CioBvPGNiT3iFa697AGpvPivGLuhABA89MOovL5JOzzzYP+8FLbwvH39xbusfSa8aW/0upYmBz1d5C28cuvfPM3eIL1cgGW9c8FKPf6epT13uj88iOggPO5ZkLLlUAW9B6zcOye2BT1MY808FqHoO4n3tT3et2090FpMPCy3mLzieRq95ZtPPWbi3jzKam893kl7PTrNSD3dqnY7e9AWvHwuKD0IWQm94wB9PGJ4CL3bEWS9EcFcPfI5NzxeSI49eJBZvHy7SD2hl2E9Zo93POy35jz4TGg8hrwjPar6+Lx2qtQ7XbHfvIBESLtNZII8kTymPKqk9jx/FUa8+ONSvWrxVj0GOZe8X3fQvCvwMb27S5c8wk07vd9qZ73gH4u9GGbfPLXHCD08CzU7XttGPdNICT1hxsc8VO1LPL7uuTwBfnY8O/nSOjiCgD3gYda892PTPauGeTmkiNm8H0s8vV6JOb2iNUc9RimrO4b4JD24KcI8YLfRPJ8y27oA4QI6KgSuvHg1TL1Sab88HDyxPB/0gb10Ldm9CyB6vMDGvryYINc80GHrvQwplb2dzB49qgWcvOpIlr10nNI7UNg2utBFez1Ejbo81fYHPb9ZTjzYRcw6PSNaPUZgB72Og7Q8EgeOPYlo4L0cSqM8kQPOvD6nzTxyq5c75f5LPOzyuLxyImm99ONvvNf3KjyOfSQ+c1pfPdO52Lw7ncu8ScQEPMDVdbmraPe97SDpvM4NP72RKZw8aGBvu5SkDD3+pkU90JrYPIQF+bxqOV682lcdPeqP/b3BixW93N+zPHhl+z1ZmZa8CLi1u9BDyjwmgQw9AzCNvbwgbTy++y099L27vHgyGT24rw89Rj9Rul4uuTxNIf08FmsaPViNDrw/pSC80ijPvCju0joBLT49psY0PdrBE72r3T28KaG4PFCqhr08krq7MqaUO6Nnb7zA5TG9P8PBvCW0dTykJgA9oCQGvC8B3b3+daI7xoalPaDZjbx5T4g8SmQ5PQmhqLyi5NE8JTNWvMKLZD3c8ny7QlnZPQTlw71uHnO9D6ALPWitML2CqDu9R6UhPJn5Pr1juIG8amhKPKLpcTstThk9WoevvX5JxTuIZRa90XlHO8afKzzsmFK9xROcvYIIkIm8eQ69fmWZvVtQYLs0CIs82N2LPFQ8ub1C+LS8OlFBvQ+lOT1IdxQ9DKq5vMpIhjxUjY87voebPagoNT1Gxfe7LuK3u2XT4TwIGQs8NJMLvXng/Dx4GnM8kT03PdPhNrzvHGm9rJhGPTDTDrxGZUG8gAmLurbaszv4ily8hp4APUo6aL2oXRu9popePZrdMDwzhBY9lm+uOlQ2Ij1FQBC9Y+eCvBPVCr3wHr88Ms+wvNDgoTwzn6Q88AuPO9H+nL2J93U7fFVKvAJLQr3eiri8/qPNvF9zvrw9rl09oiiqPSfUGzzESCW8ioWRvNwI6zyl8Vs9VtEcPeM0EjuO0Bg9HuUQvcRzXDxAKhC6CO8NPUKJuj0CsyY9BnGUvBaYET08gI48QJy9vJRyqDz2e8Y8frjuvDaIFL2CxuW8Mvl1PXQSZr13aKs5OMUpvU7kgL2W6JW9BuEIPXxjTzwGfTK9nmm3PHjIibxmaZ69eOqbutgsCD1K+j07IsThvIddjAgRI6S90l/APfDQnL3tRkw9ibO3u0sxgzs/+6W90LIKPQBy9rycwo89kmUzvDAPQjyR3kY9j9k2PMrtS7wKI148LMjivJRYirt6d1U8Z4YhvPh1fruSudU9NkOgvR26Sb0kq187ECBSO/iJYb3JdQo9muGiuz7A2jwY8sm7g+lsvSoTtbyQHYA9vLMLPSk8wTwW6CE9srqLvBrojTt7iz49esp2PSjk7rsJFXq8fkRhvUjBgbyKJ4y9utCqvAeZ2zxwHbm7VCx8vGjmLj1esUo9OB7QOvb1nr09WRG9gA5QukxJTbwg+KA6iiRoPUL2Fj0sHEm9MCKYvUFvCLxWKnw9ejorvbwr9jtvACi9TVM2PTcXBj0Xmsu8kShUPOt5Yz0htbA8PQOBPTV4Bb36XaC9ICpEvT22Vr0TU0y9FM57vbQ8xjw5Wlu9qtIXPD6elz3s18u7tueZPeowaj1OAgy80DFVvCBYX70kYHm87PdRPd0SSb34sCQ9bNzBvaacYLIVQAC96X3cvO74/T3oNNy8I9Z1PT9pyrzU4I28vASHPY4XL72uWlI77sgsPSgWlTzHHI69mBtEvHEsVzx9CE899n/8O+WgqTwHM6k8/KzVO8rebT0UNz47ywidPBKREz38ndY9fYpkvdTivLy2aas99qswvNpfgT0SPIG8KB5kPWTbwDxbGBG8QD/YPPbzhz1BejQ9KT+XvZ//Nb3EsPy8OqKKvRVfhj1cFLe70sxvvJJ4jDxBnRE8EsCPPZhW1b2tJs67Lr3xO5PDqjzMGhE9CSgpPPTxSj1A9fS7lPvZPCWP2js9Pyq92jqLvAjvnz2XhVu8BS0CPuyUAj1UAxy95Qh0vdyk2zw9/bu6pxf+vKbhBD3YYNw8LlcoPUWNgD0kPj49E3sFPBs2V7zCViI9NZR6u+C3+jzoGB09JyMhPbb+Wz3vYS+8mOLhOnG1fL0Wpdi8v1urvU5D3bwAipa4rN45vSgVPT3CWwo9VaYBvbAajLk9UxW9LxD5O0TtojwBxPY7bsdNuw+S8b193ic9LNZ2vND0TbxIAoG8ABy0vIQBtLy7mOy8EiY6PHIFvbyZ73k9BzENvWSnvzzC1Ua7yDzpOw+qtLyGCuq8g44ovMq6hDykn+s8r6BFPZ0bRLyFyh89PrTSvAzyATwLZ269mjsXPe28Z7vLuhc8EHnXPJsMxz0ICPQ8PLG+vKE41jzN50w7q9Q9u9AFBbw/2uE7KBYqO1aDF71MHne83Z+dvWLOoDy8NVa9avi5PIZqHjwLjty51HrIvCiiKb0T67O63Bu8vBfUOj1+y5o7zmS+vIvKLbtRsV28s8SVPbxSKrzMQH89vGzwvHi4sTz16hA7xXzPvHq5gDyv9ha7XehZPY6kRz29JDK9csi1vOraJbymjEo8K+Z2OqxKnDxHbzW95n1nPS8P+DufbmS9ddJKvExVxLzbQoC8uADFvMsejb0nGhA8DCogvKl0k7uWNTg9ZXMGPQGtgrt2bZY8rbkYPWFKjrtbpNM7mq0HvYF+pYmng3a9ZzNsvTCeILydjfI8CiYlPaDnE71TY9s8/GwLvdejPzxtoIu89yBwvBqxSD0y8748GrjOPERdRD1n9pG83GgRvfVJgzwCiZM8RQUCO+l/ZzyvUSK97rhMPVDOGD2nee48suOdvGhHIzzdBzQ8J68nPSqWOLwwK20981U3PCdEpb3JJy49ibzTPI5FdT3ayhs6S6VZu3hGSDxCkSm99ekqvQAmvjykOd48qfzqPN7+Bz1VGK48PX41PSW3wLxlJVq9KwwNvIO9KzzvtTA9E1SOvHpcQr1PgSU9LIpOPCXfZ7sXZGi9ji9XPBWDqbvM4xO8N2MNvcvYU7zcQzA91Mp2va+2sT3mCQc90Q7nvPcV6jsYdXy7qOWGvK6Ft7wQZGM8oe12O4e9Ar1UB8y7Zn91vKV1Gr2RWfK8pk2EvEKtiryy0fy8B+KpvFKrmj21u567mxswPM+jUb3mb0C94nr0PM7XDj39lTK9gGUhOkrDPz25qjI8/r6BPIfLlwjqkmK9LZ0lvVe4mLw1am27a7MevG3cJ7zE08+8oZSwvMVpojxNd8w8fnmDvW8VKDwKe109Da3Cu/WkF72eex06KFQ6vI59Nb1qQIo82u5pvbZkZbyp19A8Ypc6vdkUbrxY/wy82N/0O/4on72TZKi9mD/pO18Rzrwg4u86dTBCvVo9erwROzG8E81HveY2Jz1EyAs9AXJVPBEvATxyrba8CEFLO4B+LDsJ3eA720wGPd9PSL3gZ7i8QCcwvZ1pUj3BU1Y9AuCAO937Jjxdmwa8EqDZPJ7gvL1Ibr28I8XsPJilm7xVYty7cKuNPOMqpDwqC0u9zRe8vN+4fDsijrk8gBpfvez3t7sPI0u9usaWPBoZjDyfYXQ7xc0wPaw5Nj34V4S8Vm8NPYoMAr3tykA8cWqoPFUSLbgB1p28z1T1PH6jyLzdpf67cCRkPAL8ITwgQu+8h80NPf64Uj0JiZq9YQAMvINWa70tXUK9teUOPXGOmrz1Zug844CJvYZzaLIhyoU8CgjQvGcf2D3iDU69VX8FvUDyLj26gyG8w5tTPEOWEb2MOcg8qC8kvO1MaT0p9Xu97EQ6Pd48Rzz2uzk9MvlRPdOPAbxscri8+VgZPUJ5Cz1EBxE9ApihvYOYPD2iKns9UtQavF9FrT1FgeM8/AyLvQUVsDx7MDC8eBeWPWyv7zvjDC87GUB+PTvgPDuMNEY830ARve2pIrzjVtq7148zvId0Zz1TQxs9CT8jvVDNcrw0w7G8Iqb0vGXJSL0Cuc48rWQVPSmTvLzG8fq8KBAOvZ5gYT05feE9jUAaPZ/WKT1elQi9PXaBPEpagjwaW349jgLoPBSQlDzpJai8a9wOvZ8LqDuMfam8v425vJVNkjotBmu8q21mPf7zkj086ty9LaPQO3SPqjz+Uz89tkkXPEJ/ujshkIO89sHPPD1yPLy/P/c8sH1pvKo/470FfHm8baFVvYgZVzwVL7U6aYgAvf9J0bqEIig8p7D1PNPVJ7uLKWG9AKVLvOEJfDtfeRq6YlyZvPr+5LySWz49wvDzPAjpKz0dIcO8oI8xPRGKeTykiy292Hq4vKo2pbzb8Qw9+DRxPS0+Kb0Rurk8TVUGPeEpQ7xlNKO97Fu2vPkZ2rxepoG7pvM3PMLXBLwt+Sk93Vwsvd25+zzthBq9Cd83PWUfaby9QKu9elaJPDmrgzwD4bI7C6sBPV6XPz1NSUc92npZu98R7r2EcIQ8aLYlvcl1oD3dozk9GKm4vM0WejxbHXy98t0ovZNCxbxeMkW9mSiJu718NDyaXUI9v2TtPIjByLt8U9m7pu5XPaVIMbzPCAc99pCHPWJ/kryXNrY8+ECTu7pPubv8Ybw9ilgGvXrLz701iw+9l+8EPjHk8zwxSe+9xuwGPIrqnr3LaA+6HU2yvCa4KD3rnt48JfGGPc0RIr3U5/W7j5WRO4hrUb320Ze7imPkPHNRqzvBDJ06DP1ZPZpApTzTRO06qzGBuxG+ebypAWc9+gsVvEopNjzS7kQ8rNwbvaJzXIkTvYW8rMoePTj7hrzL3qE90DOGvCsvbLq2rsM7luwuvMuzgzvr5488tL03Pajs+Tz6LDS9gCLuvFJwhj2GOFe9YQrMvJGdpj2aFxW9vfDqO5qt0TwEjOm8yG/5PK3PgLuSNQY9jzfOPPsWALzWkJi86E0CPUwevjuSyw+9uDhevFcNi73NWj67a68cPJqIRT1+j4W8pB2tva/QujwyNxu9bFOTvQ3UAT2t/C46SD5NuwSELbxLF0k9yqjTvHvdKTuO2ZW8BmzgPGAVyDyA2mu867QqPNUPlTviZVi9PVD+PHMKljwhoRC9zEwzPSs36TtsO4U9j+4bPSJPM72FTcC7j4Sqvf5/DD2o5xS9YpKoPIeeWz2hYMG8IwqCvUJKFj3RO4M96XbsO/c9hL2seEy8z84WvYXX1bxHSkq8kWvvu9zq/rzsRqo9G8ZCvFIBYbyrgxc7PGHuvFQZ7DxmMsw88cIXvC3pPLuOkIe9xpioPOvifLwUtrC7TTHdvG90MwnrY2W8VXAUPGjJYz1icqc9g4sePErZu7wvF128Dcfru+2Ufj3n42y9GNMTvRt36zpMquo8D/BbvJib4rsqmj27hHGBvellSzstikQ8DgWUvPfyWLydPdE8zyx3vNiM2rxwFmK902g/PMBSrrs28Te8GJcuvekRHLxMrg08+Vw5PPBo2Tq3wBc8pVFuvW+Rgj3TnPs8SgCCPKbf0DwdSJg8RjS6PVp5ij3yM4u7L4D1vMh/Hb1kBzI8oG7Ku1x1PD2+/PY7IHchPT7jjryblie9mKwgvXtjpr0u+Vi9hUxDvN9EvDxa0/u8XKAIvcBfAbzS6nG9wqsRPeddhLy9Zbs91FdCvZ0C0buZuDm9BMyNvBjJgbznkaI8CE0DvarDij03o6a89PcMvVN8EbyUEGq8zSB1vOKbW7tRjPa8J7YBOwX7D724Uly9Cv3TvEVNlj3wpoW870jlPaAMTD1UiQa7SG6aPMF7vryEG4e9QYGvPEzHID1f7Bs9+z7LOtBOa7LXMxK9BVqEPPinkT0OUTU91jwOvZubxjz47oG91NY/PPpjtzzgEUw7fJX4PNhzLLwLRb08NNClPMOLQD0gllE8pYAYPdZkvz25n669ZnVfPHZfzTyzI7M7xjH9PE/8SD3dtS49VXO7u1ShdD1bLYY9HJu5O7W8Jzx0Ao+7rkukvKu2JLv9pf26ScCoPf/VwTzmUcw8saovPLPR3byWbKE95jR2vZ9kzruVn+u8o0d8O+t1zzrUI848KwwhO4TStryjJEW9bNr/PNHtWTyDda+797HBPBxfszxLMSk9dRmFPaaYKTxL2648ggUCvPFL2zytFj48TGmZPd1XvzxIVNQ86P4mvbWzn7sNNBG925eXvPezqjzRfvi83tOEPPCvQT3auTS9uyYDPJgFKDzugea8ImZ9PfjUgb1YcL06+EyXPFKhHrzHBJk7UtMxvUjZLL0quHu79cI5vYwEM70PW4I8k16nO4aZubt9SUU9I5WCPXzoyz0HSGW9bOktPVvgAjwKkeQ90yfEPA6HIz0O0BK81Q4zvYlTjbpehDO9fCrsPOF4iL0Boi+9CpCmu2j0Ujzq0oI9g44QvWSOWb0u1qi7toXUPDsBJrulfGS90X4ZvcG/Er2+zye91AnavLgBV73fWww98SBGvLGyIzzsUra8SqxIPdvQn7z1Q529Z605Pct2lD30fIs8279VvdKFHz1Il8E8wCzuvfXEfb1+ihA9zquQvDQ/Rz1m/668L2IwvcmFyrzmQ5S8UEsKPZQJ5rwMHVO8Xws2vYWPMr22sYc9wlvBPCYtyjxzirM7GIGaPYdNHj1ACVo7Q18HvChbvDyrHo28YdPdvH/oXb2Dgew8zuh4PLvEir3LqBU8/gwePtVtJ7ziOuY7ZWWRPPHpJ7y1cFq8ikiOvZUhWz07CBO9oMykPVEIt7wWPTS92NmnvBXFHb2qyUa9yQ8rPa/7Hb1QfB28X9qzO5QcK709GgW7OT2YPPzx6jxvX069VJYhvVyCHbzQQ6W8u70lvGbLhoku1UY7/OiOvbxduDs8chc9ljErPUXksb2a40K8Z/Dyuw9jGb0QiJY99pvPPL/1Fr3Gso083Z6fPQBwCrovl1G8Qqaduz6Rbj3Rqgq9io30vDm7WbzdrJ86C0oNPdzt2zy5vEC8umOaPU0Ih7wXqLM7X+SMPZQg1TwtmMA7K/06uQ9Bcb3vOOe6akMGPYaqrjylyIg8E9VbvHkvDz3Yo0I8H3SLvN2vQL1gU6A94c97vJkXAT2pEPG88dKNPJIciLtr9Ao9i68bPRz65bwLHQg9GMsSvTsSWDxNLNk7dq5KPUBMSTnqnja7gAvFu4kFMj1wqry7pYrpPAzO17za92Q8kMfNu5XlFTm1vyi8VLfGvd16oT0yMhc9FxM8vT0HgzydDZS7+jghvUG8Ar2Ja2S8G14wPVn9sjzwVGy9taiZvPQmMb1820K9eZFRvdmgk7wJZ7o7J5fsPFkrATxIs5S9VlQSvLvnubp0KK+9a3lzOkVckLs/Ei48s1xFPUTzEQnbOmG9Sa2fPZggNb1xM4E8zIk0PTv5VTwAmtc81ThMvMPfkDuXgjU9+96PvCT3JLzkWkc9/iP/O6uPLLovwhM91SFTO+ajxruZaWW8jIn9PMcEAr3q/LU9J8ymu2IJHr0UynK8Rb/ougEgAb1PvAc9eCUVPcqIML0rqaQ85ruovJHjKr1NIRw9CXlfvACQ5bsoWuY9X85GvPlAXTtriIA8LcAzPc5RkrwCrXK716sePKHy7rs3v4q8WNEhvRmvUL2zS4w9XLXJvODdubzAe7s8yoobvRq7rrxobmI74tn0O/7Lx7zyCTE8Nr0mPROEfj2cRki9noQEvbWDAjtOnfC8kKZ1Owpdd7wgXRq9jKAdPRZKfL2poZw8Bz45PN42ZD0xtA28eaekvKNvBr3LDd+8hOUVvei2Jzukqv68NY4IvdAaYz1CUAa97qSSPHVAJD3eYze8G7gHPVcAJD0B0au83uGcvAMRqbxt1MC8KnGsPcJScD3qDIw9KkgSvfAEV7KWnB+8+zO3O1pFrT0KF4S8lycBPQYKQTyEWUi8Y5MkvFj6tbzoVTm9LG+2O4F+7Dv8aCq9rig7PWffZjvZWBE8rkwqvfDZJj317He8l+WfOy6E7TxdVzg9EityPJwlFjyLTaw8ir3kvF3xujwEFWQ9u04/vDUQjLoWOxY9SrnKPQcrPj1JzBq9j+qTPTyWszt7jgy8vDk0O9H8JLzopxm8YMdovM0r8jx0Mka9jpZEvQvUDT0FMzY9BG4GPbXM6b33OtO7PEItvObzBL1axbQ85b8jvO3Mbzyv3HU9hHOHPfvVezw7X8q87JWtu1R4jz1bnQc9tz+gPVD4TbyTiQC9eusgPGVvJ7sUSyC9IoeBPDI2e7uQ5GQ9NHaluzrvk7sD7wS8X5opvU2aWjzfedu6sQzJPQvgjbz7r3G9mz8hvZbHGrsOi0s9qgU4vRxTub20zgQ9BsYtvUzeTjxrLsG7FOCMvcyOSz30HwM9nS0fvfiKsjx8oIe8iLALPYBSEbp4I1s9e0abPfFWn73NfDY7cD+3vGhHCTwGwhm9NdgbuyjMW70mf0O9P6FtvJ8ch7sAvIs9kaPhu0AAJr347g09lUn3PLUOHr0+Wra9hbaHvIGqD70Fara6Dw4cvEvfXz0DO208b2u6vN8aMDw+VGi9Lo9JPUyT8rx5xtm8O0lEPFuiWT2HqXO9UaZfPDxgFj2s9oE99NW0vRoH4Tw/pq48Bat5vKU1vLsMCOM7f3u2PHzq4jysnXc8/EalPBI/XjzmdoW91DopvcdaFDwBzpk8DkVbPTQhQDyrHso8OMMUvevlmDy2+zW8Fh8DPZtckTsE4Vy9qT40vZPGG7tArAA98C75PAP2mLwrbIs9tpeWPTQxBzwsJQU8vuPZPEpmEr2yGyy9x2kYvCK9qTw0qwg8vLFQPVRfd73Pa6e74DhDuzl7XL0nGZK8ef6ju5Azp7y0A4k89tO+vDdbPb3mN5884Bjbu2iJ/bqRb5+89X/oOtCqejyo9+Q7+NuQvbRJp4l5CbM8oXAQveseiTscsvU80+YUvdtv67z4E0m8sJMZPSM1CzukYK089zgavC6dnTxlNEs8PUwfPT32gz0x3zO9Urs2vbDznTyjODU6J9rTvP/x5TzEl7C8uywUPTX1nry4Op8881tfPTv0cTwPJEe9hz1ivFH5jzwX2wY9GKeTPFgoqb2x4d88hK7YPPmpaT0RIhg89btUO7XNLT3dwHS9SBKOuyGtN71Gni89Ez+MvVPWKjxbk0U9K25dOeIL+7xexSy8I4njPKsjzjzwAri8cxfwvIpoDzx0NCQ8wjaUPQXCSrw9rJC8VfSWPCs4DD3FPDw9GpdRvYy3WDy4QnY90lhVvJ1vXLxlbTI7OUv1vI4gzD1HfGA9B2lovBeCi7t+ewU9YpBaO1txxbyMdPe8I308vEhddjuenSK97o7lvN5yFr2Q/qW8hnIBvTUsajsjnWk8Isr4u9O8OLyHzu28Gx0CO338P70gNK+89fwVPa8mabz1/eU7IzRQPWM3ugjc3ho8Vi6dPGzKjDs/ZZK8tVGaO7ajSr3Iiq286YGTvHnm4Lw5DLU8Jo4KvU3j3rvO32U9yndTvIdxYb0vlj89XQhsPUPpJrszH5Y8aYE7PfBMdb0LCTq6NCfIvXXdGr1v8mW8DJSGPCXmeLx1w7U6BVnCvMaokDxAgZi8Y3NjvWwAjLxpr267S7SJvUSC8zwTe3E8W/eRPAxGojwYZ6Q8ehmfO4s+WjspfDS937VNvFQj5Tya4eK8hcF1vE7SBz2LH6q8HISJu5JQNDxFfXe7i+ZwvCfaRr0VCIa8rR95PCQSsjs9xwA8uyCBvI4MjjyITUa96QIkvVynSDpk03Q9jFeBvaalrr0kBbW8ZJGvvGOru7xo4d48Zi9dvLgBjD0Py5A9XsIXPcyJJbxXO4i9GfOEvOuh3bmCSRo8G69cvBkBKr03YF+8TC9JPF5tTj1raL28A3XsPLzkXj3UzTg9ZOgHvbhYKL2vPGq8mr7FPIlrujxF4uA8QDc4vUFJebIxwWC9GdZMvfJ5GT1zxkU8qbXIPNS+DT3/NEi7sMJGPRLhE71L6CO9imeoPHFW4LvavhG96BM/PQGObz1gDCk9YY01PU8fAD1qOkW9ORiSvBJlrTxaTT28GY2nPJVEpT0Fssg9BzdFvBUznLrkqnE9yxcROzKmUD0rQPC55VkQPUmazbyrC9Y86lzQPHr50TwA7O+4k66ivBjaUb0zvSK8zqkIPSJHQz1ReZy8wt++vIAZiT3lGm096JckPI4Fqb3hIc46J+TNPEVDnbt/hwG8610QvUwDzztSp/a8ffBBPDfK1LsfBwa9/8FkPTaRpbx7owa9os7kPJhrorwPsK+8BeUDvOLusbzw+8483oyAPK8qnz1qODG9SyoAPHFM0TxkF/I8mgVMPDhuGr3J/1k9EM1muxNrW72a/oe9TKF4OxkYLL3Yhcc8he8gvcb1H73FPNq85tj1vFg8Tr14WYE8zs15vK7PET2EZBO969oDvWA+4zhEXIG9dV3vPHogpj1TLQG99M36PII/8L3A54U3OGjnuoYcqjwxM6K9GwaQPBKLg7rgxDQ8etw6veslsT0OFvM83CiVPJubtbzs22S9+U9sPdjjBzzQX8C9UDpxOsYmjLz3DIG8FNqJvAjgzLvt05y8rrvKPL5Zb7w+BRS9pzu8vFemjrzW+wu8BCBrPKxMbT1Mz229iMWMPDN9UT3QYYc7HNy4uzZiDj2jnDY9YfFlvTjaLj1XKhI94wlVPZC30rp+wgs8U0qKPG78rTwEgG+8I7qnvHpMBDwQJZ+8FSDYPf7TUTwmOT48SzXBvSwdXbu4bKY8KYqMPTw+mLzg5Dy7waYZPN8AkDwpF1Y8kwdFPcmUjzumtow9A008PbhDtDtwkE882Py9POw8oz0IC1G8i8sSvQjyvTx6CYa87KM4Pcq5V73IcYM8gEDIOhsylDzrdBK9Da0fPMUhO72rbHa9lGzAPOjwDL2Ytvo8dmadvfHvjTzwBYW98TLOO8Sl6LzbwQu76rnJvV9qDom0el69BCqJvAAXVrsMt8A7Y2MBvYKTD71nnDi936GzvNqHpTxuCNI8ZbiEvdCHKLwQLjo71CKBPQoHiT2YdYA8xzkCvEQ4NT3wbZG8JAAyPHphgD0c1rW98L8euxz1JryoBx+8sf35PNDn4zl4K808cG/6vDTGiTzW4Rc9DvQovTroxbtKd4s9LCkuPVasMTzAsUc99LtMvQv/1Dy44Bi7BZCLvK7XpTtUzy48Inr9uwMU7zxb1049jukFPaoLHLzc2ZO9mHArOwczG73Ec9s8NnkfvZbFuTxQcaW77maOPfYJsjvmi4+9huwlvTqcz7s4dzu9mOs4O6YxEbwc1L284gK5vGPk0Ly9tm88BsCgu4jxcD0fs4o9OHmpulu5qzwvfF29f9wyvUmgVTzo8y06gD0uOYa5ATx0w9U7MYexvHKd/bxoWR87DfREvAMSRb1zcJ28pIrBvEp73Dzo56G9HtSevFDnMT0l3iW8AITet3uJKzyKDwK9r0gzvfwkCgibDKG9YDmmunzyyDs2PSc8+KUkvemo6ztqnmG8sn9kvbOJBb3My8+8GKE6O8/xG70KpXc8vPEavXd+pDy8BEc80PqjO7ArL7sy8MC8DDZWvY49sLxxAnk9E9vMu7dy6rryC7E86ZUFPIB+vL1cOeS7iqXuPAQIubueDA28/mWhvG7QITtWsZQ8AFs3u+8eDz3Cggm99swjPRpQjT2xBA89aKSoOxYqDz1K0Qa9Nsy4vGiyIrx3Bp28SKTOvMYmTD21gM09iy+Ju4wFDz1byE+7TG1uPbnWJD2ew/w8ct0GPDQMFbxHYAU881L6PCZoFD1siFQ8mKM5PXEGqDxImvc7wYiuPLltOzsKKCS7l/i8PMT0eDzAMQ69UEnlPHYUKDzo+Na8yFk4PRoACb1/EYQ8FyHevOQlhDs4tBa9ApkDvPpPeb22e+G8y9QZPZz3pz0GNhc9BJSePUAISznJBiG9trESO8xH27pDVoa8kjQZPXbqdb29qFU9NrUHvWibbbJECxu93NDTvOjDfLz0KiW9jYl1PXQ8ir0CvZw7VLn0PdCdnrvWGow8qFUVPGI23bwa1xq9/OLQPPQv8j3Eruo81MXivNWzFz3gqre8YAwuPdQEr7xoC2u8/IKxvYdRRz2CHJA9Vsx4u6KNILwTYpU9lzdEPTrmVjz+Tg08tJ78PL8uTT0X/Qk9kQ/CPOv03DzOsSc9MFbBOtw8NL0u1FW8MJksvU+jWDzyfGM9GJWbPCDBEz1/xny8B2raPEbJLryy5vC80E24OrtcobsQs8k6lR3QPMnFRj2lREI86956vF7GgLzwtCE8Rdfau7aeOT1uTI296DElvVRhWLyWdAG9WW3xvf4/bLxG3Mq7BjedO8AfZb2Qua65RO2OvfcSXT3Hwgm9YTLYvDK+W7zuQ689OLWJvLw8MT1I0L+9wIyYPBGORL09P448/dlpvU/gjr3GhoG8uPEgPXJBeby0rJ29YB3DPYjm3jv0I+M8SrizveIE5jzYhYY8oCrTPF3Xjb3ucB28TF9ePRA7MLzsSvg8gmqUO0lphjyME6C5EiqbPI/aEb3Dep69gaMDPWZtC7xsQ6M7tzVGPSDSmj00Ebg62mZEPEFQI7yGTwA98l2xu0Cr8zz0eQM9Z93Bu7Wy/Dz4zs48lewuPSgRwbpA4Pg7jbzCvJKCF7yTjpw8VHHGvJHLpL3qdOk8Y8BwPaVmDb145Bo9uxUQvUycyzt49B08XlexuwzwRjvq0jY8eIaPu2rrhD2iKBQ8SdylPILK/7y2uaQ9cfH7PJBz/TpJX6g9UPsiPXJEVzzkr1+9pTpdPDV2Hr26ys69yJgJO00fo7w/K2q9cD3ju3wsqjxlsxq9kTpGvQoaHDw+kw892vVePBxcwbwo28e9DDWDPRwYED1WFDg8fRLGPAiB2DyZ2HQ8hrnqu/RPu7yDaAu7jfKXPE1n+Tx7zT+9nKzePEQttL0yFWK7DOMgPRrb2btuz9I8+GwtPKgCoLr4PKe9a62PO7Fvcr0aPqs9m++BvHRplYlpLfy8Dbs7vHmvzzwociQ9PGVuvJqbj7waKC898urjPE7sLjwpllW9lQogPOyjcjyQXia9os82vGxGwTulgmW9ukoMvb6SLb3dPTs9JC6wvW7j8bw6lXq9fbFYPQJbAb139Ei98UdIvdq1pTzZB1a9rrtMPTc/1rzCIPW7lK6KvEAPvrwal4a8UKgKPYjDzDog93u8+OYUveBqUbuqjwq9kHmxPQqQWj1EgBW7cW9wvTfNLD0iCXg8LC+iu5LkBb3o9rM7jn3uvAW7xrxX2pA71q2EvXTdq7yJhOQ9AcrQPMq53rvCXts81m79PDhlMbuOvge9zoa5Pfep0TyylDo8fygcvA3wc7y+G8A9Qi1DPUfaRL0Wune89pOaPOguyTzoQIy9cID6vbjyijxkpOI8jKl0uhACPTw0TRm96Ow1vDEZm7yb7IE8lcmsPGLHZz2nzCy9GLmpPVPm5zv5O2o91knuO2J5xDwmYzG9OIhwPDNZlrxQCDA68AEEvHs4CQnVUkC9rR8YPeZvcLxOBF49TrkAPQDxYr2il7e8jePLPDOMEbzCxAc9SprUPX7GIbyFuDM99mgFvba2bD25Ho48tuSLvSXwa7wvYwi9XybNvI6BYj16XV89DC3MvUx5v7xjLDe91EcMvQA3qTuW16M8IBenuvKVQT2fIBy9AF3DPJhetDpwQIA9XkeyPADqo7r8uX88clsmPAnIzLyJq029OGm8vIfwzDsEPpq84n9lPYMwMb0r3mq95AHhPFgkAL2HbDA9TrgmPLQqVbwsuzQ7TNyJPIqov70eo/A7OCcHvM8Zfz16N8w7WBL3PNhWhTyCsDi8ohwmvfrOTTxS0tO9ta26vJLddT3cEM67bxOZPewwxDtE+gC9OrrFPTvkED3aTw096ApPO2sImb2Y/7O7U5OkPDLlirz4+mO98GoCu0A8Wb1qwRa8pF2HvJmzDD11qx48BJUIPJPKbDxosDy8rHnpu3cACTwAQB+9EGJGvKL6p7wK1A89ZxNqvX3AXLIIWDq9eiG+PbDDCbuSof28rzqEPYQ2hbxi7WM92h7iPfhSybyANJw4wSzeOyjeQrqYi6g8+1VKPaiWhD0xzM48kmSbPBKGBD3s7Do8CaN0PeWspD2kC7g8FgGIPPaMYb0I9o28DDt6vMYCULviEgG9GsXdvJE0RzzkHgi8kiuFPQBKUjeXX2u93Vk+PEfkuj3yv0s8P1B1vAzIL71BW/W9ciApPNaQCD4sm6o74DDyPMZV/DvZyWg9E28/vIxqJbtwO3U71G99PVy0UTtGtlQ9azQOPWQkNLy8oCc74hYlvbLUtDua6vW9aqmLveuNgDxad9+88YEbPdEWLrz872g9QeaDPUwa3L1HlMA8EcMMPQGcpjz9HxM938ovvdSxhTu9bnu8zKtcO16jjz1O1N27IdFGvNpfAL3KnV69rh8uPWT4NjyABKC6Eh1EPdLgQb1aue28DMahu6HvdTwNC4G8ug6lPPhXwTvR/so88mwyvQhT/ruAByI5S2PdvG3m3rxd2Xo94xoaPc4WCT1Wauq8wlmpPVTNLjyI6dU8ukPsO4YMIL18k6g7wH0cPRfaDD3gST28Nnw9PdAVgTv+Y229hGN3PSvExTydKyO99ouAvHSEzjzObGA9IBEMumTxYD1uoCw95sIyPRjbM731Xhk9sOEmPT7F/bwSK2m9lJp0PIVCELxQzkA9gCaBPN4RqD34xpg9Xkf2vbSPSbzGaIK8ekm4vEcnwjxGr+26wNHpPF0oFT0Aygk9eAJJPX8uSr0s8O+81kMMvfL6r7y+imM9QD+8Oxyanb3/uOK8mts+PWVgHD2DR7a8cyVHvfgr+bsRUxq9HHG6vNnrGr1KtgE9BiMCvHR8mrxqyGY9nGytPLhZy7yw9SI9JwaXPPfESTwwshe96tzmPBLEv70pdSM9JNEVPVY3vDx5Wvs83g+1PFKZxrw0pKi8dwlPPQTBYr0IJxS8+qQiO4WCgr24EHO8z1AsvTk0D71Sdpw8X6PEvCoVDL3jcmG8ol/lvT79g4kYuUI9iVkyvejG2TxhHiy9Y1bjvKr4Ob3wvu48g0eSvNM3Ir1vLh69i8gsvYLVtzwIkG28i3nlPLdYXT11wYS8C9CVPJoXYz0QhOi6UEMxPbbKiTwlZ607MVTdPBxOb724Txc8LqUMPbptPDsWQQg9etfMu5oXnDzePyG9Dm/nPFbl4bwfpHU8LD1FPa0ygjwbWQ+9XvM+PBxQQj2gmIo8pJuTPddPQT3XuV09mKyjPJ2IHrwGQu+7LBxHPHRUFDvM7Lw9YCpMvaN8jL16Wbm8FOCQO/yMY7xc7ig9mOE7PbaYqbzAq548tfYAPbDhCDzVCzG9imovPYCR5zvdZ5q8cjJNvNCquzsFAFe9vn4qvUv2vzwCnls9gEkNuEvLUjw+ocE8HNbPPNwEIb389IA8HI0/vSkT9TyCF7q9cZ8LPcJFsbzx/Em9DH1SvVmiMz0CsZo8E4eXPLMSsrz4nqM8CNoCu8K0lLzyWN29xO2APFgW4LtMY/y70LhFvcJxoQheXnC9G82LvKjFYjuoiWO8yD6uu3dubj2SXom8ltQmPWA59rvwiHQ9rKP8u3T4NDscDDK8eIAOvap+2LxYyZ89n8xMPLfI7rt6v3m9lkgavdC2ZLszP587KpOGvThzKz0YIMU8v+chvEz0FL0oYvG8TsqpvHdNs7yCuzO9k8IUvP6Bd72o2dw88P0rvTDdGLys/IM8IiYhPKRJMLwVpUY9+czQPIA3nz3LcYG9DD91PWyEhbzqBLq8HHh6velKAz3Uko27OHYCvBTKa7yUAne9T0riPLBsYTow7Ao9eenKvANg/jx4anw9pIoQvfJSRDyWo768xPJ7u2/cM736vRI9mBcevRWnDjzjrE68F+vyPJLJxL0QqPa7e9SFPCgjursyS4c9hp0oPPl5Eb3YRKk8IfPFvBCv9zvw+/S6aTUSPVKdoz2WIXu8MR2fPONbWD2Yzi09l3ZJPZiVqLqU7EE7fsowPdt5drwTV0q9wF5QO0Rji73wrPo8AKW2OMoSe7K43248emkuvZT9xTsyJSk9VYFjvf/YHj2egZM7LkDFPY5ZBr3ogJQ7vBn1O/med7yUGOu82GpyvPVpib2jYGa8tMaoPPkQ1zwajM07jBuSPdXlSzx8FqM8gMQ2PdtzuDytjF49/GoovNrygrwmVRA8x+OIvQhbqbygXzG9YJyVugC1nrn8K3G9yNkYPSRTtTwgy0m8OCqyugSkh71Gfia8rk5XvJuBGrw96xG91lpWPJx/ST0drKo8ACDQPHr6/TylQi89fnYqPRocfr2jchW8AgtUvPpUvrwKNZu8RGwtPXnePLzmXcW9wHTFOaDtHL1F/XG8uKM6vAyCobsLpUS8gj7IvQQy/ru7FCW9mIAEvQ/TCL11y2M7oew+PW5riD3XjNg7wGecO8q4ljwABc061tYPvOYTiD0FkAW9SyMTvBZf1L1/td88gK/2uxVnfb0S+To8wFE1PbLV+TsunGG9ZN8lPdCYlLwlv2k9ywwcvaWoHj2InrK7uKDHOzgWBTzuBVW96eTBvPKCprwsmd087FGzPJZPXj2W3sU86wzqvJrS8rxcTvU77vV0PaIl/rv7bde7xQuNPHosjD0njRk9oz92PJk+PLx4UUC7LFH3O1QLgT0xZjq9QBpPPTPELjsZTXW8EHV7PPiPbDxsI529wrilvKdglDwbSQg9wofRvOXiiLxVTkQ9gGqjOeS3i73GYw88ZvkHOw4oBb0YFjS9EvFNuqjvQr2sWPo7qYaBvCyG0zs/zyk8PPq4vZPzljzAOL08AlywvXwwb70kaDU9Bmx5vCpk1bsEmX49iCe+uZocOL3kAIu7rNW5u8RKhr1APxA5EF0OvZ5QnbxkBEc99R+2vCMKijw5eZe9LMg+PajRY7p/EF69TuvmPAuJFj1H5EQ9BC0DO09JtrvWoxA9zSRaPFcfwbwsWnA9x09VPAR7gjkvxS681QIjPe5Fbb3Th0C8nNGTPPSJh70OmoO8gg19PT1Qoz1Eyn+9XjxNPVzAsTs/AjQ9krZVPF88lolGUD69ME4zPSA0+TzAowA9O22dvQCiyzu99tM8OVHXPOWHoDyZm3u99EJVuxzC5zuKAVS9ejZlPOqJjb2rLiA9iPYyvEwSEr0SsQk8QJYpvQqUhrzqOCs89LbpPH5707x0SqE8o3xvO4V7zTyFwYe9jXK7PWhdrbytyxU9A7R/PQIzMr0CryA9O47rPM81/Lx4nRi9wV71vamAET0axiI87pPTPbwHyDwpRdC8afH2vI5RhrxnSoQ8sGw9PeKPJD2iOXk96iMjPdLe1ry0e307iyxJvXK0Yr2U1LU9BTxfvVGPgbtWMsM8+G+kPai4ajzJ8Cy9U/xWPbeR27yVCCU9ouU/vaWlqL0Givo8fl1WvGfnCb2pNVc8ShB6vFhJOj16w/a8JCdtvUJIKr3SWSw8iXltvUSPpbumZzu8UnRdvYXQQb33xcY8JcMVPZkio7ynHIW9jSGcPD4sDr0kGaE8IKXcOwaQTT3pCJq9OgDUvMHza700jMU80OYuveMRpwh0qLe9V7AXvVArrTxTd1k9Umv5PC2xJr12UJG8w3jIO4zHWD1oFsG7ar0xPcamojyv/9E8njDsvF4/lTy+NKA80B72PE+Wibxr/bM8Sgs8vXGR1LtUSpI8AoepvU9AYb1R1ke9EJi6PN04nz1Mvoe8863cvDtv5DzpEya9pGQaPV7VGjwsc/w87AFCPLi8Yz0QTu06qPwRPRjm4zpkvSO8ZgTcvAKIsTz1mU+8gZVGPTpHArzX7Si9sNNUvED1hDyYgCa7BZxEPMjspTvAieE8yryBPaJO3r0a6io9TfGKPCp81zyjEE+9GoLTPQwso7uaqn28ebJyvMC/Mz1V+Za9V/cUvbrLojza1zq9JpfzPD5uYDxEsGa9PL0MPjGGobwSyoc9kHDIvf0QEb1+iBI9lAy+O0AGwbv8M5k87F1bvfeSbLyIOCW9mLbCO7Bh1jyN8lW9iR5NPcvdhrwSw8C8cB0lu6L5/jzt7gi8rvKzPHYoMD38Qf67FRO6PMiNUrL+3cO8FGHDPPM11rwG/im9Kq/wPJhq3zySPXU9AhZlPeKAXL3rsBA99csvPbOkobzR4uM8TpMePURboT3BaGS8+sRbvPh/3DwveiW9sPBUPThDDD0d2Hk8v+jFvGjGZ719+gg8g0OxPHvqmT0QatG8X4wcvS7FWj16qCK90i5lvMY5CL3Gk4i8XjeVO69GlzwB1508uhA1vJLKuzwgMBu7F6ENvPn1hD30zYq8bdnZPEbuSbzone67srWIPCGFM715hLe8nmSDPSIDOzu6DLg8lhoKPcAKzjo3De07D/SevLhc6TzV5xm9inaEvWEPTDxkCKi8q0jDPLLsCz3C4YY9np+cveZnpTwGGBi8LpMdvaWcDj1w+jM8gANPulDAbDwvvka8g6tfvD59wjzn/aE9VMeOPHoysz16nB097lgOPW7QHbzC8LM9n34lvX2zhLsBWVI9DI/hPDllCb2gjdq9MyzePKJFqzye6gu9aioMPEY/bTwqWVq93Aehu6SAhLwM5Ee9EoMkPYxgj7wROog9yMlNvDie2jscxpE7O6AfPC0Bj7ziHbW7TEXWu55hhrwHRjk9J7npu0jyrLtU+JK8npi2vN68Hb3Yr5m8DjLiO6xKAD3iTrg9/L6wO16Y5Ty3oII8rBgqvQCYXrzMy/e74RDSvDVmezwUSju80Z07PKFxCz2qjAw89T3CPFRz3bs6URI8+YVKvYijZ73NE3a8Y/5GPZ6N3zx3JGU8+o4YPAmt9zygeki93Cc/PTnEUr3fGi49WP7pu2gXXDvCcpk7bIMTPEpyuDv6K0G8wPAhvJMSJr2lfLG8VhM7vR7+LL0GrEM9KIA9O0SmrLyQ2FC7PqCQvDkLuL1Hp0K8Ou1APaLIuzyP2uq8AEeAuhClpL1NwYG9MZSQvSZP1rtYX1a7xLDpO3XOVLw6a9+8zmK0vHk10LyJnmC9WhqZPfhf4728kPm8VYjUvKSPK72OIxy9oOI/u+LIrDyMyhK9ylRHPUxRKz3ReMG8k5eiPFaHBYmMDac70IE1PCbv0LvQ7I+6hqHDu/wwWzyzGJ287OCBO7hV3rzIgIC9ZA8kvE7nSz2uvEK8jcYgPZZjdDz+S4c9COgNPMRLBT3t/bk8I0UGPe4jXryouWu9ShIwPOAaNL2uRS69HbvGvIU3cDyMrym9cHt9PcRrdLwBPq28Mr3WPB2Xjb1iYbi7hwMpPEtcDTwWPgq9pC1zuqThOL0aPD68uvwQPFLLSj0AMla8Uz7DOxIamDwjxjs93Di1O3Gvrbyoo0m9khsGPZLYGj2Q/by50dmVvckuDbwsOxM+RRp5PbIGmDwzNJW85IKyPVIiK7wfcpy8KBtDO7SJRjtMlY887gkNPIYcDL1lWBk98jagOgCKyDuChsq8atX4urQgnryZpIG8XOJevP6AJDtpV1s8SGOBPHqjAT1QDhg6lXCKPbIHC73gy3O9GeUNPXHuC702+yc87Eb1O7pncLtwaUu95Kl3PJBXNjuYBS48wlCOPV1ugb2AXF+4gTfnvEWRlgcfMfy8zpS4PAVNbb2y6DU98Hj5vGwhPLxHzAs95Pu7O3eJBj2xHWI8FQaZPGM/Lr3S39K8ivCHvTaduDxS7Xe9cf1zvLazc7wriQq9B7aBPVZANL3CvDA9pWaZvUBCzjwAlQK6zOulPXrhgb2tCuu7cOcPvDSxgzzgOAA9aXlJvUhAuDu8BMk7IgX+PMjWcL2Ys147kIBuu+8fTLy2V9s7xFYiPWQGgT2bgLC8aEASPYqeh72SIYq9CMY1vD9XiL0qn4I9Wh+pPRCqoLweN4W8dPIVvboGh72O7Bc8/luqvCXaSjx+jFm9XiGcPF2lv7wWhIS9mNm1O6JXhzxFuZ29RHsnPbho3Lwx9vq87KYCva+iITwgdFc9QfyhPTb8+DzDfH09gC9NuqqxpjwGjC29221WPe7ywjxMFiO9f31UvSwrabxw+jE8qPeXPDPTizxDSus8yPVHPeAo07xza1296Ec1Peeg9Lrzbhs8NMpQPQmR3zxUeyI99ITDPKFcebKTIHq94KNxPHV3hDuEk5O8XDWbvVBmt7xyUB49F11ZvGj8JzwoW4a72mIwPSjVXbsjzt28bNGePJqYEz2Q+8m6iIPIPXSYubzmBYO8bwIJPDiRgbxzEDc90bWMvbrrRD0AP3i7SpKFPJ3wm7umgIy8ORU3vHLYk7w4kVU8MWZ1PZA73zvlSIg9p1IgPYkfHb0/dwQ9sK5hvex2a70mCTG84bQwPddvKj27oP+8XFNuPCcisT0s5vU6JDNsPaAh373cZK28eSvIPH66Gzv/VIe8VmYaPDzIvjx2YjQ94Ek4ukuYoT1VX4S8VcS7vPp0AD1Gxke7MPSjupjXhj3YwV48k3N5vdKogby1Z6K7+h5xvcBH5zkJKmm81y3kuwzID71QXm27pfn3vHv/Kr2yRbs9pMmmveZznjuPTDY8r1gbPHlxIj0knEM9Q8wKvUUAyL0jgmi9JAsJvSfTz7ygSx+7Sxa3PPqK1jvqEUM8OZ0SvQ/BYDx3QBg8W+nxPPJb5TyzDPm78FOHOt0/dL3FVqE8ea0SvdVbdb2gZi29/hWGvLDCXr2wE8i8S12DveAa/jwofQk9eE+AvNUdgj0oaVW8esC5PDIWBLwOGLs8ATCWvLVyR70Uylk7FPqcvKCM/DyULQk9CR8gvUVhS72iLOa8lRGaPA7vYLyI1BU8uyD6PBASaz2PEri8NTRgPXqeO70z2t49LbCzvESPgb2BR4U97GCJO206OjxTnku994NrvGqClDw2gEu9cj8UPQCXDL0g4OA6sm8pvaxQVzyfEkm9tDl3Pb6+ML3idOU88oOVvMy2gDsUZ4293CKpPZb0dj2/qqQ93H9TPMS1Czy9UrQ9dOiLPJyUFTzmOdC8zBF8PdtfCLzU0YS8L6aWvATmKz2LGgo9MMIOPR5Xuzxh3t48QPciO1IKwrxyC5k8xktgPbNmnbxEgyY8UDjxOqEEObwSTYe8pThYvDRh8zuuOIA9aGwGPLunrDx4JSS8OjtEPAAi6Lp9esK84wWfvP6/NInyxyu9+j/aPACGibsK5SK8TcmWPLQBsDqjxDo9JqraO3TznDwbyI69mjrvvOR7hTyean88rxi2PKw08DzIdKg74Bklu+aveTxu8kQ9pXWivCAtTT0sFzu9zDE2vLFI+jyR3us7BNWsO37qGT1Wh6M8lnUEvcGyJrvAmpI6vBp3vTJ6x70Azy65wErOvE5gtLtF4QY9QtguPAdylzskabS9i44rvLXXgz3+c348xdKNvT48CL0lIHq8ltmdPALnCz1y7e68Xnf1vDj6Hj2AmEa62A9AO7BszTwJS+c8vBI1PNR5XD2dj1e9MLSYPQbu9jy65Qi9vqSnvX7luDzKw7E9+LQbvMxtez2E+/Y89haZPUFJuDy6TzE71iWivH2CiTxhHFQ8uOc8vLXHO71DIQg8mLoBu8CpdbyhdS297OaQOwyHdzzIyMA67r7wvAnhTT3oz+G6Q5znvKZiCj2Spww7KH4JPdLvtT1wbFK9OgyOPW/jmj02ppw8vd9rvSRTwgj2GuW8/ENHvLO/JLxemEo9foy8uzRCmzyAMta5RweCvQCoL7tC64g8g1K9vABPGjig7Iu80I9IvWmVCT01mAg8eHSEvAqS3r0nHlq8HAjMvDXi0b3EstQ8tBVqvU8Yv7weBqm8VvffOwDZlL26Zv68IORyvYmWkbys9GY7as9wvZU4arw1h4K9tBs1Pb5VCD30Lpc9BeLjPKOKezymFo89pOM8PVUpgD31ImC9JHlSPQBpgLgakEW8G2sivbSB9jx6La28yd2UPG8ClzwSvrq7DmZIvX6L3r1FGII8CBLBPXALM73ZrMk8phM1vCC9M7rYZUm7WpU4vbqpRbzHk5e9hQQdvO4h8LvbmAu9LHwUPG6WlzyaJ5480vg4Pb3qwrwSawu9Li01Pdl2EL3dt6K8wsXTPUjzCLwOSFQ8d5REPUW1br04xdg79ol4uzigAD38XHq7LKsPvNxalrzGw3+9+IqdPMVuvbxexbC88eauPI5KVrxsC4s8rKuFvKjuZ7IOYyy9wsIUPRCmmj2q/eg8mQ9ovXACrbyiNQo8jhVmPQuj8jyPM5y81zi7PRYCd7126yC91WdOPdpwxjtleok9xsigPcpzRL1DX4m9gYcfu3SCvzw6lYM9R+7UvK70SD0RHAo93K/KvCqc9j1+eqU9mXWYvI400bwIW5i9vxYaPbLegDyjPsU8y3OmPcOXN724Zwu7lEnUu4BMwzk19788NtWdvImtOT3gF3o96tfFPNd2uzy/tJu9bdngvD13Rr3g4bG6fufnOxzBQLsMPuS7E1nCvN7mlD0w1oA95Fl5u253VjytmBC83n3dPGzqiTu4AmC7loipvHdODb3goa290Jc6vQT/gL2ms6S8et6eu59JNT3meUe92CrgvC7N27yUKiC9nODyvGmI1TuuQyA999GQu6YAxrzCViE9xZEDPMQJ7LuMbFA9UL0+vO85aL28rjO99ch1PVsFHjxMnHI8tf0VPcUPGrx8mh47jZ/hvNKvAz2zp9y8mpl0PKOXQrukr0I92okXPQBlsLlouw09e1Z5vZXOdLxT3R29EZ7CPCY+FT0BZ/K87/0DPTlwrLuUOyo9FcAovJMyV7wxhHS9jqmtPZThA7x17ke9PQ2LvZwQFL23Moq8UFrFvPw01bu1lw+9SsUrvdW8NDrIU1K92TCnPeURZLyzZru8gpokPZS5RD1YZSk863mkOd+reDuUsmI9aRHWvU7RGD3JVPM8uDsqvaM/Mzxb5bw8bIEtvS9MGT3MFuo8T9u/PB48ILuxZRA7XDEIvXyjAD2GCQk94rbNu8ttK7zzcns9OCJjPdyfAz30gL+8/UvePA1LYzz8Gz89zribvAGDZrxniDm81PeJvBl4Q71X+R29c+ncPQYcML3i28O8zmAdPeKnrjwvQRu9ORVYPS5MJj2wecU9HOsVux0AhDy1pRg8SmeNO8xaFT0bIUu9dYdUO4i3gLsv8Pm8lK9uPL7AnT0DM9k8rN9fPHss8roZyvm87jY8vRSOJTz7VyW8PO8DvYCn5AbL4qU90SNMPJP1nDwQxZW9/y4FPc7/4DtSZzI86tHnvKlSFr0tlPK8ycIdvep4iT2slRW9wVshPU9TRDz7Gbi8PIckvBDBMT3r0bM9eCm9vC8dkztM7xC9JZJ9vHnWkjyW06C8l2Ldu/gznzzQxFS8nX98O5+pVzwUo3A8tMctvVUXRb2aQyM8gfcpvQztXL1iOTe9xL4svTIgH7y4LUK9viiCOy5GDz3UiAC9yCKSOos0ZLxPPpY8B1O8Ox/NzbxY/Jw9kqTrPGS02bwtaBu8qwd+vZCHFT0S3eG8t3xLu7kcoDsOwSq8ozQnPTNuLjykjEq8KzMUPHMciryTfh87AuLRvAU5Nbvb5PW8kqmNPH9LUT13SRY84+QKvVNqhztTZgw9v+aOO1Ioxb24/Cs8ddZ/O5xCMb3ElS28234eO4jW/rwPbb27aNuaPAFwOj2tqhg6E35BvJBMLTyj7yo72tMbvEk0vDwHOly9NhezPNzf2jxS3pc8xdDzvLzZLgc6xqm9Py0pvT7SE70h8pY9fu+cPDdEvjtyF/E84W0aPYRWfT3cMKA97OFzPSUlMT3ZTy89lVJ6ujGvsDzigvy8El+gPM4O0bznF129KDvDPCpvlb3Fnug8sD5ovdQQXL3+DBA9B3bOPK+kCz0aIV47Wukcvfke0LubzQA9bOzkvOGPm71YMKI9jwd6O0aiYD0y4Yw8TYcJPSjupjwl/AY8VePlPPWiPzyjaXC8DPupukDxHr314ZI8+Z1svEWNaz1KbqK8SNsgvRDEprptsBA93HNGPJIfx70+pWy8cro9PKwjMz377iE9lSG4OzxEYrw4WQK95+TcvDW20LzU+/Q8tO+avKUKp7rIST699ORSPcw2wrw1O806zPswvXszF70U91w998gAO5R6m7y5oaY8B8U/PfiMRT1bN2w9F4p9vH+yHD1cDT27FAxHPND/oDx7lnw9/Y1FvZOJczzKKe08ZA0ZPQB58Tyo3oO9arQcPWErMbzHYZA9g6uFu/CNX7JvD/U8HPWdPH55MT1X6iQ9EVtCvCpmmrwYzGw9JWz9OroN7zryzUA81pCKuoQOj7zNWHe9w8nHPOwo27xYY8E8+GtyvPfzGT1zQf857gOKvbDrBrlieIO7lp9jPFDzt7xiSM68qtTvvAT9Iz2h3YE9lO0LvUbkWL1SSMI8sUGdPMsOibqLH2m9ZYN7PZtvXzxJhfe8e6WtvChoZLsythi9z/qpvHZ1iLuSDlo9mOlLvRrwH7vB2PM8R/M1PTWqlb3HUJq7IRvPvF17OL0Hitm8VL5wPDheIT2+sSI90joBPPNQs7vKtxK9T0P8OkepAT09euC7tbGZPXvCHrqVut+7EnbhvS2JCbwqQAc84KwwPXFnAD0EL229Z8pHvdSvfz1ElZ69YvehPCZCKb3KFEM98fdOvL5aozzqIMA8gPJROUhEDzzwaIG7dEdjPbpjE71Q6Fo7z/L8vHFqNj0VIMe7dk4uPUBeeLty/oW7ACgdOlXFJjx20+G8V86WvaKsST0w6vo80ir1vNT/JLxWMSg9utKrPLvwUL1Sg2i8rrjzPBVEI7yA50w828MIvVWHarxUhYO7ur13PUpVXLxC0Vy9sBRcuzPC2bsNLie9Zpc4POZe1Ty1oem8xHmfPQDSxbtCchY9DlsnvYMEo7veF5e95lhAPaUQfTy0DT69wE4oPdWZHj0AYSc9OVYQPLRHZj1v79E9HnX/vVxUDr5oMhO91LoePQBtQTndUjs9FLisve+FDj0SWuI73A9ovGDTcrryfN+8wNtOvaxQhDyFF0A9WpiOvGfAsDy2LBY9Gd94PZdwOrtUtHQ7+BnRPMBRhL2FonQ9791zPFPOir242Yc9SmhCvEpQeLwmyG27WjyAPd83wTxOt1W9Vhb5PAM4Z7ywW1483EccPSTi0jvGW/K8XlSTPYtHUD283fW8HK2LvET6dr0oGKC8h63ZPHZo2Tw3h4m8Mra7PAP2sD24wFe7EcGCPXEuwTuQRt883GECu8QrjzsiBQg9UDzAvClhmInd0Dk9HJldPMO+YzzkqYC7iLiCPQQAUryh3BA9HncOvYq7K7zVEEC9ooqYPKZU0z38Cay8ImThPAh5or0sOza995pAvXNuyjzmrbo8cJsWO7Z21Ls4ABc8/uKZO6h66jz1bi09SM5FvEqmTb0ADV493ZHCPJIporyAMZG8AE9JvauHjDxoBBK94zkTPXU5f7w8wJK9ZIdovU71xrvD0Ai9v0QBvQAwYTm7yY283fybPMR5CbzftwI9+431u1O5/7xU6PE9AQDtO31dt7yqZu68srhfO33jqjwAHc06Mc2ePAHiZjwzBTS7tuoaPfUPGL1GcYU8QHVrPWwC8Tp+TLa82rJ8vZFaRT20L1+9MAhaPRpzvDwQy7e6yNOHvXRnOz1w+Uk6wk+RvOItCr0qcZw7DMTtOlKOIL23mXy8k587PJ31qLw0Yq67ft0pPHhdYj3SkCQ9PyoVvO4Hczx8VXw9FD0UPYanKTy4+oG91JtovRGjSLx7A4S88r2wvDnwvgipsoE8eNpnvbVC3bvHLSg9q9SjvSAFzTkIe/u7TGWSPQJ+zz30qDg8Qwb9PAozEz2OgLY9xDrNPOlEu7zif9s8jCaUvUUpF7xkSpO8eL0kvSYuSr2V0Da833VvvSyfMTyI/U+80oIavGepPT2fcae9qs37vHbcQL2YjzI7fAWeu2Zx4L0Yu4Q9NjDDu9vVF7zMvIy8y/tAPFB/YruTsFy8JGZiPf8O0DwBPB+8NW3BPAJpZr2Ay7S5KyuFvKsU2jwVR4W85P0IvXHhML1rH1C9ZDgXPcOGwr1y3MG8v4D4vAl4GrzbomM9gDrsOeiF+Lzo4uy8ap6lO5hVlL1W3y896D+RveiVyLuPWd69DEAPvJKb1rxo8V48dFtzPbwsrTuchum8IAqkvFnk5Dxk+3I8HJ4xPXw0vjtinIW8R4tkPBhGBz3Pnzs9+oKBPIb5Dj3a6ZC7Qd7WvBNGtLyXNCU9TSYcPeIwIDzDgFm9vM4VPcbfDb2LRxY9fJJnPKxYVrLWM8E8dN1tPfaADD3eq4O8GyUTvGRYjz1ocwY9meiDveYIAb3Mq2w9/7sgPThTtbvayhG9o4vOvJijf7xG7sg9dDZ1vB8ngT362AS9gA1GvPCojrzi/Os7JoCBPBdjHzweq+88HG4sPeIyYD0+f3M9x+zsu5D15L3X1168mGa7OqaHkDxG/au95RGLPRp2cDyOMRi8+rUQvYmC0jw6chU9KlBOvRiUgrxDnxU98KgAvH3Cgjxm1pY9L484veVg2rwINeG877ofvSRFobumWFy9t60ive6YzTyeQvg78xxrPe7ffL1ezqQ7WljsPCTngL2AwhY9uBbbPSvEpT1HDCM9mVw/vOb7o72Nn/S7SEC6PGPbYzwU1+48jSX6vNcnzjxIgpm8qdWMPH50Jj3c+PC797u4PFTzlLsUPTq9SzeRutOf6jym2V09n9ZMvMK0Vr0Z0o68TOMMPFRfXjvg3Um9hvU9vKtIx7p9tvY8afakvaIeoLtKKQ29UrQwvU2Z/DuxuF898d86PfG0xzyYboC8vhY1PCVAzDzgqh09yQ+RO1hPBL3c8aK8CwW/PGhzH70OP7U9WBo6O8xAkL0nc628g5wpPe1qezzhxvK95FsHvQ8Vm7xVkTc83Rz5PMC9Lr2dol+864YZunyiI7xmthO9K4dvPbDn5LwnX4+9xGwwPPYJQjzQ/YY9/AQ1vHnBjD2bsiM9pga0vSwYvLx3AzM85FYLvbq0mzzMDcU8sPUpPIXRXD1E61m8aNFBPesFjr1HgXu9lvJSvV2oyrzqgjc9YXXEPMqfUL0OBqc7BOFuPKgAWj37WrE7GXZXvAPBqTty9VG8qlOCvLyUprya9WM9B0v3PG0Y+7x7YWY9BtmMPR1WAL21HA87Ex+ZPUVbebsMMxW9PVhvPA51szytxBi7taB2PWmtFr23QEe9mKuGPB8oF72Z+Hm9FVWqPcT0l701+pe6ljefu5Q06joPY488IxiEvdSwdjs2u/w7SP/DuwGCPjvpSjM8OjLbvbYc0oh0ZhI9Z+tgPCM3Pz3xGjc87ZYrPAYwE72aj0M96DIPvHqkTjyF8e+8UDmvvSIVhz3xmJW91yS+PBtmfT23eno71YNcvG79Lj0zweq8hRazPF7QOD3au5W9S/TMPO7o67wg0Cg90YIGPRM7ALy8GI29WxSSu09cDz2BfYu8/6d6PRu1wb1bUv25k4dTPL1kVT0t+Ti9S/fJPJgoJz22LoG7xVkevOZJxLsPGpQ8OEfFvOv1C730ONA7c1g7O7k8o7yUMIo9nXnuvDdZwLoB17s8OICDvd9KFb2xziw9fKxiPZSlprzlFUs9MCAoPUouDD08DPy75T3GOyvpUTl7FAu8fZ/VvHBbsjyugCm9qSIFvb20HD12Kks9sbzyuxJCc7z1Bcw8uRlxvGUUiru5Etc8AYAgvSJAm72uL5O9CrNLPMU7Dr0wGLG8GrOsvPbui7yDCbs7dcwKvR0eezuqDq68YuUEvBfapbssBqe964lBPUvXnryjW+M6BI49vTofkweH7F69hcw1vRUbzLxVAgI9gqZhPap/hbxFN/W8cR+OOlSzDT1BNvo82NtPPZD29LxxLSs9r1PmPAG33bsKjzM90AywvHmNUr3ZEXM7iUEWPVdAP73SlWw9obS0vQHJvbws+jc8tXP6PM4VkL0Ub488W4E1vZg6OjwmqzW9XI51vMJRe727I0U9UtOyvW076zyodAU9hGdzPG7BIzyQbRs9VOzpPGG8UTxwXYC80sqjPPqg9rwSftO8v+1evak3rD2Dpj8978kIveA9Dz1lHha88s2UPKL66LzBlIa7QJzHu8IamjybU3e89OT2u0r7Tz2ncZ29TbXtu67CS70N/6E98DMlvdLTEL1Pusq8yhSUvNbZD71oD5a86yszPel5NryiO7g8/6gOPeIiF70BXiA7FiEfvRvhQD0Hx/48XFdhvKf78DwOpuS7QCwPPeioZT2IEv+7EKxfPRz9NTzL+ua8ZXRKvEpAl7xmfT69Z8IQvV1Zm7tuPoQ9npZ4vINUZLLMqnW8HGXjOyK40D0/aoo8RqmpPLiX4zxnuIm81WayPbtqQbxmO7E8vc/COqPr67yOGhM88/Y7PRtlvDtkyg29UiVgPSe9cjxijZ+85JskParigj1O9Q49m0KJuwcXzDzgC8E9ilzLu7zOOr2B+gG8kEX1vEpFdT0UfeO8X2pdPQMULD3LbZ+97w74Pc+/Ej3I+uA7IEgNvdfMwr3AMba8bH8+PX4qMz2CGvO8vRvUvASctj3PnCE9RglvPVZpo73UoGw9BlA4PR5uvLxLW6y8JehfO8eSNzsMf8+8OPsMPW6aqDzsaMy8fsS6PCfV4ryaKZc84RzsPEuK6rr/nPA83wDHvXlwUL3b1vY7cTTZPGyBMT26zQ09H/Qyvc/WwTyTBZ68cv8SuwdEEr14VEM9VfZWu2nQqbsV/o69lDbFPG68W7wjPBs9mKPyPDS0Pr3sZXe7/etQPQyqzjznpHi9JQ7BuoHURjvagG+8F96vvW2swLpXksk7u2PEPJ3J8jw5rke8T0uSPMpP9DyjTfo8Kbm6Olgynjy6/MA9AgfOO9rLorxZa928QDmWPAceKb1CCOM94eLRPAfqer0sw2O9V5+GPEoUwzwODR2+H1lPvSE1hzwsdQE88pORPOkLkzvanRM9ye0cPSYhIr3qxH+8A9GDPc8XRL15nLK9ZnVRvI8vKD2yG8Q9zQssPCK2jz2BeME86puyvWHcV7pcAR090qWRvHX71TzoxTM9MIUUPXY6QD0DyTw8q4SBPSJQ071Ztoi8hJdmvOSTIz3KcYw9K77cuPl2uLxXJTo8YxrsPNh5Ej0wJtw8HDOWOqOhJ71fwx697IQivaayLzzzaAo9WEoNvIJpa70awq08ycyUPZjAT72EZQK8C6JkPZyyNr1+Brq8esJTPYKKZjx+Pdg7g4vWPeFV8Lw+LS69iuMhPVcKdL30d+q8gds7PRFmGb0QDAs9uW0FvJpO8jyEjTg95RXAvTy2czpICuM50WvVOztvDzuSNuC7fUPXvUgtK4lmAyg8Ook1vHThCD01UJk8mUACPX0Efb1RNnI90Y0qveXIXToDeGi9UcCevcKZVT2T7PC8kXPuPBXslLrAHRa9np9CPBakpzyuSI68ZU8TvRT6PD03rl29TBjdPBhCMbqrEc24qvPYPHf29bz+a2S9N3N9PBWD/DxYDiK8v/ITPXbJRr3BEuO8mTkMPdhFnj16ysy8Asr0POfqF7uOHRQ9YtIcvVdQGTwr5Fc9qS38u0rHorzG7su8VjRmvMXzHr0etNw9FFuKvfwJEr0Mlag8VfMDvYEec708s5I9rQ41Pf4w0Luuek49HWo6PfTWk7ubyn49g9muPDoThrwCrSO8QQbWvFgfrDxnjx69UPz7uxPS7Ty5xBI9J9YfPPn0HjzP+P089sGKveClPjttHcC7efcqvSG0hb2Cl1O9y2StvJIVQrxNqx68eMEtvAx8Hju1MsY5zuGKvFZuPTxG6+2735kMPImBMjy7BRS9xf+TuolsA7wglwm84TBVvXZSvAjsyKO9oko0vZVQl7yU8kM9ufKCOsLhJT21S2q9T9j8O/F54zw1oa896+eGPanQ2ry8pJ871t8OPVaLPjzaYqU8eetdvTc/fbzS0Rs9rvA+PV/uf7vHHUw9V9MPvebhDTyF7Tg9j4wmvJAV/bvHdps8lYYjveL/SLt4hhe9VTakvLeL6722Z589XS3WvKg/bj2QCaA8bNadOyjlHztiqKc8fYYbPSRagLwm3YO9jxIdvYwOorwcSfu8Yk4zvQIFiz1MuJs7/l+2vEq5ez1LpNM7d6Vpu/lWub1rcoS9qD2zPKcW0Dy9D0c8nSc3O++pZT1dsY+9CxGVvGApib2KTqw8PAJbvWUa/ryIAUq82IMhPZTEwrzNzTq9KMCPPDrobjz+QhI9yCFFPRGMHLzBctI8BOmmvLN8lTrrtIy8p1oNve4rUT27GV88IIiRPEZ9HD3ytAw9jKk8PYx+GT0QMgu8U2y1vCjXLb2nzjK9Qq6+vHxdHL11uss8Ho8VvelTVLIMZ6m8IE7jPG4KxD1BKP47CbMhPSTcZD1hYzq8vHWRPfrDdb2oOJo8UV4YPPSdUL3Jp5874NsQO6TF7bzpgVG7vCIHPV65jDy8p0y8KokdPU6CkT0sCyQ9WhE5PYfkGrxs06U9705AvSIql7xaNq87Fp0QvevevTrHOkO96FqTPUPQoDxEsYm9YunzPcO2gD3eMho9kO+svMuRh722V+g7x4R1vA07Kz3hd2K8dFfqvDE1QD0zpvQ8oUzjPH4UQr1mNOA8Hpf4OwFGtbtyARW9T3UaPRpggD1xMKq8yPuaPHFtQTxaGo29fDjCvJfeiDsTSBA8ne2dPaLKhjufrUs8Jz3aPNoB9jzvasu7gVI3PVjdWzxtSL89q+/TuKPRYD0JbUO9rBN/PL2aLj00LXO8llTWvBg4Zbx5Vj69rjUXvCfEnLxwrkK8ZCNdPACKhb21x7u8zrRAPXoPIb3Q7wy9IEawubOQGz0GxyW900EzvX8BKLy5ulm9zKU+vWcdgDwuQgc95quwPChAKj3gP3K93pXkvPoTlzoDaSw9yc5mOx9mVrytPEO936JUvK+1OrwKg8m85QtfvF74Y72vb5C8Ai1ZPdw8AT2XtEy9cY8vPEQdubwhYAC9GMpGPQv/Q72/qZ+98eSqvIoqh73OuxC9FwvkuyvYAbtcAiO9AYxnOxx/AL0vwpw8y5eRPGkYLT1+7Fk8hT0XPbqt1LviZ+k8bEngvHNzCb2A9AG882LWvL+ZdLxlTBK9iqiruwoALb3IMw69xyEZvXTmPL2c99w8AU1XPBsK+DpIU/28XLWEPLQNIz3C+Xu9RO2avEtQ3jvZCCi9z1DtO2LVbr3s5zE88aPKPKxN67xm5A09GWPcPbEFJ7s+9qO7AF5CPXCZIL0UZIu9+UjvvEs/KTzV8Fq8B4qxOynOEDz780C9kCRBPdH087y/2Mm8FUUOPJ5EgL1RY8s8jUr6uyTHmzw+ptg8V0zvPAVibTy0OwO99SGgOim7wrwasOs8Cz+mvDA9MYlvMB89b3a9vXLMOz21ffE5T9d/vEFEzjxNg+E7TqfrvHSUFbsQv5g7/ACtO9gytz1BgD48ylgTPcwi5LxorTE9g7MHPUKGHT1022U8kzxYO7GFQbwqF8y89VGTPMXpzbyvPgc9YE8dO/Us6jwOAJ681LxpvWjyH7vZC6A8IaSzPO3DQryFJhm9uk5UO2WpnD0FP9C82LgHvPqbmDzFiBA71WerOcpA37zjEFK8uWwOvAsAKTwMsIA9GEq6vEr5NT1aotQ8DUM3PMgJk7wOnoY8CUX6vYVzmrzXCpk8nSuKvON+kb3tz3Q9i6tqPBuG4zyhhs86yFUuO7jQtLzXady8ZXqTvQ6Xwjx38YW8GiPevH1TzjxGluc8zE3ZvMavsrzd7W49GcSivDv5zzwDZdw8WLPQO36zjL3gOJ48UZ5mPNilgj1+VeS8gq0MvePMIzx6q/g9pJYRPEv67DwPeb68+soJPQKoA73yx4i9SchcPKf8bz3NFvm8Oq0svY2VoQfthPc7Wa2sux3Lm7yWExm9GefkPNEmGj3ulbY8QaW/PJuuhTvU9RQ9nv4+PV9rZr0zWaQ8tS1wOrWeIjzSMuI8lRQtu9b4brxJCEu8EbvDPH1fqL1r3Bc9zRizPDilkjyVhbu71ZhsO+H4HT12TRG8vzgYPKLJrLwVUr0834LTvBWrKr1inIE9T+UTPBPD+jytc3c9XHxWPYnb/jykYbA9s7jOO8XeVL1/rOI8jrH/PJoIerwnImi8vg0tvFTwa7yaBiM8Bj/lPAZThTzrrkO8JM48vAfPqLxFPRy8053Hu1AQ5zv5FM284y23O9hOzzyxGky9pTn7PNSZ77xoCBc8C/P9PLHbhL2dzyO91qLbvJdFvrzo3Le8kBQmvYEigb1Y7hG9dw5xvR3fyTzUBJ49pxfOvFPxQbzKImw9UPsCPIofszwcaxY9t6INPaCyAr3Fcw68HvOcu9ebaLsacbQ8nLOOPY1et7ytF5g8uJtDvWU+Nz27iWg90w63PDBDY7JhqY+8R3hvvS5dMz119HS8RN9OPQuX/DzRRaC7fpchPRbNR7xLc6u6f0pIPV6y2rzbCtW8LziKu6I3xT1oqWm8GSTRu69SZbzF3A28GekQPBG5zbw/FQC8bxlAPZhdzTvhZYA7jjrXPCvEL72+Qhw8IN/tO7rXuT31Aos8qF9/u4/4mzyGZWe9m+htPRLd/7wt8n68fGsovCJQRbymu5c9X1XzvC3VQr16UXO8U9cDPQv6qTtrC+W8deRKPGj6j72EiPg79kibvFtGDb18MUC91tS+PZ6d1rwuv9a8jmWFPa5XQz1fcJW8thLHPLqQgTxTENg8v0Ktu3iAnbpv6Jk9zP4ZPJGdrrzeYC29uW7EPIBvXLp3aXY8OJxKurpMbj0nv4C9OAySPMTSnzxOFKM8LUf5OzYSvLsgpQg9smgivOSEtLxJLCS8duxuvdMcNDwdSRM9LkzcvORDOr1hCvi8cUxrvCwzSjxjHy29+grtuyyhhrvA1e27tPRVvcvKCD1QSEI8SKVHvCgmnbr0jW+8VkUDPS3aKr2oOu486z7LvJ7kPr2FZFu9kIJMu58Sgbzux7Q85mB2PUAol7y5LQO9sJRyPDQQLbye/ha90vZ3vDAGO7rLk0a83gsnPfcTpz2Y3Yc8U/FmPTgjGTtPtqS8yUc+PZCaJr3gtHa9UEaqPSJSVzxcfQ098YKpPMnG1jy8iIc84calvHzp370Ap8S6+CogOwmqgLyMqgg9TC4YvR9OKjzKi4w8OJawu/bzpr1mgPY83N4wPeL3hLyyq6k9r5myPJo/WD3KQ7s889quPAqMUD2A/dU8mEFIO26S3L2RL+E8plUYvfinmL2g2nS7+G46vMxxXL0MdMY87kHOPX5Q9zwUQyG9igmFPaZnGjwVzbi8pThVvesqvTwv4Sc9YJfnu5Yusjx2v9i8F7MTPdK8Tb2irQC9lIonPI66KLz0CXS97QOzPB8Isz0QgLW7AM2tOa+53bukxge9mJeIvYB8jrxwEAm7GM42u8hcpYko1Gg9tNSvvOzTjL3SMjI8F+fKPH/wzjxkaQ49pxAqvGcMDL0UKa68b/AlPQcfBD1/g+y8wK3BOqCOm7xku/u63L+NvOebmD0BLYs82KdCvQsAgTwA93m53PyPPKjNMruNs5k9qHG+PRoKRrwQfmg73EByveCoNzzokgM9isMHPA3Cm7uH+Z+8YG/NuonKXD1klhK9D5i/PCy0Qj1+64u9HM6AvePlkb2g+I295m0BvMDTbzqUAZU8Q7tPPdyoIb218+c9E9t7PN7+9Ly4Lvq7pAH+u1rQEL1dmCE9vOTqvKiAR72zthA9GDP/vH4YMbvIAqM8rHuwO/LLQjwYzk27C6tsvcJP+jygb5S9LKv+vMObCz3ui0q92st5vWSB47zQtci6X9VEPdFUCr3pcIE8kAlouhYFpLy1hZW98OUAPLlMpb1Sdau8UQ73vDcLiz2CELw9TvQDvc1OVj1bdSk9RHZDO87GgTwGf0G9DCAJPFYXHbxCobw8omE5PHGwkAiFQkU8cK87vFbQIL141gQ9vthNvTpVmDzyThQ93kMIPY8ZfTxI3487quEdPdRpUj0EAJ08VqqavA0Er7uNgaQ8SAMzvfQOgzz4+4O6OOUDO9rOlr3fXim9JAnEOrTLJDyjS2K8wU0pvXjuwD0ZQGa8vKCdvFWFh709p4Y9GB0zvGtxhL1VGJo9s4CAPOJPy7w5ER89AJkGPayxN70T+0484CKjPXpNkjxuHnO8CxrxPBEK3rwQum89nrUuPSSLgb1weDS72vV+vCodZT3p7Jq9hLucPdwboL1/AQa9chClPPfNGT20pa+881+nPEl8BTzQcAw92Qm9PGZFrr12lhQ9to4BvejYeryIhi+9uAzbPN3NC72co8w84myOvfVljL3Bal48S5hVvVzUjT1MmZO9L+MavPs6H71qsSq95AQ2vUeGkT3zADA83g1jvL5TFL2W/b07oLo8PHDx1roO+Ks8gDu3PLHWyryu9aO9JQ4hPPbRfTwc1JQ9o5ZIvfgihrL+Sjm9tHEHPPg5nz123xi7hOYjPerTAz0LLHs8DM2KPU7hNrwV5oE8+iKlvEDzTbwEKsa8RnfiPJv3bD0PVTy9j52GO1CtiD2xcA+9hADtPCbOhTwiHoG9rtv4PDKsEz048bI9OdLXu8tQg7xAfoc9C0dIPO3ZuLwyYtC7KF9VPdmPGzzhPhG90w3YvJ3OFj0csv28lLyzOyKCZz1z3Y+98OyxuqtttLzwsJw77jJKu2J7VL2QHy49Fe4hPUJBWLw5xtG8mF5FvB+bAL3MmVU8dWPEPZb1Dz0Q+vi60q8UPTsj2jzmHmq9XAV9O0JovLxKUJY7Rm/cPWClrrt8dMW7WzdSvTHywzsQr5+8su6DPKth9rulVyE8T0ADPg6omjwJXYa8e82wu+77QryMi6u8GURRPXyGtbwQ4bu8Tqs5vL4QSr3QFYQ8BbHzvE0YZr2/yoG9Vmt5vGDoBTz1AAm96pOVvGYtB7zuEne8jAqVPRplgL2f9hy9zllfvJ53Lb1TSTg9bkoNPHi0grvWmAa9gDgLO2I1Fj2tyue8o09svI2YN72xWWO91KlYPHPfkT1c5ps7RVq1PMLnVzwKt+a7HUWjPKZvgT1UH/+8iVWhOzCt8jtBgGq70BeXPEeLVTxAnkg8URZWPa83CL1Z8Dm8uyFnvO+PnjspPmu97V8zPbLidz0t5YO8DOOUvY6YJj3O8xi8GpXdvMw9c73joJ+8UhZzvU+RhLwKh/E8YI83vfU5pDzmLPa7NWVZPZWJkT35ITC79oKpvIxeBb18GTI8A8ugPCjyZTxA9x48RNUpveZibL1DZD08uc5MPQ5fzzyeZrU9uMWGO2GNr70/g6E84Rj3PJ+uA71XFey8ExojPltulbyRj5m8iMGcPKbaMD2gSSg91ligPKnpBr0lQpM94x1ouu8sWL0fU4e8cJ49O1M8kb05qLI8BEu9PXDlyLxRphy8/rLtPJhVAj1otra8T6YQPadkET1rGz+7mD1VOxqYRr3ISrC8tQ/rvG8qjokVcyg9O+lnPBuM1jtSTGk9GO1BvYP6Xj09qW29/pKevFWjfLzc9ey70QbcPHlEhj3cimw8NmhhPcOPvztnzY87dHYvPXQmVTtgwSQ5csrfuieqC73T/Zg64tR1vKPRAj189MY8P+XPvFEB/DxDe5a8u5KqvP6RMTyAgAu9mz7rPCFNBjy5ZpS8+/BcPeIqgrwNxoc8jggdvfP2WjyGgN+7YqWXvIAp2zqWScA8SqKRO+LuAb7oZtA87g21PXCQWz1Tgwo9NhszPbvjQz156Jo605+5vdrpizxNbBm9YwMWuyrR5rwSYv28fNGnuy3WhbwVGHo9PH4PPbt4ybmjTba8KjBHvel71r3Uyb06YENAvaDDDz39g6g9MKMxvVP4mzzicm097uVTPMTjprxXj1E8kRAOvSx+sD0tj9K92kymPfD0Tjxa0ne8xfKMvStP9rv53mc8+kqSPJhatTyvzxG9kcxjuwAI9DfSNhC9RpHRu2otiD0CDxM9ri+bvd4qxAjx/Im9v8dMvY4y2jxzXa07olSVPWRGXb0KWag90KIYPd9X0ryFPIk8a0B/u24Ynbyozzw9PE8DPYMRvz3oNek8lW0PO/+BcjwPJWe9cqgtvQN4Xr3XLsW8m7VUvPM6ib1/H6O8FYcvuCwzND24E0w8YDYwvBk/pTy8Mwo8mdmfvBgdvr1+taW8+iRXve2KIz35ODK9mWVsO8HIozxM3L682ov6PNsy8TyrLYK8kB7IPcv/jDsxd3Q9a9MBPFvAoTur68O5lDNwPfNzEr1QPbi7eMdCPcC/m7n99QO8oV5OO1YqRD0wXBO83K2PPVKEwDsbYQy8tX0SPXRi2ryISiw9AetSvZv9obrnPbQ7Kv+9PLlycr21xCG8abTGvICJh729ppg7plPVvMmMl7y0ZBy9pEUgvXHszzzKWau80rlPPTA8Tj08Vh89NscqvRtfO7xmYkA86gaEvd4mxTtdLDM810DJu5dUoLyg0tM831BnuiHs373WtBm9chZUvY5NZrK2v+y8G3YovPyJMz2NYa08y1YvPJG/hz3WrdS8kKLfO2ROrDx7eVA9lgYXPFiVsTy5xSK9iRRRPAhIvDzLwEC9FkBavQ1KJjzCfee7UamAPOcYH72yXyY9zR2NPO8Wr7yBpbK8JglHPRa6cTwofJ89W2cMvPwEGDvxNNs8xPXAPYyvlDpZ5hi9inQfvXlhQr1Hc5G9aKVPPNmZW7sjmxO9qrKmPN/1kby4PXI9HTNoPZhhB72jNUu8tiaIPEvlBb0E3oq7XpLOvF6+GL1Dg6y8vP2aPdNbZD2JzRY9XIqUvEYCtjyG3j49gKpnvWvIvrymgqg8jpYDPV6Q8by16DK9yNExvFqLCT2LHik6Nj4iPQBS9bk5ZJQ9yzF4O3z8XT1AlQ28vRRavPjl1TxMKOC8+h0HPWncMztalmW94MGbuy0aNjzhC2Q8Ra+su5sZT70TLXU8xqxRPWyJBL3B3aW7tJQavEtE4zxQxaa8bcMMvDoyebzNRWu9D2sJvfjxYrzr0FU9Nw07Pc3mBT0eQxa9e9JBPHdawrs93uE876Vmuzl2iDyTA2q9FkOsPAvg3bwetag8bTtSvSt7PL3nttQ86jpRPb37pzt5e669hRMZvGW3Pr1NVEm84aGBu1CKo7ysiF29qHSyvBLbsb1aeRO9dLiuPNgsGjxttmC9Xs3IPJ/c97og+JE8QCXevGvlID0mIYa7F1GOPL4F4ztLbOg85nT9vFEecb1cnGk79GZKvU3gGLxlkTq9RymxPMzbGL3W9ja92tGMvVi6Mr3OpZ48EuCPPAyIHb1LFIs8JuU7vFWF7jyOkU69DfsRunWbaDwtRBC98tVIO6V6er1P6qU86x2LPWie87wEwik9SEQVPp4wI7wBBdc8mCFAPWSu0rybEjG95d4ovaQIhTwvYxm8ryqCPLCryLwQvBY80wktPTtiYb25V0a7BSWdPAzDl734vNE89NUsvAFPxTv0Zf27AjQCPVe+0TyrDaa8r9WEu7AuMro71iu8cvoFvRjzoIndGtk7q0lyveTDXT20LO48pcGpPKSVFj07ldW8EIjCvA3hgzwmUBM99xQgOxh2jj2eDQ899vg6PaPddTyUEaI9tZgLPHEsAj16Af287fv1OykiPLxoJk29Hi/dPIQ+nrxSAG48F3FNPVjPEbxOURy9wlCbvRkfDDxTMAQ9b1nFPGZXH7zeCIG99g6nvLZphT3uLxs8Mk/yvH8WVD1SrUe8bbEGO5KNerwCo8U7pdA6vApnT7tVz3w9qk8ZPcZG/jxsGA49I/BoPOvbajqrN/K4u/bWvTvWwLwsehU8VkDkOx/oAL0QDyg9gjM0O0AjhjxoEUO71BKNPBmA27tVhtQ45OSavQZoCDxWkKC8T//JvFUfoz0f0y09/GtZvbUKkrzw2Tw9D5cDPEtisDyQ8V08+S23uzITyb0rJws51pWEPNTbdD3DRB69AUAjvUelIrzir5s9CfsyPGxMTzx9Qvm8UPCbOUHK4LxJgTm9zySuPGglhD09yhA7j6EpvZ/48AjRVMC8gSw9PPdAibwnBji9RlYDPfXqKzpO6iY9IzGEPMueQ7uitzI93pIEPcakGL37deI7BymHPPirnjyRK0m8S7wAPT4J+bz5wxm9DjcaPN8fkb17nxY9oqibvGvkiLn9qCC9foFRu6NtNzz66xm93s7IPKPEuDtgrC49f+ruvNe+XrwE9vc8WzsBvMs6hT0H+VA9Wy/Bu11YETwE3ZM9cOrDOk7xy7wGfFG8IYsHPbZ9qLz/iwi9g8FIOy0yDTs2DdI8GW0LPHhyo7wPHpc7SRbjvOnFB73iVve8R/u1vA2LIr2fUxq9g/M5vEDHLD3YNpe9llCPPK1KOb38gCw9eNqWPLUHuL34Bn698TOavGzlnrvIKlY7R0YjvTb6H7zmUoO8C6MSvd1ShjxjBbQ8mXI7vYarAT3WWiM9sab3O1CT8jsFy3Y8/k8HPfhULbymeFi8WpsvvLNmIz0vaVY8KXgqPJRmfrwKzLw88WEVvAb4Kj0WOY89IM2RPDceVbIiOVa95Js7vbIEuz3472u8Cn2mvLsK4jxpr5O6v7EUPHZJgbxI8Xy7CsaHPJzXDr3LDQ29GQz1O/y+0j3AMBI6Zg+Vu0Ys3juuIp+8GAGnuw4SWLz/nEq8r3TiPCk03DySLCY8Zj+SPJyg1ry0xDM9QFdwOrJ2rD1jq+g8GyEvPMHBwTw1zsK8uFm7PXQFN73W1b88hCtNvFMGTbwnYKo9Z3CqvKlVeLxCjIu8mqsGPZnjYz18SRw8sc0iPQvbtL0EVJ47LlM4vP1V9rz2Ely9vWw0PVzCbb3i7Ky8W7QfPTLgKz1PtQE8us0FvGlRdTyzPSQ9j1xxPHvzeTsfYGg9HWBfvVrGjr0Pvrw79R+dPDxKkDwREGm86CVKPQVq4zzNWLY7Dj7nO9eu8bxSPiS8Hs8SOmTdNT33nYk8TUqSPO3GNDscWau9N+dYPEx1Lb2UGMO9P5yEu7vJ7zsIVq486nu4O0NG8bxvk7Q6MqIEPavTd7xHTzu9M+KUvPA6pDssvIw8YnzPO7g7ebyN7848gaIkvCvBMbvCIgu9s7k9O80jzbkWPxQ8DyjZvONX5btbOQm910BKPFN/arxMGLe8AbCiPW78gjzJb1E76PwXvcGPxjs7MH88g/exPF8hbTxziRY7TyExPF5sEjx6WK+9dMe/PE4EPb3dBD874iQgPQMRNj3HieK7LVFgPBtLeT0ie4c9jKrKvSkYs72XNHI7ezuVOpvW/jzgjoQ8FEgYvQ38LT3e3i+9zrg3PeslOj2wU748QTLBvNX3jLygaua6t+hMu4Y9t7w+AqM8cfnjPNEcg72DTc28dzNLu6QzXj1aCaE940+zO/epsr2ikDA9ZYcyurKgSDzVUzy9Aaj3PWLN5jx6pRC9+TTWvPLKxLwUA5W8uVcLvDFeJ7w8KCg80kmEPdfPuTwSQ5q9aFU+vJ46WbwBnSQ9+ylRPfwPPryoT/Y8Qo/HPGeQyzz78CE8XwAePW6NA7xtGK87DmKdPHZKyTwMVqs8cMomvc30T4kSHYQ8fzVdPKRp4bw9vIY80viIPSPnUzxoUpc8sLJsvCIyab0VMHu9BjSrvHO5IT2CcAE9tG48u9miWbttnnO9pPE3PUnU+zu1cKg8bEGMveMDL72Kv988o7AuPAoVhj0Q45k8icuxvPGWubsNR7E84QeUPRHeL7we9Tm9s/Lxu6wbSL2jmBU94pxCPZS2R7zLDiE5sYKxvVq/obwcdea8WUiFvVOJRDz3dLi8RjAZu356Bzz3/Po8L9xqPGa89rwE1mo8nEKCPJCEr7wFflW86punPFzacT2rnKM8MxSBO8rYizxYqHG8bKY3PaAJj72wHac68QC/PGz/PTvq55W8JJ8HvafMGD204zk82Q/XPBlcdD3JO187u9M9uw/kljxTWXI8MkPOPNiJhL1n+RS7ENTDvV4ROr1k4UA7NKsSPWp9ebwxoCm947+NvTtKmTzcyp09W7zrvDLGWzwcVBU91pgWPZhtYjxfHpG97SVHO+Zxnz3KCTA9SiINPMKbGwmHwTa961+yvOUWMb1T1wU9HwCuPG3nRDvt8Nk6R4JcPOASFD010fU8PYq0O2x2dLwbS2Y9KroxvEphizxGMgE9U4jcOyqfzbwA/w+9KPOLvf8nJr2J1m88+PWTvfP8qrtV1oe70J8BPTd4Qj0MvEe9bBSGvLxM3DsAZto69d22OggJI73/wpK8982rPKLsUz1POLI8gMy1OejAC72JOy69JNOhPecUlzwWk2C9fhg0PY3scb0udT88f+EZvFBgND20r1M8zlDBPNagBr09DZi9BdTGPa1hnL3cZJC8pzmivOhYyrvAumI9koxHPMjncbwOCjK8eJcHvdphXL1TFc88ihx7PC5ebrvX7Yq9Aa0+PaY30bx0M647bQ50PXNTNj235qK7AOdNPFELqDyiNGM8LX6LPE2c6DwfsHW75VxhPbPi0DvfMe48H3bMPH/lJT2EV0y80tmEvfOI8zzB6aA90gxHPCK1xrwExws6K7xNPH7zRjwr3148z5X0PKz8SLJWzug8XPqfPGlMBz2Q3ZM8RDitO1UW3jx7eHk6dWY+vTKR8DykiQI+SpViPOPzfTvkQFW8hA8oPSXAiLus54Y8B8CIvFYMNT3Igda8EVUuvXqKMz2s/Aq8YU6LvDDUhz1Q+my712KCvNs46zvPkfE8yEm0vYBFvr3zJla918u7vLu5+7tg9fK8JJftPI9lRDtJph+9QvC9vN3gaDu8agk9jZRLvN3vn7wmA0A9N1cRvRa/Er33mAw8vBJKvXiDQb0CAO+86TyNvM+pkrwjqga99fn2Osjo3Dy0syQ9Yc8hPFvlqjto2k89D62Au8bOaTwyhSg9xsLDPauWa7hM7mi9iXauvbsLtbx1Gb+8DwPqPKvg/zxsule8OES8OzZEBz2FmzY6pOeZO6MjzjwOv/Q8yOWPPN7TqbxBydi71AW4O5smQzv6ryU84IfLvOykNr1PwQI7EWgePZYDBj08xx28iV3Wu6L8C71nwFg8WpEfvSQLdz0U7B+9tLyEvNkUSz0jSxk9+tzuPICgHrlZM6Q8PWPWO0i4uTwF3pA7CaO1PO2q2DoTUEC9WMqbO6/HAr03gIY98PSlvEyFrbxz0LU8CuB6PC+KEjzfiPy92yOSva5rQ70c5d+8etnhPM0zBrxZK1G9tZYzvVyN8ryTjla9NdloPVRlwLwrq+29Gc26PIsUkD3Z00A9c46HO5Rdqzz58vo7WlOtvZaepzzinjY8HkX/vM5+Br20M9U7lRYfu32zlDzBx8Q8T+u+PNeLhb3EST68YPSQvSzCcbz7Kt48e9/QvMQ0EL0XVgk9A8IKPBYxKD34ya+8fFArPGmDLLwC4Ky8zuY7vGluUb3wgSI9Kx6VuRb43r0r0iA89usOPss0NroInVI7/UIePSvq97yqQ6687MHgvH6kFTxSFkE9xZJaPeu0D7uSTcy7oSSzO998fryVG5683hvKPLT0VL2RGlu8NnIWvBBRFj3LrAA9w/7HvASJtzyxTGq8BLeMvNyjJ714m3O73dMlvVQAL4lNJRs9h4PUPNEFXz1TM8E8AI7IPMlaMbxYKDC8GvAmvWQ9D725hVS9f8kQvbiGbz0WNu68iPqsPBrzgT0aW4a8p8OBvZ01Wz2qOYc9B/6iO9XDPD2iYb68Kjf7PJyC9ryyxNo83rZLPdGOgbzSWoG9kigUPLav8Dy4Ao89yG1TPd17db1F/hU77Dr5vHVrLz0i0yK9DGWGvTikND1wqTy9SjlOvJmykzwl7Zo8TPpcvUOe/LymmHk9UCKAPHNEwjsmYKE9iOSbOyXWkLr1pDY7MFCavcKPJ71Ivo08XesFvF7RWbwhLB08nLsJPez4Fj0Nmt074HocPTL5Dr24HAw7XbTavIm6dDwYvIK99Tw/vRMOgD1sZwc9WGRkvWSZrzxSX3E8nIUjvJdj9byZSGg8JgKqvETFPr1trO28UrDtu9yMGb3XtFk8k3H6usXXVjoULUe9f12KPB3O0jwKfTY8LcZHvIOSzTxGkXe9BfaWPHQKW7xHPbk8o8DXvJg8ywgwJcC9nhhfvboTDTy10Kk9pZ9zPc4JHr3LaGa9FGcpPZOwBD2GHDk9HVixPO+0QL1d9JE9n25lPccK8brCjEa9SmMcPcTwr72dcWK9AL/APPR+EL1aXxw9hO6PvTZLOr2KLX892V8MPXvtPbyrPN05teKBvVVqeTuG4uW8LP3nvCdUfL1dEu88ejM9vRz1GT1cMw49DyS7PFIEHj2Vmu26lPThPPLNCjt1np681/asvNOgQr34J4a7mtgIvfmnlT2NUs+8Tz4rvSJ9KT0/VxE9wLmQPNhorL06mJe8AjnRPJYkzTyKTPy8A0xUu5Ab+DyezEC96lkYPDPkbr12xKg9QNB2ualJer3Wu/O8i47Eu9tKGjt29Te93x/0vPypz7xf+fI8143jPGkWHzzZDVU8cXGJO1fVrTzIJ9k88iFlvQIMfjyZ+8S8TI4XPWF3jT3qD4k9bhmMPPwnbD2Szc68fKYSvVxz6zy7Anm9/kfSPEtUmrruyjg9t6GSu/HaWrKlVQa9hdSFvLk7jD08Kvk8v3aoPD+v6DylKSQ9NiOQPHJJWbySHmg9HHHVO3V4YLkyLEi9l94sPWp2prxP99s7Xq3XPD5tPLwOcje9vitMvXukTT1RRaM8ljVFPdzwPL3+4Yc9RlRFPDo8oTzjzDE9XyuPO0UC5DwXOuC7AjapPBBlyDyYlia9GjOhPRD5OT1DzUM9T9GDPIKU8LxUZLW7nzLmOxOrNj2yMeW7Zft2uxJwGj2X7VU8FmsGPdJRY70Lyje69JNJPZ/WSLxNunS9m9N8PZSXkTxoPLa8GXZlPHd+/jx1tAO7wQPEvG9DMTyy0ao9o0RaPbGwobtzVaw9afMWvVbnoT0eTsy8Uf2tPZSwJL1yVhY90ZesvFE8jj2mjo082pF3PVlGqLzo3c49oficPHPQZDyJLRq9/1CVPexSw7xQRyA9r1r2PDoF9byKiFO97vyiuw/ymj3sIqc8XY4ZPWDGQLwohjy89u8ovUJJWTwsJMy8gkWgvWwoMT06cjM966a5vNrPTzxv8PQ8xBvBPNbtFT1XWSU9FkuIPdhtTz3ayd6820Y4vMnAD73nuwU90sUSvZLFpL3+70A9kWiVvY27YD0WR9q9akjavGb03zy/CH+8jK4QPdARmL0xm3q9gNFmvOSAOL3nnQK9HkKrPeJ6Izx2PQW+WBM7PO98Rz3o3Ys9FhKPu9biNj0qF3q9jKfXuzY1mjzM59i8mlsnO2XyaDyFeZc8aptGvYbLTDw18Cy9laEIvdr81L1qRjk9MAEzvcRV+TyZxxW8Ye39vC+9Tb2bt/08cH9RPGgXlbxgYC27BJwtPeSqhr0e0g+8TEvsvBB1a71eumO80ZLovDw5lb0o5ng9hC2YPZouCj2Bt3Q82R9/PKoBNLxtMjE9rSYovYB05blYfq27/iCsPH9R5Tzvp7G8HCphPR22hb03S7U88ECpPAICB727XBM7PLi8OvdoQLxFXxA8UvGgvJ0HIr0UF7C8TGTSvCZCLL1qIis89MVsvYJLwIh7LG49TSmFPSktGb14zbo9br9kvM/MlDwh8d+8qqyovePvQb2IU+q9PRxrvCDvZz0I2X09yNoOPdD0vzxM2GC8doCKvSPlLTx438c7vqAFvW62fz3gLt682nxCvBAyr7qIBoy8zOoDPfipmbz6mrO9UnXgvI43yTwAk+U8M0jdPMCKDb3FxB29M12pvIgxmj2qf2082H5GuUCH1bkO9gg9BmpFvNS1ITx0PEE9ROv3vL02Sz3ZNww9gIBxu21zJb1p/sE9HecXvVZMoLxHZvs8fhYOvUsLTr1hKr89mPSfPNQN/LxKsow7DjRjPP9zG72gPuc9s7pXPXCPHb0kyjM8D6OlPA7SLD3m0mu9JlFsvEhM8Dm4x/67PhYAvA2WiTzcFSy8TrsXvZKSqb3AWkM8BtF6vdY0J71t/ma9rJDJPFJ3vzyrAYe8wQnUu/Ci5LxE5IS9gPX9O5BOozy2X908j4uzPKzRorsh2U09bGEfPOQzkD0PGAi9qEGBvRBBhofmAe69lvREvULu7rvB+Hw9Ejn+uyDAB7uluWm9bOUqPb+RBT2ERTk92jtQPcm6hb0OHDM8eqBgPX6upjtHXzq9/rC/PLArQL1RUp298EgCu377Ur3ARd481mzluk2gQLwjFJ097AJBPWjRoDwFOKW8iOaWvfF2E73Hd0K9voR0PK5ls70g39k8COaxvMoYnT1WOYQ8F1H1PNaINzv6xgi99B48PS6WvDzA29Y6uHQTPC7RfLwX/727Gkk+verZIbwwAgQ8A6FbPI+0vDyM7XW8fKVwvApMXb2pey+9TVUoPDhORzsjzE+9yQtmPPxJUj3UBxa9IbWGPanbqL2piV49Hj+TvNV3gb0Wz5e8EDQAPUK2EzyNshc7oA2iOnHAuzxi++C7ZoLhOj5ma7xAkjQ9ghbQO0bQi7wyJCe9AiYCvaTDZjyrttA8kHDMPK7nXD0csLg7/4rZvKed9bwWyrS9e5GFvZpEnTs2rzM8GBahvdAKLrxeR6Q82pXvO0+hcrJn2AQ9atnovMLqAbx3YsM8LszQPFinwDwcuYI7ZdLvvLfAH72+/qk9BYrwvNaDiDz4Nxi99tJwPTYaKjy/Yry8MaWqPRXrILyzltO8d4x6vGgGnT19ugE9mLcoPcahn70yGmw9/g6nPbwuorzlNJG9tKsPPboIgrqxpG69u+WiPTy+grxZILy7pM0BPqx9zjq2H6U9pS6xPMm6v73wJ7G8HR1IPQw4UDv6Xf+8InlnPYYDDz13rKu81pNMPOSIzDsMI+s8gXtBPY4mFz3kkLO9im4RPlM407zRrYK9i7EyPU/sTz0ZoBC8kN0JPXVgd71syT89+dEpPdu4Sz3cBKc8XnDMvQHHMz3Vjl88fE9xPHlP37wfHrc7yIJaPWakVT049CS8Ka8vPSqZkLx+O3U9sAHeum0XBb0bv7u9kij6PNC6kL2jHl68k8yNvB47R72CkBe8+IlXvPzWtzzDPeS8V6RpPctDIT0fYiE9LDKKvYTZQT3AWn68fXfeO1XMfrx/lZE9wk+cu6AMA71BMFE8DrLVPKVjDz2vSJq7Lg2iuw1pz7wWXBa9DvKfPLgmTzzaQfg8ul+5uxE8NjyYUEo8D8yevSstsTyuBWO8/8ezO0bM8DwKl469DPeJPRzvwLyY4Je7Sa/RPIY8fbzxw9W8dmzVPG2FSrsOo6+8AobvPGTfVj3mqnM9VdFLPFm5CbzK8pK87chfPMUeCb2AgpE75W0FPTeKiLyQc2E6SniuvZHewzw+mSE9UcM0vKXvDD3rukQ96+xPvKQ7gbxrC7c8Yw/IvL1EvTzNCho72RdmuzKK4jy4Q4i9uhHQPDnhBr0AFj27VAnjO8lQCr1dBAQ8Sa2GvZpkAzyv2Qq7yOh1PZLmxTwFXW28M/E1u1xB0zwlydI8X58DvZuRXbxudQg9LFTkO9YWdj1ciLi8gnTZuxE3k7wijcQ89hLcPI+GI70nW3O8YnaGPBybRD27cme989y6PGTPOTs9EFq9jgW1PJnilL1wkig9oCOyvFCw74kP0Mg8DduTPcEOKTypVoA9VmTfPDo/cjxqLBs9CxRpve4VCL0935K9oNXEu9xrhjwH7f+72L8VPUh11zt6mtq7kVpLvTTPO724I4c9F5qtvRHmlTtYiyI71gqZPBr+Mr3W89E8QPdMPBZ8iLzg8327i7vpPIAgzTsB+cc8xBjUO/D3h712fs27Y813PShAyTp40ju9I7OQvR71Gjz2Ogk9xxn2PNgQMz11Ewc9m3UOvRo/mDxkUKA82FZzPCq+fTxp5409MwnyPALSRL3/I3o8cKbJvNLyU70Jumk9U3/bu3lzDb3AVRs9nmRtPSrEqzwi9G28wht3PWZGmzzBaz09Ur2evNiyvTzIi0Y84uesu5in2rzy7gU8/yLEO4YonTzk3MS8BpKBvZ82gb2Ax3I8dt0kvemYgLuV7JG9UQXVvNhyw7wyLHS8giEBPCg8RjywWTq9Y5wFvWy/Qb30RBY9ibz9vDgkbz3VtT293c8OvZr1fz0oHlA7OPNvvWQ/WgnNr9q9NghcvR7YzTy29W4824vFvJpes73ZPx+9NLhxvPKr9jxUgF89wHSRPWhq4rtC/rg96+rHPHIHqDzWz0I8I4VDPO7BCL0YXsq7vxZXvaU/lzz19+g6xn5NvVOGgrqti3M84RrtPA9zzj0gwMm8fwhuvUVjBz0zGs68hSLAPHm3GL33QWE9U4zyu3MXnD1oQ866faVTPWu6ozzkA0a94pwVPPDNbD3OzKq8bzKuPO02ZbsOxps7L28ivU3exTzT6ii8KgHKO+PmUTukZOc8KF+kPF+xk70NFfy8gwLrPNuBBT3dIhO90LItPbEOmTzzsxO9aZgQvQqcpbwRA8886TacvBSPy7zXFny9wHY/PXeFNTyef+W8YP3IPVjFjzyV86W8NSwBvcarN7xEKuM8CBUjO0NbTD15Y5y9d+UlPGjmaDxR9k49Xt/0PPnZuzsJaPq8cfSSvB3HN7yc4/S8UUZsvLa7CjxHPI48nAvQu0dLH72+TeQ8d5UQvUKxcbLYGE290JrOu1inTrxdaae8rEhdPY3iYT1+Toc9gN0qvXxmb71w8Mw89kJavNoWhj3r0568KqOfPSZcNz0ajiG9Jy3du5NSILyNGgy9CoEHPaOlrz2QQJE6I4zfugwb6rx0uaE8pllpPe1E1zzGZka9IzkkvQbgFjsHD229TOw4PVwDIb31yhy9BnTDPG7buzyIaEA95ZI1vS3eHL006nW8GHBUvW9H3z048gs8PuX2O9+jNj1GsxI9oxEnvVtRnbpc42U75stJPeIcH7u7ZN88XDo2PXosaryF0P474oetvck6xrtj2hO9rRUWvFOsMb2xZMs7u04mPNHvgj0V3lg8A2RrvfpInb1FKPS7t/X3PPYqkjwplJw8B5T2vHNeDrxko+i8ZE52vIaoMD3r79Y8OhevPMLAobxRabO8kfYePal0ID0IgP08z+AXvRhlGb3RpNe8puPgPFesvTznW1W81ic+POwwnDoQA5A8OsqGvQjlDT0JBxC9EE1ovN7XoLym6wY9BPwVPRlAuDvHwwU8JMrKO2m3nzxt95W8qLZ7PHIHHTwpaRW9+FS3OcIhwLppEYk989xxu9m2Fb24h+O8fd74PFwtAzy9A929smUYvVX7Mb2LfL08pOlDPLMumrz79gy9NFNkvM7R3rwwhfW87WYyPBw6N7321Mq9xcYUPew2tjwvbn09x69avDEmTD3pdQs9V8SUvcmSnby1KtU8/dw4vHchKbwvxUo8xlUhvFdmszxqE3o8ysoIPfJ/lb0qvKC8M0OOvSBAsbkgZw89UbSUu8NaZL2knku7QgTcPPUv0zymtFK8tCUEvOte9zqPNOc8pxDtuzrjmrwrK9c807gMPNAqnb0rByc9i4LIPR/tdrzgbww97my/PJYUBLxzxeq8InydvHJtlryTAvA8JE8uPeg0ZDueooA8ESr8PL8jprzFI0q95MznPIZ8V73cHw69fi5gvJQmhDzhEpI7IPwLvRegxjvR58M8DGGEvCEcIr1q6ZY7jbWFvQdCBYmAG6E9mTAePF9bhz1V+dG4cslEPG+LSLzl9dG7UqYhve/8sbxMnR69DJJgvSPvvj25+g69dO3UO5cLoj2sNEQ8dKgcvXMRfz24tIU9KvbXPNtqIT0T+DK8mQq1PHCf7bwWubW7E9RhPW1Ox7sQHD29IfVhvCwOEz14STg8RlwRPU/ma730KfA8wVqkumR1Dz2FI4G97qtNvXrZ7TwxfhS9C5uWu2isKT3wcD89EoK4vBJhSb38vtg85LsJPXiDXrwT3Z099FXNO4CKO7x/I2e7JM5gvebyCr0r/zu6+AnGOzjEJjoRY7Y8u847PJ8FyTw4iXK8bU4+Pet5BryvLNC8WLHAvBfOKz3l7au9g48dvdelMT0ZT+A8JQpxvPv/Jzz8hBu81v7HvJZVIrx7yYk8KqSAvNipJb2RBoi9zY1mPAhEYbzlfGm8gMH3vHZYmLtUMxe9xobnPD4rrDwXwmo8wEFFOwGNAzyIRZS9/AQyPB2eRrsAqwK6lvCnvNr1FgiiWr29/4dRvJl8crwaQlk9VKF4PfW7Irt56TO9VU6PPThB1LuYRj49DkSXPKRvEb2jLFY9ChHku9ko2Lt5/Ua9JkijPM8Wib0wbXi9TrG/PDT3srwOJRY9GaGfvTe0o7zOrJE9GRkdPfThC711tgm7/joaveZAL7wOqEa8ODsxvCnpdb3B9lI8IKhyvbv4JD1GWyw9DL/DPLlfwjz7+bo7aZPuPKiJ3ju8Nb28MlIHPEFNB73hid+8xOGUvSuxdz2FqYe8+szfvAIXTDrDhdk8tzmJO4LUC71ClQ48ZmSgvL1rFD2KcxK8VwGHu/wFXjwaQZ69S5OXvPwQEL0gc5E9yqyjvKA7er3NYgy8xcDsusqtfb0YONi8kNoRvfodCb2kxDk9CE0DPehDVzwDByg7BmZBPDWBHD0FAD49bK/OvA4LeT3Cnxq8TjyePbP8tD0XAq89y9A8PP69Yj1MYwW9XhLGPM3EgDzNoA+9IdhDPICL+zkG5ZM91UVZvNMMVrKqx0i9nKKMO3+gIz2iRVI9cln9vK8lFD2nQga8qg6BPTIlAL2AghE9nD04PJsbUjwnJYC91vbcPOIArLwDYq88wKeCPYgLojtc7+O7gwksu+x88zwAm8c8iKiIPTEzbrthAIw9zI0vO381NTvLTEM7y3xNvF29WDwsBTK9m7KoPIO5hjzTNVS9g0uKPc3pwDwm46g8PR/wu6YHUr1kazm86xIsPCmvsDynPhy9QcGGO+o9oT0uoR49CMKJPOsL9by9M8E8poyNPZjeKb2FiTy9PmyAPIeNhLwx4Le8eGOsO3IOiDzNjGm9uHq8OnIjZ7ySafg8pyImPdH6FDyc0C09t2wpvTQurb256gS9ywIfPbDzFz2Gor68qm7fvDXtq7xYFEo83gF8vCLeWj0hCja88sw/PZrqGL39cY6892UHPQQAeT3ne8m8JKB7vdjWA71WNc27dBzXPBaWBj2gHnM5FT4XPPWBGLwB+hc9BrLmvOhjUz2EuBa9V56VvOoAlryiPUM90hl4Pa6uFzumq788NjxnvOow/Dye8Yi9sUONvOxNHz0IDFu9ENVdOzjuCLthn1894ClUPGDlTbyAbie9qhGXPFAR07p+Ebe92l8jvfqtv7yT25q7gjIePEOIIb2guqq9MOUmvYc4/rz43Y67lw8pPET5Ab3szIK9ZOkdPWQfMDwubnk93JMFvThkRTwga0I9TE0FvoMawzwsbAo9iJRdvCjtM7yw2sU6iNdYPM6fvzx8Vjw9+qEPPWJKi71lG6a8XzEoveXONjwJt2A9DnkSvZ5+Ar2zFXM855f7PJvi2TzW1uK8iuA4uyWnIT2yVmU9ODRYvBhZqLwWgP489zjsPODlJr2jS/o8FfqdPSPZYL18Wl08yK9tPOtoIj3eN7a8qdK+vCDEgLzHa/08TJ7iPHPdgzwgGwM9lCWVPJQA47ucRJK9LgQYPcNmEr0IcP+9n3LYu1dxGbwaI+083ZsXvHh6kzy+lAM9P64ivcg467pCK2w8KaWnvR++24jiTtI9NFKbO6bSnD2PiY+82eYRPeAHULsnIbq8VGc3vJ3RNLwJ1DK9VXJTvRdI8D2Vr5K9+nEkPRaDuj3nG6M8lpvTvHBrRj2DDjM9MH2OO/T0TT1MjeW7/qcuPURNw7wmRkK8lcCYPVZoCry54wu9skVXvP6NBz3weLw7UOHFO4EpTr0Fmh89VDdgvKTt7DyZ4C693MsUveLobD20BQ283sknPSCZ0TzBA108wJnevMVOnb2pWsA8qztAPZwq0Lyjymo9j8IoPW4BSDwMg6u6jO8vvb9/q7yYezm8QCfLOoPHZrxhfxu9L1YRPSYbKj3VRiy9AX0oPXTq1TugSzS6i5EpvWUpCT3iPNO81J20vNSoqT2yYpE7AAyCOs5oTzx36Aa9viHRPFC2O7sXTAG9K1WJvLW4hrw1x169nBnxPBrR3zwAgJm18VLUvCVHlDyaYTm98vZ6O8M3Ajy4EBw8rGC1OohDjzwW8Ne9viuVPLY4SL1goRk6EDmlvPAiBwfgHbK9kObCu/x//bzY/u08MOsKPbY9H72Mih29h/5LPb/iQjx7cEw9ckJzPaZ/IL1uQ149IaeWvPQWGLzxJ029ost2PA6CpL0auJS9wCk5OrUcDb3oh7886CypvcW4D72yS609Rf8aPQTkDb1yh6U6NflXvHDy5DrG1AG9O9LEO/AxhL0b12S85GlVvaAYp7rJCK08XEBAu5MYJj2B1Ta8XZUUPPA1rrpKIYq9oRU4PKfPbb2WMMS8AoRavfpuez2sUYE8koagvY8o0TzGiCw9WOl1utW3cL2xquA8iWTLvLUWlz2Ab+M6pPpKPLWz0jtxk1e9lnMzveDqyLwXWYE9nT+cvAy9Bb05HAI8AHbCOngVRr3rlCm9YG6KvX7BZb35nbA84FTQOxfagLyIDV+8TjdfvMb1uTxS0Is9M9cJvL5gWD2QSRG9El+6PexUbj32l7k9pXVDvNysSz0Oemi8weL7O9r3oj39FZ+9iUTxPKWwoL2awB8+kDm1vJfrbrJIdhS9OB1DOz4tcj0UYq89smhBvK+FaTw312S8ZqKbPSjgnjr3BGE8wU0TPajh8DxeY5a95/++PNPxJryrZ4U8YrtjPWxzmTs5FyG8YN+HvHAazTzMnLo8HBQ4PbKjCr3SXrE9Ck2UvLh2Cb2Wsm48HdUlvdG9Kj2UOGE8lCtfO11HHT3D2B69L5OGPVDZhDx8lAa959vyO8z86bygj4a9Q2fVOxCUKz1aEQ+8tJM1vKKtPz14pUw9VAyAPPULY736hQA9SswjPdTfg72O9va8LcidPJwqBjwIOOM7IOpVuTxGAj3vXRC9xHpOPOHlqrwA2xC5H5fmukMkWLu2bDc9ji7uvBwqNT3V05c7xAQHPsdnCbyru5I8Z/5uvRjKFz2DUkA8ZyThPVspHD0cCok9qffDvGjyZz3ogyW9tnTDPHg6W70wLWg9KpcgPL/mqT1dxAG9B66RPeszxDzAImk7Opw1OzKQwrwKL6S92cm1vbAnzTtgMbK8lqkuvDeWqj2Aow89vpe6vOOYYjy44FQ9jCSau4cFLr1Bpa09FFqrPZxngz2i/cG9rhzgPFTKnbwgmL08BspTvDrV4LzWInO8seE1vTWDyjyAmJu91VpgvShL2bx8w5i6ZhfRPJL1xL3/uHG9vw8WvHA1Q7wmyJS9qo4JPrraZTv8Rx6++kbAPGwI3T2K5rQ9wGUtO4PSyjx22Mg8zTI9vczIbT14uRE9Glh0PNgCgD16aVI9HUrvvPQOAT3cj3w60s9FPAHFGr2cVS87KHNmvVdpkby5Hj69H5Cdu4nm9bwRGzE8EEVLPCkcXL0M0Tm8H92cPH930by0Ni+826CZvPjPmL2OlOE8ssbyu2ZIm71I+cE93MvqPF1eMj2N61w8Uh6QvYTVTz1HOgs9Pve+vRUIg73uLAu9WlY+PRgTmz0Up4u80K57PfrDg70QDp48bCF+O8asVb0C4n89wrxcO7QESzpEAYO9ooqBvSV3rLyI6AM81L9lvRyS7btOqgU8Rf4evbCrlIn+9009mYOIvARvYTz1CoA9d0M0Pfdk6DsiZ4K8qSQAvqRmwDwQcLa9e+CIvYgS2z2mKhw9ChTNOyti27sAE/s4p3WAu/bsrLukEEg9qglFvWTGrbwcp9i86Klju+6GMTyCMY48NG/xPFBEibz4IdC9ntx1vXLvzTzOSZs9KsCTvDKbOb2s8wC8VOhAPORSij0Iurq5aQwfPPghqjxxO7w8tNJDPLw6f7vDxEE9IErtvDp1qT26KIE97Kvju1ks0DtS7wo9dNMsvfLl5rzEL5M8C503vaZIjr2WXcc9KiprPX/wqrxCDHS70p43vTmMlTx99Lg9NsDSPYhxFr2gw5889LYHPbejET025sS9omr3u6cLv7xUyua7eLgpvEBV2jiWjbu8IttZvaZ0srzUqbI80knJvJkWpb2p+lW9EU0HPdg1izu4Uh07SP3pvCKAKb0vjai9yxOZuyxhdrzZoca7+NElPZBKfbq716o7ClMOPNEkWz2Smy+90IlTvY54iAhzvvq9GCXMvV3VVr1qzo89EGcMunbagzu+JcS9hZIAPIgFhTuJ84c8wlu9PJ/RMbzEPcQ8bJGfPHkglTy+a0K97QmmvChHZ7sZdCq9DvdJPUqzjb2Zwys8f2kMPC1SSrzaUaU9xEKcOyWeaz0KbTa8EsR1vcgkCb1cvlG9BFZxvCpjPr0QsJ48MbYPvdxdXD0WVJo9/Zg6vb4pxzzRawG9zPBfPDNXVD0yKjg7aOu1PDynhDlCKdu6dJVOPDQrKD3GqVm8YiQ2PYbNfj24/QW9U53OO3Ifi72rAhu8qHohPMYjab3m8ZQ8TF+XvEllgz3hZqi82NM0PdQsw71AbWA9r18hvbCJh737U+K8XkChPSuZpbxtF9i7lKFyPKxYdTxGZBi8oLAwvV9LEDxXxw89WhYYPffPu7zuadS7NC3EPFrc3rze9aQ9KGUwPQi9dzz5wE49QbACvQPWz7yUHN+9h/JgvVgq/DssW8g7aluTvVZRK73MPUQ8tvSpOj4ye7LN9UU93wOrPAQ7xDz+PDG9jpgOPfg1uz0iwxk9q5WfvIIMRb2+q6I92KdtvZKigjwr+hs8dS82PU/sOj00oH29y+WCPaGJcL1yypK9gahOvM3rkT2Lyas81LiTPZTxGb04n5o9O/YMPWX+BT23dQ2+5HZeu37C3zygIpO9Jk9VPcews7xOHeU7EuFTPTGrAb1bl+E9xToRPBHBnL2QC3s8X3eAPGqJ3Tus6hK9cmaEPfRRETx8w548VlcUPPBHJjxt9MM89FmrPXlghjw6hlm9N0e8PTDRi70m+IG9nREQPWeU4DxsfkC9mq+8vGiYKr3bT2w9mi7RvCYTpD0Q0XQ8nbfQvWOIuDywJRi7LI4nPfmMp7tASSW9N6bZOwjoSj3l71E7531CPG5AVLx4YKc8z0oDPMvakT3twWu828StPHhRrbzgggA9gPWbuefONLxnwiq9i94LOxEP7Dv3UrA7UucJPBQlDj1Aqzg6pW0XvfhEDjxx4y2961X6OYd5JD1NoZu8wYAnPMURyLxPZgA9lWTsvKucczwedjS9OWOovPb24bwXESq7tcwpvHIeJr10mY08SqTuvB0aV71N7TS8TJ85PL/mlbygJ3e9+WpMvU6Bgr0MEpi8wZIyPRgNTLwdoEs8AINZvOwPXbzGApO9K4g2Ob2EuzwI4S29z8FSO7K6HT24Goo9Spn2uz9EXT0xIj89W4HfvB0ioL1VVfy5AJcSO47ijDz+QwK8rzKVvbgTvTwwPfW8qxISPamtejxrjDa9bNJNvSBs3bzhPQI9mdf5OkcUQ7wTthY8LQZ6PeOjBz156E68yr3IvCTuDbyF3pI9Hdyxu6IMUr00kac8divLOzAF77w45lw8KhK2PZNuyTwE1zQ7FTyXOwt99Lxw9zI6CbgYvMyOKzyIG4e9EXszPRfeoDymvDK9u54FvRQNJb2KX4O8eL9KPBiQX7xDX+w8k79rvDLqID2NlLQ8otg7Pb1AQbro/Iu9EPQVO2tftDkL41Y82IMKPEABj4l8ci08wjCUPENcFLzdPX88JLeaPVfC47qoxKk8bIQNvSh+GL0QjvG8rzWrvGxfpD1FAEK8ahliPbdSojyis2C9LFUavaNThz2i7TI8+l/VvDWRIb1WrBc99iC7PDFoxDyEBpU9tsUEvdaJzLxF3wi7rD2KPCp2sbtGisw8ybDgPK9DHrzA0n+8zmoaOwCS6blWSDi9WUsbvXkA2TyIRSW9/uH0vB+kZLyCqPY83v/PPOWSOD2vK848rULKuqz3ojy7/zo9YZuNuw9VRzxAEnw6yphFvI+G87zUCzY8rUMdu8uuIT1aaG49o1UbPXeMDbzDDI08ah9fPREgOL0SWTs8d/ASvWvpzbrH6n68S39uunOslboCW8Y8gpY9vRe+/TsI6wu7rfUqvcl/orycmWA8bWIRvEF9h73YKGO9SlgJvZ2KXb1FXGe9CC5Wu+vO7roY+Rg9pMk9vPN3+TsAFhC3GqVJPClpHLy+MKO9jVDPvFfTaj28QRO8/oX/PCh9DgmbXYC9liGTvWVbMTriOaw9VH+SPJGJGryQME+81gMOu6yD9zzvYBg9YD7wvGuT/7xpd+Q992lrPFOaozyzWYA8Tla1PH2dEjzm5wO90L70OuJQ6by62CM93W5lvBdm2DzSwDG98Wb2PEJqA73Tv3+9ogFbvVM/lrsJD+68wow+vYui0rv8iEE8SjsWvaygKj1IyqM9KZifPFaeOr0bMxg8bfOSO0TpgbwXykE9CtIMPX02sLy05MW7LhybvRZZGz2n6ew7SBitPKbnHr1tyOG6duwkvOUJQr0tPja9GbvtvCLnyLwUwpC897cbvYnBNzy1bhO9CegvvWaJk7xlT1w9DeaovFBWybvcW569RvFlvG+D3bzmWOU89/zwPf7n3Dx++JG8lavxvE3XBz3IPdm8wHB1PKL7/zskMDW9QM+lOnX+Nz3aXdw8J3DOPDnYKz3YOQS9JGwtPbOnwrov5xA83JUPPchMdTzeety8beYhPZwuJT0AMV86v/52u0TSX7KTXAc88IvvvAhRkj3NWq+8e8lIvDONuTw2IRm8CsI6vbhZYbw8nyk9s/yOPIYolzyVuIW85hFPPIQLt7w7v3E9zQb9POzkkjwiW6284gy6PMbcrTzkf0c9QotuPCJTZj005Io8hXOou/omyzzfWVS7fS4WPdYMrLw6eLO80CKZPJv2+jypmVe93KCGPf6rQbwmPDk9gWS5vE07WL3LaYI8YzqvvGTk07sm9aq8TkPeuxcjTT1uK1i8eKoKvXYQir0+jcQ8PTGBOylY8Dz2bcO8M8WHvDL2RjwtaXE9ZRAkPdde4bxv2+I7mg3oPG2NBz3ip4U90NhwPVcHzD3OE3c9oGbxvSE5Hj3BtLu8DziUPIBkNLoLetg8wGtsuxACoj3U7OS8+8ZrPHLADT3SS5E9Od4PPfK5Pj3k9U48OG1dPZ7Ll7vWoYY9FiqTvcKAZb1stGY9CGXOPIutkTxPz968gp6GO4Q7xjz3iYu8gvsjvaWA3zyADVu72MANvda4cj33fYO9VQv9PLCfBzzovTc9C54HPbBAej1ER8o8rJoVPZbJ+bx6Mwa9FgiBPLIjhrzykmk9LMFLugEMU71khwm7ADegvX/6p7zZiIO9lImpvLJpKT2sjas9/zQSPJqfVbxX3nk8MrPovKBmbjreQqS9nhnSPHSaPjtiNIS95+XHvPbLODweXW88EBTjuunwuTyJEde8ce9EvH6GZL3kvnc86lmOPJ8cDz24SGo98OSyvEBuED3nMBm9q/YlPVR+mL3ibY49fy0uvGf0dbzuCSI9IBCdvADuU71uJ2Y88N0EvJ7eI73XNbO87G8WvYyxkL3QZ7k8mrglO4N5o7xO+9U89n5RvXy2zb0QsXY9tiSIPWo1Lz0mTmO8r+fTPEywML3+zae9DAPevDA3Q71vR7E8rDnDO9ioqbsiEzO8Sy0APARYRb3j/Dy9FKB7PVbbtL22+Vs8WkhJPMAycDtcH+g7p2aAvO+PZDws9PK8HpPEPPzTo7xDr6O7l57EPIVIqIlwyTG8/CiWPLngDbxAh6E9NqChPOD4bbnk40A8EZAfPaA/rbv084O9FNfUu/6xnz1OSwK89RSbvErPkry6Fm69ug7fvLyX5Dv2fVA8BCnwuwTIEDxeZjs9wzRQPQo20jsiG0G8GGKZO+YjEL18k+W9BJyuPNjojTyuiMI7C3OSPZ5j9rx1+u282HtGO/4TzjxE/di874JyvTxhOL1ipa28eLPfvH7u9DuPNpe8tjoIPEE8Vz0cTEo9IJzgugYSMLyO+Kw9TgYtvcBh47m+s6Y8TiKzvTaaMb2ABxk+2mQoPZSkUbz3MI881LIpPa70MjuQMgU8tO8aPTxnG73Kcyi9Tu+EPORSRbydsSA8tgJWvRGCkjxSquC8KrXIvIq3UDx78Zu8ImndvEOylLzHBwE9XvPZu/Z10jybkye9dfPkPKUXiL3u5ne9iyaUPHwi4bwwUO66FWSavMi4irxXD7m8RMvYPMp/abwsjPW59fI1PbqUIbwu4D88c9sZPatTDgmZLKm9opWsvNgy+7whWd89lMpqPBx3vrvGwtq84JehumQLBj2gLYc9lZ6UPC0Wgr2evPI80jPVOjutTD12Xxq9uv2yPOuA8bwQxnG8CMLBPb56SDw4l5Y9D3S9vaT3PrzwNvU7/pCjPPEpP71hwTI8S+QxvYh16DuywzO8dtihvDDJQ734Tto8/H5+vZECRjydhyw9IuevPOI6Trze9aS8dnsvPNy6mDxgDsW7TGfiu2Toe708eZm99cyPvaTFuLzC1f089/oYPOpjCz1XuBK8wt4DvTYNsb35bEm8rZYWPGICIj0TX369QDeCOtoeiTwVWU69BQQHPaCxQDwAE6Q71loAPKTORr0i/5y7Hd4hvaJkQTz8hZm88hM4PZ5AmTyY3zE90SD3vEzppTzu9cu89cGfPDIdpztGNta81ChSvegtLDuAxEM98tWoPI9jqzx4ro67CyV5PLkaBjwYZmi8Tka0PJLEi7xkLDq8JDguu+LqNrzRG8o8qieaPPDwdbIjjAu90X/DPFNZgbx0kl+8VaHgO+zwrbwwPAI9aknoPO7YlL3YT4Q9TQIuPaggHDyQSTy7JM49PZwE0zyILuu8SIZUPZbbfbzElaa87KZ+u+ZfDT05ZpQ99RzcvL6E2jyenV89lcNePHpspjzY+2e9k2uMvL4+Frx9hCG9FqyiPRis2bvOxOO8FCl7PXXChzwaOLw9BGCMvXX0kb37use8n588PebkYT1FLmu9oZXCPIDpqT0U4hY9XUSaPHQXoL0mG1W93nVlPf6L7bqsBCq92lgkPHyp/zvOLS07aE75PLftPjxKAw+9pN/CvL5WRbs4f7I8YJ7YPUCuFz2WHnI91UV6vR6UHT1JPMm80fohPVvrMbu6vUu9ImRVPV0vzTyA3GY6ao3aPNJVQru0UNs7EqmvPCQjOj35FJ67Zzb+PCj2MTx8k6S8EYWMvLrAIr0tyrk89JtNvCssYToc4P67k6GePALEDj23WvM7XPm4O8TqCj2LOna9HO4KvBa/D72J3ic8gq4EvTSgpr2MAPU75W83OzlKD71Lo8O8QLGEOtq0gb0X4vq7CKvSPKRe1bvbWc27+w+KPPMwCbwdbF27FuEDvM/QFLz5BJS90wO4vHVdXbpoNi69ZBj8PEfE7zwGtxM9/gvUvPtqRzy6Knu9qSyxuzqKDD3fcRi9DKwIPVF1kD08Rvo8zfD6PNungbs3Kvo8in6EvRQIKrs2Mbi83gOAPQfEH7wgZNM8VsqNvW2vkDyjHQa9NkmCPersZDxZMV28miryvBftTr0OyU891huKPPdKKDzDTjs9z3l8PYsMirzzAg28DP/Lu3jBObyu1Dc9+qDtO4BsIr35sQU91ZOOOemoyrzF9T+97m25PXM4qzsaBrK8a3oXvaQkAb3KRmA844dhuzlCxrxzEHK8zEhyPeFP1ztNECm8wj7pvOD2I71JLIg8einGPPXbX7wBUsK8iGAZPPmTyzyOi1C8YTmgPQq9wDqwHsA7k9AjPOswmLwxVHW7dAsDPaQpgYk/AhI7rENMvUQgGj24hWg9ZmNGPX80W7zql6g8cCaUvIkFj71wgIc7jiVsPIYkpD21Yjm6Lz+IPafNfz2WQZm9cdxLPOfQlLwnkXS7SZxvvTr6x7wutws9Pr7pO0BlK7xPe/k8xQEWvZiHAr3Nof08mg7PvOMxkztVZ0072HWDvJOfOb0KroQ8AJQDvfyexbzxg5e9i1R0vPA5IDyrE+c5eFifu5Pw+buPWXE7la2BvBgQubx4EiU8jr9VPBzSOTwVAzg6VYoQPbkzYbt+z2C8++eSvNx77Txw7Ag9Z+uNO8p0jzuR9CE8QBCBPcwMJr2D61E7uMpiPW+QPjxhPy898RcZvYrSJD0jHEE9SSOZvG0DoTu2TtA8mAUavQNlijtrKlc9VNO1PN+gFL3Ua2Y88G8mvUQ30LxIcGK91z12Oux1Nb1eh5e8dvKLPBTnPj22k2I9eGiyu6nygb0rTQ+9lmayOwCa4Dx2rv+83px5vapcSj2P+5m8ZQslvXHa7ghkv4W9bdYEve/lGDxPL4i7Qe2Bu76ReL3H9U69wuNpvSABhzw4Ybk8xALauxJlw7wGKJ49wz+YPFpgUT0Zz1k9rp8HPYo5I73W8E68hylVvM4sIr1/KRQ9NXeQvEz7lbw8vMm83BxCPQh/zzxL7lG6j8/Hu5wDCjyAgWw7HRTlvKOnYb16SQA9YohFvX0KqTx5VHs8yfa4u2guxbxVVU22U/tePfJSWD20+e+8Tpm0Pf8+erwhrOC8t4ABvSklVD3zKqY8ce0xvJU5N7xJmvi7noIaPaOhtLx/ANW8uwRKvXMARD13z9M8x48PPL8DvLsRbAu9K9Z9vfNX5jz/+9g7w7qCvdGugzx1IMa9YoeHPb39TD2r9h86I6UkPYq0Gz3Y4dw8WYaRvPercLw3yDU8NueivFXVPTodyIu81RolvVNB4jwD8R28OBFVPGHwirz2IRW9GgjEuyiDiLxmpv87YhMzPRAUOLvBCmK7oBlNPQTvg7yh0q08K0tkvAEdWrK8zNg89SydOlqvSj0pEyc7/M8rPD5ZSz3vAqE9hlANvW8ZyDorzTY7jULjPLTSFbykf708CfknPXmGWjwCR3o9Xeh4vFalVD0BFnK9hn6KvFh8WTzbpVK884oUO5BGsT2ROv67HhOju7hIljw9iLG8oOubONnctjxwDPQ78tn2PCc7Qr2A6QK9TjFLPbOwwLyt/8Q8pi8wvNRywjuMJy07i6sKvSb/iTyBQz69UQCOPHWnybyf8ua786fjvMory73ZULO8zNGWO5buADrUefY7oXMdvIt1HTtSUFU9vnBIPScxRL0B/h09qY3cvOtD6jqd/0A9n2wNPDYB6T2k8Lk7FmNaPdV1zLwkSDA9A615PE5EzbxjQ1S8w8IcvW/qkLxfdba8/qO7u1IJ+Dx+0J689sqTvBj5QDxrLl69rhW3POx6cTzi4Cq9t1SgPAnRc70uRBS9iXEZvHgLOb0H8tE857mZPHChyzz1s0W8TmlFPGY4v7yRnTm9v8jqvELd7jz8MFQ99M5/vMOWiD00BAU9rFcQPdaHGjzYgSQ9n3gHPaNgkLs8FX68KvjhPCvk+DxkQeO8KOx3vJAMpbx/vl69SoYhPc4ssTx5N3689kJsvSQ3Az1RpaM8kZFAvfQ6ybtp6UI8a6KaPLynuLv5LIY8YM0/PZgSCL1u1Ya9gkRgPQlfNz0xENo8dHURvQDxAz3jEle7qGimvcFLZD3kWxi9ChuMvOPzGj2IB5A9hj02PSfSGDzJbHU9Fz+sPaLBo7zTElM9YoM0vexsZr0Bfk49+qISvYDAkjqxVRq9BlVXPSKnyDztNHW7cyXcvNypu7xpnQ+9QYQsvd5yNrzJkr688iYBvWbssLyrOHQ8ZWOHPbmQG71KWss82ZPjO4MyxDvenGG8Zc34vOcLH70hAxw9GadePR/3/jx8pts8AAXiPJRA5bx2TF88BYhVO1NFL7yKJm49RkixPNoPqDzV56G8JVyKuj/NVjyGVCq9ore2vacr/7ykzHG9NgTovVjmnImmMCE9g37VPHkgUDwZNwG84uNeuwUQ4Ly1MBk7doaWPJkxcL3wbUe9GXKavB71XT2uWzA8PIW3PIYieD3i8ym6+tUMPazAxzsejJW8quZgvJSTOr1/lQW9CM/zvJiKxjyBmSG8GF9ovJH/6byQs9s8g4vTPJNMmzwi9FQ8RjVwPd1u07xAicC77cp9PLZ2UD0uK0+9yta4vEm3UT1MtB89p4uwPBA6MD3idV09pmuZPCP52DxfFQM9h5BwvGsaDryba3I9pQ0UvV4SYL1CETw8sqkHvZcJQb18j4s9K+iRukmcKjxZR7M7w88GvQee1Txo25o7p6/bPWfIWr1IsA09cxFXvTA2OL3bqRW7YZU7PI7tJj1qPBQ8ct0fvedLrbyQgi89lD2VvGHkXb2bZP06/KiJvep4GjzfvAe8eukdvKvHojzslUS9i+iUvHZhYz3xyC27ugFZPMMHnjw9NVA7UNz0u10ObrxqObi9Tvs7vdLT3Tx6Lwo9g+lsvab+nwiCvl48E2D3vC/wTDxKjQU9YHijPGo36Tws3489n8QXvCgYQzweeR49Gym/vM3yizx8zpE8CbsFPWH7nzyXeOA84MVHPY5xHb2vAgC9rKVJvY9YfLyrqxY9hVFsOiX817tcaqA866EavKjPnrwPiZq84U8QvRBfsjpMMC29rHBSPK6OML2eaJI94LQXvU4iwjyP9iI9sSVmvMyFwDxv0We8aabIPP5Rbb02/xG95ChMPQcVHj2MJxs8PbvkOyhfmbqp/YC88CX4upzFab2P0GU8kV1MvOv8FzuvG7y8ibdLPInZzryoW/I8fgWhvf0V+ryLZYg89eEBPOIoB70NuxE918h+vTr5Tjz7XTU9SZqFPE+JvLx/ZAK9FsmPPadHjjzoih+8BRKDu0Qlp73jai+7BE6tvBYAQ71EmhO9d2U3PR9ekjy8svW8vo2duwcz3j1GSsQ8QeKXPML5kzzttbG8DWNLu01hebxkXB695tIBPEERCb0dGIe8YPKqvF92ZrKIk489NAsavflHKL1KY1o8p162u1oJi7zzWmK7ofVFPUNLcjwCEZU95qY8vXFE57yAODy9xS4APTpc4jvm6rQ87NWHPEFKKD3waKG8m3Lxuw3ES72ZM0A9HnxoPRz1ED2C/2e9RyZ0PB/U0jzZX7S81/awu17Ngj3dixO9Ue+DPIYdITwv1qi9y7i0PLE1gr2skx89+iAFvY+IYT2UO5y8cxhxvOUjyrwRzUi9hYO1PLuJpDzReLK8mOXPvJmxvDt6rPI8Wi2NPNtPf7pu9sw8RgeSvJKhwLwYav+89KsgPN4L5Ts53KK9cqJzva2/RzwI8Gc9d4cdvU4AsD3Em6K8pxFRPbgiK704owA9cjuYPKEzzDyu2LQ8i+MGvQSqErzyOLk7lYMOPE05izuke6+8VWsNvatX47njdUa8belYOw9+nz1CAV29+93SOtaUrr0QpbW9CA4FPQz54js5bqI8P/KJPG1DZjySRIO7rcqLPHVfArqxBCu9//fQvOyc2bskQfc8Gd0HPM49kD2R6Lg87ecqPP4xXLw0L549MJo/PVHZmryBIYS80HrpPLTXAT2kcH+8VOKjvGZgqbzwjsE7wMJ1PQMJ8DyAQGG8sbqGvXDPRjuqjo08KssAvbLiQz1qkM68DuM2PLydnTvMihc8zhM8Pa6MB72zYqW9Ue2SPC5EmTz2NCA9W8X2vLXk5j1Ri4084TLDvVNBOj0EsVC8lZkjvYiQAT2hUDQ9rp1PPdeA2Dx3Huk8bFKvPYyCR70mfu48aU6mvFhby7xsAAc9XUCLvBJV+LyHpSY8aXcjPf5rTj2OMQi8exsZvdvDX7zNrKe9IETZuk27hL3LAsg5aPPcuusOo7xexyQ8oGbePYA4iDpJnVY9+U6+PF6YfLyBBBy9YMd2OrIWwL1buRM9TmOXPYCA5Tz4yU68zL7TPOuNib2ro8E83WYhvGterbyedJM9GUEqPPhV7DvzhAC8VfvgvIt6Cz22ebW8o1QSvAz1Bb2ffjm9WWSmvV6LjYnjphk9n+IUvRrkpjyskFc9fcemPDLQG7s/EoC8LWY5vJUVkL1286G8ehdfvXrEJj15D9Q862S5vCoA7jzImga9/CRmPU9ykLtE/Zm9evH3O83Un72AhXq9/ifVvAidDj2j5Wa8/12BO7dYSTtvItm8Ipi4PSoqRT3KC0A8did6PSaRi7vVr1085JIePMqCoD1hVIi9c4VsvRv1Pj1sBf48sCq9OwlqTT1h8jW8j3ooPHDrjj3LNk48/xs3Ox3pbzwFzp49r9yDvTmmRb3joWs8PBNWvdi1pryimp89QheqvItUBzy8Q+k6XVrWPNnUyjzFkE871l78Pbb9hL1lCmS8DMj2vOAyzLxNDjm9MzLOu88PgD1+6Uw9l6cdPNceCrxw2TY9Q//JO/akAb0LLqY81Bg6vZRIMD1NAye9aAquPMs/O7t+VhG9rKc8vfCLfT2HYFY93BlPvGLNcbxMWvc8W1tUvercNLx0ksC9bMzzu1ZxAT2B7KA8ICqEvXar9AhLaR864viYvRoxaTybyoc8jvu3vMt+kDwnhGI9MddsPJyauLtkooQ9PKiMvZTDMjwexhE9paoDPIEm8jyKtAc9Ou2TPWnpcbzwyyy9EFQyvSCVGTyUoQY7i3RuPK26JbtaN7a8JR1fPFD+BL2uMie9Pl+DvXGiALwsAoW93TriOzaIg73E5449j/9yvN3xXz0JA/I7q0mTPOLzvjxt5Tm9cbvtOl7J6bxvlam8j5J5PT8S4zz475i8DypLvZi9HjqVTx29THlyvJMYzb1Z2vo7HULevAYNw7sBWya9E0mMPB1rFr3r3Eu5jtcPvYv/CL1whCC8kmQ6O6tNX7z5RtI8sjKovJljBD3F4Yo8UvxlPTUEdTtDhjI8luCDPG/hTz2bqJY8ReWYO1UTEb3D7OI8fvKKO5RsyTve3U+8BL9APbVebDyrNlS5nzOxvMyggj1dEGY9QqyyPAR1wzy1XSE7zYeUPDRQVrzJrEC8KPORPFbf17zzJ3K9lfT3ukBYYrLyWfk8eudTPMhrgbu6YNg8dUUPuyvd77qviu+7JGUBPQCeVbzPPv48oqNEvZDTFTkhvae8F7AoPZZq87qy24I7zVbFvKOvqryc0qO8n6Chu+XMOr0Erh89gkbIPTBcbT1u8N28+KyGO6WzBj2Ykoc8jHctvMKy4js3iue8YkeVPETVH7zK3ae9SJQAPS4LVL3y2tq8ZFcXvTR2LrzQC5e8D+ApvSB8Rr2peHy89x21PGiqAz0cj428scaHPN3/Qrx+MyG7oesIuJTVIb3F1S08ix9nOjK7Nb1jCIi78MPUPFNVEzxqqsO9j2ZAvYw+sbosUyo9iaPevHP/3zsSj1E8bACOvfsopDpFhRE9Ui48PTxGiDwxKE48IdSwOxmAGzyRypw8N/V+PKmymrswWNo8d3MAvbogvLwIqjy8lTVKuaXrAz0on/g8XO5BvMwMm70T9nO9mz/ivF4Niz0HXL+8LJpEPR2/A7swE2I6sdLAvR9nRzwrCyi9b6KxvCs/QDzI91Y8y0NGPZ4jOj1weR09DOlivFkaEj1auCo9WJyyPI+Lj7xUbbm9klOXPBSi+7yQ3FE8H1g5vfsFWboXxzg8pa0AvLappDxznn29DcuHvXwL+LvEPdK8h0RQvLYdP7xU1Dy9XMR1O/64ET3Jcv28QXacPN6lVr07atu9p29XPSpFeT3C93I9/EnsOmXgaT2pKi08mC0RvdLTKz0MNYE7Nn8qvcT6Mj1j79E9BlZQvcbjHzxU0ww8pQKJPRGm7bzboCg9S69OvWlS4zs9PRA9wnMEvR8Qkb3gWQ+8vDsePeeG3Tpnmpq8j8WcvLi1vbyzsCi9AxIKuw5QDL2MC7i89zzhO4yh1ryAmoI9QDHxPSkNqzyrGwc9XGDwPNiC7rxr70W9m+GCO6qa+rzRR588PigsPfawwTzwdeC8QtbuPMbEQ71g9I+6qA4Uu4saQr1ww2A87ZovvMz4RD3MLoG7ubGOvMK+fzyti0q9C5MWvTbVmb368vy8tfJHvST+oIn5ERA9IKcSuofi/TzyBCs9v/LUu2VQVjxFAy69zY4lvVedWb0OU2W9RwsTvQTGUT3/67A8fZzzO9DMKD1VeA67MWEgPNUCFj1jcEG8CTizvIdoq7xlbKq8lxefPJafDT30RAA9UC0HPYXN5DpK36a9FZcHPXZ9+Tz2bJc8SmDxPBgHO72Up8O7oSkfvXkCtT3bmTO96iwcvVIOQT3CIlw8i4ctvPSjsTxm44c8bqEKPBsWXjwG5mo9zVDePNHmybvFYNI9ELBBu2OCND311q07tQxWvcOO9bxCzHA9KMVBPWV4gLudpNO8SJlavD5k1LwWOx49TjOBPZZczr3cnew8nsA5vboQezyedba9UzJjvOBsiz3zs847BJ+4vDJuMDv7GQE8yr6zvBXBK70Okeg8uu0LvXOYl7yGmkO9fjCOPY1/m7sd2G28Vq9cPJiI5Dwv7Fe8R5UAPIVYxDvm5yY9U83GPMaH7Tw5/ci8UZCLvCtdGD2GRVA9nwA0vaAW1ghCqqm9u5kuvdIwzrw4xdk9cBg8PUmwMD3JhQM9X3iyO0OD/TrkC5k9HLiquoyY/bsXf4M8mWotPWYWvTvUOhu9CjLsPD23I71U2qq9BMoHPU2zL73L6Is8RWniPMITlztX0lI86BV4PNrgKz086Vy9GRpzvUeMa7z1vX68rZ6kOx4+mL3SWpI9wy1xO7ctFj3iBEG8RBAYPby62Dx2xHW9+1uoPKAIlbwzUeu8NToavMmosTzPSTi8fwivvK29MTri2fC8YM8IvebC5LwpeoO8Rum9PJOJyb3aoQ68eFuJPNg+rrzjxVa95C1yPEsIWzzgbyC9Q9p4PK+7nLw6DIg9j5zqvD7KHb3dlsy82O4WPSK/vrxJ3UU7fm0/PQKCnjw7/9Y8OOYHu3xw0bxUJdo7cr2rPNfPED3LuA+8emb0u5nKCb321wc9xQeuO5GE9Txs4Yk8w9tkO7gRyjyyise8izQtvDGmgb1k0yS90T2PvA01ojypulq8ACrgvAKiYrJTrBO8SYYhPSthqTyGOnW8v4ICvcQedby3xwA7Ism8vPvaiTz3tB87Ng8DvakmEL3f6/G8If5bPUL1XT347iY8ZR4SPeSLBL38ZA69f1VBvRVk5LtoTdc8EohbPf7+Pz1Qp+Q8o9pbPV/GLj2mt848/8usu6vt97lFcK29nz4DPTQ5cr18KrS8db20Pf9eRb1b7X09U5djvWT8hjzyNBc9SnvavKmrizxPS908fPRCPCOpBzwGoso8mRVgPfK0JrxVHRw7NoWTPXlg5rwZEma8YJTnO3+9Cr0Q+M67x7grPGa9IT1QuGK9J1NOvYIciLwwSZQ9fnbCvG4RGbwrJm09WyuKPGMCTb2o9w09/PuvPDi9Lj0AlKY6dsJSvSeHVz1QwtU6BkuMPDncizyDDS89g4T9vGS6u7uu0Le8TZMXPeb0QLzl6M68A0ZqPbjPLr3c0sk87PvRPKuY2rvc6by8/GGQu9iOaLw6vqK8oFheveAlXLmgjQy7StIIvV+BfryCTSk9Ar+iPNA1izyqx5e8SlLCPdB23bxy+Wg97MvmOhpI/LyOg1684FK1OgHebzwM1lU8RLGDPcsn0ryQY5+975rOPJJxgjx5Vpu9HPAJvVk4ejy97K08UDqAPIJGmj0FiUg98lNiPB9JVr3sWJ680yJPPZho+jwPUpG9O4pJPVo3kjzYFhM9/WVGPdxCqD2a8ac9840qvRTBEb0D8eO8hRObvGa99LtEPl08dTKRPFvHGT2cXJk9vvU6POcYML1+Br87uYAbPNpWVbzAEdI8/8juuwZiGb3fIbo8Uz0cPYJpfD2cWUg8BoDFvLD1Wr2jgXi9yLLuvOC+Jr1qM/Q8cKQ1PJLBlr1kVGA9QlSfPccr7ryew5U8YnYvPUXOEb1833S8HRQGPcJpgL2suEg9hmRkPXVM9jwGbeE8hBrxPFqrR733QZI8/upxPHyoQrxng5A9aptQO9ABHTta/u67TnX6vMKx1rzWqMg8fihGu+Rfc70UHTO9bgG/ve+HvonRVnM9bMQAO2xvZrzms4y8KGAGvHD0trzm7aY80OQPuoTFjL1EJke9jlphPHmkCD24gao8YHhGPOAAUjwxM+i87FP6vKUNpz1m1C09gaHsPFmUVbxGR+a7U5gXPWKNFrz0jAY8biWMPQq9L7w21hQ8zH9gvPTg/rrhN8w8PDXBu1D9zLyUsYy87XwCPbytHT2fR4W9OVbIu5dHhTxOyau8jMKkO1Tt4zzYW+48uTcGvDED1DykzAo89qXuvGpAMb0kws09YXeLvRRxtb1UPCi8vkC0POYq0LrmkVM9ZwBmvCgtqzt2GxQ9PESqvBU+y7ym1LE8qkOCPVZrFL0OvJu83G0BvSMdxrxuCKq992aPvOGQST0fd8y8wBk/vXA2vzp6YAG831pSvOH/qr0C8Cq8yNzCvNAI2rwHyWu9vnG6O4i1O70+JzK9lPidu67CET324988CcVDPcyEMTz+t309GymUuz52x7zwpcy8kSF5O4odh7yw/V47QCAkukVu/wgEOaS8nFp+vZs9vzzo+NY86V5RvcY0gT2+yjy8koKRPSsi3LzcrAk8VjN7OzU1LTzoVlm8QjCZPLaRdrygroo8HEHzu+4O8ry9o/G8BDRtvPichruCKy09/cqgOyRBMT3X4bY7lHgUvUjCsTyiY2m9fomlu5iZjr0ajN48MgytPPEcqr338LM9LEYSPChvLb0gee27+TGqPZ0ogLy6yxk9BZKNPf74GD3vQi+94OvKOvKB0bzSKlY7zaQKvdqHMrzyPu+8fCtAvChHnLurnb69Ez85PWSLQL3Ain26Qk++u6qbmzz4pBE8zqmJvAhgaLvTgYq76z43PWogo724XTA9WiKIvZJL6byp1jK9EQoEPUvcsr36Cuo7QlePO/mv0DvnGKQ82E8MPSvSXD0sWxa8oKdtuuSpQr1fNjS9rKumu1cHWT3ZrD48cWyoO5YvXD16oTU8Dz4RPHxEwDviijo94EAiPbBxSLxy8EW9fhMAPaC/q7waeOE8VVaavFYVirLEDqa7J/0TvVilDjuAOBu6XCafvQFBQD02fBg982ARPPKFA70glAE66PoKvG61ybwytie98IbjuopX/Lz2tEA9gPCoudV8ED0koaE7SGPqPOtYAL3KOuW8OJYdPZsyLTxirBY9YFR2PIKxrTuw+3g9hCQwvYVLmr0osoW9S93oPPLo07wz3CS9qq3pPMUsGD3kD/w7fjsbvYRuDT2lxgw8H6AcvOz02jwaNze93HFnO+FaiD27uDE9J4oivKrLuDtSVIu8+YF3Pf++f73JpNC8EEHWPDC2VLu0A4C9ArxCPYet37sDRKy9oMLWOwdWg71YZOc82ktOPaT2Xz2CjAE8tuNPva30ZTw8/8w7wsYMPNJOGz0r7Fq8p8shvRlLFzzrwYG8GU+Auxg1/btAFmE9z4QGvQWrITofwg09ZHgIPeyS/LxQBrO8T2oAPA1U47xFkx47LvDAvJVEfj34Ai07d+2RO3/4lbzf/AO9ScJmvNxszrz7KpS78josvGGn5jwwsYi8wyrcvDUECL15E908H9RAvRC98ryzmhW9Wq+2PFO/NryoV408iqLLvMacI70NIwA99EeQvFCvZ72Hzke71plePf/3P7zC/+O8T5QHvWxQ+7uK5me96c5nPF6zED35g4o8PaTKOyOOZrvAYSO9nG+6PCnfL7wsoco8fHcePL6/Dj3O3HM8g1U/O12S9rzwgf88ll88vIXNRr2IIuk70wmROvj3p7x0tSi9Ng3UvVDm+zzfti+9u8nhPGdjozz9xta8yWnLvXwfDbvz4IU9UiH9vCTEtDzqtD28EIYsu6e6nLzb9Jw8yTxMveQeG71G1nA9zK1yPfjsBr1S8148oFKEu4YjGD3lDgy9vI8XPVjzjrvJBFa95StcPK2Y6Twnuns7rFgfPYZs3TvEbDS9sEy3u14jzTxiDI88XoWhvC78Wr2etLi8LqeivB9tgzqQCse8Gc6MvI7oSz1UpjA9TpO1PVX4tjhjSua82/hJOzwqJ71QOxC9CskZPa7uNYlZqLi80+HsvBUwQrk+kpk9PIWZPQqHiTyKBsA8hbUqvS9D9b3S9Oa8hqLqu7f+6TwB4gc8nyLyPEKf3Dz1bGm9sfsGPRCO5zxi9WE8XvRWvYtIvDvzoY+8Cp+IvO2U9LsPoGQ6ZGv8vLtWL7yIpzw9tDESPAQMtLxlTNg7VEKbvCEwXLxgPeg8tiwNvAtLrzxYN/C7Fy8CPA+Ve72XooC9EHqIvFb5jz0SFoO8u4njOzBsqjxcAr48l90QPaU/szoA6sg8+flmPQbt+7zr76E7D4iPO/iHwjyp5687LVWPOiJAOD3q7yI8/WqnOzZEVr0NaoU9kaL/PKfhQT0Fp+q7PEStOrANij3SdIC7ctpRvPpbQj18+4Y8OOJCvYHPvDwNtkg8cOVLPH6iQDxH7Bu8U4z8vBa3mL2DyL28hQLSvIIFBr2bSZo5SEcAvd9tgj2hojw9C8uAOv4aGL19elA9s9/hPTHtXz1hKG881tGavVEJUT3k4ye7PmpWvfrcr4d/yjS9jWAKPLDz47zl49I759YqvTjnd7yVcIW7AovmPNBUHD1ba/g7GKzIPCpQBD1N0VY9FuipPPmPqjx1X6Y9XkEgvY5qj7z4sq87egtNvSklML1jFJC7S+SoO0inDjym+HW9nt2IO1bO8jzLgCm9hQO+vMNKA70QTbg7Vi6zPMFJT72pLzI9X94aPUq9wLw83do8k3ITvWNyHz3/5yO9yOA9PNR1mDxRQK47QD5VPZLhOrwHALY87G2FPFaSdT1VWv87/3EHvMDDdb2Wen29vKAiPWheJ71Yzh28pS/4Ojbv4DtY1IY9R+HyO5LUhrzfu5s8WtH1vC/VW73727e8y2GLvB6N/jxe8d29ks51PWjWFj3jL6g8XhMWvMCfYz0BIx083DZDvRKpU7xwzxI7q2m3PDPTGT3F8WM8EbWAOxSofzxM6S09C6+Bu7d48Tw9e0u8NItXvfUv9zyrwAk9I/PHvNl78Dst6k87W/NEPJoaSL1Ar7Q8ZkWMvNiDibIw3rI6IkAuPVcOmbx2sji9He8pPaQPSj0f3ew79AcKurYEDT3T4II95wi6u2BZ4jr1zU87wMnxOyfgETwXTRg9YDwJvQXRgT197x688rx7O322lDwXWaw8PkMfvEmhaDwy1Hq82hnavEfPpDzrE4Q5HnpMvU34Nr2VCwK98jmGPepdE70VCJe7+g8uPQDenzxNTeA8k7xsPF9ViTzryRo963xnukcXqrx/0qS8no4kvNksOL2c5Nq8FVKgvKy37rwZGnK8LPa+uyHM67yIElG8ArYqvQcfGTvOjME8mm/kPGQpx7zk2Wa9BkvbuzA9VLpoKWQ9zpzVPGvw6TwkUJG813gFvfZwUz3vm/y8s+LNOxo2gL2PmAq8+Wf0vOtfzTzKYcq8TrfbOwCsZrnLzRK9PHoYPROPZTztvZQ9GPBNPYAeMT2cCJq8LhdAPdP4Tr2c6FA9EId4PLoa1LyKFQM8jRiZO76UMrz++gC9gf4wPGHo87weJDs85x/+vLajmLwuKxq9j3sEPSquaL3Cqce7yP19PSkmQr1+feI8Qb9XPI2GBb2xOIW7OMNnvfDSkToLkFE8Nfltu9rcGr2kVIE8fHp7vJh6DT0DJbi8uIO/vF0GHb3sAXS8CtZQPZ0M0LtVkl69IJ+KPJEWIL0MQnq8vktRPWZRKr3poxI77ZFPPdhYVT2YaOu8fMkdvYYqjrtzghk93Y1avdRpRL28BbK92oSCvRdAMLzJQ808pOKKvM0Qtbrm9+s8sxm9vC62GL2HlQi7DXLpPFTT/LsyYaE9VlYyvUgfLz1L1eM8ARcyPBrAVbwBhRk801TzPCw6Mb3eBzo8ugAhvbh8QT3Njhw9K1/HvACQc72JYZS8ElwOPR8syDxufzS9suSGPKq3mbyAOak7W/KWPMgjsLwr2EI9x84ZvcIk8TzxrX29WHxBPXACT72Fqaq7ZU4IOoSj8zxL7W86OBfDu91FYjz5EIG7DwAAPNav9jz8VQY806NPPIhGZDzU78O8VaklPSSnComew3k9UevzPHd1CT2cLTG8TF7HPFsSdzwqiik9LezPPFB867w9GwG9jRV7vNSdmz3TCyA9KsYIPF1hHTwZ/gk9Gg0WvRJzPT0zE4o783WuO9b+07quNj+9fbqxO90soj1yfXg9jN/3POhd8bzp1348tzlYPONFOLooHo88K5B6ue2MbjwxCRK8b5hmPDimBz3GIw+9NbhjPIhYGbr0AWW9u8DCPA6S3Dww1TK9Y7HjvEkqZ73+/jg8ALPCvBPY6rwjbcs8sfAkvWqC3ryKPsE8rN0RPVq13DyA14E9AAwcvaSp6jw6n8E8GTyKvYfxiryXh9o7QUQTvGdmFDzHPDg7BVz6vGgt37yf/IG9UV6dvO3/cD3QQVo8cyXsO7uGlD1UwXs8roMcPSZOgr3Pwkm9K5DlOZMZjjztnek7UkMJPIugoDxk4Ga9X+hovX63DD1vQYO8jwsePP3b8DwNMVq7GdqdOm/iFjsEqbS8cg/KO9d1Trs+aCI9xZ4uPIx+g4i4Ndm8trdPvUaLkzwlJzq8Rl8RvcjMBbyNa/88IG7lPDnryzsMwNE9D7O4u+JI3byqgOI81FDRuydDGDzR4YW8LuJyvbwmZb3Sglc8bbO6PMg5jL0j2jE9v9zMvGCMR72+/Ks9+6CLPHX+Nr090Gi9D2uBvUbHar0Vuqo8eLqFvWpRLDxod2S9BdXXuz6OJr1HBSk9KQCmPfx13zzwaNW8P6DgPEEUyrx17ZA71b9MPHCXrTy1PvA8MZ8TvSCbtTyAxJa9j8povHVrq7p0AMK7ykCjPEOJUL2Ci7y8Tv7PvJBlFD0zUqG82jSePBw0Cr2n2wy9vTDFPN+T0rzvAcI9rXg4vHbXsL0pzU+9SxJ7vbx/lL31qla8qJGtvA4Dk70/DEK8KtGzO3qJvT2mvvK8jExFvWlgubxafJa84Fd8vELyTL0rJ2+8ihJTPWEquD2shtE8nB2OvTaFGj319ww9pd7pvP7tjT0jUVW9hnB0PFAv0b2RXDo9YxSwPPY4abL89YG9Eg/XPOTa9rs66sU893pLvdnEeD16UZU9e6qDPccUZD1anIk9CsqfvOKuLLxXZ9W8qL/bOyNPljrgPfw7ZbnHPLwvzDxOGpo7XXQNvYm4yLzdWGC842aFPMsVQr2Qg2w9GZGyPHFMoDyaEpQ9IQBGvVWfh70H0ye9CvcovNhxoD1ARDm8I6AwPG1KTLtx0sE7QOgIPZVXULxC+Zs8OEVnPHGvFz23rfy7wPWnPPr8gT3WvI88uS+hPQ12Cj2OF9c8uTDdvKwOVb02k5G9zb+NPLOSA70xRdS8MNxGPUzR9LuTwZq7QoGAPfQaLr3ba+c8oE2wPXuNizt7+6U8b3Muvf5TZj1ojUO9UDwfvEcTVDvm01Y9hNkXPWf4Xj24z668YmBlvD+XETy779C6ydl9PYdnWju3ta281b20vFICjjy1+L65MAhOvSL0vLvWXrO9cMlOO3wBrr211F88SyibvZV1hjwczw69p8TXO7VJorudUJK97u5UOyEYQTzhDAo9aQX7PLXHaryhqoc8MCkUPQUb6bwfSTs81N/pvDEfHr2n7oS9F1cMvSMGBDwsG8O8tDpgvBe/Dj0/wRy9d8jjO2LIw7x5KYE8IIL4vG8jhzwp1jM8PI2Pven3bb0VPYM8TYQOPF2oEDtpT7Q8KPFSPYrbeTyw2P68Z2GhPQeZDT1iz9a8CnvUPGw7uDw10No8IBKNvZ2weL3wE7i8lOGVvf09UT36Fzw9q3GGPBbn4bzTZIi9bIOEPR60jb2dbao9ncmmvF4zgbx7fEg8pqWLPXrvbz0gwhM9kpt7vCissj0lczo8z21GPakzTLwgFt49c3k0PVClkrvRuIq8JRpuPO1HJb3j/uS8ASkDPiQhgby8Lpa73FD9vFuEZLuYiww9MYS2vMhFUz0280W8PMbQvFVpK7yylwg86MhBPbNO2ztyzBe9bJctPYFM2bzyb9u828hmPLVmUbz3vLU7xFnRPIlWnTwpSmS70z2DutcahL2do6+9yLbgPOWdkYk/JIK8uYDpPJkMDjxpe887LeaOPMJskzzszAi9YMxgPK7uGb0AGac8Hh0gPQDQMLnDnys9AOqtOwlvuT0e/Jk9EjeIPFhVLD0ksbW7Hg6ivJuWnDzTjrO9Lu40PSg6YT3MPZ48K+COO1xpM7wHbJC8eYYlPaBLgLsWXwK9fIz/PNuUd7wp1Oi8Td/rPBDmdT3ikQw94SFfvZbzW7yGJMK7PPrivAVOIDwVj7A7xWLLPLGwmT3UvKK7CMcxPJP3jDvoYDa9ubHMPJyAsb1nE/07hSSVvYUmhrxgwR+9+NCqPDIH2Twxbp68ujsuPI0sWTu9MTM9u9nRu2udKr0MKLO9dHALvZCwZr35FKA8gqqGvRP8BT2nWsU727fAvSfgjbxdVkQ97Mspu7aFZr3LTiM5G2cEveKUXj3rCt05tPEOvZevHr3BTGy8czQ1PS61gj0pkbE8Y2cUPWA4uTwAmgq9llZSvQaipz0yMxg8porPPFPRZT2pJtc8GDEaPAW2KAkIcdq9XVI5PJReib3lZNQ7RxhSOw6Q1bwLp8O7MAIFPVT5D70taNi81VFxvdhVDrycoWw9K4tWuh+WqDzMoUi8/kpMO+htT7w3uAq9s0KnvMo4lDwCJcE8kAO9PGecBjtpGCe8VHnGPGUjCr0r4iW9uGuwvAu9Hj0vPNg8ax7mPCP/C73Pw7M9l1gvvWTKTrxpI449+boBvZqExzw5S4o8+amGPdStCz3l8p+8Cu0SPK0vHr1bU4o7y2IiPCSWWjxyqjo9lySpPJAR+jyRLyy8cvfEPAB/bjmOe8W8zJU/PEDWaDo39SC8XsV7PVuK1jsDSKU8ZgebPWY6srzwXAM8TtR+vAaNrDxreY69C01GPV+zxbtrlIg7RIIFPZjtTb3RD9u6rVhvvUDDIDxz4JW9pxGgvENsv7xKJ2a9DYLEPJKfkLxiDuS8zN3rvGTj8jwrzna5vjadPBs8vz2cQGC9xwyoPLuN2bwwC0q9eQ/hPKOLp7zU2A493Us5PVKRXrI4e049j+4IvU0Ou7w9qXo7YKIzPaVzprtjbJm9q28mvciNmzpvUpQ9K/8fOb3VCr3l9Yk8RLDKPNtKoTvSewU916aRvb7XDTyjz4i9iIuAvD4rHjyYNZc8wlSoPFlKAT3zXkU9JpnIu95DuTyDDgQ9T/UbPHCvaTxnpue8OcllPKUMRj3IG9Q84/OAu8RNDj25jpS7zLDKui3pjDwjgve721PjvJwbSr1Pnok9KawXO/cigb1Z7VU8XtxYvEe+kLymFbs82YSavGfsBL0c6w+9ZXQEPbvowj27Pbw8ogLLPAulFT100za97FZvPADjjjxy2z48TjXhvCu8Hj2EWAa94U7PvUB9Ab0aVlW9wF2RPKEoZzxePYm8UHdEuhqvBT3noLe86xW+PMFLrTtd9xg9wYthPEH/N70Ddge84tXWPDRoYrwUkQ89FFXCPFJBfb13lJi7dsc2vYYNFb1DArk8jn1jPccVLT0TvbE8QpCaOzriJT1i2R69osaTvIEynDzmGWg9LAn5PFWiH73ahpo9oKS+vLCKljyBXAm9k0rLPFPqob1Qq0I9HgF9PM9zM7w288k8E+AVvfourrwAcom9lB0EvYhNdr3+LGS9bGw2vQnJZ7tJFJe8rEB2PbgMob2xNyU9hyS+u5TpYTzEogG9AQDVPfQn3zyFdYK97ybdPCySmj3p5Tk8xYpuvN6/jT1YEgU9X3oFvgFGq71voQQ70fQZPL6NgzwpbPA7GYQLvYXqeTx77zk9IIkFPUf2xbw+XuS8lLVbvW+a0LtgNqQ9TQ+Ru7MadD0ckbg9FSHiPSTwDj0wO4A8jV2aOuy+Sjt2yoo9Vwj7u6CsFLxbKre72/o/u+sh6rwrrg66QUqlPbwqoTosQsa7Ad+5PKSbJr2es1a8adkWvHb9BT2epaU8eup8PYP5Fj1rQfy8ZYfYO4SuO72WsZG9X8RHO73/rLwU7LI84V2QvJjtqjzVsjg6NNc5Pc2GYTx7YDe9j2LZvDZVI70POhI8cO9avJdrYokQXJc9uyiDu6JHzbtKOK87rqpIPWF4lL1M0yQ7cJsuvZzBbb13TFg8BF43PVq9nbsHqqy8qQ+vPVDJSr0E/Eu9AUkXvZYwrTxHjl68bNTQvDGOgr18Ra68yP5gPILM/Tx9eW09L1DTPOrQCbyb9lo8UeoGPMW4GLxjlK08fdT/u6zoH718yOy7ql6yPDSHTbzzTUy963TaulnHHz2rHu84CQswPXX0urxxWJw7xlVVPMuV4j3ropm8kU9NvOGxpDvfFZQ9DBLXPKPN0ru3RGY9aYumvJk3tLzs93477qLuPHdHUzoNt2a8Wkx/PSvEhT1SkdC8qQAbPSCuiTzo2tO8BEBqvGIFYD0zRlq9ctaSvEkHEz3wnYQ9Ew1ivUL0Azw7zLy7pmMsu1IyiL3rHb+82KHeu7rfp7we2wK97LFnvVbzWL09zsK87v7UvKIyiT01VKi73A7+PIo35rwi9Aa8KGRKPOsOFj3Jg3e8uOkcvTsyqjwgxGG9UvgQPCx1pQhmAPK8qB4jvWvyS73l7bE8NNinvNcxfbvYvn68vnf8vIunPT3zoo49ffePOxaEFDzhP0U98ozzu8pKXT3yQqS8DVhfPAtwiLwdI4e6i/T7u/ESRDyaYNY8zZoyvNWMHb0h1HK7o0P9PFaz1juhJQu8GgAvPfB3kb3vxTw9/HZvvIPbj7399cG6wzBevULZizx4eAs95drDPDfxq7zMvxS76s7qPGKpzbwdkbk8D4jTPPa11bwkhJi8UcsCvXM1Uj1ZKpM8zdXNvDV6vLxQtzm9B38HPWlALr1GqRY8oLuQvKX76bz94XU9TS1pPUO+gDyNwjK98PRcvft+tbqVn+Y6vOJuvb7J97yJwKW9lHIpPFkoE70vcLo8FnuUPYY6CD22LRQ8PNEDvUxWaTu6CkC8uHCzOo5mCz27OyS9gC55PLiDTD1fsxk9AvzOPJ4YlTwXPmy8OeAtO+HQnTsvhZo7QnWHO+7z3bwLcD29F3b6PF+7zTyvZ+E88EjFuwZ+W7KnMh89/S5KPQ8TnDwiBhW9U6dKujppKzzWyac8jtAHvcJsCr3i0808LpQ0PSn9Cj3dUAi7dzW3PHRrTrsHRPk8vSquvLvyVzpDqGi889ZkOsidK733VpQ8vx4Nu1VBUDy+FV48JZlCPGEehD2/lM09l0YHvPKn+Lxyr/k8w6G1PWARXjvy8eq9ZtujPSJv8bwL7t+72kYBvYIa9jyr4oq7GyHju2XcRDuoZeo6O3BSu53tSr3WYg09uTDBPH1mm71IwjC91GPkvCx16LxwrRU6+N6wvSjmKT08pCS7Ad+TPaZ+B72zDq68lUwmPUPgxbwgaxy8cGqMPT/xBz2FuNC881nrvCVRgj2adBM9DpEtPeYwUbzAyzw6KPdlPe98/Dw8d3m9EChiucsscDwIIjO9Wx5ZvB5+bj12opm8o6EoPfh4jb3R51m8MG3cvHgUBDzaFqG9Gw3avOIZkLxlQW09emxavItNrjyZowo8TpIdvVEgBr2Z8xu99eU0O6Gl2Dykb+m7sK4mvO14zbxd82w9e5RhvbV7ELwgylO8eb1XvEX11ztN6Ua8+buHu6Eud7wAHG24MJiDPMUq8jyvnzU9ef3HPUXZAjqC2IS91FozPLnpb7x6Yj+9w4SBPRd9qbtvotg8wcbgPF0GwDwMVg29mU4mPcXRh7s90Lq8852tvJLuhz3rb7i5aeFivM0FarxZGFy9qAaJPSlWmLwueZo80hBzPNmoGD2GPWE9F4eDvQ40Bz20D6+8QscNPfigGj3lJ8m7ehHxvakCab2MyEw96fdTPdE42LyMl8+72270PIM3Krxc+DG9hR/gPBFDZ71vyXI9X5XnPCF/xTz8CrY80zZSu1xm6TxFvWq9tqyWPc9yqztXHsG7JhkBvGsudzyLexS9xeyPPBCvZzzdKpY8L64HPfDH37scLlU7kWxRvWwLT7szGUY9QVZTPXZPGb3Bv8A8zlzrvFxPYb3XBfK7GfmrPCWXB70W/H68enlJPLyOEb3jwB88r55wPXq3bIlYtHC9LvYOvdAEfjyTglQ8mBuGPWdgqDwxloM7u2WRu3zQLr2/rB89df6/upYJCrx4RB48UQ0QvSN4UTx8+Bm991q6POWIijyaMXS9QBsnvRFJyDyzRm29b5+evLTNUTzk3dc7jlCBvNENWbxgKqA7teBKPYbKBL1RsAM9zKwavGhCBj2vC0A99T35u4sXJbvsGDE9wT18OxF8srwMrEa9b3umvZQsszwReGE8a3WePHSsWj0FmBs9gXsNPSJ+5zy/K6q8npqkPfvxcb1LHIs8869aPBUEwblPzbY8aXivPCXEwLtSUEQ8g1bbPBwaor3P7cs9H3qfO8PAWDxitRS9TXuMPNg2zDxv3hc79bgWPTdRJz0Qgu87ak90vZdj87x6GJ89Y3IfPcPrC70wlwG9e8ttPH/0s7wSBwu9cl6avPNvRrkFDgu9xUJOO+0AJDxbWqa78DEkO4UGx7wxXVQ9c8/LPN9tqj0O+Eq92i8IvECnqDz+yME7aDKBvAh1AAh8YUW9//AfPLD8hrxQxP282KWOvI0Fv7zbG4I8oyqLvMN0iT2PjZi6TBo5vJqMaLwkzEw97phhPFDX27oBFi89AFrZOO/C2Ttyl4q7i0TRuivwBr2q7CE87T7Wu8dy2juQS2u9gp42PcsB4TwdAMm9+UY9vQIgEjy8ZUk9zDtZvJ2w4Lxowbo9yT7Cu2IOFbuVLZM87yoXvaGxMbw0uI68GmoGPYPmJrvA33K7PCBbPWp2ED33Sga9l32APN2jcDyp1MQ8MNPcu/CQ2rwlwqG94hUSPesPgL1Vk3C8EkdwPdsh9jztIqc8JtUjvIitDLtvf3Y7aC2eO/o2Br0lm9a7emMevdGRSbv+P5q9lW1iPXoqWD3QJpo7g+vEPH/5Uz3Vdpc8aVuOvX0fnLxa6/U8+JervR/VHT0DFRU8UXgTPQsqh7t5qG48RnOCPFZQRLxEQLC9fnI8vaTwdj3+t2o9ftmivKwWir2BlYi8fKLXOyKL6DxJZs682WmyPEqafLK8Efg767KXvMr5yrwzUWW9jZAaPchTAD2Ql7S83pfxvBEr3bxrHTs9fB1vvBBU3zzUYfW8Ux8ePdJpO737frK8aoyEvVC61zyz8le9YjYKvRt3Nj0kZvO8Ee46PPcWUzyMRQO8vfmFu1fK3jzJoC098P0mvF5y47zTU0O8MESMu3In1Lwgely9AAOfPOXOeb22Fq09X1geux2vTbuNwce89nzZvMQYnDxhVGu8N3govGYZkr0A4PC21roavC+YOjx8A9g8C6iLvOuM17qBJsU76F8RvdAL0DzFojI9Z62mvOs0CDplQY07VPZHvbB4VLslWB89UuI3PdF56DyAvvm8K1iBOCDxdT15Db66fvKkPNr1Cjuz/We95lOku7r1ybw1/BO9dpXIvGWVN739+Vk9yBx/vH54FTxfCWc8j2glPKQBcD2wKqU9sNR6vZwpsr1sGwm9UJbcvY3ELj3KgMc7qeXRPHtuiTzc5Na80nNfvEkdVjy+5nm9qbMkOwPPYrvsD4I8OpvYu6548LwWXWs9aVhGvZlMOrqMnIw8XFkDPbWOkTsySYI8nkn1vKmBkrwLBAA8wGfiOzTtbzxlpkG8IVfnPNvflr17qji9VdizPPjkGb1avaa9kVTbPCd+DD3elV498sPPvABQ3bs4P1a9vWJyPKO5/bw5t6w8uTQGuw7sDj0d2Ii8duyhPeE8Fz05gZ085RBwPV4t1byMwo89ztP8OysUrLwIQDI9eXg5vUm4Dz1S2AS9FrrzPIB2mby+4aY8gAGZvQGCNr10ork8Hy9OPN6ST73Xb5o8mcKsvImtibqMDx+99pL1PPex1TygcUY9BijivDsi3DocIl09BLoPvGQFE70w1P68JB3MPWJ0bj1p4s88jC4FuzRiaDyVxwy8kUTQvNHcgz1YeJk92jsDvRXTmzzPKl895SmuPHcSJr01Uw49mZVIPF/vdz0h1Lk8xfBtOydxcTzTrsI9caHOPGKbhrsNm7Y8peScO3Srg7rOTt47+SoGvQ4JwYjsPYO937zLPPqYnDwkOFu95fOpvL83tTyrbqQ85mLZvOSEpjw4p8i8c2Z7vUZUpjzWy1C8+o+DPQoLkT2G0bK9aTfrPGNWpD2miY075L25vH5INj0h1pa9FSQHvbR/e7x+TYM9I+HcvH1acTy4uf473mRevVzDiLyivfc8pRIeO5Wttr22CcY8/B0ZO41WcL1OqYG7v6h9PEfSEj1GK0Y86uWIvaItgD00+ZM8KosLvSj7W717HmI9TFCjvOOKvTy5iRS9vmdvPUMItjxGz9E8n/OTO+ZeTzz4/jc8g75SvaJHbD2bBQi89dmhPcgNMz1ZsAO9/ZkWvM81f71MxAM9IOAiuvQuFT153b88glh6PQZGVDzLrgw9JKjlvAW43Lsx9Rw9inacveI/MD2Usge9dwxdPA03B73PlYu9vohDvXx1H70IDKc9LzkovF5ITL1VHqQ98FORvYIopbzV9ak4Yvh7PFotaz2Bc4i9XoEHPPk2ZTxz9zi82vJ1vVsb8Aixcyk9K6ZRvc67iT2Kl3g9XMhPPJRzgLwevC68GhBYvAJVmrysPmW81fozvaojQLzVDpk9KbvGvPnyGrwcqA8922eHOv0qlzu53Uo9/uUJvZBOAr0Ti4w9Q849vLlPpbzzzIa9ZLcuPbQ5p70qkBC9+UFKvMdNDL2eprW9YMfwPMffQr0zQRm8UWVevD0TQz2mD2I7mf2LO8E2Hrxn0W097eCVPcqlLTzY9Q292ArEPGnDvboR7Ag8LFqKvchEGL22wq27GmufPWho6zzvtVq7rFYmvQqPWLztTh28HcEovaeUDr1yWq28n7UnPIXUbzw9cmi8g/AIvaSzQ70bz0w9XT/rO1ASB7wgZwu9QBGPvCIHpD3jiQE9m0r6u61EHD2ZJf+8afXiO0gpi72fEiU8DfYzPIffUjzr+9W8L4hSPaI9AL09qC49vObWuyKFm7wE3eW90I8IPSR5hjt25Rk8G/+EPVwD8zt3NpC7qpuqu+nznjy/FNg8pTUfOiBla7IE8Kk8wU/6vDfvLD2ozA09pE48PFkowbtObHO95dTnPWsU0jzioJC9HaLYPVcpBbudHbE8LyCsPGrJRT3STRw9e27xO66uhjyc9Ci9CIwxvStFzzwW44o97tT1vHcUFT27+xK6iez7vHsmsD0AYDE8O4PlPLhPIr1IvVS9FtLhvJqROb0TLSG7DYkEPXhLjbz//Ti8nY3fuzJmGLxS9T09iZDwvDUIlDz2FQK9nVivuoebm7sUt4u9zXmrvVOZArq4cyg91K/jvGXd4zw9DZK8316Xvf12FzyjHMk8TNwmPCAqk7x9Ew28j2QIvDnyyzzWg8E8e5vMvPCVxjwwJFi8c/kCPZlGy7z7fsG7kVFlvcbZij0JqDE8uxwgvahWubzsRqi9ZhWWO93pAzwc2vC7RS6/vJSigrySoUg8SQJYPU5gMb1r6Ui8HU1ZvHiTcTtdzQi9jxNOvfaYQbz9dYa9bzLgPBPydDyokBq8oUp/vL52cr0h3g28wzWJvFUGqTxalvm8CCbuvDOJNj03M1I9mCNePclIazwhtBM98oagvB5Oxjwg1uA8eo8LPIGRh7yYUPa6em+bu1QZBLzkRfW82y0tPeJ5jTwbfHC9GhWivPWRir20Uho81QzQvOBbvD2EAfU8tDVjPAx8NrvUIuG8Eeg/Pd8FlLxWpus8AwRcPBoE8LyxG6i9n342PeFOwTq9Ek09jgthvdeO072epz08oWNEvZDlMr1hLcQ7F5vZu2DaTz00kIM8ntcSPc1QIr08MSw8UOWvu0dnFb2vKec7/i/avGjhhTxbYQo8TcsFvUoM6Ly4SQg9pCZdPZoqpb1XtY49RQrpPCAh3rzjTT87GN12vcfnQbx/zVo9oXeGPZsyOzvY8vq8bcRyPDu28zonboe9BfJMPO0BLTxecSc9/4sAvEAiRjzvOKU8LSGvPEpLmrwuNRC9GarjPD8v1rxB1wS+s8LYvEAPNbsFlLk94BhhPPsUjrzGJ/M8L4MbPc8ZZr0klYS8LnsivTnPholsYsA7zMkbPfwFN7zvaCc9XYieOrdXNjzFbI28E5XUvFKkAb1nXiO95+SVvAlDBL2UYuq8vGaVvFUjSz2sjQS9CrHYPD2oXbt6dIc9k2ykvHTsKj3UyIo87ufovHUQ7bwi0q49iIOBO5HHGbxtt9w8ts+IPM+wBb0UCWC9IH8xvNUFlDlsgBM89hIDvMyzyDzrEIG5CFHOvOWTj7udiwe9keh6O0sfbjvBEh69H+IXPaCf4z1RbxM9xvJHPdaZGb381pQ982mQPGdpj71X4n69HCDSPABJRLsum/285K0NvQdmwzxlJo88COA/PRQy7ryIzt08116gu1NtMDtUWoc8SIhuPexarDx7d6W8ovwCvVPOwzxfVtk87qt3vZvy0rxF+IM7ePGCPRTvxzwdqt27J4ObvTPaWTvmWRU9YCtmvevftbwyLjk9InfAvfrYyjwUk8495myLPEiRHr30U5M7le1rPY/Y7zxyWC493TJUvYWh0Lyj60U8j9jJPB6tpwjKEdU8Uh2rvERHeT3YbTo9cMcPvWcCibwBSVo8UE5vPWX9Tz2r6sm4ZDzwvNRMLT1EZso9JlzSvJvvHr1ZBye7/r3RvCDcRrypkEe8rYzcvFlzsbxDZi49qDcDvcC5I7sNgIy827UIPFI+wDx7jxq8XPI/vCscw7rgh7E8pQvcvHXtpbuFNEQ7SvKEvFA2jj11lgI91IkUuwtiB71DciI9meWAvFybRb1uWiM9k6oXO2loAr1GjRw96zoKupY9lrwRSJs6hqYSu6wZAz0rFmM8U/QsPceUaL1EXto8VMiHPHC2YDsL8ic9g/EBPOj9hr3Sr3o96zrbPI9o0DuiyTi9SMIKvWptTrzdHea8LQ5mPDHeOL1w6A491bEOvTLc3DzW6w27wRsjvEseDTzA8tm9MDSWPZVSXD2qCQk900I3vEi8pbyii4I8kJQYvbMhyLwfpSA8GK1ivdMxbz1C8OK8rdKIPMVqnLwRkjy92msAuyTk3bxjK7S9Wn42vT2zWbJxY+48L9FHPbYh67uNEL88cGpJPeVUHz1tRdQ79GBuPU5tpT2czj89ESmHvBpwaD2ZEDw9sfE2PfQA3Lzj1La7ROoUPMTbzTzFAQg8niNHvGxvYL3KgLg8COtgPGSPcD3y6jA9Sg4EvetnuTwFI887TgpSPZQsLb3ZCym96JVNvHIb2DxVop+6ANO8PDlOYDwn7Yc8ThBhPf61CzxAncM8w86ZPKdvkrxWk508MXWWvAiGdL0cSVS9RnEhvaMP+LynATe9RTQFPEAA1LopdC68Q1aHvcUkX7wo9wI9Dy7JPJiVer0D4q08fNM0PO2lqjwoM7o8f7oKPE9A3juwUlq97QfUuzqTVLxVnEa94MdKPfgXM70A1Uy6mG3Cu9znQT1y2n29FEoFvUp69Lw2BHU8byhhPWBqkDojN8M8rCcKPUBz4jqsvIC8MPPhPPwzsbwYAaq94FCMvGjjnzxq1Yk8ibryPDYSL722CBY9uuIjPDvjPb0gw845kEmbPNYvorxjshC9twJ2PGQoPL2V0RU9+lg0PU4nWb3eOJ29/lPWvDiypT3SuS08ZNxKvXjWHj2wmR08x2UrPHx6Kr1yY6w8RCxYPcCYn7ztwNy8QNcfPSD/xDrmIoE83qxnPF5Bjz1EQVs9TjEZPZB4Tb35hZW9ujXNPBCP4bw6TLk8aME7PGtMy7wmrbO8jmqrvJzvQD0kLQ49osTcvFbMyr1Aowo6ilsMveRSh700ISO8DexlvYKcWD1ghco7Qy/gvPpYUz2TawO9bGjWvDdKhLyYBMg82QWHPLhaSzz3YFs9lZu/PJI5eL3exla9r6oRPPwTWb047gw7BQrRvKAi87z1rto7zsfcvFmBnbwStSS8aVXwPBFaijymPrm8GpnbvK3TCz18bui7k5cbPPvjU70IEie9bp91PLkkyTyIDxA7tFfFu/gEkjyXJ4M8GdJ/vDEtNz0a7yS9IAhhvc/3XTyUAlO81CF9PZO7hDwzoBC9cnb3PD6MnTwSIbC8ScW+PPolGIlI0828jKo5vSassj1gHFa67lmIPXJnX7xicrY8GBEgvTBE5rw7n7c8GKRYvQn4nT1WTo67sOnaPGvVYb3aQ2w9AqUcPDiZXD1itT49Wi0tPU0pk7zNJHS7L5CUPJjXCz1aYWw9cnUJvSYSI72UEjc9VqUrPRvE9bwo8S875WiqveZR9LzMjQY9N8MmPDoob73SMca8qkMCvbTgir1WRf28jAwyveq7JT3B8NK8hnvcPPAt87n3wOM8MaSTPCra3LtusiI9DlgGPXMD+bwMNym9R1hWvAAQibxv42C8PAdNPF/Izjsm8oe7yPE7PWzSg71RrT29EBu/OlzVobv3o708KXbcPJLJXz0/jw09NROSPSS5Fz3GKU68lFZyvSrrjD2QRIo6okr5vKinBbyGiwm8R6qYvFg8lr3BX788Z+KAPaSkVT1rNbW9Rm+cvfMvpT15O5s8HBiuutJMnL0z1dw8hEESPa5ixzxgOBC9aLpyvK5Gmz1Q4Ue8aEzbvLTGOYg2nBU9KA6ZvVrsHz2XzI+8ch5BPGBqHDraKdA8/D6mPL5qxTwkpTU7UauHPESHdz1xx7M99dZ5vIBfKjqBX6M9I+q8vAW66TymIE+8bqsZPIorLr2Gcoo9OvT6O9ArCr3+mTy93AKbPLBFJbt0AVK92P1avV5xojyh5SS8ZfcCPcw4q73JhAA9Tlo9vRBy7DqPj049uqYmPMFQZzypwuW7EN9kO5E6UD20Bim9TImcusFttrzbPvq8XIGLvaQeLj3Kh6y9+l+BPIPW4LxIGbe7+O6pPBRRSr3mWNg78oD5OyHKvDsuPIS7lqJevIGFzTzf0BO8Ti7qvLLUn7wdMgc84vQuvQB5n7u2R+y9EU44PerFkzzwHPO7eVdxPfxSpz0Ub6w9rT2HPTAOnj3onpG8pFO0vDffbjxExIW8kjStPaCuzrlCwoW8yzX6PELemrwmIv+7KaHbvIWCjbyHWiQ9ZKugPIQyKr0QuCC9RdilPGVgnbx+dyI8Rj3sPP6YW7I+8x49pceTPKphA7wC2zu94nE1PBAJ/7oriTa9qKzAOzBFrbxsC5A95UaIPLD/0ToquEy83tqwvN6ERL3GERg9CiW+POqV57x+ReW7Ala6PCD7ZD242/s7As18vDi89DzFB3I9gCXtO4c7LLyV5Ys8Nd81vdb3d7xO1UY8jGbdvIS6f70dcuI7DNBfO9IMNb3HCXc9QmDjPOeeyjs79ge9ehEvvdAzrDytQSI9c6bavDK+qbz2ccc8dvo/vUhaVLuco5M98CByPJzYwDxK9qi8HCMrvTAM67ttEhc9pB6QO7DGLb1EJCI8o3a/vLgYXL2knZw8ScnqPOT7hT21dEe9KUqTvW8aQb0V57a6vhRhvLGHCT2GVIG90/DLvOl2xrwFN8C7YMCmu1Q8OjvBIiE8eEonvYPcxjwWxo49LyLsPDcSuLtF9LA871ZuPNPOPrxURQ69+m/vvJ+kP7y5M4S85/cQvbBoCb3AvAS936+2u6sjrLoBvxq9zG1HvLW5lDz8k4Q8zyhkvFVWF70B1lQ98/U/PfO/kL2jpaG9h2mRPLthEb04ei89TCnwO4JylTsgU5A6DCoxvcZxIr0+7Ta8wiROPU7vHr28Zz+9DG/kvJWu0bzycx69QVUJPWn7Ujw3VJ88SBQBPZtNU7xfcu48BZsXvT/l4jzxsQA76PUePUQiKz1Gxd88wmR9vCLS5bw+Ln08rxMwPJrG370xdp28bhOFvDoLFj3My1u97+aHvS/yzjwnDUC9yExTPNQJ/bzu/4G9N9frvAxJwLvtW5w9OOIuPbyphzxtnBg8G8VBunoeJ70Lz+0649FIvDZNhL1MWms9JsSDPC9F9bynOHY9NkkMPXdAzLyCP5m9cJutPTcrUb3x1Aq9AzhXPQ8wrTxduEG8te6jPEV9nDvAtJe6D7/aPCOPLrwtVJg7/lQivd+Rw7w/JJ29Nizjupz4t7ywT6U82l5YveSWVD3axC09IQQRPQwSpDrO7EA7emCnvPtfgjwZfK29OsNWPQTPRIkA7Z470QtfvFi77Dt9t5k95rorPe7mqrxgNy4872/BvNzl+71O01693fpqvDs9bD1krM68LB+FPGwTsD2lXJu81NhqPSqVGj2AxDY99WpZvV0YEbxLGtG8i4fKPAjkED0k4w28AD7RPHohHz0fXO28GeVXPV6AnboDNsQ8nUmcvFJMPL1PyE+8ih92vGSOcTziI5S9Gu3dvCdMgLwLcQK9m/fru4zkcD0zYeY7cWnZvMRcJD2PC4G8ALvqPJAjJz3kRIU9h9rMPCnNqjtC7WK6IwutPEkIdz2Zkco8iRWRPIGAAD2J46u7RPhNPfS11LxrbFA9md3/vIr6rDztKNs7zQ5SPVULGD0AUjK9fDknO9t5azuktjE9LWKGvc3rlLwo1b08jF0XPe/zpLyOzyw97JYXvUy0t70+ReO8o6lSPMLLVL1OjA29esNgPMY15jx7duo88B8TvbyJtDyXHts8G7ooPTVTbTr1D886c3EeO0rz8byNkVu8YV97vSs3iwjOZI69MmKYOyDitjoAQlQ9pcTRPNAg9rrXZwG9xu+CvfTVyzyToks9UNcbvem16rzdEcQ9ZascvKQLWj3CC5w95pnkvJDhcL0pdda87lOFvFMrT72QuvM8rF8uPLAN57xmW7u8TPh6PHPsDL1R4/u88h97vagUUTzs81s8SJwPPTB6tL2GoqK8IwvXPFuCozrmnWE9LgUPPS6dMr0GrjK9FRyyPTReRz1S2ke8TxRbPXjUj7pt+G08xtSgPGUjZT2XciE8XqVMvB6YJ717+iG9UelgPPkJLL1tvM+8ZdsIPAtYMrvDZp49IzNSPSgRJDs7W8a8yGXhvAt/ybxKjDq9tGaxvFxjy7xgQIa9vogMPYsjZjwg7hE6XSSbvA43Fz0yCjU9jl7qvDuCK71c2kk9SLOsO5XBDD0mowW7JVt8PCDaozytf/Y8h+b7PK+ebDxgJYw6Wg7KvBCqkD0p/Qq9oQZ5vIGavrxlAxE9AllcPexPQjwLUk09s+FFu5Z2c7JFFgQ7HF/QPCBpOLxzbdu84gjNPJLKMD1mcIQ9HSOuPC0STTxwFYc9knLjPOaeYLzKmYU8rIxQPdTKRLpGTJM8h1aZPNTlBT24dTi99v9MvHHcE7xNUiS87QSovPb0hz1qbAg83xP5vAJ9ED0v7d48GRjRvET/b7qOIpa80lndPFPTAb0FADG9+ohgPdo5jjwRz/i8UE+kOqjJLz1njpa7E4M/PEIEnD21CiW7NRdnPGpvvbw+wBa9CD8ovYHqe72DA6G8xyCYvFDghDs0lwy9yvURvUBTkDwZJSk9TXFoPdDtijuZtzG9iJmuvHeklbu/aCQ9Tp1oPSXo0D3kDEO9P0qOvT6Bdr2vqpy8gmJNvIvirTwwMZq843YFvcQFLjwjDja96ZGIvAqe8ryC6FU9CKsbvbTQgj2bSYQ9fr2APDt91LuvQ028D8vJu4km4ztgdm+9giCLvRserTvKhLm8iNWFPAqArrzLjFQ8t5rdvCvNfznVn668nFsNvWaJ67xNrr47476evMgDZr06T2u8kH/xO2S4iL20pLC95Cs2vappIr1TeAs9zK4Kves++zutLhE9w7FzvHC+MrtxqgQ7sYauOis83rs8Q4692vUtvBnC6TxiJbm7L8D/uvG147wXYyI9uNmOu8OyuLxAQ+a8khkJPYY91ryra/S8tCYjPTe7Hz1MSPM8PB5DvCekW7xfvWq7SavDvRJFBr6y7Ve93gFOPSo43Dv/4Zc7ChgwvSlaMj1Xs+i8rHwpPf404ruboJ680hU9vfsFI71EZvg8lc4yPQzx6zuwQVC9soMzPe2pcb0vFsC8m1bhuJD++7y/Ihw9lJHEPJRbrrwbFt67nn1ePbG/tjtpShK9oOqCPcEsFjypFEy8vUpauw6mDzzSbUY8GFWduyGvljwVvHW6lg7fPLPzAjzOyze85MJpvXkQNr2GGJ28B05+vDtF9Lw09cO8txsMvNAtGj1sBaM7pPH9PHP3S7wYqcK8I5s0veAnQT2Ynmq8963LPNdKcYmXU0w8Er9Evcr3UDy6mS89Yi5DPXpUsLxxZwY8spYMvX6llr2iShm9/8a3vMVKyTy0y9g88qmuPPAbiD35EQC8R9QyPPsfbT2TBKM89qppvPLfHDwYmbW8DurGuyiu8rxF3JM8BnZLvNxg1bxw1jI9hn+XPdipl7uZd+W8Y0LDvMjQAr22c328debMuyM6IjwGN6m97RYiva8S0TuffqK7Y/w8vVqWxzxxea48AQsAvOI4A7zuxZ48+zV0POYEKj3kTpm8yr1BPWVmArpGSpw8VnAdvQuz8Tw503M9UnGpPIVt1zy24R89VJSUPano8LwnM2g8IMAxuj9bFTxcRN+8CSeNvG0BoDxy2gE9ZkkcPaWxWr1cRoo9hxPNvCF2RLsxziM8SP5XPXjDUr1vDrQ8iaw5vAFNSb3bdJi6EGooPYLdFr1OGmS9rOwVPYrgLz0mWLY8LiSJvKnvUL0I8bG8uHRMPWa4njydq868ZBaNvH55iTyUnpA8B34bvYTt1gjf7YW9e7OcvHABwLqhzKY8dq4qvWmLcrvwI5M7A//3usfA/Tyyogq8cyiLPCPECDzQjOI93/vBPFx53zzllgY9hwc2vDpeDr2YdJo81gjevHe1orxP9c68EFybvIkJDDwEDiy8wPkDOyCLiDtc3zu9C/ahO+jNADzu8pc9y4R6u3zIn73JWdc8jxqYPZw8FLysvg89sXnpvFX0irwIyVK9t4ltPVvd6jweT9M70gewPRxctTx3/Xw8Za4qO1F79jy5VaQ7cbOsO8GcizvAwGO9unF6PboYib2BH7E8+ifQvBf0WzshP4I7mfiEvctYIbwhbmC7PEJbvT9z8zylCxG9E3bpvHTOBT11rX69SDWfPa6PRTwl5jc8DINJPdI9ND0eDWk9uCbruyhYszyizJU8ohXGPCg9xjzXHL68cTULPRDtqzza5Cg9ejB6PSWAajx9IVu8X06Fu2pGUjzBR3w8Ha/QOzeJj73yopW7Sy6PPbxeLD1izTU90J/KO+7yT7KzpaA89IU2PQulI7q5YUq9BtOdvbpOLj3m/n09jQ6kvWAhuLzk0oM9ebBNPGOIM70woeK7haO0PHK4BT2A3VU91TRQPKBNeD2mILi8S34pvPEl3jx/1q48X3awPALAqD34zSw9oqVGPGyNBT3DHg09pgQLu/Iph72YkkO9uKF8u4+IKrtAl5K63pE0PfJb1rz6ajk9OaDEPHs4Az0dAAu75ZSiO7J1BD0TzQW9yBF/uwXlTryfebS7wtosvSlRMr1QbNy7ofSYO2zBMbwwOs08N3auOh0hBDy52RQ95HELPQDOJr1sHMq83aGKPCpMEzz2ZY898WQYPCbG1T2ZD0E9PiPJvSOXODtS8YU8L8l6POIhKTwWar08AaP1vVEhbTwfu9+84/VDPIINajyzEGs90VvdO+4xmbubZ2i9lRRJu7QvoLyfnpO9GmwUvHHn0rzpgn07coXPPAVApLtGLz88MUIYvWeKvDz4YT68EwNPvc1wWrwyFHc8e/kPPABBPz02PVW9qwjmu4G24jz345K8M0cIPYr4fjyCJn09SsLsu7SWVLw5tAK+gkXqPOLGlrxpvKU9ncndvGMLCb0rNvI6P0v6vPBoDz2K3q69BEU5vRheWTyoKgK9+J24O+GrLL3vAVK90nsBvWGtkrvNgRq9mVYgPZsPCL3tw5u9A9C7OknvYj1s8g49IXZOPMFYHDwxEPY6b19APG+MPLwkeiG8+Lk1PERfgL0uUCM9HylIu1ZPjj3zPvc8bX2KPSe4wb1L8A09YsbVvTfhwLwpQ1q87cV8vRuCqDw7SJm8KQNXPAdRQbzINKs797QrPCKeGDyG+QI91xROPf4M4r1ofjg9XUqEvEleX70j4LI9BT7rPVhWATqKczo9vIIkPQCqh70qrCC9jP3QvBA+VLv4rA69YMMlPfWfvbswfzS9AIe+ujvdjL294x47YySjPKuXar31qP+62GTJPFhNLj0PnuO8Vr/eOwspPz3kUAe9VqBgPDBaUL23jf+8TFw6vfYB8Ig4sQE9zJKGPDj2pzwxXNM9rsWmvOCW2TzgA7a71Xk5OTPXrrobmMS7GwJyvbU7BjsAlGi8OlU1OlUJUT1eECa9RAwgvSTJJD3Y3WW7BSmXPPWSKD2kOii9l3DmPKe2KzwxR7I97eCEPcwf/zyB1C69QE1lvPM4SD2oCUM9/AQvPQVjKb23W+C87CsnvaXLrj34REu9dhVFvR86jjz+fYI7RtN/Paq7Tz2ls0480RODvMknmDzv80Y8zjqbPTkDOz0pDHk9V4gJPNXkCr3T0gQ8jrnTvbaLgL2KnPY8IQMVvR5o47z/mEa8Cw0EPTOyILz23hg9rtF5PahTZb1tOO+7s5SovJBtkD0FG0+6VGvevLZYrry1g8k8eU1NvBXvjLzcx1C8Ci0fvcrO/zzpP3Q8Epn/POvaEb2i9PQ8llEXPYOeGb0U/BY9d82cPLc2NrxXJcs8V3BoPLpjtzzPSvs6JiQXPUDZyDv/lWo8K9P2vNh51TwhlDM90GXyvLCnO4h2Xea8YB+fPNZNv7tK5cE82M8jPKHVL70lSBm9KIa1PZbzyzzwLcs8y5+uPQLhNLzud/A9iX99PY2MwTxlMRO9EbqMPDjg8L0GNX69d3y9vB7Ghjwrkps8Vcc6vaVTnLwRMrG8YTgdPWERBz1WdCu9rNLsvLprgbytZa29HpKRvdTeR733W2I9gkJavREIhDxvYlM9zUjTu58k9zoe8+28AsQCPT5YXT0Rxr68lX4jPSYixbxNL1S8RBGqPHpJZj2ilak9bY3avA4TiTwX8kU8h9cZvFxYy7w+VN287drsPJczuzu8TAM82ij3PCRYhDzEvAW9lKSvPGdLpbxWnD+8Iv4RvYsmpb3UBl28BGsau4OOiTv5B7Q8z8OePZ1mHbxoBJK9sdeLPJu3uLzxm0W878GfvBBd+7l/5688yuPCvCobNLwXGd883GJmPGrQbD1ncYM9c7hBO4E+jzwCBp+9QMMsvVOKhbwCWTy9BmC3vHBXrbw3T8w8G0i9PPbehrKEve482CjIPR8nyjxXFgQ8A1BgO/OqrjvKdIm7az4DPQEoPDwylRQ9EcXSPHAkQDwpwTg9d5AUPR8JG7saxVA9iNCMOuz5Bb3oXue8cgsTvT9Yxjzf6pw7oX18PRoowLuWWes8zknEO7QsHL0e8ak8/8TnvF3pmbybSYS9udQ6u7Hhm7yZDrq9MuzyO4ugxbnX4VC8XVjnPAYpqrzPU+e8K9kkPdHnCDyQT5696cyUPTbSYj1IiYq963ckPNu2Xb2ZMQ29iAR5upFCXLw+Qa68koXBPMtQHzyQpwi8dAQTPdXh+rwFvae8gtZPvTWatDxxkss92aSDvVPMDL3qFWU96WGCvfA2JLsObBw8t+CKPIiVpTx7sRQ8T6y4vbOl7zsihgi9QwXSPKMlwTwxrZE9GjsGvcQOHD3DZgW8wJz1OurVQbtPs4a8ZmdgPITVObwvelq9VV66vLP81LoxxWK8XN6VPPWzVrr53a06qtp7vaulIjw7j/08zuu5PPg5tzyW23W8P54JPCaIPj0X6BI875m9PBAfZTsH0co79BXvPKfRcbySZrq98x+nu74BDrwbPo096q70vL2g27xVLIA555WUvD+pizzsgDe9sNhivbcHtrxp4r86gZKNuwQAkzy9kye9v3fivDudyLoRVt+8moX0PGQtQzxnxfO9c/fyuzhIPj0SIFQ9LiTMPNMwSTzC2FM97SKrPBf4lrsZktW7ZA5ovSAUdL3ZIWc8m/l6PEu6Hj0e2DA9miCNPQIRir1VntU8QxpQvcxzDTxUPa48WlFvvUZYi7zjAky9OQsBPWjnQ7uMB3Q8OLTIPBIxiTpMy8a86F0YPZ1hl70JJ8e8nywyu90TfbzoGZA9OLPaPYHtBbygOVo9FRKVPOfT8LqQRqa8+HlGPCmd1LwMnAu9v0dfvLARrzttHFs88NLfO9vFkbxXdIW8Xe68O+f5KTxCiQe9z6WXO4Ne4zy9LTQ8YxJFPIuMWT2lmua8zQsjvYcnfryDuOs78xn7vAJNJIlVs4U8baa+POMDHjwPHIA9xZ48uwmQXT26d/c8Dl8evZ5wsTyM2Zu9xhNVvEq9mDywSuO8Z5Q9vdasPTv4CYW7O/IvvWgX4TyKVSu8aPS6PNebYz182ZG9KL38PIS0tjx5iB09rohGPbkccbxlOVu9pXjJvLdVJz31nOY8Wh7bPCJOHb0IwhU8ef9BvRc1yz3KfPo7yKmUvbIwJT231qu8lVe9PLf3zTya1S89kSoDvd4sjzxchY48Ux9iPf9NVz2Puks9Qow8PCuzv7j63Ao97Zv0vXBwSr3rfWi6xNbrPD4yHr0i8yu8Ff4uPWy++7x8YzM9etjrPCtIMr2tqIU8wSg4vQzmIj3JiBm9t6Gwuh0KCrwhJwc9R9grvArOsryiQLm8TBUbvfRdBT3dkYG8k60qPRX2Ub2kV408bYzCPHX4fDvKZSI9lWoKOgwxnryKOAE95UehvHUTXj3/BRU7irEJPM3zBL3sccO8hcdwvMBb7jynKJc9bCkgPEW2wgfacgc8Gk4RvR78ojxU8ZQ9ChmZPBrBab047We7u+ScPeKDGD2R/L48MzWEPcMtIryu5Yo9VnL5PAVp4Dsh8GK8S7a+vGTU1L3ES229F3p2PNtQD7zizA09caBmvSyy0Dz+Bha9Jn5GPPuEzzyga429blzfvIvLnbwSrSS9sn0MvSITBr3cvpU8cMuGO3RfVD1gubM9QKLLvOsVYLyvNAM90p31PGHWoTtrvU48qMQ3PVCuqjyR1WM800x1u8y3Uz21U089bIvfvNBhMLyqsEK8dA3WPGl+wby8KZa8657UOzPZWTvW9we8WumOve1YKT0zCMO8oUc8PJUtkbyJcGu8Yr+NvGWnh72XwLK8Fx0ivYz82zyAXTY9mVFGPP1BoTy4Uby9RH/IvFz2oLz9yhC8oUhsvCf1sbs6ZIo8GrigvEJ+gr0D+VA9iMJSO0QrPD1EDmA9u7uzvEX9dTxo/nq9SZhFvRp5Cb3Cqcu8PvAUveADqbyVnzc9hb02vJpwerLTkV08zSVFPR2ObDyN0XI7GXL7PLC+B71jFqO8p+X+PHcgSTyTKBE6A4dKPSUGQztQL1O87Q9NOwEQhjzjUhU8SRctPfJ8brz4yWW9ih5Nve9urrwU4Zs83nI2PdhWgDtu3R49puyrOwBvizvymLk8052SuhuANj2RleG8DH4juyB0jLudAli8ZX4RPNfa3rxSytA8cP3nPElOBLwajbq8jcyWPLW62TxseDC962gCPYhlmzu3F0W8hypUvXz+NL01iAO9rdcnPAFYrLy+2Ha8AVAOPGgsVTyCcea7lCiGPY6LgbwIZTW8J/ASvdq4wzopRlU9/imCvW3uXTtlfm89kQn+vQAe8jgjDLw8gCxnPI4+zLwp5fM8YYyhvWsgfz2lX6a8QYTPPHs9zzxCx4091UcCuWRVhz1tGwO98N2hPJBggDyZJ8+8mCTCvEb1xLx40Vc7vlArPLnHPbxeyoS9chfEPKgwQ71Vp3m7MNFFvdX8bD3QudM8yNSZPItzD7xtvPG8Vnw8PXIjDj1yrwk8qcwiPRNDQDzk2h09Vvo5PYUGzLzacqq9L7cLvGSYGb3CdD49Js/ivO1QzjzYQ5M7XPyPvOuGKLs7at+8shgRvSsidzupw5Y8lZR8u3gjIT2+3Oo7uXgTvcRZVLxYOFS9SPDtvCqRr7uIolS9fznzu8dWCr0h4I09QGCwOjUPgzwIRwo99Vupui30U7yZ+by6iTWOvOtTFbu4W3Y7ZNRPve/pjz3Uhwq72RG1PFKRrL3EW/U8a5e8vGsUY7we44c8YBOdOxe39jz35f289grqu7Fta7y8TKq8i4HMOz9oM71LTpi5IKIAPUJ+Ar3cNOI7lG2EvPXG47yZcYE9H5fMPcKp5Tyl+my7JRB3PYylo7xhp9k7962DuztIVruE2ei8/QMqO2Sb8LvyNIw8KIsjPHas0bwxewa9qsevPItzjL0Xa048irDCPHL/jDxFT+Q6imlLPUV9UD3ZkrW8eDSJOfkCTr0Fqoc7yLkQvQLvB4lpVcK7z64KPPYWnzwKa2g9GBmDvNZI+jyF9yo91CDOPI4f6jz91EK9VSAHvTrBqTyI3iW9l+ghvRAMCr2A71479ExfvTSHED3/Mg08QQqPPKbcDT0oAZG9+hMlPSBe4LpHRz48GfCiPMNZkTw6t769e2+tvBKtxzy+Bju9G6Y7PUPCgL1ZfQ+98ofavNyGmj29Xly7L3U9vStL+jmQZvi8ujb2O1VVTj15P3y738bVvGDnNT3dcZ48g7kWPap2Mz3nnqk9t2hPPKJYNzuCiAk7ptT1vWj4iTpNTI898WwUPIsmV7rZxfy8plG4PC31n7yU7uU7E7uTPAr/F70Azzq8PeCjvAiEibxNkPC7fB8kvZvilLy0qqK8zsPmvKzx4LyB4Re9osibvOp54zxVQNa5HRrwPKM3ljxEMLS86+QyOrg1mTocbpI8n9HOvNAHhzs+Oo48RgnGPN4Hkj2NucI8UJyYPH5LxbyoyZW8lBeyvBkTNzzgTx49LOQXvfku2gfg9de80xZjvM1MqrxLsYY9qLKPPARedr1jXuU8XvKSPYWALj1A/Q88qt4sPUYKqLym+l09O0fau7HWVD2D9wQ7/43rvGjTkb1QEvG8iQN5O/f1IjxqAxg9m70XvW/pujxlblO9hV7qPAiWs7z8rP67GJEdvUR1gTy4cTu9MNLPvFPBOjuU7lk9ldsSvRBhLz0b6D89Hkj5vKNoszt3PE67aah9PJDK0DxJlSc8NxQ0PdJSmL33DjS9gGOwOe+qd7x6FTg9jF/cuyuMo7zTacw8F7svvBtpgL02djC9ZPIhvJGk+Tv4g+u8s9mPvNKCKT2f1Pa8H1VRPFUhXDyfwh+9HLYVvaVLL71EI+G8yEavO6+iGT3rJ9k8OXpKPGPz2jyEw9O8F84BvTYzlTp5cPO7RvjiPCV5wbz9ZyI7wskivcN8t72rkzq69LeWOvMeZT3/cBQ8tjaaOpmM9DxHfsS9gGU8O0TuZ7zWZci8VRB4uSVlfTxo4Sw96BQMvMVUZrIjnxq99WeTPbUe0zzp0Mw7CK19u06gt7xjArW8lKEwPSaewrxkOkA8n49kPUYKrzzZM888l1CNPCp9AD11Z4U8K8kMPdk7DjvIP0u9Dhg5vMxTQDzpeDU9K+WAPM0KFr2wviU9XTe5u7LX9DwXIKo8txx/vLNXUj3XZTe9y/WZPfgi5rzBU627SlNfPQcPzjxQR+A8LRZmuwo+Ar3bMe472k3iPJhcDj1a6Ym9fX3zPO9XSj2bKAE7C6d8umWJRr1TnqS8E1iuPIiu0LpNlQS8AzQDPPXW/zsmz4y808cdPchROrx7Bwi9ak58vPQx+zt/NAA9KaGuPIHrljwhmKE9UfpavWdzHL1n0ri7a8u3PEFtFj0Vfrs8MEpAvQAobT1GwXS8ZAwgPStrLj2HJY89N+cfvdDEaj2tPu66CuxUO2wHNz3/LBi98NagvdLyk7z59ry9OkO9vNGM1jwniI283l4QvHe4FbwuPJC88+Zuvd/7SjwM1JO9KrpSvbovKD135nU8HHS4OzOFYLu5wdy7y+MWPbKBnjyM8yY8axQ9PDuoibwhAcm9NOMFvBYiBLwudmE93OPxvPF0l7uV9748+gQxvbfgNzwC+LC9Jx6rveriGz0M3gS8xZaMPGh9V71/iIu9FPM9vbonJrybRUu92N+oPe0F1jxcd629xP4sPJprYD3L0kw8VFMAvQkYEbrojR48yxqwu5dlGb0Ze3m8DMI8vQ4BZb1VvFQ8/Vn7vEMVbjwYj1Q88pGYPXhcz70dpgg9YaMfvbFUU7wSx5m8eh8kPFs5TrzQJpi9NBYUvMpVGL3i+w29d4ZtPTqPYz1zRcO76pcKPUXqT70uGMw8aWIYvCsMsrw1J9A8dl46Pl3SOLudlIk9s3iRPcdVobxgvNs848oNve/6ljzPL507qEQYPJ0zCDwG4wK9pK7vPOaIub1+OgW9I9iPOyYshb0klNo8ChsOPBVRojoChU49GXAFvCqmXbwDena9kG3Vu8fmmbxEo0Q8vqGbvc9+LIktnpw8eEvhPGuTjzzFI4k97++Tu2o0kTzrNyo6ULsavasfGLynzDO9h20uvTj7AD32+CS9ea2wu/oOzDyee5C9nk2tvUCmPT19wXG7yMaUPFwYzDxA4Ag8GKBAPQ1fqDyoYkI9li8ePZLhCz02JSe92QuFvX5VBj2doWE7h0L8PHoMFr3KebK8nSOhvAoWAz7aYLC8KUhxvSA5HD0WZYy8CzmEOsvSZzzMn5+8MH8qvTBnyzsCS1E9eLZovHOkpzzQvQQ9n9tfvOjvCrxFMnA8UPELvmcd8LwLEYA8l4F6PHJphbxzOtE7DCTJPPZHNDxPPCo9Uy1wPdegf716Kzg7+Z33OrWWkD3YipC7qHijvGJ9qTwfrnM8FTSGvHTzOrxHrri8NjNWvGlLJTx1joq8VWZWPHJBAb2L2fA7FgM5PKXrA7wxAFk88W0rvNE/MDyDYvS7wJ0VPfW1wjwmFd889NfTu/z5jTxXeMC8JPV1vFuXRD0cqGw9MGKEvFdP3whs2oq9K3FbuyTHQL3PN7w9NJynPNOhDr03JJ48A4NuPabakTsSdkg8yDTKPcJhm7zabo49B5tjPfhiWD027mK8+oxMPYGSXr2BdEa84FgnPazLqDvpPJQ8a/sEvQcDo7ul4zu8fEJAPVl9sbwrqog8eNVFvd8jl728ruW8UhY1vXCSS72/9Jg99Gc8vd9cHD1U6lw9XDV9PAk1Nz2s+4c8yvafPRC7gTu1IcM4dlTgPNS71jtNNYG7r1MOvcoYPj2d4No7H9zTvHiY4DwzqRa8fTjlvJWvBL14q6e8gNmlPNhmx7xmsm286vy0vOJZ2DwfjGG9lD+BPSwZkr0bYCc9V/imvBuCabx5uca8lqwhvRx1xDxFbJE76e0QPfiOlbtrbDK9sAZzPF96Er2Icnq81TPBu9rdBL22TU28Y63MvOqhXb2fJYO8XtsmPVeXDD1CDJE90w9TO+aSDD3IRMO9sWaGuzePsryHfBW949uYvJN4H73RxnI915I8OxF/ebI35Yw6/QFWPYOkAryetPk70mtGPRQmA7zdNOO8ye+EPC/T9LxfDAE92ElaPdkmBj1ICCE9EsZhPU57kz0p44W8/BE1PavvNzlgJS+9xi7+vIpCmDwH0FI9bKGpPX905rtYREU9ELjZPBP7PLzpzYK8M9Kdu8YZFjwpQQy9Z3GaPRWvJDyf60m9Xk0nPdXgDz2cUZM8W3qDOg0Ov7wyaak7ZZ2Fu2GEFbwPfTW90AaJPPNYwDxtWgc9TRxZvEIVh73DWcI8SEQCPT+Icrvb3hu8tWaCPeg7i7pM2Ze8nqyNPaj9Mj3bJJS8e/L9un3rgbvmYLo9UMhsvYcaaD3thLY9BhAovQ0m7LvjIhu8kpIIPfoVvDzBswI7ttemvXXGoDyU21m97t8RPVLOqbszvcM8mJ8rvbcHujtwiNA6flBwvHkJO7z+Kra873/nvKBllDvAzjS9lZVIvQls+zvhuJG8VY6fuLXklzx6bza9sQMZvTW60zzoYPO8lAzZvGShwDzScwW6c9DePMheDT3F1/26rgePPM5tqbxJexU9RmOEPN9nKL0a8Om9QvniPF7bs7xrgxw9WTLmvFa+pjwrSVM9mDHYOznSRj2lMEm9MsBAvalBhbyj+Xk8CiSzuxOGuTzI3Je99XmtussUnDzcTfq8v4rWPKXzlDtO7Ou95GqHPOfUN7vovqY8HdeYO/xA1jyUkgQ9qBaDvEj2qrxA2Dy5CPRYvJWSC73SGPs8c74TPRLPyzxh+BM8rM7dPdWlPr1dyz29qoE/vS+jHb3RDX486Pk+uyz3GDxxPoO8DzwyPZjEETylAxQ8LHKHPdP1pTwRRMG8h6VcvL7p4r1pk/g7czuIO1HD0ryO8iM9ZcciPstO9riw0JE9cP7jPNWfAL0ZyIi7ZX3xvDipp7x9gl28APR0u3Vhjbxmsuq8UQOoPDLVQr2xi8E8XMqWPLEnFbxRXYa8VPp7O0ND7Dx9swY9yMAAPEZogz2s27a8jwORvOgpV73ZsKS8tCtDvRj5mIlwl0I98rgSPbeNLT1fd+U8pEA9PfSH07z5bZo8L/6jvDcfUTyT7H291PgivSoIFb3TUUa85XakvNKzbj2H1QS90XtCvQYvNz3aCmy9NjNnPeDTCT0vCZO9fEchPcpdBjzA9fs8E834PDBx6joN4Dq9U/2zvKhwXj1dNkk9ItofPVIOtbyjcpK8qSJYuyhdwD110x+85bYkvYNmFz2HxlC9yu44PVji6zo5b2U8qiyOvEH3zjw6r9I8I1wbPSNcuTxTUag9Xhx0vdLnuDtAt646w9i9vZskD71J6O88kpeFPfF5Ej1ZylC9XBQ5PXhZU7xy+VA9cSLjPBKZCr1hC8C7a5TGvY2Thzybhj081oZ9PGYQlby/A6E8K91UvETebTyBq9y6Y95PvXIgSD3EiQ09ur1LPUDrFr1WVQG8OUdDPY1aELwvy/88EiuuPAZfMbwf54Q7LxRRPJ512TwOct08FaS9uMLQF72cG4W8itjkuxWyz7qMdNq6GBykOx2cuQjs7Tu93o5/vCUPgzrJR5Q9erOIPPKbT701F5C7Zr+uPbT3NT0zi1k9CLj/PD6XyLrPPIE9cBlOPeU1CT0tb0M7Q0eaO0g8jb2KvWa9StaGvIMT6bz1pBA8sT1CvYshlbwF6N+8MK8cO8WaYjs7sD28hdESvToAQr2cR02909FSvfGEqr2l+Kg8N3DgvB/CpD1l61c9gBvgPO7ouburlok4xGlJPUzSxTtLPo48NsC+Pf4QGD3fuZy8wf0lO1gI1zsOIGI9Al5wOqudBL0IjJO6jcUkvLLi4rzi0Q+8AimWPA4xpbzGyQq9Ac5CvZazFj1e+Rm9yoNpPb4DpL1RR4c8IrdavXkbUb38z96878pvvf2JsTzpEE871h7gPJ4XIjx+u0e9Njr9vJefKb2b4fe6ONWDO9QZBTzMRFI8Ei6lvDKHo71TMOQ8bkksvVbxhT0VA+08ho+tPDXmsTwsGYi904FKvfzDE7x6r4W8eeRHvEPMnbwXkgW86JJ4vGxEgLIrggg9U9SjPPkjDz11l627y3/uPHzoyryZilk9XwkNu5sBTruROeU8QPLPPRnrsbtc/V+8J2/Au9VavTwvxOw7x2B/PEIamTz8bwu9+4CFvXCOnbzzDrm7kCiCPS2sGT2vbFI97aRhvGFcCb0K3bg93krgvD4BOj2Vlay8tD+CPYKPKzxfaJ+9suOevHPvnbxdJHI6bFHSu7KgWjxX80e9+iQSPaUQk7oa5ye8dVjsuXqFBT03rgI9v21/vB70Pb1MU806TUiau/qd1rxYmES8h2NjPeVzpzwPUW27+ol/PXl9HbzmE/K8apHtvOzPm7xejbo9vjONvSXrEjxYxmk9OSUwvW4cK73z38u7GM/8u0ADPj0BKlQ7xe1avfLEYT0JYia9KTecPTYxWjwtIsc9fTmpvdraJT0regm87/sJPQf5PD0xdzK9BDNCvclSFr2m5BS+1QofvTITvDwZWAC88xKTPDH8lTy8s4S9SDmfveXI3LsIZoC9tIeNvcKoHz3wE6I8M8djuz34MjzE0yC9d1YfPYLIhzyffk89YwysPBfEFb1Hs529JzrWO3PczbrqSno89y4Ku6Hk77wPSKc7cn17vK8/Ej0Y5aK951ZzvWKv9Dz9M926raoWPTWHkL1WMpK9SWn1O5zudbviyL+8gnxsPdy2tDw9oF+9zRuYPFgl0DxBTyG8qhlgPNmCG7yWxBY8kBsHvdbCFb0dmuU8IpexvPMyj73jUU48UqFavKfj/zsdAFG7+E5uPWs35701Zxc9FxYZvYmPTbyP5I67UVD9O8oX87xZr4e9OZ5wPPGZQb0KNMk7nb9+PV9ImT3JbRM9gnxLPcDwh71Ns9c8dLWnvGEZLbzM/8e8StMxPls8ujniBXs9NleNPZYVRLwaR8s8eqiyvOC4kTvgtPK79XeGux+dEbuuvjS98WiEPPcDtL2fkGS9087bvC4UV70A3UY9X7IIPRbyLrykb3o9UXucPCiKY7zNXIe9veiCvL78nbzS3Ks8xNwBvfRzEYnotgY92hAdPDwDoDy32Rg9PBKMvOcSaLyZWi49uTpevc8wKbwy+HG97Z4NvRGgTT3K+R69HYHXu0ARLjryOIi99BuEvZBxhT0ZdyO9dfTcPCfYvTw7SOS8EBEhPQAio7tcEk097WGNPGf7dTygXOS8iBXFvDVWvjynVZ48kyiTPDup+LzzZdW86ixhvFwY5D3Bvg69vooBvSaOCz2bTyG8aVtqPL/GprqIZk67RLwMvfKo+DxiLDs9PKpvvc4ULz00x009mLoXvc9XkbwIOva7kF4LvlHaBrxscK88bSItO0dLCTzFnIm8dvoWPeCyRjx11gs9OM1qPTS9j72dlLy7kisPvQbuRj04u0Q87C6MPO1GcTpOfro8J25AvFmJOLs+pmS7yYRFvAg8ZTxtHkg8+LJnPB0UQ7xRyMI6oJNYPGYT1TxDTlM8ajCbvJNsDD1Vchg4p/COPdnMoDzU6HY9Z2XcPF4Q9DzY9Nm8VgurvGiXij2aG/s8nQn/vAsX6giHn429blSMvIRVPL2B/KE9qFUnvHhnCL1erYo8PhLAPeZXKjySjuw8TW3HPeCs2rwQXmY9/aA3Pd8lMD2XsCM7QLxZPZ2wRL1OKQy9MVOLPF6aHr2shNQ8d5nlvMujijyTLiy7RFEFPTA8pTziLkc8KPI/vTeKs735cIe8Yx9PvT7for1QXIs9p020vKS0Ij2yS4s9kY/Zu/A1ED3EgQI9NHC4PYArGDxvvcc8I1vxPMJjuTyyJ3g83EWCvbfVkD2UocS80dJ5vFX+ljwMWgi89nhavBvHFb33wpo7DWIgPeUnPr0zTd88MhoGvXAzozwLzPO8JLfRPSO+iL2Vu7I8KiISvQ6D8TwKbpq8VR9gvdXLeDpCSQg8W4cePUSOzTrEHjS9PdzJvDBaHb34RsM8uD10PNFjw7yR0JA7Ry/yvJoFuLzB7Vk8Oh8VPZOW+DxAZnY9mSQyPH6p+TwC0se99Ej1PNHqf73B/ku9t9txvdZ6Z70MTsc8u3N3PNIHebLvqO87fcdFPfAWib3sMYi8Yq2sPTh+czxwCFa8FWMjPf9BXLyvjpC7mjKCPXnJETu4V8o8Cza3PBGCmD0TwoK7REzwPF3LMb2tetS8HUFjvY+oNLxy4A49y87QPZTmAL2GdTY9sKpPPB1mszzVYLK7NzmSPMiiIbzp4Cu9kkRHPaiMvjsazqC90XXnPFgYCD0OniE9L+Zvux96tLugysw8GQQFvbBgCr2q9zC8l4vHPPeThLwHFKU8oGv8vJTNfr31eH88MG5Iu9BW7rx/YEW9nNjGPZ5bdjxo9zG8jNeIPWhsfTwe3Ye8w5s0PJjoRLvscrU9kw3KvPgPYz1Y+9g9HAw8vYd6ibyOCRC9E8GnPEz9wTs5ySI93Oj0vH3a3zwm2jW9UBtCu6S/mrxfx1k9D99QvDksCT18Za48DWpfvDrKvrzAAY+9yQWevLIxUL34/1G9OEpZOm9GFL3N9xw8OOBXPQBbzDw7FKC8qUQePVwcGz319ja9FpoyvZcOrTvzBYC8Dk2TPP2s5Lx7duy81+QfvT+PFr2jj5Q8y86Cu6ntd72Ssem9m7/VvEJjC72ereS78r8XPDA+DT0gRLU8vb4sPXY3hz01kbe8S9aeOkRsUzwMAMU86gHwPKbD1TxKGTS9ahSrPaHZJTsYJKu8kMI5PdmMG7yXQOC9zOZBPLIjkbxONba7u2aOvL3TYjtRrUs9vwFSvALNkbyB3tW8MApBvJSiwr0Xuck82wePPdHGBj0tR+A7RVBhPXxmgr2uyGm9BX7NPD4EBb1j6i09yIDcPBShGD0Dvai98EFRul7ljr2Q/Tw73X3jPT5vgT0jlN88qy9qOf9pdb3Z9qe9O4a2ug9UNbwNFAw95x1qPpTFNbulOrM9TpSbvDVRa70kp7Q9N2zLu9mhE7wABsA8/xqxvFhasjtYRYa9Zph6O6w11rrvvZO857IQvUM+iL0ukA09KckYPaOgdLvRwow8o4RoPQ6gqT3ZVOK7Xv5iPJM5k72BBI68yhbxPMxpN4mRg3099rmdvUANNT1gJR07ELQmvKuvY7mSotw8/4kEvX7owLyJrsm7b5T+PF3gZzxLHFa9ICq1vdhcaz36nS29sKTIvFkGMDyAtaY7TzMhPMPeebzb79O82wo/PRhkAj1jK748OpRJPUePG7vPB6a8wYeduzaZ6jx8GiQ8d4xqPEfqw7yA5+68Pbj6PFtSnz1mKug89R2Nvef6Hz1pLhu9KmXoPb0Nz7t4kk48FEt+vV0FpTzPR8Y7HQFVO0H0iDwSh867xqOEvb4QrjzYnmS9z12vvTg46zsj4Yk8UXO6PK9G7TzE5Hi9a+eGPZlYpzxrsJA9/7mlPdCJjDs8ShW8P5XsvU/pWb1IS+c86YeWOz1Df70JbLi8qGf6PG39yjtjW9Q8wfk7vVVMnz19fRK91NIyPLgRNTyq6gG92388PV2qe7xjPrY5Ejq0vK7dLj3Lh5e7xFgkPZF31TyZmSk9Y2PmPGFnzLw/5mm9y+GwvBPNiTx8gSA9DMy9PBufyQiYa4q9hhQtPeYZ+byn8Go9gevmO5Zjgb3ZM6s7LmnnPcSDmTzII5M6FiCLPcBdBbyo3do9a94jPbuxpj2GB3o9ET/ROslSc7wCSUG9k1cUvYlRCL19NiY8Nc7du8AIfL2FWky8+vy2vONt3z3VHzE90vSTva1vA77DJoo8xZx+vfQ+IL0cOsI8rm88PMZ7Nz1DhJI839oRPbbyp7xIM9i5hbEKPZ65ZLzgL7W8bVEmPmwf/jzZuHo8jFA3vTwB8bu/wts9AL3kunc4bL1ZDNc7kdE4vA3G8LwBYIa8s5nSPJKyF73JIoM80owxvHsjEb0plJc7v+FAPb8/Pr1Kihi96RMRvYrjgT3VsVs7vu9bve7snjudWrO8zIbDvMheKz0hspu98H/qPBsTpr1UhwQ9U/OYvZ14y7t4t8o7Ux42vUY5u726qlg8t7pLvf0PSz3hcDg7cPSQPP8mHj09RyK97Vn6u4vkFL3riaO8jCZGve51XL3gOUQ79TAWPNKNbbKun3U9nELQPcvc4ryWrds8F6/UPQ2z/7otZ848NZKZvCYdRzw7rJq7fGW2PaxxkTuZGfO62t0IvV8uszzmSfc8KqIMvJ0LJLxibNw7Q4+avbMxK7tDnBg81VpKPbxPzDz2H548GpbnPMadI72uZ5w9oMP/uyd4mrzaiFM9ISjVPUFeATy08xC+2sScvavd/rthgMK8VcS2OEOHajx+a8K8WwTxu+V4/DwG0dw8MG6eOQ/7nbzIMIY9r+UVvN3A2bzQtsc8j3tAvaG0iLzBH3c9PTudPOhsaT2Y7bk8Mb2cPDuaDTpXrfW7xFqive041rslh209DTcHvdjVjbxZhGc97G7dvDha4LsAk9O45oWfu5Q76rxeJY49uuHJvannzLxbO/+8IwMYPAYED7w7L/Y8uLY9u3B34Lq18dE8d0NTPNlZ2TuzzaG9nkCLPTYlCr0yBJo8E/CBPAKLIL0kVfq6VrSSvIYh7btiqU88Gf08vbqXvjznoL49PhMIPXysArsSP+28+nIOPHK9KDzsoOa7H1wHPcmzyzyg6NE5VycUPO25i705PO29kOL7vGTPbDzioVM9mmLQPOEOUbwm4/88yCLrOw57WT1EoSi9J8BTvHJhKrzSdwo8JmihO/lpLzxosZq8uP5Fu3hvUT2vYzw7SwzCPGxHfb2WIZy9hGGQu0kshTxFBxy91VMDPed0gbx7q4E9mACRvEAd/7w8ajq7EKX+uhirY70vpsA83icaPbRAmD3hREo9LkuYPRy72702yw+9lrHLvFroJzxz+w+8JLHhO/ysqTxEyIe9d4tRPaKgJrtgGaU8oPrIPASjFz1xsKc5KNJOPaQi7L1Yd9q71sSUvLzhrLyck689O3PfPQJRRDwovrs8Lg7mvJ6h77y4oUe89NbcurwrRTwYEtK8DTDFvHx16rzM3R69NB/SvCR4uDsCQQi8QRgAvZCKFbxWItc7mft2O6p3Rz20T0+7+DVWPdzmij1oHxi9jAeSPGhcNr1oZm67YMZ0u7TmUYlLlwu8irGjvdBMfjv89IA9UIubvVGEiryLaaU9+tuLvWwX9ztO7uU7i0ypPJds47zoCDS9JyRmvXNTEz22+bi9khcBvSxB6LxUpLo7CPdKPRR5DTtpD8294MXsOvzSijupF7c8UciMPGVekbyAsE29y0BOPDhoZD1QiXA9L4mMu6tOQb0j1+q8SpkFvRlwGz08Ej695A5rvShVpjxX/fG8x/SHPfjJljxRcAw8T04BO55ggj3gIro6iQFNPQbQTz2gEoQ9gNHVvCTIlryAL7k7cPFkvahkOb1UsgI9QAeDOtEn9LwqUSm9jSzwPGoVRb1ommc8QtCCPQ6Q8Lyg+Sk62Gq3vcAja7sjBCI9BS0cPT2NhL3Abxk76KcIPcR4NrowiTa7xHjavTIfwLvCw4O88VF7PbEPwr08/PM8vz/APS54mrxc2q89wHB9PSGeRD2ohB49EAwxvYxsUDx6hjA9pNc0PcKaiL3QtDS9O1Q9vZlTDj0+Y5w9bBe4vFgNFIeJl0M8annAPcplDj0ODLg8xNx1PCjuBb3JTBM9x+pFPpbcYT3m9wA9MJELvbhRTLzkD849ZqglPQ3nEbxWyIk8slMtPUTyH7wgqjK9RscsvWw1+LwQBZ255/5ovYwV8rsh6Wu9d3plvI4Zvj3jVPW7wCzBvTyrbL01+6+8woC5veXpOLzetC28gmBEvNhdoLuUyAM9iC7hu+gkgLx8bhM9st4aPQCFL7vviL08/YWdPfSDhDzyWS282zULPU5FdT2UyUA9cP2iuzH9Gb1y0Zg8vVYuvDgFSbw0xx26QcH9PBDEGzuJ6pQ8nJ5fvBwpzLyks8S8rHTjPBTrf7zNtBe9KmbZO8vT2DupMOa8KG0QvHpWkTuEfQE9LViAPY59aLwPTdK9XFlfvHk/qb12+lS9rv4lvGqUpzuU5ps7QH/ZvGJKkL3o6hU9KQJRvXUFUz1XVKe7uEGIvOAwnTx8Dwm9mBdovBaYTr24ccO87Ji1vFuc9rwSUhu9GUzWPERklLIOyaM9nWawPZRlhbzU8u07p+2YPeIoRz0wHOo8Hj4cvd9STD2Y3IU8YpfmPWkz7LssOt483lYCvcy3RD3Tlak9ufAMvbZos7xVuK28hGeXvWdN7LzQjAC65nOGPbdraTs4VjM60luYvAV+L7105nI95UJtvbhK3LmUDGs6vNtCO85NtrwMWrS9GgXhvHnp8zxZ3n290nI+u6yhYTyq8I+8u2SfPArgJT2qT+s8gN2VPd+oRLyHlJq9UhgLvSi6oLySrei8qX9qvfUfFr3g+HC778ofvLxfP7ww2p49tlfCPOob3bwFEoy9VH1xvSJrlDwuooY9bCshvbrP/LvOPUk9UKvpvHz07rypKg291lOXPCqpXTwYyCs9/h1nPQ9blTyJb5y7kfrAPBcaMbyBXKA9Rq+KvI4y7Tycv688/xPiu8X3CzxP2Y68TG3MvDis9bs8Cqe9RdbfOrBoCLtjFos77SpJvLv6orz1Pwe8gPYfvUgkIrwn7MO7BnOXvOxAnz17WqQ8BjBIPDdu27zijAK8PB3YO+i+ujz8U+A8TEkuPaGrubx0gzW9V6eEPMjd9LwFxvA7l3q/vELhKb2Fyng8SUwOvULf1jzPE5C9u3RjvQeJmrs/jB49aGG5PFYas7zwsmG93ueMPB8BKz3XzUu9D4QXvCgSo7sldaG9lsVcvC4mGz2g9je6iX7nPPvytD3IzR686H1nPZ3durz8RZs9F3HrO+XQaDuq+do8FBMzvSRVp7yAtzW9WDEePSAzbr1frys9Y7c1vZ/EIbwa/J68sdkXPTYKd73icf68vtG8vBHTZb0ng9i8tqgIvQ9ojjxmuOg8jxybO7j/M72o2ys9lJojvXQpkL0rF4M8YskNPgfblzvwng49tTQavL2P5zttA3Y8eLOVvM/0oLp3cQA9D0QSPYrKFDxFaZa9HANePWfelbwAxIC8Mi1SPTjpgb1Omg0++hWzu3wDo7rYMIa7gP2ju0fmgDwPjRe8KQK7vKsbZrn513y85J+BvTrGgYlRB089KxCkObge87vTc9w9mBETvCy+LTv8xzC9PJYevTxa1TwfKRa9jr+lO7onpD21zd66YCOTOjWk/D088pC9lLsVvTWWQj3FHmK8o3QJveGeMb3RGXM8AKkbPXlSzjxOzCS80Js3PTpPJz2tV8+9AkRJPJz76DzrJ/26ZXWoPNpgurxXRJG8g1nTO/eLZT39oI+8Xxv7vBprkj0hF+K7AMc/vVUmm7yMFoK8DZbBvAUWOj2B3uo9p4/sPDfiMDwXmxI9Hvn+vLOe/ruNkx+9YJGXvOixSDxlnnM7QVk8vEui3ryoNRy9cP0ZPSuSALwnQBs8Y1+XPUwt97xlMCe913dyvXOiNT0tUcS8NLvOu4nBx7xl5/w7lddqPLuUJD2zK3i9aaNxvZ35bLydNpM93oFcPP0drzxJT9m88MToO2xsGbzKw6e9Ian4PGiIE73GwaE850K+vI+Uej0H1JS87+cvPZhSiLz+Shm9bLHqu2h5lD3o+xw9xj+0vMmMUwk0eJa9PGsFvckROL3OlMY9kemtPGDVCT34poe9N0mCvBGEvjwN4o0868rIudNIlL1YR2I7DUk7PZ3phz0MAD29x80HPaG0ubxOlTa9SYM/Pde9DL0wnBs7Cd+dvRleq7ygGHI7cK38PNHaJztFWbO8gDEJvKSnBjwfr1e9edoCvcnp6LyEhpA86MkGvW6toz3CppY8KQygvN+ZPD0EqrY8olyDPbhmCr2vEyQ8jf2VPC3Mh70bpzM7E9IkvVG/Xz1S9cK8v0zTPB5eqLy7tlQ8S67sPIxN+byupjy9xuHkPL8qx7vNlf67T4CxvIi7Tj05H0u8miGOPTDvUb3GjtO7guw0PC9szb2muOu8QgaLvZ8VN71F/FY6SLDTPHMYSbqqeD69UhJJvF2/5LqCkf08lfbcPMOsoLtYcvM8BAoOve88zzz0Ek49O126O+bpwjzF+8Y8RG/JPBTutrzqp6u830pvvENZQL2snQk8W4K1vU3FCT2jN0u74OcYvLHtTLJr52+985CEusuawzzoPAQ8bYF7Pa2Nzzy3dHa7LMgiPb4eSzw0N349QRzHu3valjp70ZO7EBcWPSX3zjwQQRO89T5Ku/45/rz9wzu9vahMvTQN2DxLjKI8H6V7PX42AD3Ob6C6xb1yPV1T8zzc6NM8XEkjPCUb1zppzE698wbpPH7+c72rS3M6qeA7PabfDD0aE9k8xFIYPMTTY7yiaui8/tOgvDegzzyCxtM8zBixPKwyrjwd8s86+CL7vGXgNrx/cJO8hcUYPII9Mr36YCS9UtTRPYC1xLud0Tm7nX8tPbT5nzziZMI8LAjGPDwchrwSlgg+OnsGPTCCubxk/q89T7qbvdxipDyWPqs89B/8PLRUoDtFOZA8mjAFvssx3Lst6Qi9NCyBPSw1Vjuoh5w9bS47PLKxwjwwTdS8zq+yPCFSerzQK7O9sK5APC9NR730L/86PtsjPBaorjyUzgG8u1xUvVKn/Ltmch29eQm9vWZp8bzmpXo9JFJ3PV79gT2O97e9Z17MvPNECj233zG8xSg/PTOuHT2ScoM97rT7O+1jCb1K8iC+vGm9u0AOm7kw/KY9jr3BvHgsHL2+UgS88I21vW/5Mz1vqba9DGVLvZUECT0Vbx69AD8yOUpp37wgltW8tg16vLX1BjwgSX+7/FNVPcJmVr3x8ZW9F0sHvPg1az2DHlw9JLsVPeicuzyuFps7MjXaPO6KKbww2MK7uq1WPCajT70IHxE9nM0RPNbxOz1WgAw9E+SyPZ2WAL6qnKM91p3UvYJfsLsh6cC8mPu5veylA7xmZLy8HBXfPMYviDx4bKw7gdpvPJomMrx+F7Q7wIVXPZJM571sU7c80IM+vY2OYr3GUJY9vLqBPe1dVjyFCCQ9GTepPFoEgL0ie4W9QJ/ZvPCY6zzptqG9tXTnPKB4wjnLoc68wA+MO2YMdL3uU1A88vmRPGhmv7xS5hU9Zx2vPGMLpD1IHAi9pUuJPPEm2jxsl4i9NcQAvaf4J727TtO85LJevYHy1YicHoa8W5zwO05KGLxlOBE+jRxBvRCS4zw9srI8pZcSvcxGMjuAX0y9C1uevC1BfTy9vOQ7tC0CPazrLj3IMlq90LsYvfb4XD0pl6m8fB7ZPHKaFD1yypq9i8y/PGBNCj1i8LQ9iP+GPOBmALsEo9G9xlLUO0BJLD07rSE9f5QIPT9lY72grJa8ugBHvb+Coz3iXYG9CEmFvL9j7rxde588ZvFFPZITXD1CvFs8BsTLvF7NhT1qNEu8LEWXPSVZoD3mfmQ9nMlKPBL7Sb1eFj89UUsAvpCxlr1m6qg9YPHevDNy47ysNBa9ekq1PN6eprwOMaw8ZFtWPWOnrr2yRIu8gs6nvDQpwj02Pvc7Uq9avI7Z8rz6API8F0yBPNBotrqxRhe9EeTVvCBDHrp0kIU7TzUwPTkkGb2O+zw9sQdzPdgqt7wLdj09AMXgPCaHarwGx1A9/L9CvOB1wzxyL0c8lIj6PL9O6ry6ib889wU7vegaUD2J/KI9nxKEvLMTDIlMY968siDXPIr+ibvai3s9KnNUPLwalLx+5JA8T+LCPe1sjz0GvAA9h10zPVa5grvTicA9swW4PTQnQ73S0oK97u6bvAkU+L2uhJe9z6MAvFp1orrq5J48YAmfuVGATz2B5IW87wMPPaRBRj0IbrG9gkUZvbtxSLyMqa29ac6MvUKrT72cYy09drvVvCRAqDjCqMM9HOVjvTZzUbwO57G8iswCPIDicT0bAsW7/LT1O6prrrxwf9o6iFaYO6caiT1XiGI94Dwzva/OijyqyP48UlAEvRzgIr0wFmW8NNAGPUaWwDvR2Cw8vnjZvIJ2OT1waQS9AE6GPWvwkrywT2o7al6HvG6qrr3qB8K7zF/TPPDTrTm7sjk9KtOfPbydIrwD07+9VDOJvMHNp7vRn5278324PDvrf7zlDoc8PCIqvHaLU7yyIUk9mzKdO0F86jwKg3A9wbU+vBTkBb366dS9TrprvXyNOb3SxEG9jahDvbqnTr0+Qvw74RQNPVCapLJsF588mhujPRhUz7r69Ji7n0FjPJFdujuWytG8vFTOPAZ6xTzMlOI8P9UCPY2HgTwR4yk9fL8GPY77NjrPfiw9cr1mPI4xFb06RTS9TB81vWxifzwxnW4898VcPSr2f7y4GSE7YTcSvJRbcrxD5YE88oI+vUzX27xdPpe9KfL4vKBNCb39i1y9LjExPYpE4LtFYiU8xiMCPaEuDr24HZA6EoqaPIc2nLvs64W95ke8PbhnSj0act29yuDOvJyWHL34V0a9v92KvOAf8rwxXyO9OiEcPd5BZLxIszc9206TPZ1HqLysmvW8WMcxvRxD1TxMBus98md7vVoT07yqq2A9uNYrvcjIprwlpcQ8mngoPT6v/DyNGBo7e7H9vVBnnjzhRo29A1NEPaNIszwoaIc9rRUOveg36DxXsQm954u2O56oAL0xMj69yOMevezMhzus0YO9gxQXvVV0YbsM9Fg7KLvgPBiXYD3jQhu9UKthvZrcMjy0cMO8UzzXvMwVHT1m9tO8KQk+PB09TD0Uz4+8ebnWvGWV07xavDE9oy+JvLYMLL3R0bK9nQ68PH4aZLwA/zc8AErwvOmdxTt+E9S6ldFfPXDIpj2CN2K9UIOivb3AebvHVdo7db+hO3VgBr0M+jO9jqmzPKOqiLvDMNm7L4kLPYrJHz36PvO917qiOy7MC7xgsYa66TQBu0l64zwp1Ic9e72/PJZ8oLwNvS+9Vc0vvciIp7wkVrs81KcoPbLk9DuwJ6G8+wDBPW6Tl73jWEe9EdpNvR7ewrxYugs9/GgaPRV2ebrzgTO8SI4YPefQALwzoWm8l/y+PWjQcj0TKgY7QXcmvAMKc722/CG9KbZtuvCQKDx9ghk9Z4ESPllEd7ybVVs9EonrPLb1Cb2tVB09xwPYvDPy2bwnuwE8xk7fvKLQDj0tizu9srSNPFCbGbyKSte7IP3nPDHpyLzgHMC7zOq0POv2KrwffxU9PqyhPGCgTj0IBdi8nKN1vMOPtbxtnx88pbvrPGiaqYgqUzs8BwcXPOzlCj1J3XU8hNooO8WU9ro2a2Y9x35FPEIvJDyGZaK8t0vvvPtPGzyP6V69OQIhvUwKzDt3MS08S/VKvGyp/Dznriy9Z2SxPGKUOD3OTMC9wnUvPZmywrsc/Tw9Eo2uPGbAnTyj2no86MYYveHEBD31Ecg8CVyaPatgA7lcKhO98fyTPOHmyz3vbzw9otXCvDGBCz2BFo682h4VPSQ5eLxQOww9pO7DvE2NCD2AmNS6Eo82PW0jkjyttA49LEpnvEPGFzzL/ZG8WziyvQXsfrzgSK684C+XPdBkrrqUdd68+ENVPB54hrzEI8c9q4EfPP/C+7qAAwq7TbQevZsFaDyypxa9puC6PDc8ibyypSo9pKDNPB9+G7y4+wO8shSQvcKVTzxKLUC9SZigO1/gLbyqzzw7NqI6PDfkUj1IEx87wthYvPhFbbx3alk8DG4LPdE+Oz2Xw2M8JkqDvH7NAbwpMiu9o/scvYbyFzwMi9s8KwroPLgk4QdnfGK9jFCavPEJEr1mPXI9n/u6PGGxjb2r64O8fCzgPYCIuDlI2Ms85O+sPYDalbx3PKE9ltMTPYPnyjsoiPk8S3NSOhPqr73TMQm9fVWoO8wJirwLIQs86jtcvcbw/7xNUd+8X4+2PMN5wbyzltG8k2CmvLzXgL2JQEe9nvKNveuihL1tJCE9IiwXvWUi4jz+2vE8tT8uu6Qq7TxzTI27xTYGPTX3orrLrlM9hn+4PNJMDj2odv4769dJOzdQN7p+24Q9AMIbve+nKztwoSO9/dHhuyx0s7yO9Am94k8WO5bitzsrPxm9a+t3vYK/2DzGgcm8yZhjPT2NOL3/ZI27caJPvaElnrx53D484h0KvWN5CT0hjcg8vxPnPNfdiDy6GZa9dc/AvNVzFr2D8RE8+8/RvBCEhTxys5o8up+ZvLLgjL3p4YY8nQitvG5aRz2DMyY9K/HQOTssgLz+XTq9yQhKvDQgYT0D9ZQ8pjxVvbUK3bwp2lw9ELgou8H5dbJfcSw9Pj8vPdfr+jy4Quu6VGWLPdzbqb2QHTg90uDmO8gMEz0CXqg8lTfMPeGGq7uzcG+8t82GvGxsGr23ldG7sJkPPb813Lyb8228QAtsvdRBFLuOl5S8/F4/PWg1nTzQwQs94qwCPbsqXjt1Q7Y9Q7dDu8Ml7jx46U+8HKpYPez9gjylEoi9zFvyvGZPB70wkA09YW6NO2R/eL3SRNI8dF1fPMTfmDs5tCm91h1nvNZF3jysol89Kc/SvLoBFL0gHJE8W0AKPUM7EDqZcqe80Qn7PHJwZz37PEe8nsoNPcuEdDsMcQi8hgX2vH1YnbyKUCw9d6KZvRRZ7rta5og96s2dvQ5kLbzkQmW8bVemPEDZx7s+0CC9dhv+vJKlHT1BvRu9Bs0kPYIyr7xEXX892onZPDjStzwMCfC8LU3MPFZ0U7004YW9nYIXPG9rsr12Buy8uIN2PADwcjk6E4e9jEBOPXBfjDupidU88s+cvYra4TwWDbu759sVvHiRJ7uoia09RotJPABwvjzgNEi7DFgCPdsu+bw2TCG8mECXOqwKXr2S+1W93BAju7LBmLxevRM8Jo2yPTYO4TxAxrQ802KhPGp/Ij03qIu9k6tBPNa1vzyynse9lu3LPOLQ/7uENxs8Ls5aPQhS5DrG13q9DkimvHAar7oWXRA9k0cRPZ2zQbywXFg9TrQVPK4ZIL0IQYE9cMs5vQvr1Lz2YSq8wlwEu/qadjwTsts8UB3muwlZFT0YI2c66ghrPMqUVr2Qalu6LxNCvKAK27ykV+g979FivdD0YTxfA3O8KOY0PaigpTxqZy+9ggAwPdLCxLwCk2g82P+8POe+oTwMdP88ciHbvLGHDDxcGV09MfEVPQLfMruE66i96mKJPCmFBz0QHaU9LqUkPUGNiT1Osp69bKzGPMD9KDyA55W81ThVvaDxHz2yQZS8zEd9Pc29KbyRpJO8FrDUPYgwEz3waA0735xDPY2ZxryyUei8C2eKPDZgUr0i8Zk9yncKvcoQ7omShiC936r6vNgU1zzD1Rc9+ve2PF9ARb28a5s9tWFGPOb/5bzgp3+9mMRDvABTMDuIsPe89QnXvCCnTz1in7G9+Ax0vC2LE73M35k8JkORvGEszjzEdH69ZnsWPfOEpbzmiOo83BAuPB1b37waMmy9e76nPa4+HTzcFem8DqNyvGR/lb0VldU8OCXYuoiShTyq/xe96HJ4vR1rkzxmUGM9ao5jPVKpjz2Ek+I8vGravfPUqbvsB5U86Sk3vIo4h7xGkSU8qMSoO3stQr0Q78W7+0/nPPiN17xuPRE9iCaEvI0P4rx+xzQ8DMRwOwsd+7xfDRs8ehaOPS9gGz0mw7k8dhOgvIasfD3JeKA9GgttPaxyODwIyRU9iHaQvOI8szylppO95recvUTBBDwdk/E8mAahu4g14r2RFcW8X7rNvNpDEr2zTFk8VHCZvLXWTjzAsIQ7kuc0vCaH5Lyk59k9Kx+1O3IHobxa4Y29mJ4Qvd2UXrzk1Xg9tV6AvV2qhQkD+By9/F1BPPxmibz8dQ08wqQRvZIMcL3QO2K6r8K4PMmwFz3Gqj49GMyJPR5Jar2hrn49f6O6PN8FGT2aErg8MQuKvcdilrvtYbY8AFwvO6Qcwrxr9yw7IAyuvWDVkb3Rmjg9pqeBPHbQNj2AP066ST9zvE9NMT15SeS8cDtwPYVfIb1/9IM9X0YfPVNgXTy9Ik88INpavVjMxLt78xC9bL4lPfztnjzLGIG821yRPeQayDri+4O7SLMgvAiGkz1KFVE8bjemvWoTFL0Z1cY73TpWPcK3tL2Ni4y9UALpuqE5aD3AIqw93MplvRgciTxL3CO9eDoYvXStG7sDqyy9emyNvZ7ALz2E3dC8RGSUPSJoWL3tDgW+7VXMPQgTkDpWlwC98mtDPf7Tor2VqAg95A0TPNLhkrwG80K9hBhyvKZFMr1baV48iJg7PGhFcz2qjzi950kBPR6/EL1C8di74xajvJ5tID2/FTW8Ate2u+dLiruMm5A9DvWUvY5RX7KmBBW8vE+SPZBllT3RqWI9eL2sPdyNUT0kDiO7WUtjvCqZObx2H7O8kADEvOOZsbxE5UQ8pw4tPJJzSz3GaUc9cCqJvGHQ2TyoLVE878PoPMJv2z0zZAO9Kt1yvJGhpLzPOS+9YPe6vFgwBbwA2/y871WFvc4OHzya5B28lLM2PfAUPbsWUKu8qqjGPLt0sTyurZw89VYEvVn4/7yYo7C9MJjzOnJ8+z2s/Fq8KLQEvRCSbz2iU449SNmIvXVFi72sV6o8kFfnvGIf7bsALBI9uICnPKhcjru79KE9l/c8vIw+U70y6Yy9GKgIvYCxOLqjao08F8+HPbq7pT3fjXs8MLaHvUrjtjw4NnQ7QLmhvIZuHTzpqka7lAKpvawrIj1sGwC+J5RkuwqXnDz0V6M9cTEbvZXUXTuaN1K8GZeSOzgUDju8P0i8yrAevC/CobxlrYK9czwwvHYDkr1TrTo9eNCePFuBeLojfjS9HHH2vNuCLD2HLXq8t/CFvMQd6T04AEu8md6Ku4D4/Lx5uas8QgonPa0pGbt4yVA8gcO5vIzku7021XQ8x/89veCmUrkt36o8Hl+GvZpIGryQq3C9799GvaOihLzEGJo8HkWsvAYa9zwFSA+9k52dPWQ0or2HMm481N1zPIa9IrwEOq87Gsk1PT/FYjyhFYS9KemUPFwVX726S3u8qp5GPWT6KL1DvE09ASOtO2MG+72b3Oe7f4okvcbdXz34jVi7g4A1PbqCWjwwbNS8uOURvYNH2L1EsV48kiG0u77RnTyJ5BA9JTaPPQRGij1A60+8DmY+vQSjIz1luQS9hCuzPKnY2rwyP5k9mvAHvOSqiTu4H668tGzLu0Z2NL0ITkk8S10aPpZWJb0hGcu5CoGDO2ueUr0VcTU8plStvO2gWT1NR7E8EQthPeHFmrpUZt686RvTvMBebL3Absu9bHoUPZbQMb26/ge8PrzPPMoEJT1iqck8GGeLPASkLzzGkSy8dgkoO7nC1bzdk2c8yF5LvQe2Y4mEHQ88o3gePPPUH73APVQ9mWJ6vBk1jrs9Vh89C4PDOzX2DLpJg4O90tuFPeQuvzwVdz+989yCO9EmED7BMW28PzEKvWkyhzww8Jw9j3GSvFsatTzVaSU8LRYGPZNFNb046Vg9b27CPTslTD1UsQs8CEigvIL5Bj1XWis8xqifvCJur7yyKYg8tuj2vAhlyrwCcAm9dfaRvbtCED1+Jpa8jx5YPGHEkztGOdm8iUx4vf0RuT0l55W853VWPbe7dDyz2DQ7A56hvHX0GjqzY0s9O2eHvbS+zrzeaVq9p1YvvaSVjjzHqyS8kswqPXftHj1L0Ow8fz7qPAVJrryn7fK8EizPPJ8DSj2HTQe9nnYgvU2Fj7yqAYS8sZ0NvTnuKL05Emi9gpeRPCe6OzyW8kO9P2UEPbuzgruWZ5E9IQnavU7hj7xr8m08Mu2CveCwnj3Unyw9gI9Juwl4MT0bowi9XkDuPGSplT2sgY298wQwvczecrxk9ru7cGMGOtOpNAgCpkG8K3r3PLTPF73zrzg90sWGvUJ5xrxTKWe9d/wYvZSm7LyHyPu8oeb5PDw3ybwRewo9oqIvPLitGD3Z6Ms8N56jvRcJ6b1QEni8TpTaO8MmDj1aQaE9FDD3vDjlqDtTDZG8+/LbOmOtJr2St8Q7G/WRPFbinr0sKS+88vlfvJ7XBz1r5mW87Bwsu7B8Cj3UDlQ9vYvpu+k037x3BRO9mYhwPcQatjx4HkE9+KHDPBx+iTxnS4w6Xt1OvbgYZz19mbw91XqDujQL+jwKZXq9JoOdPPgdHL0WeSy9x5T2O+n/CD28DmI7RpY8O8Esgj3Jdx08jgG4vAJTaz31VYK8b1gEPWESfDxIrpS6yOhoPUkj270fyxw89xVdPZ8SfbwVNs69c/onvZahm7yokMk8CfytuyjBxzzXNJy8a1asORWyjjp69au8LzjWPA6ubzzOxHo96v2uuyBSUTvwV0o7us1LO8H5Er3zFTu9OcJFPL+uYr0VzpA9OycbOwkMXLKe70u8kZAfPfFrnTxpEDO80yxxPWDGzzvSQy29/CFrPQExpjtmFP2799/du7aPYzy2OeA8OUshPVPxTT3dr8s8C2XevOmfGztcI5G92U3kPHvocDseNqQ7tcFnO9vP2rxLBye9eyTKujr+SD1S8Z09X/WzPf6TvzwzNTM8XCXJPTockj0aV+K8YXCWPRPcNLx03x+8rWQbPaugBryVKGY9YIwiuj+DOLwHs5a920FgPKWScz2ZFpi6u5twutxkHL2lqJG93u9sPCOeR71r+249ViQPve4/cj2GMtU8lMVnPB81j7yL0rO8MxLpu3RvfTwyIV09/C3+vA5zkT3sEmQ9nNi0vWt0TDtMNYY74pG4O150+TytFbQ7FWxrvbxZOD2Z+Dy9IJeTuS6BIL050DE8/Li4u+LpCT3D5hK9MrG+PGpYP72TBGS90qyyPKg1vL1/sTq7DrmovAD0ID2ILCK9J6XNPNAVYT2VIAQ9cIFxvZBc1Tuty2K8JPDru3XqgDxWzlE9pwGsvGNgNb3mLC89cS4VPLt/1LwlPkA8p52AO+lbOL2QXBk8BYEqu4i86bysGQc9KVrXPGiWuTwFdQ+9UentvImccDyQl6K9CByiuxXFcjoo+GS9eKQcPdA1fzyEFF89wFa1u4lfRDulcjK9jcWAvKam5rxzopG82I5QPA6hDD1dzeg8qXU5PE7Olzy4qoI93wpLvHVuaL12cyG8B0/WO8vEKr1srPo8kbgLvKPA2jz7LBE8xQw0OzZBar131yk8jRPlvHAtKr3sUrU9TqQ5vV+SQzx5llU8faY9u9lSgbuUScu87qbsPF9haL0XHWQ9SPwdPQQox7vkySo9ULyBvFzp4rwRsFE99nJhPalX1zxsLVS9Z0+cPB2vxLtz1Qk9dWRJPDLr5joyAGW9y/L1PF+jzDy05JW8a8EbvQ8dPzyPJi+8DQ7hPMzSlry5u5u7G4QVPTYu6TxNgrw8+nhyPevr47q5YOA7zyHRPJjIsrw7cUY9XFnRvDHfn4mSe1u8ipbMvEe4nrs+QYg9psYsPV6nx7xZB309lBCcvJMNYbwk0We98lgSPLnYND0OBIS9wIgFO+DmCTwiVqC9Cg3NvEQBDTxoiPQ8eiyBvEZB6Lx1mY+8jXIZPFaTFby+Xao91DeWu6GYv7xl8W47V9X3On7MfLwSF1+8iU2DPJTggr0B6go9cvESPRNW/TxqYPu8O6itvXZrYDx0PHg8jtKsPLlgzTzd7k+8do9PvYTO4TwyrcM8vfTkuj+lKrzpeaE8HKdPO1yUDb2ff7k7iw3sPDj/L70fy7g7MS0HuyjMmbw1M/K8GIYJPemHgDwa5Bw9OrgePZoa7zyADJO61hUjvYIevT1Xx2o8rB1CPen4BD1SJrY8gsa1vNhrGj0SHl287z76vP3aCbzitps8hKy5vBlnkL2Ocw+9bZyBu6waKr3Yaqa8CLcZvZwm4zwgYQE9KztLvdGQyLup9mo9pvGKPEPPwrsywr29ywUevQQbEj3XkMM8omfKvIi68Ah8Vje9iWGEvC9cDr2mPes8UAW5vBS/hb3g5wi9n7kQPfqxYj1S7iU9itYGPGq3w7xYG8g9eS7Lu0u8fjkC0sc8VOT5O9yo0rw74Kc8Nh2/vNDrMTvBdMg7m6jOvR56ar23aP87woykPCue5TxR42G9mh8OvRv/3bqsfYO7uySPvCoJy7y4xFQ9OTaguxuXhTyU2Qk92QsOvbyZpbvU75i8fan0PFXvXzt904U75SkQPSP3TbxkJgC8PRcmve+MyT1doJ48SYTcvJlJOjxEdOw8wGhSPTiGuL0FATy967wovPFEUT068Jk831KeO9EvrzzELHC9XgIXvVRfkTtwj566TUZzvXXRGj0TxpO9JSGePCtoMDsOa3i9nLCaPTax5jxnGjm9e5ZAPUMvrbzdzw47RFqGvAOxFjzt/ca8b1iYvAWkwLzHINA8mx/eO0XwDz3P2Rq96h5yPUAzAjz09Jg8ple+PBBZdryLGhe9i8duvF+WCb0avEE9VUoCvdwxYrLsH8Y89oZ2Pe7nYT27iNM87O8fPdY1hz3Z7RQ7qlp2vMxRg7sWSz09LdgLPIYSKT01FpA6aw/7PMinBD1vjls9ZpF2PAmYJTzA0BS8NU0nO63UjT3KWEc7s2qJuxEfjDwN2Kk7q9/BvLzpCzy/3to8d2mKvBAH8rs2MKG8TemUPIh6CrwKN669NlAmPeqbybvnPQc9kC8zvUsSJzybrSA7I87AvGp0hD2A2GM6UdSMvPftSTxCtLM8yWmJvbBkcr3VMMq6igbevCcBF7wbUx07KtsFvTRXrTyUc7892Nr3OzUhB72r6SK9mfOBvGsNMjlzXVo9O+9uPbnzZD0kRY08l6p7vSf1MLuGcAm9Uei8vOdhG7zIgDC8mTECvAzTlTxIlfO81ykiPdYKKD3QJ8A746fvu9pD4jweX+w8THeDO4pVEz2+R7e93sicvU5cqb2OiTK9EAqoPIbrOTwu74O7Bzc0PJZMzTwAleO8DR2SvLuH1j3iquG8YBlgvG2C2zyWDRc91vQKPRgv0ryyx/08rbygPeNz3ruz5gg9SnEjvZDs3bwPLqq9j2t8vRyQYD3OreY8ZmD2u33wuzwshSi9CtV8vX3h2DvCqxK9KwhHvT7Dlzz8FHW8Z3mlvDRw4Tx8XPa6BqruvAV3rjxADSO8cfeTPdcUDb3+NrK9cC8EPZrNBj1pq9S6aMAOPR4INz36GYw8QBznvAC8eToMjik8OoSdvA6Nl7wSaNg86HiBvPdkYD1zrnk9UEZrPeIfy7255Gg9Kdk1PDibML0/sFU9o8a9vOM3vbvu8p889BSCvOb3qb1L5gS9C1TJPEWpwjzdbOo7bpzAPC64uL2prsS8VZyuPJsuTb0HCpG84hUsPlSts7x47sY8x3MIvY0eeL1stiu9ZxN2vJWoDD1V0pc8brN3PDEj3ryGbvi8JumcvOV/HLrZfb+6YWzlO+UGbjoa0IU8FgDSPILhbj1Edyc9XHVZPfUKZT29XdO8AsOKvGdkCb2h7SO9yOMfvYP/S4ktI007ZJ8LvasXADwEU8E9bD7cO41sUbyxdTg9LGRTvKfoh7318568yK/MvEgtnrvq60S9boskvNkM5TxHIMm9zsLuPNE/uDwMHoi8vuWSPEjf2rycYSG7dX9au8RJ9TyWlWA9DdACPRKOE7zEHoq9qdTPuyiHPj3v4aY8rp2nPJ55o71JR4s747ZOu23qG7ts4aC9HZhdveeGRzxfTey81I1XO6t3YTpuaHm9KSAVvaOElzzFyYc83AJAPezd37uaNNc88n1OvAR17bsVkpO8PEGXvUGhC72YWCg9iHMzPSGXJL23vZK90iagvEvDZTwq5nE9TyGrPRN0mL3V0Iy7brKLvSR/QbxevBQ9QpvFPOYdGD01VwG97FCyvEavyDxIbda7N50ePLYxBD2P/RM8B6scvZER47skjVG8VDp1PftAwbwwfhs9xGfavN/KQD2HOc89m4Q0PJ1qmTzW/Uy9Ban6vNldTj1Ysb69G4/nuywIhD0oQw49tYevu2dTTgilj2y6HH/AvDCng70OvRU9GbvmPLop5rv8wPc89JiuPJeRvTyiBsU8a9g8vTJdWrztJCQ82SJyOwyUazwAbUW8+feJPcld4zykmkw8PtQ8PUBHEb27pn88MyyNuyvQmzxjvmW9X+qcPBLxbj1bD4w83R+hvUGUML05mig8bQVTvZAl2r3sVJk96xc7vO5inLzbN189znvOvMtLybwTNO26GnqSPeqEeTwz33291e//PWCqczyWuDG93QncPMtuFj3JOzG86+OVPFEZ3DxvUwY98HffPD29EL1Ysx08ATrqvOHU6TwG0Ik7VN0mvEOuizs54/S8kBgLPWtribwWE/u7zkSlO0A/Bj0wenO8aYsSPcZnwzwg1bI7umHLvFN6TbzS8di9z/jEPC/5vLthXUm9VDHqvCt9QL3QEke6G5+bunO2hr3pWbG7VZKUvONN6jwAbx+8PLaOvTL6rD342Ru82JnaPESyir0caSK9QlUNPVvJoLzBkzY8UdSSvN7tg7LUqvY8QQ6+PKeHFj2D8um7Dct0PZ/C5j14lGI7s6v4O2BmGDsssxs97HFNvB2Af7yifCM9sPujPWufxj28UYi8HouDvMcDbj0rmz29XmcYvcMrC7xL34I95ZynPYKZIzwJbKk87HnavMkP/byG9ok9oBgLvffQMjw2wQw8eDS7PZ2707sGJAa9OeFGPYm4+bsoE/k8WTn7PB6pjz3AGyC9JGA3vT1ppjwRGzc95QhnO0/85zo3tOK7OrNAvSOCobvlAAW94XVrvU4lJb13xUm8kqkcPcD6Ij2+EDY9vdgIPUU2Cr1quEq99EdivfnlHT362rA9CQTovKOWWD3weAs9VSf7vOjrrbxCj0g8L8hmvDxs5bwfUrs8SmG6PHK5h7umd8U7W/KNPB+j2DyHVTA9qm18PCZh5LxIldy8FCNtvDPG1DvH+oG89j4BvYK2iLxn9ai9tfk6O2CEE72q+448FSyPPMNbpTwTgS07MScKPFK5hTyJgr+87xccPCKA7LuoDYw9nOH2PABUWLzEN5698UJcvFn3Y72h7QC9dVUdu/Bh2Toltea8B1l+vP09uDxBad08BQuRPCaYFDwOiiQ9tXKIPUKjCz2/ry29HPCdvGwor7yEidw8+tiCvaWYCDzoeR27vokcveQ/JDyU+5q8bs8GPUOUwL1nmQ6910DAPLi337yrALg7fUyYu2L0Kj0FFEK8xMuUvKCEgzzhXK88GNzEO7CGvDzlP4G6xdbqPAx4Wz3/u5i9asAVPa2/0buykHa9ZUVnu95rDDzDCm476UfmPKqKw7xqqUg95fpWPb3gDb3v2T29AJWBu39qTT2LDA48qxmrvCyro7zXahk8f/MJPRW8Y73ihgq8wTu+Pfwxgzt/APg8MIsBPaJHAj2SuSi94bBNvU7sc70Vx249TTUdvE3SVTzZ/Fe9OPHiO/tbCL1t4QK96Em2O7V9AT2+U4e9oagtPZ+c+Dxd5zm9wn3mvFoKbryAVow6t34vvEuD5LzEAYC8kAv/Ot+EA4nW9Sw8MUsVvYnSIDxMzI29KtGZPFZLRTzUOCw9IYKHvJwet7xWBgw9DE8Hvff0MT1+vYI7o3yMPa7dM7zBXOa897gsPOG8jT1l7o27XNcwPIK6jbzTRM47v4BQPdKibLz1q827tRPvujEjxbzieyw9wG1JPSd+hTzjiZA76N4XvYbqVr0DEiY6KShgO4bKXbx3sYo8pGEMvc21gj23Gny8KAN8PAzV+TzS8Bi8a6P4vKHsn7yxzF491APbPLVLwTvJteM8ulOEPPTvVr0dh0i818+yvQfIf7unpmu82l0gvZ3tgzwMg4S8nVgsPR4507x57Hm9su4CvBrbdT0NrnM8CYyJvXRgC72y2MG8zUaJvYWzE7xzKHg8RS/0O2+syDw9uIA9BzGivChWBj2MtOk8NNMLvXoWxTyrL928L2UVPEBCiLzK3q+8i/SHPPbhhT0Bzae74TWuPcmzBjxZXaI7z8Hdu7LGuLy7XaO9S7fFO1UAujxpdkE8mTKCPTeIEQmw8kK8G4q9Osz5wzxx+w89zoQnPa2LYLx0fdK8nxRLvGFQQD0FSeg8u5+tuptv/zzz4/M8INXyuqewqT0l6rw6IFw/Pa21ML0kqCW8tEQvvXO3Er2YACe8vsG4vLsJ0bxXVr86D43cu7v7Pj3kWQg9DWxbvCTSKjuYNGE8p63tvI/7Lr1ojEc9TNSfOxZY4bsCRos9CD9CPeqak7x5akk9P//nPG3CODwrCbM82H4hPRRAvjzMO0a94VxrPZ0DizyA+Lg8pMG/PHPWZ73ubQs9MEoMPYIhA73OkL68PDj7O4ycFj0MkpY94zWfPAh+GrzgYcM6jkqYPHtZhDuNqSa85DU+O1DtzjxJBBk9Pe4AvafPtjye2hE8VHhrvUwEGr1n7OU8fJ0nvV/11bwZj7O7xHAjvWtODT3aSKs8yyq9PNH0qzvJjbe7oJ8fPQYGmj2FqX88RFsnvbnA6DyKvgS9+C4GPBJ8pLxI9iy9IOocPAw2nrwdRCc7l6bJu1lJSLJNFp08AUw4vV/SoT3GzKE9TxUmPQuLK7xusQE8DIkjPbPxvztc8P08ajcGPQYXE73tjJS8PRKVvGH52Tv0Pdi8gSlzPW1NG73/IAa9Bom8PEXWDbwZD5c8nfuoPXckYbwQI4g758GnPOUyTD3kyQc9MygmPWo9BT1h0ek8x+8PPbsQNz1014e92I14Pe83lL2VHIy8KxuXPKuxATzUqHe9pOAtvLpPGr11FmI7cpSiuzZ4EzyO/Ls8HOYevSyCtL2L/4c9EZJ5PM8I97xzVhU8MkICPV8LlTzOW7e8daWsu9VXyrv4V4G8YlEKO98PGrvnP2y8xwRlvdY/nbyI/cW8ckUevY/etLwwKLC9amstOxTY3jywMHk7MK5GuzU36zwN29C7xxedPKJLiz1Xg109L7M7PGbs9bxiMwy90XK9vJKULjx9Zvc8NSpBOscEBz2HCPG8GRX0O7lIyjoc+XG8SjZhvIpkUbxRqgq95YCHO/zjnTywMzi9YYbkPCAd4ryY5Y88CJa4Oz1GXz02VFy9LzoPPa/3Ajz0OxU9IN8NPBTsDz0h2Ry9R9xbvCpIdDyeLaQ8yx2wvFkelrySizg8Js5qPQpN3Tx8YFy9NvjdPDwQh7zWR2U8yNUQPfncP70k4BM8q8hhPZ5xKb0Q8tc6bCVxvclsab2nnci9e9LUPG2pk7zXDT890Hw2vUknoT35QQ89YxSuvQXssr0c01c7PJkJvJaE7LzVG5+4wxlmvZWiYz1ehsU8lUPHuZpzHL2Ko+G8C2DbvGAKZT23rNs8eQqcu54ssbw4HVU9ItsPPVAC5DyzVAi87GAUvbpFxD2teww8rrMFPe/1or3BMj09nKpGPShEUb29bqc8QQXAPQjoujxxxAs9XDoQPQBpeL2Gaju94Nq2vQ7ZmDypVdY8GNHTPFSWWTyi6b28sGlKO8heir2N4KC9AJ10PPKGCb1c6O+9mwVpvGRBN71x+3e8oLuovKofCLwxsGY86xsPvFS/grxzFyu9BjMbPXICOomtFl88yYtzPJmfd7ztnW+8yk0CPSuSHr1/fDU9BZyhvI6UAr0ELye9pUi5vTFFGztf16K9Hjp2PXSFgTxN9xo9bLc0vbtDSz0Vc7w8znqPPQssaT2Wv0K9HezUPNXYLzzxeQo9Eee4PGKR37xnGt880rnovHdYyDygr508HQ9+PMFZwzs2oIW9+MvAPFH1MbxWSE68TPB4O6/VNr2DlXC9DNYKPQ0bd7xGGic9gDgcvP8tZbzkGCO9jGiiPAC9Br3a34M9o2asPOSsHzzLo8W8BTsuvILszbunNAu9XxXBOn0ZLrwWCqo8i0pePaRtjDynAM+81CuFPATo7TwqiCy9iIXAPHn8/Lx46c+8B/m2vOilmzxHWF49kLIau0YW3bxNg3I968A+vVpsgz0WUNA7/UA5vYv8XTp/shW9hR0bO50Oxrzl20S9ttzYvAlIgL3CWrs8d1FRPSqOLjwghX+7Tkc+PDrtdDwaVa28YmTtPDJjWLyszJa88t2GPDQa5Aj/7JC7iOfNvLQysry8SlU8w5oZPe0MHD2eueC7jF+CPaoKgrz4qUs9n5uWPMvAyrxAAXu8C2QvvR4yhj1NKI28SCfBO1UHXL3RaTq8touIvE4rkb2xViC9YT8/vAcyujz8Zw49ADSIOdLDw7w8rAs9HyOoO/6/kDzIQIq8SRUuvEz4q73kn/s8QhrKvB3JST1qHJE9JMWHPTm/Aj1gz0M9McF0vCRWQjs9/hG9QxWOvESAWz0PNfa8tcEUOyaHij2rWg08AR4tuy1siT2S+nI7oahHPc+uK70TiP47mStrPNFgdzxzbbu78eOtvFTRED2Tney8PflXvZpTab0gnnI7eFdcvRp1yrwnd3k7v+lovFZZbL2gYCI9QYRUvZ7xFbyFFSk9S46dvDD+oDxO8Z08OcRivRw6mT3tQUI8lD8hvFoOKD2EA5k9EBZePMVzkjw181E9yQ5FvcZKFj0oi2q9L0ijvDzdmr14Yeu7vZnKPKqi7Dxy/Iw992zbPBy3SrJuJTa90BLEO7qAmT0t85C8NywgPQR0eD3gVTu8UYptPLptljzWnYo7TfgiPRiujb2eeAS99OAaPXboYLzIB1I7CZquPUsawroT5pG89FW2O6n31jwnKty8fO0ZPbwC47s4H509bmibvKIbsTw/Unk94xV4PDEYAr1tPJG8MXEHPLKKPLx9Sb68sUzkPM4TwDz4AiU8UAjeO5rAsbzvDto8Z6uzPa7Jdzxq3ok8A0advKcO6Dvxd548ttaCPNvfTL359gc9H1n+PKw1irxFjjO9L6XYOmkBmDw48Ra9VRPkvBQosLrNQv68xnsVPXW0+TxFyt88QwAiPbRJ4TyUYRk9xAtWvaMYZr3CR5i8jysqPGTuNT3TBSW8CrYBvfvGSrzaGEy8E/gMPcHiqLxFUpg9IqrmO8jfjjxa8ME8RCW+PNp3Aj1wAsk6GAeJvd5Hbr2Dgge+zIuwO0TbETwUbRU9XGOMOzCtg7wqnu28JKnhvDLV87wT9Ka8lVFJPSaA37wEuhk9nvIkvByqqzt8Dn47Dk0BPWhnhbuwwQU6Fxs0PTLG9zpD2bG9AaTrvEB2ijk7lsE84GLCO6Qi+7zashM9MlDhO8VzELwOK1S95Ub9vce4FLw84N87tdMaPSKxaT38Cwu8++OhPMpnxTzib229pADFPYhx57yAPf+8uht2PWwy9rxEFTc8WgmVu2iz0zxsTQk9XfugvDSte72Eto89I52lu26OBD24K8m7pIbJvPKwVD35zYS9rxPNPLV/vry5iU69zE8GvTEyoLwoSM68Wvl5PQjoITua+Hk92vClOz6PBL02JgU9phoyPUHWMD0Rpt08lMjjOiyI0b13uhA9q/E9vXyh77w+O669OooDPgxswzvifSk92AB0vIr/iTxsePe6pt5gvY5/Tb0iYVk9BmEBvTso8zzsVJa6yKYyPd1s9rxj86W9XGAbvTmdNL3/FFU9WuSXPaCEP7uH02g9vReYPCQyRDxGBVG9hfLYvFBpTj3eR2G8switPMdEX4nCYzs8vpb+PLQKLj3CMSm8CIilO/5vVL14eYw5iCZyvbDh7rtuvKy9zUeavNRu7D07EQC8to58PBxdb72XRqu9Pmuxu1h3aD3OTUe9WvAxPDRoEbzQ/cu6xkA9vC/KizzoOCS8+iKFPLYDVT18dtQ8UBBrOif0QD0ok7s8oAzGPKQFN713TvG8tscRPKLkjL3WxBS9jQtsvf5sk7vD9B+9+oOEPF0G+zsWtIq9KFlSO8MfszzeJRU9MloUPSDebLvDTQA+QHvAve58Zj2e4QG7HnjUvcYLBL2jjG+8bhNrvc3mC7ykGH+9K+08PXr0GbtBXus8IUeEusBnFz0+QUa8g6Jhvdvv/jwQEWm9xROCvEwE3zwmdSo81MYePZZF9jwR8mK8HL5cPXFS77wqaMQ8hEw4vToNXL2IvgC7RhAcPUY5ez1dajq8ZOYFvU4BkD2cx8A9tj4hPYApMTyS0Zg8jA7rvD3wFj3pCye9dqYZPPz0ETzyvvg8oEkTPV9AAQnEKZO8xtM6vP0qXL2W5eo8h4UlvTNJb7x2Kai9hZ8KPU4ViT1ZHMA8rGAhvVUFt7xqgpW9aJs9Pc+bPLyBaai8SLHePSvBEb2oBpy9QZViPApQxb0IbLg6pn0tvWc8hTx0pNA8al90PMQdkD0qTLk9sqYUvcJ4O71QPWG6E47kvJVKF7xknJc8/Zn0PO/MMz20qI49m789PYJdOTz+eJA7V13BPZ7uP72Xc788hWc5O5q/9Lq4ywS6baI0PemxJj2ctFm9bVUnPU0bl70G7mS85gsMPe0WLbyUmcw7DFxQPWh2RL14dJw824hSPehlzDzqvye9lo2oPSEhVzxGtnq9GYdIPYzNfLyWraI8Yruku3IHST2AaD+7G7prukavqLwG73w8TCOavax0NLzxzEG9p3RKvOzK9Dw0yOW8DRysPB+cHr2vNv+8mplAPQJXbbxGzuW7+iydvJhTxT1hHia9Q+EYPb7xL7w4oyC7sIoLvErs47xSZzM7L/iHvEKYcrKIkPC7H8r8vDfEA7xyBJk9Iei+Pa96QD1MPyO81k0gvZsjE7w4bqc8JkgAvAp6mryiy0o8ZZM7PWgYtD2tVBK95edfvHuayrwLPRW9uuf3vJjbZTzQd3u5LBCUPSMbXr1MGJM9GwwePJxpzrzy+f08inr0PKdYq7ybnJk8oF3uu07QEb0hygu9AKPsvEIZb7zIE4I9NPDdvKJQ2jz9SYy8/KuaPWKap7tElJI9W9BrPWtsV70YktM8wYpvvHO19b0WiCU9HrEZvZpLWDwRjUK9dNqYPbBJTD3fSRW9OAhJPO+6xLvOpmy9+aBaPGlZQTyqKGi8VPABvLqH/TxQ1886NOAMPAzCS7zJrsO6ujAUPUuCfLys8kQ8ONfNO9cwvjsBAKa8DjYbvKxPjz25l4i8a5KbuQlSg72op7e8Mdh1u/29BD0gzUM9PtMKvQ5zkbwaKYW98jgfPTv1GL3kS7G8Lvgjvcpy1Txf9Ye8Yg0yvQkmGzxPCCW9r3l3vFAt3byjk1q9VJl/PaXhjD3P3Lm8IG/ZPKNpgTuSnGE9KytiuuwvDz3hcHC8bhOhPNMUhbrxHHA9UJ5ZvDvRdr09nKI7D3hlPRrhk7z75429knNbvAtl7LnbsUg9uDsZPXGt9Lt+mB29OQNvPAFLTr2K4we9sgw0vZxHi702oZq9S21QPMwMEb0iELi8wwj/vBSHaT1bbYg9AzJ5vVbAsbwuxqq74ACLOitdDTxtN6Q8Q1h2uw4p3zyd7p86PqtWPY8xB728vai9ZfhavaDsobzPIhM97DIDPDAOzbyWfXM8+rkfPWL1TT22n4k6SuHQvByL17wZYda62+d8PMQHOL2swZk8/49QPbzqmLxmxGI9rk7zPef6tLybIUI9l+RbPfXOGb2gaUm9l9eVvPTnvLyo6ia7iTDdOhjP+7z47Ru9I45RPcCp3LyDbG475b/HPO5Jjb1MBEG98WX1vFqPp7wM86s7uwtBOxPpTD1OmaA8OsZ9PPhnvLyk5b+8hbbQvNCmEYlY64Q9cNRqOiZ/ij2Lt/06Kw49vKDicrqNyz09cbMhPK4fED1pXW08aNWvvUqrhT06nwC9FW3ZvPHLa7v4Dqw9GWX+u4ljrjx90y883VKrPf72gz2Otm69T4QGvHOYETsqPzA9quhCPMLXHL2R/xM9V2mWvZBK6zzD+Uk7t7fSPBkSTr2mQQS9GWSJPL2RUD1aMZ88Gz+BPPr3obstwvW8m3dkO4FncryoltY8eATZvCwSDL16TQ08Q7drPLq+SjxaWyk9WODAPGpDejsxt+m8fhWjvZSbAr0vXBm8C8lruhIdM73QrCg9+ifsPJgzpzxwY4O8IBQEvcU8P7uwEAa8N6jsvAB1ObwrayC9XtGrvCBBIT015BQ9K8D3O8Nwcry6bg491/Z3vC7Zij244908SGW5ugLUjL3O+d27jr8XPZrRlzwU1gQ8XgmKvWCRYbnXgZ099Ji6Pan6ND1bEO28QsdyPBABpbt+Mp+9b8BSPOeYhDyLjjq9XZwlvdEChAgJmoQ7+t7yvPoi37z6ix69/Ko6Pdy4R7zpEhu7ymEQPdr8lDtjW8U8rY2BPZpVhL11fWc9n3AsvB3xZj33xgc9mpvnOyZXi70tDAO8wcSnPMwKT72wJwo8Q332vL9OgTxKmgG8Fxu3POJKab26ieQ8q8QQvUvDuTwFQhC8NgrEvLS2170dJFw9Vw+ZvYWB5DzHL3w89sslPR75uTx2IRs9TvE8vDm1pbsnBUG9Bj1GPfzdFrwVIiC9rRXDO8EbVT0A/4k8m4pIO1JWwDwfZaG8+NKFPCOUGjpWbJw7ebX9vJgkRzzloUm92Zq3vPQDojxFPmS9M9iDu/xwu73vSJk9VlcLvYBbWb3Dmqe8d2gjvTPXVb1+Apc8y5cbvXiqFLzYU5k8+UtivDgLpjzavSg94Q2kveV+TT2e5kU9+0gRPd5VmzxuwSg84ttPPTYSVD1RUwY94ZRXveaCRj15s5u9I65lPDC+N71zAGy8HuHevJFhRj3E1Jg9e/fCPDUpX7JttVO9nnuUPHFIED16Nps8kbIPPNBTZzwCsvm8ubWJPYtP0Dr1bUg8PtykPFKT6by2paO7lVPyPPdECD0v7Sk8uju+PYXnxLpiJea84I71PA41CrzM+JO8Q7RfPa7IxLsoh+Q9X/9RPIWqIzogcoQ8yf2oO/z7WT0nVSq93Kc9vAC4CT1DVxu9/IC0PYwQgbxpvXA8x6quvEWIMr2XC8G7+82IPCHaQLttewG9kUIBPBUkU7pVX9y5VpApPeMZbrzUf689+phPO9qpOb2hWYy9BtlLPIfjfrxt9oa9BnkzPBVlsTz8qsG7ZvwAPcQAsLyLpwc8q31/O1wmFLzj/dY8XyU8vW0SMLuyzYm9NzeZO7mNAT0QmhK9E10SvEcJGT3Oeiq99uQ1PHpceT2Ay5U88UiXvJ7xFr2qhfu8OTYMvMtcqryL/Qc988J4O4Y+EDwaUx+9NGoROzLkaTzQm6S8SUIEPF4RD72r6qi3UYofPCSlUzw8eCO9G1N/u6JIB7vj1VU9mWbCu1a6gj0PXiq9QqU4PesMVzmIKvY7Jy/IPMtpbDmgOB6927KkOrkHWztk4Du8maL0PHy6XbzMbaa8iY22PfKJLD1GFJu9FZMVPZwm2LxO/K07fuVbPXPrt7xi4xc9XjIjPf7IuLx2sIK8ztN0vbMWHL0+hIy9T9qWPXvfJbvWwYU8g4Oduy5dGj3URW09FN6vvXV27b0Rnlm8pNgVvDybtrz5Su87N4h7vXd8qzyvA/m8dCa9PEFhDb0RcS69XDfuvKQmNj1GvWs9+NnBPMHSTLx4aig9VlGVPdzNZbvrBlW7L3GcvBm4Cj2byeS7GxL/PDdws70lG3Q9P+1LPamcRr3cMNQ8IWboPTzMrTxJnRC9G2TAPBfUArzZHX+9ndR6vUJV/zx6GC88OR0FPWjEOjtS5Au9OKSovEz9HL0EVEO9PO8PPbBzk7yBrbe94w4aPRh96Lthh5K8aKOAPPT0JL2dr0A8lEmUOvHJN71h8Gu9n0gOPUu+domWHRI8cJ8pvXGEpDwmjpe8Zr4APa3IPL14BVs9tBNHva3RGL0gKuW89gGQvfWFAj3h33G90Tj+PI0kxzuk7Gg8yM+UOzeAuT0niP070upHPdYWVj0vlwQ8bpvUPC5RRTxT9xa6s/f0u5n3y7xsyAE76BoCPLjAPj1Emja9dJ2UPMTi1byZ8S69Vz9cPYpCXrxkxwy70BL6ulaKxbyAgIC9QG+bPBSIIDx470k9M+A+vFenq7w3Rdq8uFppPAlsbjxRbq89VxYlPaOwszoCXye9vY/Cu6PNWDtjw7e89RhnO5CnOLzRIac84uQ9PXHKIr1d/MM80IM3PZeaFT0z6jq8jRoPPGoZm7wkbN68w1OCu8JgVDwu+409e7kmvdJMS7ui6Yk9oKFFvS+fPj3xH648Y8eivPxmXLxyGVm9QMlXO8YKG70Xs8m8gRr5vC10Eb0Yum0990PNPNEYVzz7zts8OlBwPavKnjznybq9z4kuvDtrbLxCmXi8an2MvHY7ZQmhHhK964UcOcaxNL1G3xy7ONKaO3vjGD1uEB+8DUdmPSVIgzscnG49HiWdPAYaEb097c48k1I8vbH1oj2we7Q7wXtpPPM+kzvznq28aYq+vBpoq72EZbW8Yx+AvIvrkbvXaoa8BDAuvIpLFD3EH6O70MuVvP7Etzwzjdk8o/8Uu1gCGr7AlVI9Hs+KvDXw/zqdlo49crrdPCubUrlC25+8HrxKPXOpKj3HaCe99ashuq2TVj0lnje8b2JyPL4+hj0MDYY8y5qLPHN7Yj3ur+s7mV8fPQAPJr1p9dy7RIG3vFOMTT3dDjs9S/rjvDvQX7rPaU69+i3IvJYTp70cdaw7zjg+vXtuJz2XjCG9Gdz5u6PxFr2zr1s8iyH4vHMaxbxxQI48C2kWvYOyGTvp1zc9zwWBvZ/AsT0DW8G8dBtxu3hJnT3OXOs8LKoyPJd+Aj3D+Jo8kBJ9vETsKz1iduq8AgY8PDZ7Yr3OFW684aRfPO7tCT0XDDg9tOA+PXnKWLJNXF+8YGObPDUJuz2X3Qy80yFDPVTSpj1vGiO8XNJMPIyk/7q3Ado8+/gfPTqVlr0KfJO8CUkFPMKtG70yamU9VIP1PGFKLjxNKqm8KfGhPAKiSj0yPc68eRYVPWuC7jowEMM8rkHJvAtLvDuuU089Ha6DvAnaDL3rixy9K4gmvGFY5zuNgyG9/X5bPbL+ZDzPHmC8buQJPCnXDDtVHOk8Yn/PPGr0QDzGEek8PLTYOq8/KjxNVss86ZJNvHETQb2YusI8dXftPDi/8rx+BSe9j74pvIwVczyM2iO7QwQ0uwDSGbh16428CM60uw9Q8jzI+7o8xpGbPTAqkj0A0ZM8dPpDvfVbaLpM/yS98J6xPCLeJjzLtx27N0w0vYqETT0HQOc8/jqBPYcMiDw4teq7LagrPQtDBDpQ7w697iYDPOKBEr16OTy9xfftPLDbMzvGcUo9eAc/PJJFojz1c7u7VbZJPPMnPDyPH5g8WXICO0tGQjwBmq28QUAQPHPEXD1cblo9PplhvN4kkj2SLF0915w8PQoKTT0IJoi7/hO2vOiTLr0Spr68qz5COxt2Jz3ck/27M9uDO7nchbxm6QE8gYc3PY4lJT3Dgk69tva/vBvyFL3gzMW9D3RXPLeuJjzIpeY7TYJbu0qAwL29aGS9aKIoO9z1Uz1dMQW8hQuEvLs9oD2a1s88F7L5vKdbfj2jbDw7R6cZO90JbL0aECk8iVLgvEzb1TwNxvc7rVPLvDxQObyyTTE995hWO/Ew5bzAnd48DvjuPDu/aLsbOfk8elqcu8+LODx59tU9SGKMPcBMGjp/7ti8RonAvDIOhjxUIuY8FKYBu72Snb3V4Rw8+S+RPMKVNb0T1+09YfzVPRrvFr0CGgO8DpNcPVLO2byjRI28Oca9vJlSe7w5a6k8IWLYvLn2hjwIVrI8AEaOvJJFib1xsha97EloPYYYJDv1HYe9icXUO5uDN73wa0Y9/GsEPSvPirqk9s688oOuPNBXdL2QDyq8IHr9uwGqsolguco89dvIOitPpry/nNU9gmQ2PXzDGj1vWQQ9vDdlPZt6Pr0wpSu9plS4PCTc8Lw4qCo82m0tPecUgDlw2Bi9kHyjvKhTxDyMS7O7CBthvUQtZr0tYkq8lNiPPf/pJzxAuwo9iouSPR8ILT2Rexi9kOHKvfT3Ob2xxgE9ErmzuzMqzDuMFzW7seQ1vY38Qz31XZq5odqxu8kRQj2XURQ9FpQnu3FvnjyVH2k6DSYwvEOWXj2g+Nw8kmqMO0CrXjsvums9waOKvEyzi7tvfRm8qD0qvcIf0Dw+/0o8X4W3vGReAb3U+y+92amFPVP3fr1XlWo9wYWGPezGMb3Z4pw9tkFuPI9QizzFLQQ9ivfxPCr1rT15J4C8bXS2vG7Kfr1WOiO9l+YzvXib4LtcPni87Ta3O8QZuTtQx5a9EBCvOzJYaby9o6+6YzutvOCFGb2OXCo9yLEcPRH2wLsFbCw9x5bku5QwDLx0q3K7V2yjuuIWML1kpEE77ruGPZDxKgksOgO9Va6SukMkS72hlXG8Dyf6uhnwyDyFZa689BJJvRQGLb0xCpk9gEQTu4v4ir3DSIU8SAcVvHYFKr0zcPK8W2ODu8hbRTxyeRy9TJUFPR8lFr3u8G09AvmdPKa4y7oTJgQ9TCTFuzgNjz1bJxq8GQoEvQm8VL3WUyO8o9QfvVlWVr0KIjU9O2T6Ooy+D738TRg9IQMPvT+rErslRo89a/CgPAnN7rx7NZ078HYCu5ETRr1Jxqy7mQDUPLlLWLt9O6Y81BwSvUEYIzxRgUk8OSESPL7aGL61arq8+G+YPPu0AzvT2PO86UMDPSy3xDzbFLE6QAHAuaUUU7xV+au30XAHOtA7nL120Tm9ZWjhPE8Qsbw6Rcg8X1eZvVZdFz1HKe28zBytvEnAWjyj98+8oBcFveDUODqFTgm9670muRn40jxPmAI9WUNUvAgPxLzwunQ8pD+wvHH9vzx5pCS81XS7u/2jITziqSi9SsRuPbPc0bxSbP88DbtSPM5Gb7Id08U7F/FLPewaZLzoIgI9loo1PcYgezwgmXm9o3pOuszadzzcvCa9myPbOww2XL03L9a8IJCQPUs+Ar2qoYa9qPj/PKvnbbmGDmG86SAlvYklKzx1zHQ8LWOFPOtiYrlCGPq7UGzdvIk8MDzWwoK8nVMOuwguCLywMIQ8nv04PeOr8bwq7n88CIIMPaN44byXye27+GJdPYYDCzxJQ1S9JisGvAa7wz3r2CG9ODuOPPQDcL3Sdf68+lOyvNzQyr0CKaY7ur/uvEoLsLxA6ye6TSmnPWhGlLtRkL88LFW3PcJKNj2Yilg7FvO8PFu+pLyki4U8Y7yAPFfoQj0J3CU5" // Decode embeddings at startup (happens once, <10ms) function decodeEmbeddings(): Uint8Array { diff --git a/src/neural/entityExtractionCache.ts b/src/neural/entityExtractionCache.ts index 2d04c02c..553eaca0 100644 --- a/src/neural/entityExtractionCache.ts +++ b/src/neural/entityExtractionCache.ts @@ -3,8 +3,6 @@ * * Caches entity extraction results to avoid re-processing unchanged content. * Uses file mtime or content hash for invalidation. - * - * PRODUCTION-READY - NO MOCKS, NO STUBS, REAL IMPLEMENTATION */ import { ExtractedEntity } from './entityExtractor.js' diff --git a/src/neural/entityExtractor.ts b/src/neural/entityExtractor.ts index be0f360d..c69ba49d 100644 --- a/src/neural/entityExtractor.ts +++ b/src/neural/entityExtractor.ts @@ -3,7 +3,7 @@ * Uses embeddings and similarity matching for accurate type detection * * Now powered by SmartExtractor for ultra-neural classification - * PRODUCTION-READY with caching support + * Entity extraction with caching support */ import { NounType } from '../types/graphTypes.js' @@ -293,8 +293,8 @@ export class NeuralEntityExtractor { const contextLower = context.toLowerCase() let boost = 0 - // Context clues for each type - const contextClues: Record = { + // Context clues for each type (partial: only types with known clue words) + const contextClues: Partial> = { [NounType.Person]: ['mr', 'ms', 'mrs', 'dr', 'prof', 'said', 'told', 'wrote'], [NounType.Organization]: ['inc', 'corp', 'llc', 'ltd', 'company', 'announced'], [NounType.Location]: ['in', 'at', 'from', 'to', 'near', 'located', 'city', 'country'], @@ -304,7 +304,7 @@ export class NeuralEntityExtractor { [NounType.Currency]: ['$', '€', 'Ā£', 'Ā„', 'usd', 'eur', 'price', 'cost'], [NounType.Message]: ['email', 'message', 'sent', 'received', 'wrote', 'reply'], // Add more context clues as needed - } as any + } const clues = contextClues[type] || [] for (const clue of clues) { @@ -401,8 +401,8 @@ export class NeuralEntityExtractor { this.embeddingCacheStats.misses++ let vector: Vector - if ('embed' in this.brain && typeof (this.brain as any).embed === 'function') { - vector = await (this.brain as any).embed(text) + if ('embed' in this.brain && typeof this.brain.embed === 'function') { + vector = await this.brain.embed(text) } else { // Fallback - create simple hash-based vector vector = new Array(384).fill(0) diff --git a/src/neural/improvedNeuralAPI.ts b/src/neural/improvedNeuralAPI.ts index 566b0a62..625bd9d9 100644 --- a/src/neural/improvedNeuralAPI.ts +++ b/src/neural/improvedNeuralAPI.ts @@ -1003,8 +1003,12 @@ export class ImprovedNeuralAPI { return this._createEmptyResult(startTime, 'hierarchical') } - // Use existing HNSW level structure for natural clustering - const level = (options as any).level || this._getOptimalClusteringLevel(itemIds.length) + // Use existing HNSW level structure for natural clustering. + // `level` is an undocumented expert override (not on ClusteringOptions): + // it pins the HNSW layer used for cluster centers instead of deriving it. + const level = + (options as ClusteringOptions & { level?: number }).level || + this._getOptimalClusteringLevel(itemIds.length) const maxClusters = options.maxClusters || Math.min(50, Math.ceil(itemIds.length / 20)) // Get HNSW level representatives - these are natural cluster centers @@ -1618,7 +1622,7 @@ export class ImprovedNeuralAPI { // Get all verbs connecting the items for (const sourceId of itemIds) { - const sourceVerbs = await this.brain.getRelations(sourceId) + const sourceVerbs = await this.brain.related(sourceId) for (const verb of sourceVerbs) { const targetId = verb.to @@ -1882,8 +1886,9 @@ export class ImprovedNeuralAPI { return await this.brain.counts.entities() } - // Fallback: Get from storage statistics - const storage = (this.brain as any).storage + // Fallback: Get from storage statistics (brain is untyped here; storage is + // a private Brainy field reached for its optional getStatistics capability) + const storage = this.brain.storage if (storage && typeof storage.getStatistics === 'function') { const stats = await storage.getStatistics() return stats?.totalNodes || 0 @@ -2836,7 +2841,7 @@ export class ImprovedNeuralAPI { private async _getImportantSample(itemIds: string[], sampleSize: number): Promise { const items = await Promise.all( itemIds.map(async id => { - const verbs = await this.brain.getRelations(id) + const verbs = await this.brain.related(id) const noun = await this.brain.get(id) // Calculate importance score @@ -3436,7 +3441,7 @@ export class ImprovedNeuralAPI { const sampleSize = Math.min(50, itemIds.length) for (let i = 0; i < sampleSize; i++) { try { - const verbs = await this.brain.getRelations({ from: itemIds[i] }) + const verbs = await this.brain.related({ from: itemIds[i] }) connectionCount += verbs.length } catch (error) { // Skip items that can't be processed @@ -3506,7 +3511,7 @@ export class ImprovedNeuralAPI { if (fromType !== toType) { for (const fromItem of fromItems.slice(0, 10)) { // Sample to avoid N^2 try { - const verbs = await this.brain.getRelations({ from: fromItem.id }) + const verbs = await this.brain.related({ from: fromItem.id }) for (const verb of verbs) { const toItem = toItems.find(item => item.id === verb.to) diff --git a/src/neural/naturalLanguageProcessor.ts b/src/neural/naturalLanguageProcessor.ts index cf37b74c..b3fe27dc 100644 --- a/src/neural/naturalLanguageProcessor.ts +++ b/src/neural/naturalLanguageProcessor.ts @@ -78,7 +78,7 @@ export class NaturalLanguageProcessor { } // Use brain's embed method directly to avoid recursion - const embedding = await (this.brain as any).embed(text) + const embedding = await this.brain.embed(text) // Cache the embedding this.embeddingCache.set(text, embedding) @@ -1161,8 +1161,8 @@ export class NaturalLanguageProcessor { const extractor = new NeuralEntityExtractor(this.brain) // Convert string types to NounTypes if provided - const nounTypes = options?.types ? - options.types.map(t => t as any) : + const nounTypes = options?.types ? + options.types.map(t => t as NounType) : undefined // Extract using neural matching @@ -1253,7 +1253,7 @@ export class NaturalLanguageProcessor { const confidence = this.calculateConfidence(extractedText, type) if (confidence >= minConfidence) { - const entity = { + const entity: (typeof extracted)[number] = { text: extractedText, type, position: { @@ -1264,7 +1264,7 @@ export class NaturalLanguageProcessor { } if (options?.includeMetadata) { - (entity as any).metadata = { + entity.metadata = { pattern: pattern.source, contextBefore: text.substring(Math.max(0, match.index - 20), match.index), contextAfter: text.substring(match.index + match[0].length, Math.min(text.length, match.index + match[0].length + 20)) diff --git a/src/neural/neuralAPI.ts b/src/neural/neuralAPI.ts index ca7d9c5a..c2b4123b 100644 --- a/src/neural/neuralAPI.ts +++ b/src/neural/neuralAPI.ts @@ -646,7 +646,7 @@ export class NeuralAPI { // Run k-means iterations (simplified) for (let iter = 0; iter < 10; iter++) { - const clusters = Array(k).fill(null).map(() => []) + const clusters: (typeof items)[] = Array(k).fill(null).map(() => []) // Assign items to nearest centroid for (const item of items) { @@ -661,7 +661,7 @@ export class NeuralAPI { } } - (clusters as any[])[bestCluster].push(item) + clusters[bestCluster].push(item) } // Update centroids diff --git a/src/neural/neuralImport.ts b/src/neural/neuralImport.ts index 4c1c7648..8a2ba843 100644 --- a/src/neural/neuralImport.ts +++ b/src/neural/neuralImport.ts @@ -36,6 +36,11 @@ export interface DetectedEntity { suggestedId: string reasoning: string alternativeTypes: Array<{ type: string, confidence: number }> + /** + * Subtype tag set by the extractor, if any. Takes precedence over + * `NeuralImportOptions.defaultSubtype` during import execution. + */ + subtype?: string } export interface DetectedRelationship { @@ -47,6 +52,11 @@ export interface DetectedRelationship { reasoning: string context: string metadata?: Record + /** + * Subtype tag set by the extractor, if any. Takes precedence over + * `NeuralImportOptions.defaultSubtype` during import execution. + */ + subtype?: string } export interface NeuralInsight { @@ -791,7 +801,7 @@ export class NeuralImport { await this.brainy.add({ data: this.extractMainText(entity.originalData), type: entity.nounType as NounType, - subtype: (entity as any).subtype ?? options.defaultSubtype ?? 'extracted', + subtype: entity.subtype ?? options.defaultSubtype ?? 'extracted', metadata: { ...entity.originalData, confidence: entity.confidence, @@ -806,7 +816,7 @@ export class NeuralImport { from: relationship.sourceId, to: relationship.targetId, type: relationship.verbType as VerbType, - subtype: (relationship as any).subtype ?? options.defaultSubtype ?? 'extracted', + subtype: relationship.subtype ?? options.defaultSubtype ?? 'extracted', weight: relationship.weight, confidence: relationship.confidence, // reserved field — dedicated param, not metadata metadata: { diff --git a/src/neural/neuralImportAugmentation.ts b/src/neural/neuralImportAugmentation.ts index 28efce59..2942d884 100644 --- a/src/neural/neuralImportAugmentation.ts +++ b/src/neural/neuralImportAugmentation.ts @@ -92,7 +92,7 @@ export class NeuralImportAugmentation { next: () => Promise ): Promise { // Only process on add operations - if (!this.operations.includes(operation as any)) { + if (!this.operations.includes(operation)) { return next() } diff --git a/src/neural/patternLibrary.ts b/src/neural/patternLibrary.ts index 61a783a6..e6234472 100644 --- a/src/neural/patternLibrary.ts +++ b/src/neural/patternLibrary.ts @@ -119,7 +119,7 @@ export class PatternLibrary { } // Use brain's embed method directly to avoid recursion - const embedding = await (this.brain as any).embed(text) + const embedding = await this.brain.embed(text) this.embeddingCache.set(text, embedding) return embedding diff --git a/src/neural/patterns.ts b/src/neural/patterns.ts deleted file mode 100644 index 1e97bed4..00000000 --- a/src/neural/patterns.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Core Pattern Library with Pre-computed Embeddings - * - * This file is auto-generated by scripts/buildPatterns.ts - * DO NOT EDIT MANUALLY - edit src/patterns/comprehensive-library.json instead - * - * Storage strategy: - * - Patterns are bundled directly into Brainy for zero-latency access - * - Embeddings are pre-computed and stored as binary Float32Array - * - Total size: ~140KB (negligible for a neural library) - * - No external files needed, works in all environments - */ - -import type { Pattern } from './patternLibrary.js' - -// Pattern data embedded directly for reliability -export const CORE_PATTERNS: Pattern[] = [ - // Informational queries - { - id: "info_what_is", - category: "informational", - examples: ["what is artificial intelligence", "what is machine learning"], - pattern: "what is (.+)", - template: { like: "${1}" }, - confidence: 0.9 - }, - { - id: "info_how_does", - category: "informational", - examples: ["how does neural network work", "how does deep learning work"], - pattern: "how does (.+) work", - template: { like: "${1}" }, - confidence: 0.85 - }, - // ... more patterns loaded from library.json at build time -] - -// Pre-computed embeddings as binary data -// Generated by scripts/buildPatterns.ts using Brainy's embedding model -export const PATTERN_EMBEDDINGS_BINARY: Uint8Array | null = null // Will be populated at build - -// Helper to decode embeddings -export function getPatternEmbeddings(): Map { - if (!PATTERN_EMBEDDINGS_BINARY) { - return new Map() // Will compute at runtime if not pre-built - } - - const embeddings = new Map() - const view = new DataView(PATTERN_EMBEDDINGS_BINARY.buffer) - const embeddingSize = 384 // Standard size - - CORE_PATTERNS.forEach((pattern, index) => { - const offset = index * embeddingSize * 4 // 4 bytes per float - const embedding = new Float32Array(embeddingSize) - - for (let i = 0; i < embeddingSize; i++) { - embedding[i] = view.getFloat32(offset + i * 4, true) - } - - embeddings.set(pattern.id, embedding) - }) - - return embeddings -} - -// Version for cache invalidation -export const PATTERNS_VERSION = "2.0.0" - -// Export metadata for monitoring -export const PATTERNS_METADATA = { - totalPatterns: CORE_PATTERNS.length, - categories: [...new Set(CORE_PATTERNS.map(p => p.category))], - embeddingDimensions: 384, - storageSize: { - patterns: "24KB", - embeddings: "98KB", - total: "122KB" - } -} \ No newline at end of file diff --git a/src/neural/relationshipConfidence.ts b/src/neural/relationshipConfidence.ts index 8d23f34f..df6a61c8 100644 --- a/src/neural/relationshipConfidence.ts +++ b/src/neural/relationshipConfidence.ts @@ -6,8 +6,6 @@ * - Entity confidence scores * - Pattern matches * - Structural analysis - * - * PRODUCTION-READY - NO MOCKS, NO STUBS, REAL IMPLEMENTATION */ import { ExtractedEntity } from './entityExtractor.js' diff --git a/src/neural/signals/ContextSignal.ts b/src/neural/signals/ContextSignal.ts index cc25818c..588bed2d 100644 --- a/src/neural/signals/ContextSignal.ts +++ b/src/neural/signals/ContextSignal.ts @@ -1,7 +1,7 @@ /** * ContextSignal - Relationship-based entity type classification * - * PRODUCTION-READY: Infers types from relationship patterns in context + * Infers types from relationship patterns in context * * Weight: 5% (lowest, but critical for ambiguous cases) * Speed: Very fast (~1ms) - pure pattern matching on context diff --git a/src/neural/signals/EmbeddingSignal.ts b/src/neural/signals/EmbeddingSignal.ts index e7d5f717..908d8160 100644 --- a/src/neural/signals/EmbeddingSignal.ts +++ b/src/neural/signals/EmbeddingSignal.ts @@ -1,7 +1,7 @@ /** * EmbeddingSignal - Neural entity type classification using embeddings * - * PRODUCTION-READY: Merges neural + graph + temporal signals into one + * Merges neural + graph + temporal signals into one * 3x faster than separate signals (single embedding lookup) * * Weight: 35% (20% neural + 10% graph + 5% temporal boost) @@ -56,7 +56,7 @@ export interface EmbeddingSignalOptions { interface SourceMatch { type: NounType confidence: number - source: string + source: TypeSignal['source'] metadata?: any } @@ -390,7 +390,7 @@ export class EmbeddingSignal { } return { - source: bestMatches.length > 1 ? 'embedding-combined' : bestMatches[0].source as any, + source: bestMatches.length > 1 ? 'embedding-combined' : bestMatches[0].source, type: bestType, confidence: Math.min(bestCombinedScore, 1.0), // Cap at 1.0 evidence, diff --git a/src/neural/signals/PatternSignal.ts b/src/neural/signals/PatternSignal.ts index df4dc016..e734a99c 100644 --- a/src/neural/signals/PatternSignal.ts +++ b/src/neural/signals/PatternSignal.ts @@ -11,7 +11,6 @@ * Merges: KeywordSignal + PatternSignal from old architecture * Speed: Very fast (~5ms) - pre-compiled patterns * - * PRODUCTION-READY: No TODOs, no mocks, real implementation */ import type { Brainy } from '../../brainy.js' diff --git a/src/neural/signals/VerbContextSignal.ts b/src/neural/signals/VerbContextSignal.ts index 8f99577b..3610cfbc 100644 --- a/src/neural/signals/VerbContextSignal.ts +++ b/src/neural/signals/VerbContextSignal.ts @@ -8,7 +8,6 @@ * 2. Semantic compatibility (Document+Person → CreatedBy) * 3. Domain heuristics (Location+Organization → LocatedAt) * - * PRODUCTION-READY: No TODOs, no mocks, real implementation */ import type { Brainy } from '../../brainy.js' diff --git a/src/neural/signals/VerbEmbeddingSignal.ts b/src/neural/signals/VerbEmbeddingSignal.ts index 282a26fa..f6ee64a0 100644 --- a/src/neural/signals/VerbEmbeddingSignal.ts +++ b/src/neural/signals/VerbEmbeddingSignal.ts @@ -8,7 +8,6 @@ * 2. Cosine similarity against context text * 3. Semantic understanding of relationship intent * - * PRODUCTION-READY: No TODOs, no mocks, real implementation */ import type { Brainy } from '../../brainy.js' @@ -89,7 +88,12 @@ export class VerbEmbeddingSignal { constructor(brain: Brainy, options?: VerbEmbeddingSignalOptions) { this.brain = brain - this.distanceFn = (brain as any).distance || cosineDistance + // Visibility boundary: Brainy keeps its distance function in a private + // field. The signal reuses it when present so verb classification matches + // the index geometry, falling back to cosine distance otherwise. + this.distanceFn = + (brain as unknown as { distance?: (a: Vector, b: Vector) => number }).distance || + cosineDistance this.options = { minConfidence: options?.minConfidence ?? 0.60, minSimilarity: options?.minSimilarity ?? 0.55, diff --git a/src/neural/signals/VerbPatternSignal.ts b/src/neural/signals/VerbPatternSignal.ts index 7d29d133..e790b418 100644 --- a/src/neural/signals/VerbPatternSignal.ts +++ b/src/neural/signals/VerbPatternSignal.ts @@ -8,7 +8,6 @@ * 2. Prepositional phrase patterns ("in", "at", "by", "of") * 3. Structural patterns (parentheses, commas, formatting) * - * PRODUCTION-READY: No TODOs, no mocks, real implementation */ import type { Brainy } from '../../brainy.js' diff --git a/src/neural/staticPatternMatcher.ts b/src/neural/staticPatternMatcher.ts index 97493de3..b64aaf2e 100644 --- a/src/neural/staticPatternMatcher.ts +++ b/src/neural/staticPatternMatcher.ts @@ -14,9 +14,11 @@ const patterns = new Map(EMBEDDED_PATTERNS.map(p => [p.id, p])) const patternEmbeddings = getPatternEmbeddings() /** - * Cosine similarity between two vectors + * Cosine similarity between two vectors. + * Accepts any number-indexed sequence so pre-computed Float32Array pattern + * embeddings can be compared against number[] query vectors without copying. */ -function cosineSimilarity(a: Vector, b: Vector): number { +function cosineSimilarity(a: ArrayLike, b: ArrayLike): number { if (!a || !b || a.length !== b.length) return 0 let dotProduct = 0 @@ -99,7 +101,7 @@ export function findBestPatterns( if (!patternEmbedding) continue // Pass Float32Array directly, no need for Array.from()! - const similarity = cosineSimilarity(queryEmbedding, patternEmbedding as any) + const similarity = cosineSimilarity(queryEmbedding, patternEmbedding) if (similarity > 0.5) { // Threshold for relevance matches.push({ pattern, similarity }) } diff --git a/src/patterns/additional-patterns.json b/src/patterns/additional-patterns.json deleted file mode 100644 index 16d23280..00000000 --- a/src/patterns/additional-patterns.json +++ /dev/null @@ -1,638 +0,0 @@ -{ - "version": "2.0.0", - "description": "Additional patterns to improve coverage to 90%+", - "patterns": [ - { - "id": "synonym_find", - "category": "navigational", - "examples": ["find machine learning papers", "locate AI research", "get neural network docs"], - "pattern": "(?:find|locate|get|fetch|retrieve)\\s+(.+)", - "template": { "like": "${1}" }, - "confidence": 0.9 - }, - { - "id": "synonym_show", - "category": "navigational", - "examples": ["show me recent papers", "display all results", "list available options"], - "pattern": "(?:show\\s+me|display|list|view)\\s+(.+)", - "template": { "like": "${1}" }, - "confidence": 0.88 - }, - { - "id": "who_created", - "category": "relational", - "examples": ["who created React", "who wrote this paper", "who invented the internet"], - "pattern": "who\\s+(?:created|wrote|invented|developed|made)\\s+(.+)", - "template": { - "like": "${1}", - "connected": { "relationship": "creator" } - }, - "confidence": 0.92 - }, - { - "id": "when_temporal", - "category": "temporal", - "examples": ["when was Python created", "when did AI start"], - "pattern": "when\\s+(?:was|did|were)\\s+(.+?)\\s+(?:created|started|invented|published)", - "template": { - "like": "${1}", - "where": { "date": { "exists": true } } - }, - "confidence": 0.85 - }, - { - "id": "where_location", - "category": "spatial", - "examples": ["where is Stanford University", "where can I find documentation"], - "pattern": "where\\s+(?:is|are|can\\s+I\\s+find)\\s+(.+)", - "template": { - "like": "${1}", - "where": { "location": { "exists": true } } - }, - "confidence": 0.83 - }, - { - "id": "comparison_vs", - "category": "comparative", - "examples": ["Python vs JavaScript", "React vs Vue", "TensorFlow vs PyTorch"], - "pattern": "(.+?)\\s+vs\\.?\\s+(.+)", - "template": { - "like": "${1} ${2}", - "boost": "comparison" - }, - "confidence": 0.9 - }, - { - "id": "difference_between", - "category": "comparative", - "examples": ["difference between AI and ML", "what's the difference between React and Angular"], - "pattern": "(?:difference|differences)\\s+between\\s+(.+?)\\s+and\\s+(.+)", - "template": { - "like": "${1} ${2} comparison", - "boost": "comparison" - }, - "confidence": 0.88 - }, - { - "id": "similar_to", - "category": "relational", - "examples": ["similar to Python", "papers like this one", "alternatives to React"], - "pattern": "(?:similar\\s+to|like|alternatives?\\s+to)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "similarity" - }, - "confidence": 0.87 - }, - { - "id": "action_download", - "category": "transactional", - "examples": ["download Python", "download the dataset", "get the PDF"], - "pattern": "(?:download|get|fetch)\\s+(?:the\\s+)?(.+?)\\s*(?:pdf|file|document|dataset)?", - "template": { - "like": "${1}", - "where": { "downloadable": true } - }, - "confidence": 0.85 - }, - { - "id": "action_create", - "category": "transactional", - "examples": ["create new project", "make a new document", "generate report"], - "pattern": "(?:create|make|generate|build)\\s+(?:new\\s+)?(.+)", - "template": { - "like": "${1} template", - "boost": "tutorial" - }, - "confidence": 0.82 - }, - { - "id": "how_many", - "category": "aggregation", - "examples": ["how many papers about AI", "count of documents"], - "pattern": "(?:how\\s+many|count\\s+of|number\\s+of)\\s+(.+)", - "template": { - "like": "${1}", - "aggregate": "count" - }, - "confidence": 0.9 - }, - { - "id": "average_of", - "category": "aggregation", - "examples": ["average citations", "mean score", "median value"], - "pattern": "(?:average|mean|median)\\s+(?:of\\s+)?(.+)", - "template": { - "like": "${1}", - "aggregate": "average" - }, - "confidence": 0.85 - }, - { - "id": "tutorial_howto", - "category": "informational", - "examples": ["tutorial on machine learning", "guide to Python", "how to use React"], - "pattern": "(?:tutorial|guide|how\\s+to\\s+use)\\s+(?:on|to|for)?\\s*(.+)", - "template": { - "like": "${1} tutorial", - "boost": "educational" - }, - "confidence": 0.92 - }, - { - "id": "documentation_for", - "category": "informational", - "examples": ["documentation for React", "docs on Python", "API reference"], - "pattern": "(?:documentation|docs|reference|manual)\\s+(?:for|on|about)?\\s*(.+)", - "template": { - "like": "${1} documentation", - "where": { "type": "documentation" } - }, - "confidence": 0.93 - }, - { - "id": "research_on", - "category": "academic", - "examples": ["research on AI safety", "papers about climate change", "studies on COVID"], - "pattern": "(?:research|papers?|studies)\\s+(?:on|about)\\s+(.+)", - "template": { - "like": "${1}", - "where": { "type": "academic" } - }, - "confidence": 0.91 - }, - { - "id": "latest_newest", - "category": "temporal", - "examples": ["latest research", "newest papers", "most recent updates"], - "pattern": "(?:latest|newest|most\\s+recent|current)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "recent" - }, - "confidence": 0.89 - }, - { - "id": "last_period", - "category": "temporal", - "examples": ["last week", "past month", "previous year"], - "pattern": "(?:last|past|previous)\\s+(week|month|year|day)", - "template": { - "where": { - "date": { - "after": "${1}_ago" - } - } - }, - "confidence": 0.87 - }, - { - "id": "between_dates", - "category": "temporal", - "examples": ["between 2020 and 2023", "from January to March"], - "pattern": "between\\s+(\\d{4}|\\w+)\\s+(?:and|to)\\s+(\\d{4}|\\w+)", - "template": { - "where": { - "date": { - "between": ["${1}", "${2}"] - } - } - }, - "confidence": 0.86 - }, - { - "id": "conversational_need", - "category": "conversational", - "examples": ["I need help with Python", "I want to learn React", "I'm looking for AI papers"], - "pattern": "(?:I\\s+need|I\\s+want|I'm\\s+looking\\s+for)\\s+(.+)", - "template": { - "like": "${1}" - }, - "confidence": 0.85 - }, - { - "id": "conversational_can_you", - "category": "conversational", - "examples": ["can you find papers", "could you show me", "would you search for"], - "pattern": "(?:can|could|would)\\s+you\\s+(?:find|show|search|get)\\s+(?:me\\s+)?(.+)", - "template": { - "like": "${1}" - }, - "confidence": 0.84 - }, - { - "id": "tell_me_about", - "category": "informational", - "examples": ["tell me about machine learning", "explain neural networks"], - "pattern": "(?:tell\\s+me\\s+about|explain|describe)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "educational" - }, - "confidence": 0.88 - }, - { - "id": "is_there_any", - "category": "existence", - "examples": ["is there any research on", "are there any papers about"], - "pattern": "(?:is|are)\\s+there\\s+(?:any\\s+)?(.+?)\\s+(?:on|about|for)\\s+(.+)", - "template": { - "like": "${2} ${1}" - }, - "confidence": 0.83 - }, - { - "id": "with_without", - "category": "filtering", - "examples": ["papers with citations", "results without errors", "documents with images"], - "pattern": "(.+?)\\s+(with|without)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "${3}": { "exists": true } - } - }, - "confidence": 0.85 - }, - { - "id": "and_but_not", - "category": "combined", - "examples": ["AI and ML but not deep learning", "Python and Django but not Flask"], - "pattern": "(.+?)\\s+and\\s+(.+?)\\s+but\\s+not\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { - "not": "${3}" - } - }, - "confidence": 0.82 - }, - { - "id": "all_that_have", - "category": "filtering", - "examples": ["all papers that have citations", "all documents that contain"], - "pattern": "all\\s+(.+?)\\s+that\\s+(?:have|contain|include)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "${2}": { "exists": true } - } - }, - "confidence": 0.86 - }, - { - "id": "starting_with", - "category": "filtering", - "examples": ["starting with A", "beginning with chapter", "ending with PDF"], - "pattern": "(.+?)\\s+(?:starting|beginning|ending)\\s+with\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "pattern": "${2}" - } - }, - "confidence": 0.84 - }, - { - "id": "source_code", - "category": "technical", - "examples": ["source code for React", "GitHub repository", "code examples"], - "pattern": "(?:source\\s+code|github|repository|code\\s+examples?)\\s+(?:for|of)?\\s*(.+)", - "template": { - "like": "${1} code", - "where": { "type": "code" } - }, - "confidence": 0.87 - }, - { - "id": "api_endpoint", - "category": "technical", - "examples": ["API endpoint for users", "REST API documentation", "GraphQL schema"], - "pattern": "(?:API|REST|GraphQL)\\s+(?:endpoint|documentation|schema)\\s+(?:for)?\\s*(.+)", - "template": { - "like": "${1} API", - "where": { "type": "api" } - }, - "confidence": 0.89 - }, - { - "id": "example_of", - "category": "informational", - "examples": ["example of machine learning", "sample code", "demo application"], - "pattern": "(?:example|sample|demo)\\s+(?:of|for)?\\s*(.+)", - "template": { - "like": "${1} example", - "boost": "educational" - }, - "confidence": 0.86 - }, - { - "id": "definition_of", - "category": "informational", - "examples": ["definition of AI", "what does ML mean", "meaning of neural network"], - "pattern": "(?:definition\\s+of|what\\s+does\\s+(.+?)\\s+mean|meaning\\s+of)\\s*(.+)", - "template": { - "like": "${1}${2} definition", - "boost": "educational" - }, - "confidence": 0.91 - }, - { - "id": "benchmark_performance", - "category": "comparative", - "examples": ["benchmark results", "performance comparison", "speed test"], - "pattern": "(?:benchmark|performance|speed\\s+test)\\s+(?:results?|comparison)?\\s*(?:for|of)?\\s*(.+)", - "template": { - "like": "${1} benchmark", - "where": { "type": "benchmark" } - }, - "confidence": 0.85 - }, - { - "id": "price_cost", - "category": "commercial", - "examples": ["price of AWS", "cost of hosting", "pricing for services"], - "pattern": "(?:price|cost|pricing)\\s+(?:of|for)\\s+(.+)", - "template": { - "like": "${1} pricing", - "where": { "type": "commercial" } - }, - "confidence": 0.88 - }, - { - "id": "free_open_source", - "category": "commercial", - "examples": ["free alternatives to", "open source version", "free tools for"], - "pattern": "(?:free|open\\s+source)\\s+(?:alternatives?\\s+to|version\\s+of|tools?\\s+for)\\s+(.+)", - "template": { - "like": "${1}", - "where": { "license": "free" } - }, - "confidence": 0.87 - }, - { - "id": "step_by_step", - "category": "informational", - "examples": ["step by step guide", "walkthrough", "detailed instructions"], - "pattern": "(?:step\\s+by\\s+step|walkthrough|detailed\\s+instructions)\\s+(?:for|on)?\\s*(.+)", - "template": { - "like": "${1} tutorial detailed", - "boost": "educational" - }, - "confidence": 0.9 - }, - { - "id": "pros_cons", - "category": "comparative", - "examples": ["pros and cons of React", "advantages of Python", "benefits of AI"], - "pattern": "(?:pros\\s+and\\s+cons|advantages?|benefits?|disadvantages?)\\s+(?:of|for)\\s+(.+)", - "template": { - "like": "${1} analysis", - "boost": "comparison" - }, - "confidence": 0.86 - }, - { - "id": "use_cases", - "category": "informational", - "examples": ["use cases for blockchain", "applications of AI", "when to use React"], - "pattern": "(?:use\\s+cases?|applications?|when\\s+to\\s+use)\\s+(?:for|of)?\\s*(.+)", - "template": { - "like": "${1} applications", - "boost": "practical" - }, - "confidence": 0.88 - }, - { - "id": "troubleshoot_fix", - "category": "technical", - "examples": ["troubleshoot Python error", "fix React issue", "solve problem with"], - "pattern": "(?:troubleshoot|fix|solve|debug|resolve)\\s+(.+?)\\s*(?:error|issue|problem|bug)?", - "template": { - "like": "${1} solution", - "where": { "type": "troubleshooting" } - }, - "confidence": 0.87 - }, - { - "id": "compatible_with", - "category": "technical", - "examples": ["compatible with Python 3", "works with React", "supports Windows"], - "pattern": "(?:compatible\\s+with|works\\s+with|supports)\\s+(.+)", - "template": { - "like": "${1} compatibility", - "where": { "compatibility": "${1}" } - }, - "confidence": 0.85 - }, - { - "id": "version_specific", - "category": "technical", - "examples": ["React version 18", "Python 3.11", "Node.js v20"], - "pattern": "(.+?)\\s+version\\s+(\\d+(?:\\.\\d+)*)", - "template": { - "like": "${1}", - "where": { "version": "${2}" } - }, - "confidence": 0.9 - }, - { - "id": "cheat_sheet", - "category": "informational", - "examples": ["cheat sheet for Python", "quick reference", "cheatsheet React"], - "pattern": "(?:cheat\\s*sheet|quick\\s+reference|reference\\s+card)\\s+(?:for)?\\s*(.+)", - "template": { - "like": "${1} cheatsheet", - "boost": "educational" - }, - "confidence": 0.91 - }, - { - "id": "getting_started", - "category": "informational", - "examples": ["getting started with React", "introduction to Python", "beginner guide"], - "pattern": "(?:getting\\s+started|introduction|beginner'?s?\\s+guide)\\s+(?:with|to|for)?\\s*(.+)", - "template": { - "like": "${1} beginner", - "boost": "educational" - }, - "confidence": 0.92 - }, - { - "id": "advanced_expert", - "category": "informational", - "examples": ["advanced Python techniques", "expert guide", "pro tips for"], - "pattern": "(?:advanced|expert|pro\\s+tips?)\\s+(?:techniques?|guide)?\\s*(?:for|on)?\\s*(.+)", - "template": { - "like": "${1} advanced", - "boost": "expert" - }, - "confidence": 0.87 - }, - { - "id": "list_of_all", - "category": "aggregation", - "examples": ["list of all features", "all available options", "complete list"], - "pattern": "(?:list\\s+of\\s+all|all\\s+available|complete\\s+list)\\s+(.+)", - "template": { - "like": "${1}", - "limit": 1000 - }, - "confidence": 0.88 - }, - { - "id": "trending_popular", - "category": "temporal", - "examples": ["trending topics", "popular papers", "hot discussions"], - "pattern": "(?:trending|popular|hot|viral)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "popular" - }, - "confidence": 0.86 - }, - { - "id": "under_development", - "category": "temporal", - "examples": ["under development", "coming soon", "in progress"], - "pattern": "(?:under\\s+development|coming\\s+soon|in\\s+progress|upcoming)\\s*(.+)?", - "template": { - "like": "${1}", - "where": { "status": "development" } - }, - "confidence": 0.84 - }, - { - "id": "deprecated_obsolete", - "category": "temporal", - "examples": ["deprecated features", "obsolete methods", "legacy code"], - "pattern": "(?:deprecated|obsolete|legacy|outdated)\\s+(.+)", - "template": { - "like": "${1}", - "where": { "status": "deprecated" } - }, - "confidence": 0.85 - }, - { - "id": "migration_upgrade", - "category": "technical", - "examples": ["migrate from React 17 to 18", "upgrade guide", "migration path"], - "pattern": "(?:migrate|upgrade|migration\\s+path)\\s+(?:from\\s+)?(.+?)\\s+(?:to\\s+(.+))?", - "template": { - "like": "${1} ${2} migration", - "where": { "type": "migration" } - }, - "confidence": 0.86 - }, - { - "id": "industry_sector", - "category": "domain", - "examples": ["fintech applications", "healthcare AI", "education technology"], - "pattern": "(?:fintech|healthcare|education|finance|medical|legal|retail)\\s+(.+)", - "template": { - "like": "${1}", - "where": { "industry": "${0}" } - }, - "confidence": 0.85 - }, - { - "id": "security_vulnerability", - "category": "technical", - "examples": ["security issues", "vulnerability in", "CVE for"], - "pattern": "(?:security|vulnerability|CVE)\\s+(?:issues?|in|for)?\\s*(.+)", - "template": { - "like": "${1} security", - "where": { "type": "security" } - }, - "confidence": 0.89 - }, - { - "id": "performance_optimization", - "category": "technical", - "examples": ["optimize React performance", "speed up Python", "improve efficiency"], - "pattern": "(?:optimize|speed\\s+up|improve\\s+efficiency)\\s+(?:of)?\\s*(.+?)\\s*(?:performance)?", - "template": { - "like": "${1} optimization", - "boost": "performance" - }, - "confidence": 0.87 - }, - { - "id": "integration_with", - "category": "technical", - "examples": ["integrate React with Redux", "connect Python to database"], - "pattern": "(?:integrate|connect|interface)\\s+(.+?)\\s+(?:with|to)\\s+(.+)", - "template": { - "like": "${1} ${2} integration", - "where": { "type": "integration" } - }, - "confidence": 0.86 - }, - { - "id": "alternative_instead", - "category": "comparative", - "examples": ["instead of React", "alternative to Python", "replacement for"], - "pattern": "(?:instead\\s+of|alternative\\s+to|replacement\\s+for|substitute\\s+for)\\s+(.+)", - "template": { - "like": "${1} alternative", - "boost": "comparison" - }, - "confidence": 0.88 - }, - { - "id": "based_on", - "category": "relational", - "examples": ["based on React", "built with Python", "powered by"], - "pattern": "(?:based\\s+on|built\\s+with|powered\\s+by|using)\\s+(.+)", - "template": { - "like": "${1}", - "connected": { "technology": "${1}" } - }, - "confidence": 0.85 - }, - { - "id": "requires_needs", - "category": "technical", - "examples": ["requires Python 3", "needs Node.js", "dependencies for"], - "pattern": "(?:requires?|needs?|dependencies\\s+for)\\s+(.+)", - "template": { - "like": "${1} requirements", - "where": { "requirements": "${1}" } - }, - "confidence": 0.86 - }, - { - "id": "official_docs", - "category": "navigational", - "examples": ["official React documentation", "official Python site"], - "pattern": "official\\s+(.+?)\\s*(?:documentation|docs|site|website)?", - "template": { - "like": "${1} official", - "where": { "official": true } - }, - "confidence": 0.93 - }, - { - "id": "community_forum", - "category": "navigational", - "examples": ["React community", "Python forum", "Discord server for"], - "pattern": "(?:community|forum|discord|slack|discussion)\\s+(?:for)?\\s*(.+)", - "template": { - "like": "${1} community", - "where": { "type": "community" } - }, - "confidence": 0.84 - }, - { - "id": "roadmap_timeline", - "category": "temporal", - "examples": ["roadmap for React", "timeline of AI development", "history of Python"], - "pattern": "(?:roadmap|timeline|history)\\s+(?:for|of)\\s+(.+)", - "template": { - "like": "${1} roadmap", - "boost": "timeline" - }, - "confidence": 0.85 - } - ] -} \ No newline at end of file diff --git a/src/patterns/comprehensive-library.json b/src/patterns/comprehensive-library.json deleted file mode 100644 index 48fc05cf..00000000 --- a/src/patterns/comprehensive-library.json +++ /dev/null @@ -1,2036 +0,0 @@ -{ - "version": "2.0.0", - "description": "Comprehensive pattern library with 120+ patterns for 90%+ coverage", - "metadata": { - "totalPatterns": 122, - "categories": [ - "academic", - "aggregation", - "combined", - "commercial", - "comparative", - "contextual", - "conversational", - "domain", - "existence", - "filtering", - "informational", - "navigational", - "relational", - "spatial", - "technical", - "temporal", - "transactional" - ], - "averageConfidence": 0.8668852459016395, - "sources": [ - "Original curated patterns", - "Additional domain patterns", - "Common search query research", - "Voice assistant patterns" - ] - }, - "patterns": [ - { - "id": "research_on", - "category": "academic", - "examples": [ - "research on AI safety", - "papers about climate change", - "studies on COVID" - ], - "pattern": "(?:research|papers?|studies)\\s+(?:on|about)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "type": "academic" - } - }, - "confidence": 0.91 - }, - { - "id": "aggregation_count", - "category": "aggregation", - "examples": [ - "count papers", - "number of models", - "how many datasets" - ], - "pattern": "(count|number of|how many) (.+)", - "template": { - "like": "${2}", - "aggregate": "count" - }, - "confidence": 0.9 - }, - { - "id": "how_many", - "category": "aggregation", - "examples": [ - "how many papers about AI", - "count of documents" - ], - "pattern": "(?:how\\s+many|count\\s+of|number\\s+of)\\s+(.+)", - "template": { - "like": "${1}", - "aggregate": "count" - }, - "confidence": 0.9 - }, - { - "id": "list_of_all", - "category": "aggregation", - "examples": [ - "list of all features", - "all available options", - "complete list" - ], - "pattern": "(?:list\\s+of\\s+all|all\\s+available|complete\\s+list)\\s+(.+)", - "template": { - "like": "${1}", - "limit": 1000 - }, - "confidence": 0.88 - }, - { - "id": "aggregation_average", - "category": "aggregation", - "examples": [ - "average citations", - "mean accuracy", - "average performance" - ], - "pattern": "(average|mean) (.+)", - "template": { - "like": "${2}", - "aggregate": "avg" - }, - "confidence": 0.85 - }, - { - "id": "aggregation_sum", - "category": "aggregation", - "examples": [ - "total citations", - "sum of parameters", - "total cost" - ], - "pattern": "(total|sum of|sum) (.+)", - "template": { - "like": "${2}", - "aggregate": "sum" - }, - "confidence": 0.85 - }, - { - "id": "aggregation_max", - "category": "aggregation", - "examples": [ - "highest accuracy", - "maximum performance", - "largest model" - ], - "pattern": "(highest|maximum|largest|biggest) (.+)", - "template": { - "like": "${2}", - "aggregate": "max" - }, - "confidence": 0.85 - }, - { - "id": "aggregation_min", - "category": "aggregation", - "examples": [ - "lowest error", - "minimum cost", - "smallest model" - ], - "pattern": "(lowest|minimum|smallest|least) (.+)", - "template": { - "like": "${2}", - "aggregate": "min" - }, - "confidence": 0.85 - }, - { - "id": "average_of", - "category": "aggregation", - "examples": [ - "average citations", - "mean score", - "median value" - ], - "pattern": "(?:average|mean|median)\\s+(?:of\\s+)?(.+)", - "template": { - "like": "${1}", - "aggregate": "average" - }, - "confidence": 0.85 - }, - { - "id": "and_but_not", - "category": "combined", - "examples": [ - "AI and ML but not deep learning", - "Python and Django but not Flask" - ], - "pattern": "(.+?)\\s+and\\s+(.+?)\\s+but\\s+not\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { - "not": "${3}" - } - }, - "confidence": 0.82 - }, - { - "id": "combined_complex_1", - "category": "combined", - "examples": [ - "recent papers by Hinton with more than 50 citations" - ], - "pattern": "recent (.+) by (.+) with more than (\\d+) (.+)", - "template": { - "like": "${1}", - "connected": { - "from": "${2}" - }, - "where": { - "${4}": { - "greaterThan": "${3}" - } - }, - "boost": "recent" - }, - "confidence": 0.75 - }, - { - "id": "combined_complex_2", - "category": "combined", - "examples": [ - "best machine learning papers from 2023 at Stanford" - ], - "pattern": "best (.+) from (\\d{4}) at (.+)", - "template": { - "like": "${1}", - "where": { - "year": "${2}", - "organization": "${3}" - }, - "boost": "popular" - }, - "confidence": 0.75 - }, - { - "id": "combined_complex_3", - "category": "combined", - "examples": [ - "compare tensorflow and pytorch for computer vision" - ], - "pattern": "compare (.+) and (.+) for (.+)", - "template": { - "like": [ - "${1}", - "${2}", - "${3}" - ], - "where": { - "type": "comparison", - "domain": "${3}" - } - }, - "confidence": 0.75 - }, - { - "id": "commercial_compare", - "category": "commercial", - "examples": [ - "tensorflow vs pytorch", - "compare BERT and GPT", - "GPT-3 compared to GPT-4" - ], - "pattern": "(.+) (vs|versus|compared to|vs\\.) (.+)", - "template": { - "like": [ - "${1}", - "${3}" - ], - "where": { - "type": "comparison" - } - }, - "confidence": 0.95 - }, - { - "id": "commercial_reviews", - "category": "commercial", - "examples": [ - "tensorflow reviews", - "best practices reviews", - "model evaluation" - ], - "pattern": "(.+) (reviews|ratings|feedback|opinions)", - "template": { - "like": "${1}", - "where": { - "type": "review" - } - }, - "confidence": 0.9 - }, - { - "id": "commercial_best", - "category": "commercial", - "examples": [ - "best machine learning framework", - "top AI models", - "best practices" - ], - "pattern": "(best|top|greatest|finest) (.+)", - "template": { - "like": "${2}", - "boost": "popular" - }, - "confidence": 0.9 - }, - { - "id": "commercial_top_n", - "category": "commercial", - "examples": [ - "top 10 models", - "top 5 papers", - "best 3 frameworks" - ], - "pattern": "(top|best) (\\d+) (.+)", - "template": { - "like": "${3}", - "limit": "${2}", - "boost": "popular" - }, - "confidence": 0.9 - }, - { - "id": "price_cost", - "category": "commercial", - "examples": [ - "price of AWS", - "cost of hosting", - "pricing for services" - ], - "pattern": "(?:price|cost|pricing)\\s+(?:of|for)\\s+(.+)", - "template": { - "like": "${1} pricing", - "where": { - "type": "commercial" - } - }, - "confidence": 0.88 - }, - { - "id": "free_open_source", - "category": "commercial", - "examples": [ - "free alternatives to", - "open source version", - "free tools for" - ], - "pattern": "(?:free|open\\s+source)\\s+(?:alternatives?\\s+to|version\\s+of|tools?\\s+for)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "license": "free" - } - }, - "confidence": 0.87 - }, - { - "id": "commercial_alternatives", - "category": "commercial", - "examples": [ - "tensorflow alternatives", - "options besides OpenAI", - "similar to BERT" - ], - "pattern": "(.+) (alternatives|options|similar to|like)", - "template": { - "like": "${1}", - "where": { - "type": "alternative" - } - }, - "confidence": 0.85 - }, - { - "id": "commercial_cheapest", - "category": "commercial", - "examples": [ - "cheapest GPU", - "most affordable cloud", - "budget options" - ], - "pattern": "(cheapest|most affordable|budget|lowest price) (.+)", - "template": { - "like": "${2}", - "orderBy": { - "price": "asc" - } - }, - "confidence": 0.85 - }, - { - "id": "commercial_pricing", - "category": "commercial", - "examples": [ - "GPU pricing", - "cloud costs", - "model training costs" - ], - "pattern": "(.+) (pricing|price|cost|costs|rates)", - "template": { - "like": "${1}", - "where": { - "hasField": "price" - } - }, - "confidence": 0.85 - }, - { - "id": "comparative_better", - "category": "commercial", - "examples": [ - "is BERT better than GPT", - "pytorch better than tensorflow" - ], - "pattern": "(is )? (.+) better than (.+)", - "template": { - "like": [ - "${2}", - "${3}" - ], - "where": { - "type": "comparison" - } - }, - "confidence": 0.85 - }, - { - "id": "comparative_faster", - "category": "commercial", - "examples": [ - "fastest model", - "quickest training", - "faster than BERT" - ], - "pattern": "(fastest|quickest|faster) (.+)", - "template": { - "like": "${2}", - "orderBy": { - "speed": "desc" - } - }, - "confidence": 0.85 - }, - { - "id": "comparative_more_accurate", - "category": "commercial", - "examples": [ - "most accurate model", - "higher accuracy than" - ], - "pattern": "(most accurate|highest accuracy|more accurate) (.+)", - "template": { - "like": "${2}", - "orderBy": { - "accuracy": "desc" - } - }, - "confidence": 0.85 - }, - { - "id": "question_which", - "category": "commercial", - "examples": [ - "which model is best", - "which framework to use" - ], - "pattern": "which (.+)", - "template": { - "like": "${1}", - "where": { - "type": "selection" - } - }, - "confidence": 0.8 - }, - { - "id": "comparison_vs", - "category": "comparative", - "examples": [ - "Python vs JavaScript", - "React vs Vue", - "TensorFlow vs PyTorch" - ], - "pattern": "(.+?)\\s+vs\\.?\\s+(.+)", - "template": { - "like": "${1} ${2}", - "boost": "comparison" - }, - "confidence": 0.9 - }, - { - "id": "difference_between", - "category": "comparative", - "examples": [ - "difference between AI and ML", - "what's the difference between React and Angular" - ], - "pattern": "(?:difference|differences)\\s+between\\s+(.+?)\\s+and\\s+(.+)", - "template": { - "like": "${1} ${2} comparison", - "boost": "comparison" - }, - "confidence": 0.88 - }, - { - "id": "alternative_instead", - "category": "comparative", - "examples": [ - "instead of React", - "alternative to Python", - "replacement for" - ], - "pattern": "(?:instead\\s+of|alternative\\s+to|replacement\\s+for|substitute\\s+for)\\s+(.+)", - "template": { - "like": "${1} alternative", - "boost": "comparison" - }, - "confidence": 0.88 - }, - { - "id": "pros_cons", - "category": "comparative", - "examples": [ - "pros and cons of React", - "advantages of Python", - "benefits of AI" - ], - "pattern": "(?:pros\\s+and\\s+cons|advantages?|benefits?|disadvantages?)\\s+(?:of|for)\\s+(.+)", - "template": { - "like": "${1} analysis", - "boost": "comparison" - }, - "confidence": 0.86 - }, - { - "id": "benchmark_performance", - "category": "comparative", - "examples": [ - "benchmark results", - "performance comparison", - "speed test" - ], - "pattern": "(?:benchmark|performance|speed\\s+test)\\s+(?:results?|comparison)?\\s*(?:for|of)?\\s*(.+)", - "template": { - "like": "${1} benchmark", - "where": { - "type": "benchmark" - } - }, - "confidence": 0.85 - }, - { - "id": "contextual_more_like", - "category": "contextual", - "examples": [ - "more like this", - "similar papers", - "find similar" - ], - "pattern": "(more like|similar to|like) (this|that|these)", - "template": { - "similar": "__context__" - }, - "confidence": 0.8 - }, - { - "id": "contextual_same_but", - "category": "contextual", - "examples": [ - "same but newer", - "same query but from 2023" - ], - "pattern": "same (query |search |)but (.+)", - "template": { - "__modifier__": "${2}" - }, - "confidence": 0.75 - }, - { - "id": "conversational_need", - "category": "conversational", - "examples": [ - "I need help with Python", - "I want to learn React", - "I'm looking for AI papers" - ], - "pattern": "(?:I\\s+need|I\\s+want|I'm\\s+looking\\s+for)\\s+(.+)", - "template": { - "like": "${1}" - }, - "confidence": 0.85 - }, - { - "id": "conversational_can_you", - "category": "conversational", - "examples": [ - "can you find papers", - "could you show me", - "would you search for" - ], - "pattern": "(?:can|could|would)\\s+you\\s+(?:find|show|search|get)\\s+(?:me\\s+)?(.+)", - "template": { - "like": "${1}" - }, - "confidence": 0.84 - }, - { - "id": "industry_sector", - "category": "domain", - "examples": [ - "fintech applications", - "healthcare AI", - "education technology" - ], - "pattern": "(?:fintech|healthcare|education|finance|medical|legal|retail)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "industry": "${0}" - } - }, - "confidence": 0.85 - }, - { - "id": "is_there_any", - "category": "existence", - "examples": [ - "is there any research on", - "are there any papers about" - ], - "pattern": "(?:is|are)\\s+there\\s+(?:any\\s+)?(.+?)\\s+(?:on|about|for)\\s+(.+)", - "template": { - "like": "${2} ${1}" - }, - "confidence": 0.83 - }, - { - "id": "filter_more_than", - "category": "filtering", - "examples": [ - "papers with more than 100 citations", - "models with over 1B parameters" - ], - "pattern": "(.+) with (more than|over|greater than) (\\d+) (.+)", - "template": { - "like": "${1}", - "where": { - "${4}": { - "greaterThan": "${3}" - } - } - }, - "confidence": 0.9 - }, - { - "id": "filter_less_than", - "category": "filtering", - "examples": [ - "models with less than 1M parameters", - "papers with under 10 citations" - ], - "pattern": "(.+) with (less than|under|fewer than) (\\d+) (.+)", - "template": { - "like": "${1}", - "where": { - "${4}": { - "lessThan": "${3}" - } - } - }, - "confidence": 0.9 - }, - { - "id": "all_that_have", - "category": "filtering", - "examples": [ - "all papers that have citations", - "all documents that contain" - ], - "pattern": "all\\s+(.+?)\\s+that\\s+(?:have|contain|include)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "${2}": { - "exists": true - } - } - }, - "confidence": 0.86 - }, - { - "id": "filter_with", - "category": "filtering", - "examples": [ - "papers with code", - "models with pretrained weights", - "datasets with labels" - ], - "pattern": "(.+) with (.+)", - "template": { - "like": "${1}", - "where": { - "${2}": { - "exists": true - } - } - }, - "confidence": 0.85 - }, - { - "id": "filter_without", - "category": "filtering", - "examples": [ - "papers without code", - "models without training", - "datasets without labels" - ], - "pattern": "(.+) without (.+)", - "template": { - "like": "${1}", - "where": { - "${2}": { - "exists": false - } - } - }, - "confidence": 0.85 - }, - { - "id": "filter_except", - "category": "filtering", - "examples": [ - "all models except GPT", - "papers except reviews", - "everything but tutorials" - ], - "pattern": "(.+) (except|but not|excluding) (.+)", - "template": { - "like": "${1}", - "where": { - "notLike": "${3}" - } - }, - "confidence": 0.85 - }, - { - "id": "filter_including", - "category": "filtering", - "examples": [ - "papers including code", - "models including documentation" - ], - "pattern": "(.+) (including|with|containing) (.+)", - "template": { - "like": "${1}", - "where": { - "includes": "${3}" - } - }, - "confidence": 0.85 - }, - { - "id": "filter_exactly", - "category": "filtering", - "examples": [ - "papers with exactly 5 authors", - "models with 12 layers" - ], - "pattern": "(.+) with (exactly |)(\\d+) (.+)", - "template": { - "like": "${1}", - "where": { - "${4}": "${3}" - } - }, - "confidence": 0.85 - }, - { - "id": "with_without", - "category": "filtering", - "examples": [ - "papers with citations", - "results without errors", - "documents with images" - ], - "pattern": "(.+?)\\s+(with|without)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "${3}": { - "exists": true - } - } - }, - "confidence": 0.85 - }, - { - "id": "starting_with", - "category": "filtering", - "examples": [ - "starting with A", - "beginning with chapter", - "ending with PDF" - ], - "pattern": "(.+?)\\s+(?:starting|beginning|ending)\\s+with\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "pattern": "${2}" - } - }, - "confidence": 0.84 - }, - { - "id": "filter_only", - "category": "filtering", - "examples": [ - "only open source models", - "only free datasets", - "papers only" - ], - "pattern": "(only )? (.+) (only)?", - "template": { - "like": "${2}", - "where": { - "exclusive": true - } - }, - "confidence": 0.75 - }, - { - "id": "documentation_for", - "category": "informational", - "examples": [ - "documentation for React", - "docs on Python", - "API reference" - ], - "pattern": "(?:documentation|docs|reference|manual)\\s+(?:for|on|about)?\\s*(.+)", - "template": { - "like": "${1} documentation", - "where": { - "type": "documentation" - } - }, - "confidence": 0.93 - }, - { - "id": "tutorial_howto", - "category": "informational", - "examples": [ - "tutorial on machine learning", - "guide to Python", - "how to use React" - ], - "pattern": "(?:tutorial|guide|how\\s+to\\s+use)\\s+(?:on|to|for)?\\s*(.+)", - "template": { - "like": "${1} tutorial", - "boost": "educational" - }, - "confidence": 0.92 - }, - { - "id": "getting_started", - "category": "informational", - "examples": [ - "getting started with React", - "introduction to Python", - "beginner guide" - ], - "pattern": "(?:getting\\s+started|introduction|beginner'?s?\\s+guide)\\s+(?:with|to|for)?\\s*(.+)", - "template": { - "like": "${1} beginner", - "boost": "educational" - }, - "confidence": 0.92 - }, - { - "id": "definition_of", - "category": "informational", - "examples": [ - "definition of AI", - "what does ML mean", - "meaning of neural network" - ], - "pattern": "(?:definition\\s+of|what\\s+does\\s+(.+?)\\s+mean|meaning\\s+of)\\s*(.+)", - "template": { - "like": "${1}${2} definition", - "boost": "educational" - }, - "confidence": 0.91 - }, - { - "id": "cheat_sheet", - "category": "informational", - "examples": [ - "cheat sheet for Python", - "quick reference", - "cheatsheet React" - ], - "pattern": "(?:cheat\\s*sheet|quick\\s+reference|reference\\s+card)\\s+(?:for)?\\s*(.+)", - "template": { - "like": "${1} cheatsheet", - "boost": "educational" - }, - "confidence": 0.91 - }, - { - "id": "info_what", - "category": "informational", - "examples": [ - "what is machine learning", - "what are neural networks", - "what does AI mean" - ], - "pattern": "what (is|are|does) (.+)", - "template": { - "like": "${2}" - }, - "confidence": 0.9 - }, - { - "id": "info_definition", - "category": "informational", - "examples": [ - "machine learning definition", - "AI meaning", - "what neural network means" - ], - "pattern": "(.+) (definition|meaning|means)", - "template": { - "like": "${1}", - "where": { - "type": "definition" - } - }, - "confidence": 0.9 - }, - { - "id": "info_explain", - "category": "informational", - "examples": [ - "explain backpropagation", - "explain how transformers work" - ], - "pattern": "explain (.+)", - "template": { - "like": "${1}", - "where": { - "type": "explanation" - } - }, - "confidence": 0.9 - }, - { - "id": "info_tutorial", - "category": "informational", - "examples": [ - "tutorial on deep learning", - "pytorch tutorial", - "guide to NLP" - ], - "pattern": "(tutorial|guide|course) (on|to|for)? (.+)", - "template": { - "like": "${3}", - "where": { - "type": "tutorial" - } - }, - "confidence": 0.9 - }, - { - "id": "step_by_step", - "category": "informational", - "examples": [ - "step by step guide", - "walkthrough", - "detailed instructions" - ], - "pattern": "(?:step\\s+by\\s+step|walkthrough|detailed\\s+instructions)\\s+(?:for|on)?\\s*(.+)", - "template": { - "like": "${1} tutorial detailed", - "boost": "educational" - }, - "confidence": 0.9 - }, - { - "id": "tell_me_about", - "category": "informational", - "examples": [ - "tell me about machine learning", - "explain neural networks" - ], - "pattern": "(?:tell\\s+me\\s+about|explain|describe)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "educational" - }, - "confidence": 0.88 - }, - { - "id": "use_cases", - "category": "informational", - "examples": [ - "use cases for blockchain", - "applications of AI", - "when to use React" - ], - "pattern": "(?:use\\s+cases?|applications?|when\\s+to\\s+use)\\s+(?:for|of)?\\s*(.+)", - "template": { - "like": "${1} applications", - "boost": "practical" - }, - "confidence": 0.88 - }, - { - "id": "advanced_expert", - "category": "informational", - "examples": [ - "advanced Python techniques", - "expert guide", - "pro tips for" - ], - "pattern": "(?:advanced|expert|pro\\s+tips?)\\s+(?:techniques?|guide)?\\s*(?:for|on)?\\s*(.+)", - "template": { - "like": "${1} advanced", - "boost": "expert" - }, - "confidence": 0.87 - }, - { - "id": "example_of", - "category": "informational", - "examples": [ - "example of machine learning", - "sample code", - "demo application" - ], - "pattern": "(?:example|sample|demo)\\s+(?:of|for)?\\s*(.+)", - "template": { - "like": "${1} example", - "boost": "educational" - }, - "confidence": 0.86 - }, - { - "id": "info_how", - "category": "informational", - "examples": [ - "how to train a model", - "how does clustering work", - "how to implement search" - ], - "pattern": "how (to|does|do|can) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "tutorial" - } - }, - "confidence": 0.85 - }, - { - "id": "info_why", - "category": "informational", - "examples": [ - "why use vector databases", - "why does overfitting occur" - ], - "pattern": "why (does|do|is|are|use) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "explanation" - } - }, - "confidence": 0.85 - }, - { - "id": "info_when", - "category": "informational", - "examples": [ - "when did deep learning start", - "when was transformer invented" - ], - "pattern": "when (did|was|were|is|are) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "event" - } - }, - "confidence": 0.85 - }, - { - "id": "info_where", - "category": "informational", - "examples": [ - "where is Stanford located", - "where can I find datasets" - ], - "pattern": "where (is|are|can|do) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "location" - } - }, - "confidence": 0.85 - }, - { - "id": "info_who", - "category": "informational", - "examples": [ - "who invented transformers", - "who is Geoffrey Hinton" - ], - "pattern": "who (is|are|invented|created|made) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "person" - } - }, - "confidence": 0.85 - }, - { - "id": "question_can", - "category": "informational", - "examples": [ - "can transformers handle images", - "can I use this for NLP" - ], - "pattern": "can (.+)", - "template": { - "like": "${1}", - "where": { - "type": "capability" - } - }, - "confidence": 0.8 - }, - { - "id": "question_should", - "category": "informational", - "examples": [ - "should I use tensorflow", - "should we implement caching" - ], - "pattern": "should (I|we|you) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "recommendation" - } - }, - "confidence": 0.8 - }, - { - "id": "nav_entity", - "category": "navigational", - "examples": [ - "OpenAI website", - "Google homepage", - "GitHub tensorflow" - ], - "pattern": "([A-Z][\\w]+) (website|homepage|page|site)", - "template": { - "where": { - "name": "${1}", - "type": "website" - } - }, - "confidence": 0.95 - }, - { - "id": "official_docs", - "category": "navigational", - "examples": [ - "official React documentation", - "official Python site" - ], - "pattern": "official\\s+(.+?)\\s*(?:documentation|docs|site|website)?", - "template": { - "like": "${1} official", - "where": { - "official": true - } - }, - "confidence": 0.93 - }, - { - "id": "action_find", - "category": "navigational", - "examples": [ - "find papers about AI", - "search for models", - "look for datasets" - ], - "pattern": "(find|search for|look for) (.+)", - "template": { - "like": "${2}" - }, - "confidence": 0.9 - }, - { - "id": "synonym_find", - "category": "navigational", - "examples": [ - "find machine learning papers", - "locate AI research", - "get neural network docs" - ], - "pattern": "(?:find|locate|get|fetch|retrieve)\\s+(.+)", - "template": { - "like": "${1}" - }, - "confidence": 0.9 - }, - { - "id": "synonym_show", - "category": "navigational", - "examples": [ - "show me recent papers", - "display all results", - "list available options" - ], - "pattern": "(?:show\\s+me|display|list|view)\\s+(.+)", - "template": { - "like": "${1}" - }, - "confidence": 0.88 - }, - { - "id": "nav_goto", - "category": "navigational", - "examples": [ - "go to documentation", - "navigate to settings" - ], - "pattern": "(go to|navigate to|open|show) (.+)", - "template": { - "where": { - "name": "${2}" - } - }, - "confidence": 0.85 - }, - { - "id": "nav_profile", - "category": "navigational", - "examples": [ - "John Smith profile", - "user profile", - "my account" - ], - "pattern": "(.+) (profile|account|page)", - "template": { - "where": { - "name": "${1}", - "type": "profile" - } - }, - "confidence": 0.85 - }, - { - "id": "action_show", - "category": "navigational", - "examples": [ - "show me papers", - "display results", - "list models" - ], - "pattern": "(show|display|list) (me )? (.+)", - "template": { - "like": "${3}" - }, - "confidence": 0.85 - }, - { - "id": "community_forum", - "category": "navigational", - "examples": [ - "React community", - "Python forum", - "Discord server for" - ], - "pattern": "(?:community|forum|discord|slack|discussion)\\s+(?:for)?\\s*(.+)", - "template": { - "like": "${1} community", - "where": { - "type": "community" - } - }, - "confidence": 0.84 - }, - { - "id": "relational_by_author", - "category": "relational", - "examples": [ - "papers by Hinton", - "research by OpenAI", - "models by Google" - ], - "pattern": "(.+) by ([A-Z][\\w\\s]+)", - "template": { - "like": "${1}", - "connected": { - "from": "${2}" - } - }, - "confidence": 0.95 - }, - { - "id": "relational_authored", - "category": "relational", - "examples": [ - "papers authored by Bengio", - "articles written by researchers" - ], - "pattern": "(.+) (authored|written) by (.+)", - "template": { - "like": "${1}", - "connected": { - "from": "${3}", - "type": "author" - } - }, - "confidence": 0.95 - }, - { - "id": "who_created", - "category": "relational", - "examples": [ - "who created React", - "who wrote this paper", - "who invented the internet" - ], - "pattern": "who\\s+(?:created|wrote|invented|developed|made)\\s+(.+)", - "template": { - "like": "${1}", - "connected": { - "relationship": "creator" - } - }, - "confidence": 0.92 - }, - { - "id": "relational_from_source", - "category": "relational", - "examples": [ - "papers from Stanford", - "datasets from Google", - "models from OpenAI" - ], - "pattern": "(.+) from ([A-Z][\\w\\s]+)", - "template": { - "like": "${1}", - "connected": { - "from": "${2}" - } - }, - "confidence": 0.9 - }, - { - "id": "relational_created_by", - "category": "relational", - "examples": [ - "models created by OpenAI", - "datasets created by Google" - ], - "pattern": "(.+) (created|made|developed|built) by (.+)", - "template": { - "like": "${1}", - "connected": { - "from": "${3}", - "type": "created" - } - }, - "confidence": 0.9 - }, - { - "id": "relational_published", - "category": "relational", - "examples": [ - "papers published by Nature", - "articles published in Science" - ], - "pattern": "(.+) published (by|in) (.+)", - "template": { - "like": "${1}", - "connected": { - "from": "${3}", - "type": "publisher" - } - }, - "confidence": 0.9 - }, - { - "id": "similar_to", - "category": "relational", - "examples": [ - "similar to Python", - "papers like this one", - "alternatives to React" - ], - "pattern": "(?:similar\\s+to|like|alternatives?\\s+to)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "similarity" - }, - "confidence": 0.87 - }, - { - "id": "relational_related", - "category": "relational", - "examples": [ - "papers related to transformers", - "research connected to NLP" - ], - "pattern": "(.+) (related to|connected to|associated with) (.+)", - "template": { - "like": "${1}", - "connected": { - "to": "${3}" - } - }, - "confidence": 0.85 - }, - { - "id": "based_on", - "category": "relational", - "examples": [ - "based on React", - "built with Python", - "powered by" - ], - "pattern": "(?:based\\s+on|built\\s+with|powered\\s+by|using)\\s+(.+)", - "template": { - "like": "${1}", - "connected": { - "technology": "${1}" - } - }, - "confidence": 0.85 - }, - { - "id": "spatial_in", - "category": "spatial", - "examples": [ - "companies in Silicon Valley", - "universities in Boston", - "labs in California" - ], - "pattern": "(.+) in ([A-Z][\\w\\s]+)", - "template": { - "like": "${1}", - "where": { - "location": "${2}" - } - }, - "confidence": 0.9 - }, - { - "id": "spatial_near", - "category": "spatial", - "examples": [ - "conferences near Boston", - "labs near Stanford", - "companies near me" - ], - "pattern": "(.+) near (.+)", - "template": { - "like": "${1}", - "where": { - "location": { - "near": "${2}" - } - } - }, - "confidence": 0.85 - }, - { - "id": "spatial_at", - "category": "spatial", - "examples": [ - "researchers at MIT", - "papers at conference", - "work at Google" - ], - "pattern": "(.+) at ([A-Z][\\w]+)", - "template": { - "like": "${1}", - "where": { - "organization": "${2}" - } - }, - "confidence": 0.85 - }, - { - "id": "where_location", - "category": "spatial", - "examples": [ - "where is Stanford University", - "where can I find documentation" - ], - "pattern": "where\\s+(?:is|are|can\\s+I\\s+find)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "location": { - "exists": true - } - } - }, - "confidence": 0.83 - }, - { - "id": "version_specific", - "category": "technical", - "examples": [ - "React version 18", - "Python 3.11", - "Node.js v20" - ], - "pattern": "(.+?)\\s+version\\s+(\\d+(?:\\.\\d+)*)", - "template": { - "like": "${1}", - "where": { - "version": "${2}" - } - }, - "confidence": 0.9 - }, - { - "id": "api_endpoint", - "category": "technical", - "examples": [ - "API endpoint for users", - "REST API documentation", - "GraphQL schema" - ], - "pattern": "(?:API|REST|GraphQL)\\s+(?:endpoint|documentation|schema)\\s+(?:for)?\\s*(.+)", - "template": { - "like": "${1} API", - "where": { - "type": "api" - } - }, - "confidence": 0.89 - }, - { - "id": "security_vulnerability", - "category": "technical", - "examples": [ - "security issues", - "vulnerability in", - "CVE for" - ], - "pattern": "(?:security|vulnerability|CVE)\\s+(?:issues?|in|for)?\\s*(.+)", - "template": { - "like": "${1} security", - "where": { - "type": "security" - } - }, - "confidence": 0.89 - }, - { - "id": "source_code", - "category": "technical", - "examples": [ - "source code for React", - "GitHub repository", - "code examples" - ], - "pattern": "(?:source\\s+code|github|repository|code\\s+examples?)\\s+(?:for|of)?\\s*(.+)", - "template": { - "like": "${1} code", - "where": { - "type": "code" - } - }, - "confidence": 0.87 - }, - { - "id": "troubleshoot_fix", - "category": "technical", - "examples": [ - "troubleshoot Python error", - "fix React issue", - "solve problem with" - ], - "pattern": "(?:troubleshoot|fix|solve|debug|resolve)\\s+(.+?)\\s*(?:error|issue|problem|bug)?", - "template": { - "like": "${1} solution", - "where": { - "type": "troubleshooting" - } - }, - "confidence": 0.87 - }, - { - "id": "performance_optimization", - "category": "technical", - "examples": [ - "optimize React performance", - "speed up Python", - "improve efficiency" - ], - "pattern": "(?:optimize|speed\\s+up|improve\\s+efficiency)\\s+(?:of)?\\s*(.+?)\\s*(?:performance)?", - "template": { - "like": "${1} optimization", - "boost": "performance" - }, - "confidence": 0.87 - }, - { - "id": "migration_upgrade", - "category": "technical", - "examples": [ - "migrate from React 17 to 18", - "upgrade guide", - "migration path" - ], - "pattern": "(?:migrate|upgrade|migration\\s+path)\\s+(?:from\\s+)?(.+?)\\s+(?:to\\s+(.+))?", - "template": { - "like": "${1} ${2} migration", - "where": { - "type": "migration" - } - }, - "confidence": 0.86 - }, - { - "id": "integration_with", - "category": "technical", - "examples": [ - "integrate React with Redux", - "connect Python to database" - ], - "pattern": "(?:integrate|connect|interface)\\s+(.+?)\\s+(?:with|to)\\s+(.+)", - "template": { - "like": "${1} ${2} integration", - "where": { - "type": "integration" - } - }, - "confidence": 0.86 - }, - { - "id": "requires_needs", - "category": "technical", - "examples": [ - "requires Python 3", - "needs Node.js", - "dependencies for" - ], - "pattern": "(?:requires?|needs?|dependencies\\s+for)\\s+(.+)", - "template": { - "like": "${1} requirements", - "where": { - "requirements": "${1}" - } - }, - "confidence": 0.86 - }, - { - "id": "compatible_with", - "category": "technical", - "examples": [ - "compatible with Python 3", - "works with React", - "supports Windows" - ], - "pattern": "(?:compatible\\s+with|works\\s+with|supports)\\s+(.+)", - "template": { - "like": "${1} compatibility", - "where": { - "compatibility": "${1}" - } - }, - "confidence": 0.85 - }, - { - "id": "temporal_from_year", - "category": "temporal", - "examples": [ - "papers from 2023", - "research from 2022", - "models from last year" - ], - "pattern": "(.+) from (\\d{4})", - "template": { - "like": "${1}", - "where": { - "year": "${2}" - } - }, - "confidence": 0.95 - }, - { - "id": "temporal_after", - "category": "temporal", - "examples": [ - "papers after 2020", - "research after January", - "models after GPT-3" - ], - "pattern": "(.+) after (.+)", - "template": { - "like": "${1}", - "where": { - "date": { - "greaterThan": "${2}" - } - } - }, - "confidence": 0.9 - }, - { - "id": "temporal_before", - "category": "temporal", - "examples": [ - "papers before 2020", - "research before transformer", - "models before BERT" - ], - "pattern": "(.+) before (.+)", - "template": { - "like": "${1}", - "where": { - "date": { - "lessThan": "${2}" - } - } - }, - "confidence": 0.9 - }, - { - "id": "temporal_recent", - "category": "temporal", - "examples": [ - "recent papers", - "latest research", - "new models" - ], - "pattern": "(recent|latest|new|newest) (.+)", - "template": { - "like": "${2}", - "boost": "recent" - }, - "confidence": 0.9 - }, - { - "id": "temporal_this_period", - "category": "temporal", - "examples": [ - "papers this year", - "research this month", - "models this week" - ], - "pattern": "(.+) this (week|month|year|quarter)", - "template": { - "like": "${1}", - "where": { - "date": { - "greaterThan": "start of ${2}" - } - } - }, - "confidence": 0.9 - }, - { - "id": "latest_newest", - "category": "temporal", - "examples": [ - "latest research", - "newest papers", - "most recent updates" - ], - "pattern": "(?:latest|newest|most\\s+recent|current)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "recent" - }, - "confidence": 0.89 - }, - { - "id": "last_period", - "category": "temporal", - "examples": [ - "last week", - "past month", - "previous year" - ], - "pattern": "(?:last|past|previous)\\s+(week|month|year|day)", - "template": { - "where": { - "date": { - "after": "${1}_ago" - } - } - }, - "confidence": 0.87 - }, - { - "id": "between_dates", - "category": "temporal", - "examples": [ - "between 2020 and 2023", - "from January to March" - ], - "pattern": "between\\s+(\\d{4}|\\w+)\\s+(?:and|to)\\s+(\\d{4}|\\w+)", - "template": { - "where": { - "date": { - "between": [ - "${1}", - "${2}" - ] - } - } - }, - "confidence": 0.86 - }, - { - "id": "trending_popular", - "category": "temporal", - "examples": [ - "trending topics", - "popular papers", - "hot discussions" - ], - "pattern": "(?:trending|popular|hot|viral)\\s+(.+)", - "template": { - "like": "${1}", - "boost": "popular" - }, - "confidence": 0.86 - }, - { - "id": "temporal_between", - "category": "temporal", - "examples": [ - "papers between 2020 and 2023", - "research from 2021 to 2022" - ], - "pattern": "(.+) (between|from) (.+) (and|to) (.+)", - "template": { - "like": "${1}", - "where": { - "date": { - "between": [ - "${3}", - "${5}" - ] - } - } - }, - "confidence": 0.85 - }, - { - "id": "temporal_last_n_days", - "category": "temporal", - "examples": [ - "papers last 30 days", - "research last week", - "models last month" - ], - "pattern": "(.+) last (\\d+) (days|weeks|months|years)", - "template": { - "like": "${1}", - "where": { - "date": { - "greaterThan": "${2} ${3} ago" - } - } - }, - "confidence": 0.85 - }, - { - "id": "when_temporal", - "category": "temporal", - "examples": [ - "when was Python created", - "when did AI start" - ], - "pattern": "when\\s+(?:was|did|were)\\s+(.+?)\\s+(?:created|started|invented|published)", - "template": { - "like": "${1}", - "where": { - "date": { - "exists": true - } - } - }, - "confidence": 0.85 - }, - { - "id": "deprecated_obsolete", - "category": "temporal", - "examples": [ - "deprecated features", - "obsolete methods", - "legacy code" - ], - "pattern": "(?:deprecated|obsolete|legacy|outdated)\\s+(.+)", - "template": { - "like": "${1}", - "where": { - "status": "deprecated" - } - }, - "confidence": 0.85 - }, - { - "id": "roadmap_timeline", - "category": "temporal", - "examples": [ - "roadmap for React", - "timeline of AI development", - "history of Python" - ], - "pattern": "(?:roadmap|timeline|history)\\s+(?:for|of)\\s+(.+)", - "template": { - "like": "${1} roadmap", - "boost": "timeline" - }, - "confidence": 0.85 - }, - { - "id": "under_development", - "category": "temporal", - "examples": [ - "under development", - "coming soon", - "in progress" - ], - "pattern": "(?:under\\s+development|coming\\s+soon|in\\s+progress|upcoming)\\s*(.+)?", - "template": { - "like": "${1}", - "where": { - "status": "development" - } - }, - "confidence": 0.84 - }, - { - "id": "trans_buy", - "category": "transactional", - "examples": [ - "buy GPU", - "purchase subscription", - "order dataset" - ], - "pattern": "(buy|purchase|order|get) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "product", - "available": true - } - }, - "confidence": 0.9 - }, - { - "id": "trans_download", - "category": "transactional", - "examples": [ - "download model", - "download dataset", - "get paper PDF" - ], - "pattern": "(download|get|fetch) (.+)", - "template": { - "like": "${2}", - "where": { - "type": "downloadable" - } - }, - "confidence": 0.9 - }, - { - "id": "trans_subscribe", - "category": "transactional", - "examples": [ - "subscribe to newsletter", - "follow updates" - ], - "pattern": "(subscribe|follow|watch) (to )? (.+)", - "template": { - "like": "${3}", - "where": { - "type": "subscription" - } - }, - "confidence": 0.85 - }, - { - "id": "action_get", - "category": "transactional", - "examples": [ - "get all papers", - "fetch datasets", - "retrieve models" - ], - "pattern": "(get|fetch|retrieve) (all )? (.+)", - "template": { - "like": "${3}" - }, - "confidence": 0.85 - }, - { - "id": "action_download", - "category": "transactional", - "examples": [ - "download Python", - "download the dataset", - "get the PDF" - ], - "pattern": "(?:download|get|fetch)\\s+(?:the\\s+)?(.+?)\\s*(?:pdf|file|document|dataset)?", - "template": { - "like": "${1}", - "where": { - "downloadable": true - } - }, - "confidence": 0.85 - }, - { - "id": "action_create", - "category": "transactional", - "examples": [ - "create new project", - "make a new document", - "generate report" - ], - "pattern": "(?:create|make|generate|build)\\s+(?:new\\s+)?(.+)", - "template": { - "like": "${1} template", - "boost": "tutorial" - }, - "confidence": 0.82 - } - ] -} \ No newline at end of file diff --git a/src/patterns/domain-patterns.json b/src/patterns/domain-patterns.json deleted file mode 100644 index be36b92d..00000000 --- a/src/patterns/domain-patterns.json +++ /dev/null @@ -1,539 +0,0 @@ -{ - "version": "2.0.0", - "description": "Domain-specific patterns for 95%+ coverage", - "patterns": [ - { - "id": "medical_symptoms", - "category": "domain_specific", - "domain": "medical", - "examples": ["symptoms of COVID", "symptoms of diabetes", "signs of heart attack"], - "pattern": "(?:symptoms?|signs?)\\s+(?:of|for)\\s+(.+)", - "template": { - "like": "${1} symptoms", - "where": { "domain": "medical", "type": "symptoms" } - }, - "confidence": 0.95, - "frequency": "high" - }, - { - "id": "medical_side_effects", - "category": "domain_specific", - "domain": "medical", - "examples": ["aspirin side effects", "vaccine side effects", "metformin side effects"], - "pattern": "(.+?)\\s+side\\s+effects?", - "template": { - "like": "${1} side effects", - "where": { "domain": "medical", "type": "medication" } - }, - "confidence": 0.94, - "frequency": "high" - }, - { - "id": "medical_treatment", - "category": "domain_specific", - "domain": "medical", - "examples": ["treatment for depression", "cure for cancer", "therapy for anxiety"], - "pattern": "(?:treatment|cure|therapy|remedy)\\s+(?:for|of)\\s+(.+)", - "template": { - "like": "${1} treatment", - "where": { "domain": "medical", "type": "treatment" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "medical_pain", - "category": "domain_specific", - "domain": "medical", - "examples": ["chest pain causes", "back pain relief", "headache remedies"], - "pattern": "(.+?)\\s+pain\\s+(?:causes?|relief|remedies?)", - "template": { - "like": "${1} pain", - "where": { "domain": "medical", "type": "pain" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "medical_test_results", - "category": "domain_specific", - "domain": "medical", - "examples": ["blood test results", "MRI results meaning", "normal cholesterol levels"], - "pattern": "(?:(.+?)\\s+)?(?:test\\s+)?results?\\s+(?:meaning|interpretation|normal\\s+range)", - "template": { - "like": "${1} test results", - "where": { "domain": "medical", "type": "diagnostic" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "legal_definition", - "category": "domain_specific", - "domain": "legal", - "examples": ["tort law definition", "what is habeas corpus", "felony vs misdemeanor"], - "pattern": "(?:what\\s+is\\s+)?(.+?)\\s+(?:definition|meaning|vs\\.?\\s+(.+))", - "template": { - "like": "${1} ${2} legal definition", - "where": { "domain": "legal", "type": "definition" } - }, - "confidence": 0.90, - "frequency": "high" - }, - { - "id": "legal_how_to_file", - "category": "domain_specific", - "domain": "legal", - "examples": ["how to file bankruptcy", "file for divorce", "file a complaint"], - "pattern": "(?:how\\s+to\\s+)?file\\s+(?:for\\s+)?(.+)", - "template": { - "like": "file ${1} procedure", - "where": { "domain": "legal", "type": "filing" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "legal_jurisdiction", - "category": "domain_specific", - "domain": "legal", - "examples": ["marijuana laws in California", "gun laws by state", "divorce laws in Texas"], - "pattern": "(.+?)\\s+laws?\\s+(?:in|by)\\s+(.+)", - "template": { - "like": "${1} laws ${2}", - "where": { "domain": "legal", "jurisdiction": "${2}" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "legal_statute_limitations", - "category": "domain_specific", - "domain": "legal", - "examples": ["statute of limitations personal injury", "SOL for debt collection"], - "pattern": "statute\\s+of\\s+limitations?\\s+(?:for\\s+)?(.+)", - "template": { - "like": "${1} statute of limitations", - "where": { "domain": "legal", "type": "statute" } - }, - "confidence": 0.93, - "frequency": "medium" - }, - { - "id": "financial_stock_price", - "category": "domain_specific", - "domain": "financial", - "examples": ["AAPL stock price", "Tesla share price", "GOOGL quote"], - "pattern": "([A-Z]{1,5})\\s+(?:stock\\s+)?(?:price|quote|shares?)", - "template": { - "like": "${1} stock price", - "where": { "domain": "financial", "type": "stock", "ticker": "${1}" } - }, - "confidence": 0.95, - "frequency": "high" - }, - { - "id": "financial_interest_rates", - "category": "domain_specific", - "domain": "financial", - "examples": ["mortgage interest rates", "CD rates today", "Fed interest rate"], - "pattern": "(.+?)\\s+(?:interest\\s+)?rates?\\s*(?:today|current)?", - "template": { - "like": "${1} interest rates", - "where": { "domain": "financial", "type": "rates" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "financial_calculator", - "category": "domain_specific", - "domain": "financial", - "examples": ["mortgage calculator", "loan payment calculator", "retirement calculator"], - "pattern": "(.+?)\\s+calculator", - "template": { - "like": "${1} calculator", - "where": { "domain": "financial", "type": "calculator" } - }, - "confidence": 0.94, - "frequency": "high" - }, - { - "id": "financial_tax", - "category": "domain_specific", - "domain": "financial", - "examples": ["tax deductions for homeowners", "capital gains tax rate", "tax brackets 2024"], - "pattern": "tax\\s+(.+?)\\s+(?:for\\s+(.+)|rate|brackets?)", - "template": { - "like": "tax ${1} ${2}", - "where": { "domain": "financial", "type": "tax" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "financial_credit_score", - "category": "domain_specific", - "domain": "financial", - "examples": ["credit score for mortgage", "improve credit score", "free credit report"], - "pattern": "(?:credit\\s+score|credit\\s+report)\\s+(?:for\\s+)?(.+)?", - "template": { - "like": "credit score ${1}", - "where": { "domain": "financial", "type": "credit" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "academic_citation", - "category": "domain_specific", - "domain": "academic", - "examples": ["cite website APA", "MLA citation format", "Chicago style bibliography"], - "pattern": "(?:cite|citation)\\s+(.+?)\\s+(?:in\\s+)?(APA|MLA|Chicago|Harvard)", - "template": { - "like": "${1} citation ${2}", - "where": { "domain": "academic", "type": "citation", "style": "${2}" } - }, - "confidence": 0.94, - "frequency": "high" - }, - { - "id": "academic_publications", - "category": "domain_specific", - "domain": "academic", - "examples": ["Einstein publications", "papers by Hinton", "Smith et al 2023"], - "pattern": "(?:(.+?)\\s+publications?|papers?\\s+by\\s+(.+))", - "template": { - "like": "${1}${2} publications", - "where": { "domain": "academic", "type": "publication" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "academic_peer_reviewed", - "category": "domain_specific", - "domain": "academic", - "examples": ["peer reviewed articles on climate change", "scholarly articles about AI"], - "pattern": "(?:peer\\s+reviewed|scholarly)\\s+(?:articles?|papers?)\\s+(?:on|about)\\s+(.+)", - "template": { - "like": "${1} peer reviewed", - "where": { "domain": "academic", "type": "peer_reviewed" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "academic_journal_impact", - "category": "domain_specific", - "domain": "academic", - "examples": ["Nature impact factor", "Science journal ranking", "PNAS impact factor"], - "pattern": "(.+?)\\s+(?:impact\\s+factor|journal\\s+ranking)", - "template": { - "like": "${1} impact factor", - "where": { "domain": "academic", "type": "journal" } - }, - "confidence": 0.92, - "frequency": "medium" - }, - { - "id": "ecommerce_reviews", - "category": "domain_specific", - "domain": "ecommerce", - "examples": ["iPhone 15 reviews", "best laptop reviews", "Samsung TV ratings"], - "pattern": "(.+?)\\s+(?:reviews?|ratings?)", - "template": { - "like": "${1} reviews", - "where": { "domain": "ecommerce", "type": "review" } - }, - "confidence": 0.95, - "frequency": "high" - }, - { - "id": "ecommerce_price_comparison", - "category": "domain_specific", - "domain": "ecommerce", - "examples": ["cheapest PS5", "best price MacBook", "lowest price Nike shoes"], - "pattern": "(?:cheapest|best\\s+price|lowest\\s+price)\\s+(.+)", - "template": { - "like": "${1} price", - "where": { "domain": "ecommerce", "sort": "price_asc" } - }, - "confidence": 0.94, - "frequency": "high" - }, - { - "id": "ecommerce_deals", - "category": "domain_specific", - "domain": "ecommerce", - "examples": ["Amazon deals today", "Black Friday sales", "coupon codes Target"], - "pattern": "(.+?)\\s+(?:deals?|sales?|coupon\\s+codes?)\\s*(?:today)?", - "template": { - "like": "${1} deals", - "where": { "domain": "ecommerce", "type": "deals" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "ecommerce_in_stock", - "category": "domain_specific", - "domain": "ecommerce", - "examples": ["PS5 in stock", "RTX 4090 availability", "iPhone 15 where to buy"], - "pattern": "(.+?)\\s+(?:in\\s+stock|availability|where\\s+to\\s+buy)", - "template": { - "like": "${1} availability", - "where": { "domain": "ecommerce", "in_stock": true } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "ecommerce_size_chart", - "category": "domain_specific", - "domain": "ecommerce", - "examples": ["Nike size chart", "ring size guide", "clothing size conversion"], - "pattern": "(.+?)\\s+size\\s+(?:chart|guide|conversion)", - "template": { - "like": "${1} size chart", - "where": { "domain": "ecommerce", "type": "sizing" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "technical_error_fix", - "category": "domain_specific", - "domain": "technical", - "examples": ["error 404 fix", "blue screen of death", "kernel panic solution"], - "pattern": "(?:error\\s+)?(.+?)\\s+(?:fix|solution|resolve)", - "template": { - "like": "${1} fix", - "where": { "domain": "technical", "type": "troubleshooting" } - }, - "confidence": 0.94, - "frequency": "high" - }, - { - "id": "technical_not_working", - "category": "domain_specific", - "domain": "technical", - "examples": ["WiFi not working", "printer not responding", "app won't open"], - "pattern": "(.+?)\\s+(?:not\\s+working|won't\\s+(?:open|start|load)|not\\s+responding)", - "template": { - "like": "${1} troubleshooting", - "where": { "domain": "technical", "type": "issue" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "technical_how_to_reset", - "category": "domain_specific", - "domain": "technical", - "examples": ["reset iPhone", "factory reset laptop", "reset password Windows"], - "pattern": "(?:how\\s+to\\s+)?(?:reset|factory\\s+reset)\\s+(.+)", - "template": { - "like": "reset ${1}", - "where": { "domain": "technical", "type": "reset" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "technical_update", - "category": "domain_specific", - "domain": "technical", - "examples": ["update Windows 11", "iOS 17 update", "Chrome latest version"], - "pattern": "(?:update|upgrade)\\s+(.+?)\\s*(?:to\\s+(.+))?", - "template": { - "like": "${1} update ${2}", - "where": { "domain": "technical", "type": "update" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "technical_driver_download", - "category": "domain_specific", - "domain": "technical", - "examples": ["NVIDIA driver download", "printer driver HP", "Realtek audio driver"], - "pattern": "(.+?)\\s+driver\\s*(?:download)?", - "template": { - "like": "${1} driver", - "where": { "domain": "technical", "type": "driver" } - }, - "confidence": 0.93, - "frequency": "medium" - }, - { - "id": "technical_speed_up", - "category": "domain_specific", - "domain": "technical", - "examples": ["speed up computer", "make phone faster", "optimize Windows"], - "pattern": "(?:speed\\s+up|make\\s+(.+?)\\s+faster|optimize)\\s+(.+)", - "template": { - "like": "${1}${2} optimization", - "where": { "domain": "technical", "type": "performance" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "medical_doctor_specialist", - "category": "domain_specific", - "domain": "medical", - "examples": ["cardiologist near me", "best dermatologist", "pediatrician reviews"], - "pattern": "(.+?(?:ologist|ician|doctor))\\s+(?:near\\s+me|reviews?|best)", - "template": { - "like": "${1}", - "where": { "domain": "medical", "type": "specialist" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "medical_vaccine", - "category": "domain_specific", - "domain": "medical", - "examples": ["COVID vaccine side effects", "flu shot effectiveness", "vaccine schedule babies"], - "pattern": "(.+?)\\s+vaccine\\s+(.+)", - "template": { - "like": "${1} vaccine ${2}", - "where": { "domain": "medical", "type": "vaccine" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "legal_lawyer_type", - "category": "domain_specific", - "domain": "legal", - "examples": ["divorce lawyer near me", "personal injury attorney", "criminal defense lawyer"], - "pattern": "(.+?)\\s+(?:lawyer|attorney)\\s*(?:near\\s+me)?", - "template": { - "like": "${1} lawyer", - "where": { "domain": "legal", "type": "attorney" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "legal_contract_template", - "category": "domain_specific", - "domain": "legal", - "examples": ["rental agreement template", "NDA template", "employment contract sample"], - "pattern": "(.+?)\\s+(?:template|sample|form)", - "template": { - "like": "${1} template", - "where": { "domain": "legal", "type": "template" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "financial_crypto", - "category": "domain_specific", - "domain": "financial", - "examples": ["Bitcoin price", "Ethereum forecast", "buy cryptocurrency"], - "pattern": "(.+?)\\s+(?:price|forecast|buy|sell)", - "template": { - "like": "${1} cryptocurrency", - "where": { "domain": "financial", "type": "crypto" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "financial_investment_strategy", - "category": "domain_specific", - "domain": "financial", - "examples": ["401k investment strategy", "best ETFs 2024", "dividend investing"], - "pattern": "(.+?)\\s+(?:investment\\s+strategy|investing)", - "template": { - "like": "${1} investment strategy", - "where": { "domain": "financial", "type": "investment" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "academic_research_methodology", - "category": "domain_specific", - "domain": "academic", - "examples": ["qualitative research methods", "sample size calculation", "statistical analysis"], - "pattern": "(.+?)\\s+(?:research\\s+methods?|methodology)", - "template": { - "like": "${1} methodology", - "where": { "domain": "academic", "type": "methodology" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "academic_grant_funding", - "category": "domain_specific", - "domain": "academic", - "examples": ["NSF grant opportunities", "research funding biology", "PhD funding"], - "pattern": "(.+?)\\s+(?:grant|funding)\\s*(?:opportunities)?", - "template": { - "like": "${1} funding", - "where": { "domain": "academic", "type": "funding" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "ecommerce_return_policy", - "category": "domain_specific", - "domain": "ecommerce", - "examples": ["Amazon return policy", "Walmart refund", "exchange policy Best Buy"], - "pattern": "(.+?)\\s+(?:return\\s+policy|refund|exchange)", - "template": { - "like": "${1} return policy", - "where": { "domain": "ecommerce", "type": "policy" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "ecommerce_warranty", - "category": "domain_specific", - "domain": "ecommerce", - "examples": ["Apple warranty check", "extended warranty worth it", "warranty claim Samsung"], - "pattern": "(.+?)\\s+warranty\\s*(.+)?", - "template": { - "like": "${1} warranty ${2}", - "where": { "domain": "ecommerce", "type": "warranty" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "technical_backup_restore", - "category": "domain_specific", - "domain": "technical", - "examples": ["backup iPhone", "restore from backup", "cloud backup options"], - "pattern": "(?:backup|restore)\\s+(?:from\\s+)?(.+)", - "template": { - "like": "${1} backup", - "where": { "domain": "technical", "type": "backup" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "technical_compatibility", - "category": "domain_specific", - "domain": "technical", - "examples": ["compatible with Windows 11", "works with Mac", "supports Android"], - "pattern": "(?:compatible\\s+with|works\\s+with|supports?)\\s+(.+)", - "template": { - "like": "${1} compatibility", - "where": { "domain": "technical", "type": "compatibility" } - }, - "confidence": 0.91, - "frequency": "medium" - } - ] -} \ No newline at end of file diff --git a/src/patterns/library.json b/src/patterns/library.json deleted file mode 100644 index e3fe7b93..00000000 --- a/src/patterns/library.json +++ /dev/null @@ -1,715 +0,0 @@ -{ - "version": "2.0.0", - "patterns": [ - { - "id": "info_what", - "category": "informational", - "examples": ["what is machine learning", "what are neural networks", "what does AI mean"], - "pattern": "what (is|are|does) (.+)", - "template": { - "like": "${2}" - }, - "confidence": 0.9 - }, - { - "id": "info_how", - "category": "informational", - "examples": ["how to train a model", "how does clustering work", "how to implement search"], - "pattern": "how (to|does|do|can) (.+)", - "template": { - "like": "${2}", - "where": { "type": "tutorial" } - }, - "confidence": 0.85 - }, - { - "id": "info_why", - "category": "informational", - "examples": ["why use vector databases", "why does overfitting occur"], - "pattern": "why (does|do|is|are|use) (.+)", - "template": { - "like": "${2}", - "where": { "type": "explanation" } - }, - "confidence": 0.85 - }, - { - "id": "info_when", - "category": "informational", - "examples": ["when did deep learning start", "when was transformer invented"], - "pattern": "when (did|was|were|is|are) (.+)", - "template": { - "like": "${2}", - "where": { "type": "event" } - }, - "confidence": 0.85 - }, - { - "id": "info_where", - "category": "informational", - "examples": ["where is Stanford located", "where can I find datasets"], - "pattern": "where (is|are|can|do) (.+)", - "template": { - "like": "${2}", - "where": { "type": "location" } - }, - "confidence": 0.85 - }, - { - "id": "info_who", - "category": "informational", - "examples": ["who invented transformers", "who is Geoffrey Hinton"], - "pattern": "who (is|are|invented|created|made) (.+)", - "template": { - "like": "${2}", - "where": { "type": "person" } - }, - "confidence": 0.85 - }, - { - "id": "info_definition", - "category": "informational", - "examples": ["machine learning definition", "AI meaning", "what neural network means"], - "pattern": "(.+) (definition|meaning|means)", - "template": { - "like": "${1}", - "where": { "type": "definition" } - }, - "confidence": 0.9 - }, - { - "id": "info_explain", - "category": "informational", - "examples": ["explain backpropagation", "explain how transformers work"], - "pattern": "explain (.+)", - "template": { - "like": "${1}", - "where": { "type": "explanation" } - }, - "confidence": 0.9 - }, - { - "id": "info_tutorial", - "category": "informational", - "examples": ["tutorial on deep learning", "pytorch tutorial", "guide to NLP"], - "pattern": "(tutorial|guide|course) (on|to|for)? (.+)", - "template": { - "like": "${3}", - "where": { "type": "tutorial" } - }, - "confidence": 0.9 - }, - { - "id": "nav_entity", - "category": "navigational", - "examples": ["OpenAI website", "Google homepage", "GitHub tensorflow"], - "pattern": "([A-Z][\\w]+) (website|homepage|page|site)", - "template": { - "where": { "name": "${1}", "type": "website" } - }, - "confidence": 0.95 - }, - { - "id": "nav_goto", - "category": "navigational", - "examples": ["go to documentation", "navigate to settings"], - "pattern": "(go to|navigate to|open|show) (.+)", - "template": { - "where": { "name": "${2}" } - }, - "confidence": 0.85 - }, - { - "id": "nav_profile", - "category": "navigational", - "examples": ["John Smith profile", "user profile", "my account"], - "pattern": "(.+) (profile|account|page)", - "template": { - "where": { "name": "${1}", "type": "profile" } - }, - "confidence": 0.85 - }, - { - "id": "trans_buy", - "category": "transactional", - "examples": ["buy GPU", "purchase subscription", "order dataset"], - "pattern": "(buy|purchase|order|get) (.+)", - "template": { - "like": "${2}", - "where": { "type": "product", "available": true } - }, - "confidence": 0.9 - }, - { - "id": "trans_download", - "category": "transactional", - "examples": ["download model", "download dataset", "get paper PDF"], - "pattern": "(download|get|fetch) (.+)", - "template": { - "like": "${2}", - "where": { "type": "downloadable" } - }, - "confidence": 0.9 - }, - { - "id": "trans_subscribe", - "category": "transactional", - "examples": ["subscribe to newsletter", "follow updates"], - "pattern": "(subscribe|follow|watch) (to )? (.+)", - "template": { - "like": "${3}", - "where": { "type": "subscription" } - }, - "confidence": 0.85 - }, - { - "id": "commercial_reviews", - "category": "commercial", - "examples": ["tensorflow reviews", "best practices reviews", "model evaluation"], - "pattern": "(.+) (reviews|ratings|feedback|opinions)", - "template": { - "like": "${1}", - "where": { "type": "review" } - }, - "confidence": 0.9 - }, - { - "id": "commercial_best", - "category": "commercial", - "examples": ["best machine learning framework", "top AI models", "best practices"], - "pattern": "(best|top|greatest|finest) (.+)", - "template": { - "like": "${2}", - "boost": "popular" - }, - "confidence": 0.9 - }, - { - "id": "commercial_compare", - "category": "commercial", - "examples": ["tensorflow vs pytorch", "compare BERT and GPT", "GPT-3 compared to GPT-4"], - "pattern": "(.+) (vs|versus|compared to|vs\\.) (.+)", - "template": { - "like": ["${1}", "${3}"], - "where": { "type": "comparison" } - }, - "confidence": 0.95 - }, - { - "id": "commercial_alternatives", - "category": "commercial", - "examples": ["tensorflow alternatives", "options besides OpenAI", "similar to BERT"], - "pattern": "(.+) (alternatives|options|similar to|like)", - "template": { - "like": "${1}", - "where": { "type": "alternative" } - }, - "confidence": 0.85 - }, - { - "id": "commercial_top_n", - "category": "commercial", - "examples": ["top 10 models", "top 5 papers", "best 3 frameworks"], - "pattern": "(top|best) (\\d+) (.+)", - "template": { - "like": "${3}", - "limit": "${2}", - "boost": "popular" - }, - "confidence": 0.9 - }, - { - "id": "commercial_cheapest", - "category": "commercial", - "examples": ["cheapest GPU", "most affordable cloud", "budget options"], - "pattern": "(cheapest|most affordable|budget|lowest price) (.+)", - "template": { - "like": "${2}", - "orderBy": { "price": "asc" } - }, - "confidence": 0.85 - }, - { - "id": "commercial_pricing", - "category": "commercial", - "examples": ["GPU pricing", "cloud costs", "model training costs"], - "pattern": "(.+) (pricing|price|cost|costs|rates)", - "template": { - "like": "${1}", - "where": { "hasField": "price" } - }, - "confidence": 0.85 - }, - { - "id": "temporal_from_year", - "category": "temporal", - "examples": ["papers from 2023", "research from 2022", "models from last year"], - "pattern": "(.+) from (\\d{4})", - "template": { - "like": "${1}", - "where": { "year": "${2}" } - }, - "confidence": 0.95 - }, - { - "id": "temporal_after", - "category": "temporal", - "examples": ["papers after 2020", "research after January", "models after GPT-3"], - "pattern": "(.+) after (.+)", - "template": { - "like": "${1}", - "where": { "date": { "greaterThan": "${2}" } } - }, - "confidence": 0.9 - }, - { - "id": "temporal_before", - "category": "temporal", - "examples": ["papers before 2020", "research before transformer", "models before BERT"], - "pattern": "(.+) before (.+)", - "template": { - "like": "${1}", - "where": { "date": { "lessThan": "${2}" } } - }, - "confidence": 0.9 - }, - { - "id": "temporal_between", - "category": "temporal", - "examples": ["papers between 2020 and 2023", "research from 2021 to 2022"], - "pattern": "(.+) (between|from) (.+) (and|to) (.+)", - "template": { - "like": "${1}", - "where": { "date": { "between": ["${3}", "${5}"] } } - }, - "confidence": 0.85 - }, - { - "id": "temporal_recent", - "category": "temporal", - "examples": ["recent papers", "latest research", "new models"], - "pattern": "(recent|latest|new|newest) (.+)", - "template": { - "like": "${2}", - "boost": "recent" - }, - "confidence": 0.9 - }, - { - "id": "temporal_last_n_days", - "category": "temporal", - "examples": ["papers last 30 days", "research last week", "models last month"], - "pattern": "(.+) last (\\d+) (days|weeks|months|years)", - "template": { - "like": "${1}", - "where": { "date": { "greaterThan": "${2} ${3} ago" } } - }, - "confidence": 0.85 - }, - { - "id": "temporal_this_period", - "category": "temporal", - "examples": ["papers this year", "research this month", "models this week"], - "pattern": "(.+) this (week|month|year|quarter)", - "template": { - "like": "${1}", - "where": { "date": { "greaterThan": "start of ${2}" } } - }, - "confidence": 0.9 - }, - { - "id": "spatial_near", - "category": "spatial", - "examples": ["conferences near Boston", "labs near Stanford", "companies near me"], - "pattern": "(.+) near (.+)", - "template": { - "like": "${1}", - "where": { "location": { "near": "${2}" } } - }, - "confidence": 0.85 - }, - { - "id": "spatial_in", - "category": "spatial", - "examples": ["companies in Silicon Valley", "universities in Boston", "labs in California"], - "pattern": "(.+) in ([A-Z][\\w\\s]+)", - "template": { - "like": "${1}", - "where": { "location": "${2}" } - }, - "confidence": 0.9 - }, - { - "id": "spatial_at", - "category": "spatial", - "examples": ["researchers at MIT", "papers at conference", "work at Google"], - "pattern": "(.+) at ([A-Z][\\w]+)", - "template": { - "like": "${1}", - "where": { "organization": "${2}" } - }, - "confidence": 0.85 - }, - { - "id": "relational_by_author", - "category": "relational", - "examples": ["papers by Hinton", "research by OpenAI", "models by Google"], - "pattern": "(.+) by ([A-Z][\\w\\s]+)", - "template": { - "like": "${1}", - "connected": { "from": "${2}" } - }, - "confidence": 0.95 - }, - { - "id": "relational_from_source", - "category": "relational", - "examples": ["papers from Stanford", "datasets from Google", "models from OpenAI"], - "pattern": "(.+) from ([A-Z][\\w\\s]+)", - "template": { - "like": "${1}", - "connected": { "from": "${2}" } - }, - "confidence": 0.9 - }, - { - "id": "relational_related", - "category": "relational", - "examples": ["papers related to transformers", "research connected to NLP"], - "pattern": "(.+) (related to|connected to|associated with) (.+)", - "template": { - "like": "${1}", - "connected": { "to": "${3}" } - }, - "confidence": 0.85 - }, - { - "id": "relational_created_by", - "category": "relational", - "examples": ["models created by OpenAI", "datasets created by Google"], - "pattern": "(.+) (created|made|developed|built) by (.+)", - "template": { - "like": "${1}", - "connected": { "from": "${3}", "type": "created" } - }, - "confidence": 0.9 - }, - { - "id": "relational_authored", - "category": "relational", - "examples": ["papers authored by Bengio", "articles written by researchers"], - "pattern": "(.+) (authored|written) by (.+)", - "template": { - "like": "${1}", - "connected": { "from": "${3}", "type": "author" } - }, - "confidence": 0.95 - }, - { - "id": "relational_published", - "category": "relational", - "examples": ["papers published by Nature", "articles published in Science"], - "pattern": "(.+) published (by|in) (.+)", - "template": { - "like": "${1}", - "connected": { "from": "${3}", "type": "publisher" } - }, - "confidence": 0.9 - }, - { - "id": "filter_with", - "category": "filtering", - "examples": ["papers with code", "models with pretrained weights", "datasets with labels"], - "pattern": "(.+) with (.+)", - "template": { - "like": "${1}", - "where": { "${2}": { "exists": true } } - }, - "confidence": 0.85 - }, - { - "id": "filter_without", - "category": "filtering", - "examples": ["papers without code", "models without training", "datasets without labels"], - "pattern": "(.+) without (.+)", - "template": { - "like": "${1}", - "where": { "${2}": { "exists": false } } - }, - "confidence": 0.85 - }, - { - "id": "filter_only", - "category": "filtering", - "examples": ["only open source models", "only free datasets", "papers only"], - "pattern": "(only )? (.+) (only)?", - "template": { - "like": "${2}", - "where": { "exclusive": true } - }, - "confidence": 0.75 - }, - { - "id": "filter_except", - "category": "filtering", - "examples": ["all models except GPT", "papers except reviews", "everything but tutorials"], - "pattern": "(.+) (except|but not|excluding) (.+)", - "template": { - "like": "${1}", - "where": { "notLike": "${3}" } - }, - "confidence": 0.85 - }, - { - "id": "filter_including", - "category": "filtering", - "examples": ["papers including code", "models including documentation"], - "pattern": "(.+) (including|with|containing) (.+)", - "template": { - "like": "${1}", - "where": { "includes": "${3}" } - }, - "confidence": 0.85 - }, - { - "id": "filter_more_than", - "category": "filtering", - "examples": ["papers with more than 100 citations", "models with over 1B parameters"], - "pattern": "(.+) with (more than|over|greater than) (\\d+) (.+)", - "template": { - "like": "${1}", - "where": { "${4}": { "greaterThan": "${3}" } } - }, - "confidence": 0.9 - }, - { - "id": "filter_less_than", - "category": "filtering", - "examples": ["models with less than 1M parameters", "papers with under 10 citations"], - "pattern": "(.+) with (less than|under|fewer than) (\\d+) (.+)", - "template": { - "like": "${1}", - "where": { "${4}": { "lessThan": "${3}" } } - }, - "confidence": 0.9 - }, - { - "id": "filter_exactly", - "category": "filtering", - "examples": ["papers with exactly 5 authors", "models with 12 layers"], - "pattern": "(.+) with (exactly |)(\\d+) (.+)", - "template": { - "like": "${1}", - "where": { "${4}": "${3}" } - }, - "confidence": 0.85 - }, - { - "id": "aggregation_count", - "category": "aggregation", - "examples": ["count papers", "number of models", "how many datasets"], - "pattern": "(count|number of|how many) (.+)", - "template": { - "like": "${2}", - "aggregate": "count" - }, - "confidence": 0.9 - }, - { - "id": "aggregation_average", - "category": "aggregation", - "examples": ["average citations", "mean accuracy", "average performance"], - "pattern": "(average|mean) (.+)", - "template": { - "like": "${2}", - "aggregate": "avg" - }, - "confidence": 0.85 - }, - { - "id": "aggregation_sum", - "category": "aggregation", - "examples": ["total citations", "sum of parameters", "total cost"], - "pattern": "(total|sum of|sum) (.+)", - "template": { - "like": "${2}", - "aggregate": "sum" - }, - "confidence": 0.85 - }, - { - "id": "aggregation_max", - "category": "aggregation", - "examples": ["highest accuracy", "maximum performance", "largest model"], - "pattern": "(highest|maximum|largest|biggest) (.+)", - "template": { - "like": "${2}", - "aggregate": "max" - }, - "confidence": 0.85 - }, - { - "id": "aggregation_min", - "category": "aggregation", - "examples": ["lowest error", "minimum cost", "smallest model"], - "pattern": "(lowest|minimum|smallest|least) (.+)", - "template": { - "like": "${2}", - "aggregate": "min" - }, - "confidence": 0.85 - }, - { - "id": "question_can", - "category": "informational", - "examples": ["can transformers handle images", "can I use this for NLP"], - "pattern": "can (.+)", - "template": { - "like": "${1}", - "where": { "type": "capability" } - }, - "confidence": 0.8 - }, - { - "id": "question_should", - "category": "informational", - "examples": ["should I use tensorflow", "should we implement caching"], - "pattern": "should (I|we|you) (.+)", - "template": { - "like": "${2}", - "where": { "type": "recommendation" } - }, - "confidence": 0.8 - }, - { - "id": "question_which", - "category": "commercial", - "examples": ["which model is best", "which framework to use"], - "pattern": "which (.+)", - "template": { - "like": "${1}", - "where": { "type": "selection" } - }, - "confidence": 0.8 - }, - { - "id": "comparative_better", - "category": "commercial", - "examples": ["is BERT better than GPT", "pytorch better than tensorflow"], - "pattern": "(is )? (.+) better than (.+)", - "template": { - "like": ["${2}", "${3}"], - "where": { "type": "comparison" } - }, - "confidence": 0.85 - }, - { - "id": "comparative_faster", - "category": "commercial", - "examples": ["fastest model", "quickest training", "faster than BERT"], - "pattern": "(fastest|quickest|faster) (.+)", - "template": { - "like": "${2}", - "orderBy": { "speed": "desc" } - }, - "confidence": 0.85 - }, - { - "id": "comparative_more_accurate", - "category": "commercial", - "examples": ["most accurate model", "higher accuracy than"], - "pattern": "(most accurate|highest accuracy|more accurate) (.+)", - "template": { - "like": "${2}", - "orderBy": { "accuracy": "desc" } - }, - "confidence": 0.85 - }, - { - "id": "action_show", - "category": "navigational", - "examples": ["show me papers", "display results", "list models"], - "pattern": "(show|display|list) (me )? (.+)", - "template": { - "like": "${3}" - }, - "confidence": 0.85 - }, - { - "id": "action_find", - "category": "navigational", - "examples": ["find papers about AI", "search for models", "look for datasets"], - "pattern": "(find|search for|look for) (.+)", - "template": { - "like": "${2}" - }, - "confidence": 0.9 - }, - { - "id": "action_get", - "category": "transactional", - "examples": ["get all papers", "fetch datasets", "retrieve models"], - "pattern": "(get|fetch|retrieve) (all )? (.+)", - "template": { - "like": "${3}" - }, - "confidence": 0.85 - }, - { - "id": "combined_complex_1", - "category": "combined", - "examples": ["recent papers by Hinton with more than 50 citations"], - "pattern": "recent (.+) by (.+) with more than (\\d+) (.+)", - "template": { - "like": "${1}", - "connected": { "from": "${2}" }, - "where": { "${4}": { "greaterThan": "${3}" } }, - "boost": "recent" - }, - "confidence": 0.75 - }, - { - "id": "combined_complex_2", - "category": "combined", - "examples": ["best machine learning papers from 2023 at Stanford"], - "pattern": "best (.+) from (\\d{4}) at (.+)", - "template": { - "like": "${1}", - "where": { "year": "${2}", "organization": "${3}" }, - "boost": "popular" - }, - "confidence": 0.75 - }, - { - "id": "combined_complex_3", - "category": "combined", - "examples": ["compare tensorflow and pytorch for computer vision"], - "pattern": "compare (.+) and (.+) for (.+)", - "template": { - "like": ["${1}", "${2}", "${3}"], - "where": { "type": "comparison", "domain": "${3}" } - }, - "confidence": 0.75 - }, - { - "id": "contextual_more_like", - "category": "contextual", - "examples": ["more like this", "similar papers", "find similar"], - "pattern": "(more like|similar to|like) (this|that|these)", - "template": { - "similar": "__context__" - }, - "confidence": 0.8 - }, - { - "id": "contextual_same_but", - "category": "contextual", - "examples": ["same but newer", "same query but from 2023"], - "pattern": "same (query |search |)but (.+)", - "template": { - "__modifier__": "${2}" - }, - "confidence": 0.75 - } - ] -} \ No newline at end of file diff --git a/src/patterns/social-media-patterns.json b/src/patterns/social-media-patterns.json deleted file mode 100644 index 3a08fb58..00000000 --- a/src/patterns/social-media-patterns.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "version": "2.0.0", - "description": "Social media and content creation patterns", - "patterns": [ - { - "id": "social_trending", - "category": "domain_specific", - "domain": "social", - "examples": ["trending on Twitter", "viral TikTok videos", "Instagram trends 2024"], - "pattern": "(?:trending|viral|popular)\\s+(?:on\\s+)?(Twitter|TikTok|Instagram|YouTube|LinkedIn|Reddit|Facebook)\\s*(.+)?", - "template": { - "like": "${1} trending ${2}", - "where": { "domain": "social", "platform": "${1}", "type": "trending" } - }, - "confidence": 0.94, - "frequency": "very_high" - }, - { - "id": "social_hashtag", - "category": "domain_specific", - "domain": "social", - "examples": ["#AI hashtag", "best hashtags for Instagram", "trending hashtags today"], - "pattern": "(?:#(\\w+)|hashtags?\\s+(?:for\\s+)?(.+))", - "template": { - "like": "hashtag ${1}${2}", - "where": { "domain": "social", "type": "hashtag" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "social_influencer", - "category": "domain_specific", - "domain": "social", - "examples": ["top tech influencers", "Instagram influencers fashion", "YouTube creators gaming"], - "pattern": "(?:top\\s+)?(.+?)\\s+(?:influencers?|creators?|YouTubers?)\\s*(?:on\\s+(.+))?", - "template": { - "like": "${1} influencers ${2}", - "where": { "domain": "social", "type": "influencer" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "social_followers", - "category": "domain_specific", - "domain": "social", - "examples": ["how to get more followers", "increase Instagram followers", "buy Twitter followers"], - "pattern": "(?:how\\s+to\\s+)?(?:get|gain|increase|buy)\\s+(?:more\\s+)?(.+?)\\s+followers?", - "template": { - "like": "${1} followers growth", - "where": { "domain": "social", "type": "growth" } - }, - "confidence": 0.93, - "frequency": "very_high" - }, - { - "id": "social_content_ideas", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram post ideas", "TikTok video ideas", "LinkedIn content strategy"], - "pattern": "(.+?)\\s+(?:post|video|content|story)\\s+(?:ideas?|strategy|tips?)", - "template": { - "like": "${1} content ideas", - "where": { "domain": "social", "type": "content_strategy" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "social_algorithm", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram algorithm 2024", "TikTok algorithm explained", "YouTube algorithm changes"], - "pattern": "(Instagram|TikTok|YouTube|Twitter|LinkedIn)\\s+algorithm\\s*(.+)?", - "template": { - "like": "${1} algorithm ${2}", - "where": { "domain": "social", "platform": "${1}", "type": "algorithm" } - }, - "confidence": 0.94, - "frequency": "high" - }, - { - "id": "social_analytics", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram analytics tools", "track Twitter engagement", "social media metrics"], - "pattern": "(.+?)\\s+(?:analytics?|metrics?|insights?|engagement)\\s*(?:tools?)?", - "template": { - "like": "${1} analytics", - "where": { "domain": "social", "type": "analytics" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "social_scheduling", - "category": "domain_specific", - "domain": "social", - "examples": ["best time to post Instagram", "schedule tweets", "social media calendar"], - "pattern": "(?:best\\s+time\\s+to\\s+post|schedule)\\s+(.+)", - "template": { - "like": "${1} posting schedule", - "where": { "domain": "social", "type": "scheduling" } - }, - "confidence": 0.90, - "frequency": "high" - }, - { - "id": "social_bio_profile", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram bio ideas", "LinkedIn profile tips", "Twitter bio generator"], - "pattern": "(.+?)\\s+(?:bio|profile)\\s+(?:ideas?|tips?|generator|examples?)", - "template": { - "like": "${1} bio ideas", - "where": { "domain": "social", "type": "profile" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "social_username", - "category": "domain_specific", - "domain": "social", - "examples": ["username ideas aesthetic", "check username availability", "Instagram username generator"], - "pattern": "(?:username|handle)\\s+(.+)", - "template": { - "like": "username ${1}", - "where": { "domain": "social", "type": "username" } - }, - "confidence": 0.89, - "frequency": "medium" - }, - { - "id": "social_caption", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram caption ideas", "funny captions", "caption for selfie"], - "pattern": "(.+?)\\s*(?:captions?|quotes?)\\s+(?:for\\s+)?(.+)?", - "template": { - "like": "${1} caption ${2}", - "where": { "domain": "social", "type": "caption" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "social_story_reel", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram story ideas", "how to make reels", "TikTok vs Reels"], - "pattern": "(?:Instagram\\s+)?(?:story|stories|reels?)\\s+(.+)", - "template": { - "like": "story reels ${1}", - "where": { "domain": "social", "type": "stories" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "social_monetization", - "category": "domain_specific", - "domain": "social", - "examples": ["monetize Instagram", "YouTube earnings calculator", "TikTok creator fund"], - "pattern": "(?:monetize|earn\\s+money|creator\\s+fund)\\s+(?:on\\s+)?(.+)", - "template": { - "like": "monetize ${1}", - "where": { "domain": "social", "type": "monetization" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "social_verification", - "category": "domain_specific", - "domain": "social", - "examples": ["get verified on Instagram", "Twitter blue checkmark", "verification requirements"], - "pattern": "(?:get\\s+)?verifi(?:ed|cation)\\s+(?:on\\s+)?(.+)", - "template": { - "like": "${1} verification", - "where": { "domain": "social", "type": "verification" } - }, - "confidence": 0.92, - "frequency": "medium" - }, - { - "id": "social_collaboration", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram collaboration", "brand partnerships", "influencer marketing"], - "pattern": "(?:brand\\s+)?(?:collaboration|partnership|sponsorship)\\s+(.+)", - "template": { - "like": "${1} collaboration", - "where": { "domain": "social", "type": "collaboration" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "social_dm_messaging", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram DM not working", "Twitter DM limits", "LinkedIn message templates"], - "pattern": "(.+?)\\s+(?:DM|direct\\s+message|messaging)\\s*(.+)?", - "template": { - "like": "${1} messaging ${2}", - "where": { "domain": "social", "type": "messaging" } - }, - "confidence": 0.89, - "frequency": "medium" - }, - { - "id": "social_privacy_settings", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram privacy settings", "make Twitter private", "Facebook privacy"], - "pattern": "(.+?)\\s+privacy\\s*(?:settings?)?", - "template": { - "like": "${1} privacy", - "where": { "domain": "social", "type": "privacy" } - }, - "confidence": 0.91, - "frequency": "medium" - }, - { - "id": "social_live_streaming", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram live tips", "YouTube streaming setup", "Twitch vs YouTube"], - "pattern": "(.+?)\\s+(?:live|streaming|stream)\\s*(.+)?", - "template": { - "like": "${1} live streaming ${2}", - "where": { "domain": "social", "type": "streaming" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "social_filters_effects", - "category": "domain_specific", - "domain": "social", - "examples": ["Instagram filters", "TikTok effects", "Snapchat lenses"], - "pattern": "(.+?)\\s+(?:filters?|effects?|lenses?)\\s*(.+)?", - "template": { - "like": "${1} filters ${2}", - "where": { "domain": "social", "type": "filters" } - }, - "confidence": 0.88, - "frequency": "medium" - }, - { - "id": "social_meme_viral", - "category": "domain_specific", - "domain": "social", - "examples": ["trending memes", "meme generator", "viral video ideas"], - "pattern": "(?:trending\\s+)?(?:memes?|viral\\s+videos?)\\s*(.+)?", - "template": { - "like": "memes viral ${1}", - "where": { "domain": "social", "type": "meme" } - }, - "confidence": 0.89, - "frequency": "high" - } - ] -} \ No newline at end of file diff --git a/src/patterns/tech-programming-patterns.json b/src/patterns/tech-programming-patterns.json deleted file mode 100644 index 4872e126..00000000 --- a/src/patterns/tech-programming-patterns.json +++ /dev/null @@ -1,487 +0,0 @@ -{ - "version": "2.0.0", - "description": "Programming, AI, and Tech domain patterns - HIGH PRIORITY", - "patterns": [ - { - "id": "prog_error_message", - "category": "domain_specific", - "domain": "programming", - "examples": ["TypeError cannot read property", "undefined is not a function", "NullPointerException Java"], - "pattern": "([A-Za-z]+Error|[A-Za-z]+Exception)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "programming", "type": "error" } - }, - "confidence": 0.96, - "frequency": "very_high" - }, - { - "id": "prog_how_to_code", - "category": "domain_specific", - "domain": "programming", - "examples": ["how to reverse string Python", "sort array JavaScript", "read file in Java"], - "pattern": "(?:how\\s+to\\s+)?(.+?)\\s+(?:in|using)\\s+(Python|JavaScript|Java|C\\+\\+|TypeScript|Go|Rust|Ruby|PHP|Swift|Kotlin|C#)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "programming", "language": "${2}" } - }, - "confidence": 0.95, - "frequency": "very_high" - }, - { - "id": "prog_install_package", - "category": "domain_specific", - "domain": "programming", - "examples": ["npm install react", "pip install tensorflow", "cargo add tokio"], - "pattern": "(?:npm|pip|yarn|cargo|gem|composer|go get|brew|apt|yum)\\s+(?:install|add|get)\\s+(.+)", - "template": { - "like": "install ${1}", - "where": { "domain": "programming", "type": "package_install" } - }, - "confidence": 0.94, - "frequency": "very_high" - }, - { - "id": "prog_import_module", - "category": "domain_specific", - "domain": "programming", - "examples": ["import React from react", "from sklearn import", "require module Node.js"], - "pattern": "(?:import|from|require|use|include)\\s+(.+?)\\s+(?:from|in)?\\s*(.+)?", - "template": { - "like": "import ${1} ${2}", - "where": { "domain": "programming", "type": "import" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "prog_debug_issue", - "category": "domain_specific", - "domain": "programming", - "examples": ["debug React hooks", "memory leak Java", "segmentation fault C++"], - "pattern": "(?:debug|fix|solve|troubleshoot)\\s+(.+?)\\s*(?:issue|problem|error|bug)?", - "template": { - "like": "debug ${1}", - "where": { "domain": "programming", "type": "debugging" } - }, - "confidence": 0.93, - "frequency": "very_high" - }, - { - "id": "prog_best_practices", - "category": "domain_specific", - "domain": "programming", - "examples": ["React best practices", "Python coding standards", "clean code JavaScript"], - "pattern": "(.+?)\\s+(?:best\\s+practices?|coding\\s+standards?|clean\\s+code|style\\s+guide)", - "template": { - "like": "${1} best practices", - "where": { "domain": "programming", "type": "best_practices" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "prog_framework_tutorial", - "category": "domain_specific", - "domain": "programming", - "examples": ["React tutorial", "Django getting started", "Spring Boot guide"], - "pattern": "(React|Vue|Angular|Django|Flask|Spring|Express|Rails|Laravel|Next\\.js|Nuxt|FastAPI)\\s+(?:tutorial|guide|getting\\s+started)", - "template": { - "like": "${1} tutorial", - "where": { "domain": "programming", "framework": "${1}" } - }, - "confidence": 0.94, - "frequency": "very_high" - }, - { - "id": "prog_convert_code", - "category": "domain_specific", - "domain": "programming", - "examples": ["convert Python to JavaScript", "JSON to XML", "SQL to MongoDB"], - "pattern": "(?:convert|translate|transform)\\s+(.+?)\\s+to\\s+(.+)", - "template": { - "like": "convert ${1} to ${2}", - "where": { "domain": "programming", "type": "conversion" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "prog_api_docs", - "category": "domain_specific", - "domain": "programming", - "examples": ["OpenAI API documentation", "Stripe API reference", "REST API example"], - "pattern": "(.+?)\\s+API\\s+(?:documentation|reference|example|tutorial)", - "template": { - "like": "${1} API documentation", - "where": { "domain": "programming", "type": "api" } - }, - "confidence": 0.93, - "frequency": "very_high" - }, - { - "id": "prog_git_commands", - "category": "domain_specific", - "domain": "programming", - "examples": ["git merge conflict", "git rebase vs merge", "git undo commit"], - "pattern": "git\\s+(.+)", - "template": { - "like": "git ${1}", - "where": { "domain": "programming", "type": "version_control" } - }, - "confidence": 0.95, - "frequency": "very_high" - }, - { - "id": "prog_regex_pattern", - "category": "domain_specific", - "domain": "programming", - "examples": ["regex email validation", "regular expression phone number", "regex match URL"], - "pattern": "(?:regex|regular\\s+expression)\\s+(?:for\\s+)?(.+)", - "template": { - "like": "regex ${1}", - "where": { "domain": "programming", "type": "regex" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "prog_algorithm", - "category": "domain_specific", - "domain": "programming", - "examples": ["quicksort algorithm", "binary search implementation", "Dijkstra's algorithm"], - "pattern": "(.+?)\\s+(?:algorithm|implementation)\\s*(?:in\\s+(.+))?", - "template": { - "like": "${1} algorithm ${2}", - "where": { "domain": "programming", "type": "algorithm" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "prog_data_structure", - "category": "domain_specific", - "domain": "programming", - "examples": ["linked list vs array", "implement stack Python", "binary tree traversal"], - "pattern": "(?:implement\\s+)?(.+?)\\s*(?:data\\s+structure|vs\\.?\\s+(.+))?\\s*(?:in\\s+(.+))?", - "template": { - "like": "${1} data structure ${2} ${3}", - "where": { "domain": "programming", "type": "data_structure" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "ai_model_training", - "category": "domain_specific", - "domain": "ai", - "examples": ["train BERT model", "fine-tune GPT", "train neural network"], - "pattern": "(?:train|fine-?tune)\\s+(.+?)\\s*(?:model|network)?", - "template": { - "like": "train ${1}", - "where": { "domain": "ai", "type": "training" } - }, - "confidence": 0.93, - "frequency": "very_high" - }, - { - "id": "ai_machine_learning", - "category": "domain_specific", - "domain": "ai", - "examples": ["random forest sklearn", "neural network PyTorch", "CNN TensorFlow"], - "pattern": "(random\\s+forest|neural\\s+network|CNN|RNN|LSTM|transformer|SVM|k-?means)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "ai", "type": "ml_algorithm" } - }, - "confidence": 0.92, - "frequency": "very_high" - }, - { - "id": "ai_dataset", - "category": "domain_specific", - "domain": "ai", - "examples": ["MNIST dataset", "ImageNet download", "COCO dataset"], - "pattern": "(MNIST|ImageNet|COCO|CIFAR|WikiText|GLUE|SQuAD)\\s*(?:dataset)?\\s*(.+)?", - "template": { - "like": "${1} dataset ${2}", - "where": { "domain": "ai", "type": "dataset" } - }, - "confidence": 0.94, - "frequency": "high" - }, - { - "id": "ai_metrics", - "category": "domain_specific", - "domain": "ai", - "examples": ["accuracy vs precision", "F1 score calculation", "ROC curve explained"], - "pattern": "(accuracy|precision|recall|F1\\s+score|ROC|AUC|loss|perplexity)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "ai", "type": "metrics" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "ai_framework_comparison", - "category": "domain_specific", - "domain": "ai", - "examples": ["TensorFlow vs PyTorch", "Keras or TensorFlow", "JAX vs PyTorch"], - "pattern": "(TensorFlow|PyTorch|Keras|JAX|MXNet|Caffe|Theano)\\s+(?:vs\\.?|or)\\s+(.+)", - "template": { - "like": "${1} vs ${2}", - "where": { "domain": "ai", "type": "framework_comparison" } - }, - "confidence": 0.93, - "frequency": "very_high" - }, - { - "id": "ai_pretrained_model", - "category": "domain_specific", - "domain": "ai", - "examples": ["BERT pretrained model", "download GPT-2", "use ResNet50"], - "pattern": "(BERT|GPT|GPT-2|GPT-3|GPT-4|ResNet|VGG|YOLO|EfficientNet)\\s+(?:pretrained\\s+)?(?:model)?\\s*(.+)?", - "template": { - "like": "${1} pretrained ${2}", - "where": { "domain": "ai", "type": "pretrained_model" } - }, - "confidence": 0.94, - "frequency": "very_high" - }, - { - "id": "ai_nlp_task", - "category": "domain_specific", - "domain": "ai", - "examples": ["sentiment analysis Python", "named entity recognition", "text classification BERT"], - "pattern": "(sentiment\\s+analysis|NER|named\\s+entity|text\\s+classification|summarization|translation)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "ai", "type": "nlp" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "ai_computer_vision", - "category": "domain_specific", - "domain": "ai", - "examples": ["object detection YOLO", "image segmentation", "face recognition OpenCV"], - "pattern": "(object\\s+detection|image\\s+segmentation|face\\s+recognition|OCR|image\\s+classification)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "ai", "type": "computer_vision" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "tech_cloud_service", - "category": "domain_specific", - "domain": "tech", - "examples": ["AWS S3 tutorial", "Google Cloud pricing", "Azure vs AWS"], - "pattern": "(AWS|Azure|GCP|Google\\s+Cloud|Heroku|DigitalOcean|Vercel|Netlify)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "cloud" } - }, - "confidence": 0.93, - "frequency": "very_high" - }, - { - "id": "tech_docker_kubernetes", - "category": "domain_specific", - "domain": "tech", - "examples": ["Docker compose example", "Kubernetes deployment", "dockerfile for Node.js"], - "pattern": "(Docker|Kubernetes|K8s|container|dockerfile|docker-compose)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "containerization" } - }, - "confidence": 0.92, - "frequency": "very_high" - }, - { - "id": "tech_database_query", - "category": "domain_specific", - "domain": "tech", - "examples": ["SQL join example", "MongoDB aggregation", "PostgreSQL vs MySQL"], - "pattern": "(SQL|MySQL|PostgreSQL|MongoDB|Redis|Elasticsearch|Cassandra)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "database" } - }, - "confidence": 0.94, - "frequency": "very_high" - }, - { - "id": "tech_devops_ci_cd", - "category": "domain_specific", - "domain": "tech", - "examples": ["GitHub Actions workflow", "Jenkins pipeline", "CI/CD best practices"], - "pattern": "(GitHub\\s+Actions|Jenkins|CircleCI|Travis|GitLab\\s+CI|CI/CD)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "devops" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "tech_security", - "category": "domain_specific", - "domain": "tech", - "examples": ["SQL injection prevention", "XSS attack", "JWT authentication"], - "pattern": "(SQL\\s+injection|XSS|CSRF|JWT|OAuth|authentication|authorization)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "security" } - }, - "confidence": 0.93, - "frequency": "high" - }, - { - "id": "tech_performance", - "category": "domain_specific", - "domain": "tech", - "examples": ["optimize React performance", "database indexing", "lazy loading implementation"], - "pattern": "(?:optimize|improve)\\s+(.+?)\\s+performance", - "template": { - "like": "${1} performance optimization", - "where": { "domain": "tech", "type": "performance" } - }, - "confidence": 0.92, - "frequency": "high" - }, - { - "id": "tech_testing", - "category": "domain_specific", - "domain": "tech", - "examples": ["unit testing Jest", "integration testing", "mock API calls"], - "pattern": "(unit\\s+test|integration\\s+test|e2e\\s+test|mock|stub)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "testing" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "prog_stackoverflow_pattern", - "category": "domain_specific", - "domain": "programming", - "examples": ["undefined is not a function JavaScript", "cannot read property of undefined React"], - "pattern": "(.+?)\\s+(JavaScript|Python|Java|C\\+\\+|React|Angular|Vue)$", - "template": { - "like": "${1} ${2}", - "where": { "domain": "programming", "source": "stackoverflow" } - }, - "confidence": 0.95, - "frequency": "very_high" - }, - { - "id": "prog_vscode_extension", - "category": "domain_specific", - "domain": "programming", - "examples": ["VSCode extension Python", "best VSCode themes", "VSCode shortcuts"], - "pattern": "(?:VSCode|VS\\s+Code)\\s+(.+)", - "template": { - "like": "VSCode ${1}", - "where": { "domain": "programming", "type": "ide" } - }, - "confidence": 0.90, - "frequency": "medium" - }, - { - "id": "ai_llm_models", - "category": "domain_specific", - "domain": "ai", - "examples": ["ChatGPT API", "Claude vs GPT-4", "Llama 2 fine-tuning"], - "pattern": "(ChatGPT|Claude|GPT-4|Llama|Mistral|Gemini|DALL-E|Stable\\s+Diffusion)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "ai", "type": "llm" } - }, - "confidence": 0.95, - "frequency": "very_high" - }, - { - "id": "ai_prompt_engineering", - "category": "domain_specific", - "domain": "ai", - "examples": ["prompt engineering tips", "ChatGPT prompts", "system prompt examples"], - "pattern": "(?:prompt\\s+engineering|prompts?|system\\s+prompt)\\s+(.+)", - "template": { - "like": "prompt engineering ${1}", - "where": { "domain": "ai", "type": "prompt_engineering" } - }, - "confidence": 0.93, - "frequency": "very_high" - }, - { - "id": "tech_web_framework", - "category": "domain_specific", - "domain": "tech", - "examples": ["Next.js vs Gatsby", "Tailwind CSS tutorial", "Bootstrap components"], - "pattern": "(Next\\.js|Gatsby|Tailwind|Bootstrap|Material-UI|Chakra|Ant\\s+Design)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "web_framework" } - }, - "confidence": 0.92, - "frequency": "very_high" - }, - { - "id": "tech_mobile_dev", - "category": "domain_specific", - "domain": "tech", - "examples": ["React Native navigation", "Flutter vs React Native", "SwiftUI tutorial"], - "pattern": "(React\\s+Native|Flutter|SwiftUI|Kotlin|Swift|Android|iOS)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "mobile" } - }, - "confidence": 0.91, - "frequency": "high" - }, - { - "id": "prog_package_version", - "category": "domain_specific", - "domain": "programming", - "examples": ["React 18 features", "Python 3.11 new", "Node.js version 20"], - "pattern": "(.+?)\\s+(?:version\\s+)?(\\d+(?:\\.\\d+)*)\\s*(.+)?", - "template": { - "like": "${1} ${2} ${3}", - "where": { "domain": "programming", "version": "${2}" } - }, - "confidence": 0.90, - "frequency": "high" - }, - { - "id": "tech_cli_commands", - "category": "domain_specific", - "domain": "tech", - "examples": ["curl POST request", "wget download file", "ssh key generation"], - "pattern": "(curl|wget|ssh|scp|rsync|grep|sed|awk|chmod|chown)\\s+(.+)", - "template": { - "like": "${1} command ${2}", - "where": { "domain": "tech", "type": "cli" } - }, - "confidence": 0.92, - "frequency": "very_high" - }, - { - "id": "tech_linux_admin", - "category": "domain_specific", - "domain": "tech", - "examples": ["Ubuntu install package", "systemd service", "cron job example"], - "pattern": "(Ubuntu|Debian|CentOS|Linux|systemd|cron|iptables|nginx|apache)\\s+(.+)", - "template": { - "like": "${1} ${2}", - "where": { "domain": "tech", "type": "sysadmin" } - }, - "confidence": 0.91, - "frequency": "high" - } - ] -} \ No newline at end of file diff --git a/src/plugin.ts b/src/plugin.ts index f2ddf7e3..66e89a06 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -5,7 +5,8 @@ * 1. Native acceleration (@soulcraft/cortex) * 2. Custom storage adapters (e.g., Redis, DynamoDB, custom backends) * - * Plugins are auto-detected by package name or registered manually. + * Plugins are loaded from an explicit `plugins: [...]` config list or + * registered manually via `brain.use()` — there is no implicit detection. */ import type { diff --git a/src/scripts/precomputePatternEmbeddings.ts b/src/scripts/precomputePatternEmbeddings.ts deleted file mode 100644 index 82a798be..00000000 --- a/src/scripts/precomputePatternEmbeddings.ts +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env node - -/** - * 🧠 Pre-compute Pattern Embeddings Script - * - * This script pre-computes embeddings for all patterns and saves them to disk. - * Run this once after adding new patterns to avoid runtime embedding costs. - * - * How it works: - * 1. Load all patterns from library.json - * 2. Use Brainy's embedding model to encode each pattern's examples - * 3. Average the example embeddings to get a robust pattern representation - * 4. Save embeddings to patterns/embeddings.bin for instant loading - * - * Benefits: - * - Pattern matching becomes pure math (cosine similarity) - * - No embedding model calls during query processing - * - Patterns load instantly with pre-computed vectors - */ - -import { Brainy } from '../brainy.js' -import patternData from '../patterns/library.json' assert { type: 'json' } -import * as fs from 'node:fs/promises' -import * as path from 'node:path' - -async function precomputeEmbeddings() { - console.log('🧠 Pre-computing pattern embeddings...') - - // Initialize Brainy with minimal config - const brain = new Brainy({ - storage: 'memory', - verbose: false - }) - - await brain.init() - console.log('āœ… Brainy initialized') - - const embeddings: Record = {} - - let processedCount = 0 - const totalPatterns = patternData.patterns.length - - for (const pattern of patternData.patterns) { - console.log(`\nšŸ“ Processing pattern: ${pattern.id} (${++processedCount}/${totalPatterns})`) - console.log(` Category: ${pattern.category}`) - console.log(` Examples: ${pattern.examples.length}`) - - // Embed all examples - const exampleEmbeddings: number[][] = [] - - for (const example of pattern.examples) { - try { - const embedding = await brain.embed(example) - exampleEmbeddings.push(embedding as number[]) - console.log(` āœ“ Embedded: "${example.substring(0, 50)}..."`) - } catch (error) { - console.error(` āœ— Failed to embed: "${example}"`, error) - } - } - - if (exampleEmbeddings.length === 0) { - console.warn(` āš ļø No embeddings generated for pattern ${pattern.id}`) - continue - } - - // Average the embeddings for a robust representation - const avgEmbedding = averageVectors(exampleEmbeddings) - - embeddings[pattern.id] = { - patternId: pattern.id, - embedding: avgEmbedding, - examples: pattern.examples, - averageMethod: 'arithmetic_mean' - } - - console.log(` āœ… Generated ${avgEmbedding.length}-dimensional embedding`) - } - - // Save embeddings to file - const outputPath = path.join(process.cwd(), 'src', 'patterns', 'embeddings.json') - await fs.writeFile(outputPath, JSON.stringify(embeddings, null, 2)) - - console.log(`\nāœ… Saved ${Object.keys(embeddings).length} pattern embeddings to ${outputPath}`) - - // Calculate storage size - const stats = await fs.stat(outputPath) - console.log(`šŸ“Š File size: ${(stats.size / 1024).toFixed(2)} KB`) - - // Print statistics - console.log('\nšŸ“ˆ Embedding Statistics:') - console.log(` Total patterns: ${totalPatterns}`) - console.log(` Successfully embedded: ${Object.keys(embeddings).length}`) - console.log(` Failed: ${totalPatterns - Object.keys(embeddings).length}`) - console.log(` Embedding dimensions: ${Object.values(embeddings)[0]?.embedding.length || 0}`) - - await brain.close() - console.log('\nāœ… Complete!') -} - -function averageVectors(vectors: number[][]): number[] { - if (vectors.length === 0) return [] - - const dim = vectors[0].length - const avg = new Array(dim).fill(0) - - // Sum all vectors - for (const vec of vectors) { - for (let i = 0; i < dim; i++) { - avg[i] += vec[i] - } - } - - // Divide by count to get average - for (let i = 0; i < dim; i++) { - avg[i] /= vectors.length - } - - return avg -} - -// Run the script -precomputeEmbeddings().catch(console.error) \ No newline at end of file diff --git a/src/storage/adapters/fileSystemStorage.ts b/src/storage/adapters/fileSystemStorage.ts index af9589b4..7104a0f9 100644 --- a/src/storage/adapters/fileSystemStorage.ts +++ b/src/storage/adapters/fileSystemStorage.ts @@ -1612,6 +1612,8 @@ export class FileSystemStorage extends BaseStorage { } else { const stale = await this.isWriterLockStale(existing) if (!stale) { + // Consumer-facing error contract: callers detect this case via + // err.code and read the holder's details from err.lockInfo. const err = new Error( `Another writer holds this Brainy directory.\n` + ` PID: ${existing.pid} on host ${existing.hostname}\n` + @@ -1622,9 +1624,9 @@ export class FileSystemStorage extends BaseStorage { `For diagnostic queries against this live store, use:\n` + ` const reader = await Brainy.openReadOnly({ storage: { type: 'filesystem', rootDirectory: '${this.rootDir}' } })\n\n` + `If you have verified the existing lock is stale (e.g. a crashed writer on a different host that PID liveness cannot reach), pass { force: true }.` - ) - ;(err as any).code = 'BRAINY_WRITER_LOCKED' - ;(err as any).lockInfo = existing + ) as Error & { code: string; lockInfo: WriterLockInfo } + err.code = 'BRAINY_WRITER_LOCKED' + err.lockInfo = existing throw err } console.warn( diff --git a/src/storage/baseStorage.ts b/src/storage/baseStorage.ts index da66e34e..a2f2f373 100644 --- a/src/storage/baseStorage.ts +++ b/src/storage/baseStorage.ts @@ -193,6 +193,27 @@ function getVerbMetadataPath(id: string): string { return `entities/verbs/${shard}/${id}/metadata.json` } +/** + * Optional count capabilities probed via duck typing by getNouns()/getVerbs(). + * Adapters with a native O(1) count API may implement these; they are not part + * of the BaseStorageAdapter contract, so BaseStorage feature-detects them at + * runtime before falling back to scan-based counting. + */ +interface OptionalCountCapabilities { + countNouns?: (filter?: { + nounType?: string | string[] + service?: string | string[] + metadata?: Record + }) => Promise + countVerbs?: (filter?: { + verbType?: string | string[] + sourceId?: string | string[] + targetId?: string | string[] + service?: string | string[] + metadata?: Record + }) => Promise +} + /** * Base storage adapter that implements common functionality * This is an abstract class that should be extended by specific storage adapters @@ -454,9 +475,14 @@ export abstract class BaseStorage extends BaseStorageAdapter { public invalidateGraphIndex(): void { if (this.graphIndex) { prodLog.info('[BaseStorage] Invalidating GraphAdjacencyIndex for clear()') - // Stop any pending operations - if (typeof (this.graphIndex as any).stopAutoFlush === 'function') { - (this.graphIndex as any).stopAutoFlush() + // Stop any pending operations. stopAutoFlush is an optional capability + // of plugin-provided graph indexes (duck-typed; the built-in + // GraphAdjacencyIndex does not implement it). + const flushable = this.graphIndex as GraphAdjacencyIndex & { + stopAutoFlush?: () => void + } + if (typeof flushable.stopAutoFlush === 'function') { + flushable.stopAutoFlush() } this.graphIndex = undefined this.graphIndexPromise = undefined @@ -738,7 +764,7 @@ export abstract class BaseStorage extends BaseStorageAdapter { * * The hook fires once per entity-visible metadata mutation — noun/verb * metadata saves and deletes, the one storage write every logical Brainy - * mutation (`add`, `update`, `delete`, `relate`, `updateRelation`, + * mutation (`add`, `update`, `remove`, `relate`, `updateRelation`, * `unrelate`) performs exactly once per entity it touches. It does NOT fire * for derived-index writes (HNSW node data, metadata-index chunks, LSM * segments, statistics), so the generation counter tracks *data* mutations, @@ -1380,9 +1406,11 @@ export abstract class BaseStorage extends BaseStorageAdapter { // First, try to get a count of total nouns (if the adapter supports it) let totalCount: number | undefined = undefined try { - // This is an optional method that adapters may implement - if (typeof (this as any).countNouns === 'function') { - totalCount = await (this as any).countNouns(options?.filter) + // This is an optional method that adapters may implement (duck-typed — + // see OptionalCountCapabilities) + const adapter = this as BaseStorage & OptionalCountCapabilities + if (typeof adapter.countNouns === 'function') { + totalCount = await adapter.countNouns(options?.filter) } } catch (countError) { // Ignore errors from count method, it's optional @@ -1390,9 +1418,16 @@ export abstract class BaseStorage extends BaseStorageAdapter { } // Check if the adapter has a paginated method for getting nouns - if (typeof (this as any).getNounsWithPagination === 'function') { - // Use the adapter's paginated method - pass offset directly to adapter - const result = await (this as any).getNounsWithPagination({ + if (typeof this.getNounsWithPagination === 'function') { + // Use the adapter's paginated method - pass offset directly to adapter. + // The annotation widens totalCount to optional: adapter overrides + // follow BaseStorageAdapter's contract, where totalCount may be absent. + const result: { + items: HNSWNounWithMetadata[] + totalCount?: number + hasMore: boolean + nextCursor?: string + } = await this.getNounsWithPagination({ limit, offset, // Let the adapter handle offset for O(1) operation cursor, @@ -1556,7 +1591,7 @@ export abstract class BaseStorage extends BaseStorageAdapter { /** * Get verbs with pagination (Type-first implementation with billion-scale optimizations) * - * CRITICAL: This method is required for brain.getRelations() to work! + * CRITICAL: This method is required for brain.related() to work! * Iterates through verb types with the same optimizations as nouns. * * ARCHITECTURE: Reads storage directly (not indexes) to avoid circular dependencies. @@ -1605,11 +1640,17 @@ export abstract class BaseStorage extends BaseStorageAdapter { const filterTargetIds = filter?.targetId ? new Set(Array.isArray(filter.targetId) ? filter.targetId : [filter.targetId]) : null - const filterSubtypes = (filter as any)?.subtype + // `subtype` rides alongside the declared filter fields (Brainy's + // related() path passes it through); it's applied after metadata + // loads below, since subtype lives in verb metadata, not on the raw verb. + const subtypeFilterValue = ( + filter as { verbType?: string | string[]; subtype?: string | string[] } | undefined + )?.subtype + const filterSubtypes = subtypeFilterValue ? new Set( - Array.isArray((filter as any).subtype) - ? (filter as any).subtype - : [(filter as any).subtype] + Array.isArray(subtypeFilterValue) + ? subtypeFilterValue + : [subtypeFilterValue] ) : null @@ -1652,7 +1693,7 @@ export abstract class BaseStorage extends BaseStorageAdapter { // Apply subtype filter (requires metadata — checked AFTER load) if (filterSubtypes) { - const subtype = (metadata as any)?.subtype as string | undefined + const subtype = metadata?.subtype as string | undefined if (!subtype || !filterSubtypes.has(subtype)) { continue } @@ -1725,9 +1766,12 @@ export abstract class BaseStorage extends BaseStorageAdapter { // subtype check after the load). Subtype is not stored on the raw HNSWVerb; // it's a metadata field. The graph-index fast paths return verbs without // metadata, so they can't apply subtype filtering correctly. - if (options?.filter && !(options.filter as any).subtype) { + if ( + options?.filter && + !(options.filter as { verbType?: string | string[]; subtype?: string | string[] }).subtype + ) { // CRITICAL VFS FIX: If filtering by sourceId + verbType (most common VFS pattern!) - // This is the query PathResolver.getChildren() uses: getRelations({ from: dirId, type: VerbType.Contains }) + // This is the query PathResolver.getChildren() uses: related({ from: dirId, type: VerbType.Contains }) if ( options.filter.sourceId && options.filter.verbType && @@ -1921,9 +1965,11 @@ export abstract class BaseStorage extends BaseStorageAdapter { // First, try to get a count of total verbs (if the adapter supports it) let totalCount: number | undefined = undefined try { - // This is an optional method that adapters may implement - if (typeof (this as any).countVerbs === 'function') { - totalCount = await (this as any).countVerbs(options?.filter) + // This is an optional method that adapters may implement (duck-typed — + // see OptionalCountCapabilities) + const adapter = this as BaseStorage & OptionalCountCapabilities + if (typeof adapter.countVerbs === 'function') { + totalCount = await adapter.countVerbs(options?.filter) } } catch (countError) { // Ignore errors from count method, it's optional @@ -1931,13 +1977,24 @@ export abstract class BaseStorage extends BaseStorageAdapter { } // Check if the adapter has a paginated method for getting verbs - if (typeof (this as any).getVerbsWithPagination === 'function') { + if (typeof this.getVerbsWithPagination === 'function') { // Use the adapter's paginated method // Convert offset to cursor if no cursor provided (adapters use cursor for offset) const effectiveCursor = cursor || (offset > 0 ? offset.toString() : undefined) - const result = await (this as any).getVerbsWithPagination({ + // offset is carried via effectiveCursor for adapters with cursor-based + // pagination; 0 here matches the long-standing destructure default in + // getVerbsWithPagination (this call never passed offset). The + // annotation widens totalCount to optional: adapter overrides follow + // BaseStorageAdapter's contract, where totalCount may be absent. + const result: { + items: HNSWVerbWithMetadata[] + totalCount?: number + hasMore: boolean + nextCursor?: string + } = await this.getVerbsWithPagination({ limit, + offset: 0, cursor: effectiveCursor, filter: options?.filter }) @@ -2398,7 +2455,7 @@ export abstract class BaseStorage extends BaseStorageAdapter { * **Use cases:** * - VFS tree traversal (fetch all children at once) * - brain.find() result hydration (batch load entities) - * - brain.getRelations() target entities (eliminate N+1) + * - brain.related() target entities (eliminate N+1) * - Import operations (batch existence checks) * * @param ids Array of entity IDs to fetch @@ -2571,8 +2628,12 @@ export abstract class BaseStorage extends BaseStorageAdapter { private async readBatchFromAdapter(paths: string[]): Promise> { if (paths.length === 0) return new Map() - // Check if this class implements batch operations (will be added to cloud adapters) - const selfWithBatch = this as any + // Check if this class implements batch operations (will be added to cloud + // adapters). Duck-typed optional capability — readBatch is not part of the + // BaseStorageAdapter contract. + const selfWithBatch = this as BaseStorage & { + readBatch?: (paths: string[]) => Promise> + } if (typeof selfWithBatch.readBatch === 'function') { // Adapter has native batch support - use it @@ -2693,7 +2754,7 @@ export abstract class BaseStorage extends BaseStorageAdapter { await this.ensureInitialized() // Extract verb type from metadata for ID-first path - const verbType = (metadata as any).verb as VerbType | undefined + const verbType = metadata.verb as VerbType | undefined if (!verbType) { // Backward compatibility: fallback to old path if no verb type @@ -2729,7 +2790,7 @@ export abstract class BaseStorage extends BaseStorageAdapter { this.decrementVerbSubtypeCount(priorEntry.verb, priorEntry.subtype) } else if (!priorEntry && priorVerbForSubtype && !isNew) { // Edge case: cache miss but metadata existed with a subtype (e.g. reader process startup). - const priorSubFromMeta = (existingMetadata as any)?.subtype as string | undefined + const priorSubFromMeta = existingMetadata?.subtype as string | undefined if (priorSubFromMeta && (priorSubFromMeta !== newSubtype || priorVerbForSubtype !== verbType)) { this.decrementVerbSubtypeCount(priorVerbForSubtype, priorSubFromMeta) } @@ -3706,7 +3767,7 @@ export abstract class BaseStorage extends BaseStorageAdapter { * * **Use cases:** * - VFS tree traversal (get Contains edges for multiple directories) - * - brain.getRelations() for multiple entities + * - brain.related() for multiple entities * - Graph traversal (fetch neighbors of multiple nodes) * * @param sourceIds Array of source entity IDs diff --git a/src/streaming/pipeline.ts b/src/streaming/pipeline.ts index b678ed7e..9f1b7b48 100644 --- a/src/streaming/pipeline.ts +++ b/src/streaming/pipeline.ts @@ -55,7 +55,20 @@ export class Pipeline { } constructor(private brainyInstance?: Brainy | Brainy) {} - + + /** + * Re-brand this pipeline's element type after a stage that changes the + * stream's item type has been pushed. The runtime object is unchanged — + * the fluent builder mutates `stages` on the same instance rather than + * allocating a new pipeline, and `Pipeline`'s type parameter exists + * only at compile time. (Typed boundary: `Pipeline` and `Pipeline` + * are not structurally comparable generics, so this is the one sanctioned + * `unknown` bridge in this class.) + */ + private retype(): Pipeline { + return this as unknown as Pipeline + } + /** * Add a data source */ @@ -71,9 +84,9 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } - + /** * Transform data */ @@ -88,7 +101,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -143,7 +156,12 @@ export class Pipeline { if (result) { // Note: This won't work perfectly in async iterator // In production, use a proper queue - batch = [result as any] + // Typed boundary preserving a pre-existing quirk verbatim: + // re-stashing the flushed batch as a single element nests it + // (a T[] stored where T is expected), so a later size-flush + // can yield a nested array. Documented, not fixed — fixing it + // (batch = result) would change runtime output. + batch = [result] as unknown as T[] } }, timeoutMs) } @@ -155,9 +173,9 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } - + /** * Sink data to a destination */ @@ -172,7 +190,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -197,7 +215,8 @@ export class Pipeline { for (const item of batch) { await (brain as Brainy).add({ data: item, - type: (options?.type as any) || NounType.Document, + // Type coercion since pipeline accepts string + type: (options?.type as NounType | undefined) || NounType.Document, metadata: options?.metadata }) } @@ -206,12 +225,12 @@ export class Pipeline { for (const item of batch) { await (brain as Brainy).add({ data: item, - type: (options?.type || 'document') as any, // Type coercion since pipeline accepts string + type: (options?.type || 'document') as NounType, // Type coercion since pipeline accepts string metadata: options?.metadata }) } } - }) as any + }) } /** @@ -244,7 +263,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -282,7 +301,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -332,7 +351,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -352,7 +371,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -411,7 +430,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -522,7 +541,7 @@ export class Pipeline { } } this.stages.push(stage) - return this as any + return this.retype() } /** @@ -542,12 +561,17 @@ export class Pipeline { const { errorHandler, bufferSize = 1000 } = options try { - // Build the pipeline chain - let stream: AsyncIterable = undefined as any - + // Build the pipeline chain. The head of the chain has no upstream: + // source stages declare process() without parameters and never read + // their input, so the undefined fed to them (and to a malformed + // pipeline whose first stage isn't a source — preserved legacy + // behavior) is typed at this boundary as the AsyncIterable it never is. + const noUpstream = undefined as unknown as AsyncIterable + let stream: AsyncIterable = noUpstream + for (const stage of this.stages) { if (stage.type === 'source') { - stream = stage.process(undefined as any) + stream = stage.process(noUpstream) } else { stream = stage.process(stream) } diff --git a/src/transaction/operations/IndexOperations.ts b/src/transaction/operations/IndexOperations.ts index 52528a8a..4082206a 100644 --- a/src/transaction/operations/IndexOperations.ts +++ b/src/transaction/operations/IndexOperations.ts @@ -50,13 +50,26 @@ export class AddToHNSWOperation implements Operation { } /** - * Check if item exists in index + * Check if item exists in index. + * + * `getItem` is an optional, feature-detected provider capability — see the + * VectorIndexProvider docs; it is intentionally absent from the required + * contract (Brainy's JS HNSW index omits it). When the capability is + * missing the answer must be `false`, not `true`: treating unknowable + * pre-existence as "existed" made every rollback skip removeItem, leaving + * phantom entries in the index after a failed transaction. The safe default + * is to remove what this operation added — update flows pair this op with a + * RemoveFromHNSWOperation whose own rollback restores the prior vector, so + * reverse-order rollback reconstructs the original state either way. */ private async itemExists(id: string): Promise { + const index = this.index as JsHnswVectorIndex & { + getItem?: (id: string) => Promise + } + if (typeof index.getItem !== 'function') return false try { - // Try to get item - if exists, no error - await (this.index as any).getItem?.(id) - return true + const item = await index.getItem(id) + return item !== undefined && item !== null } catch { return false } diff --git a/src/transaction/operations/StorageOperations.ts b/src/transaction/operations/StorageOperations.ts index a75a2dd0..ca513cd4 100644 --- a/src/transaction/operations/StorageOperations.ts +++ b/src/transaction/operations/StorageOperations.ts @@ -95,8 +95,8 @@ export class SaveNounOperation implements Operation { // Delete newly created noun (if adapter supports it) // Note: Not all adapters implement deleteNoun // This is acceptable - metadata deletion makes entity invisible - if ('deleteNoun' in this.storage && typeof (this.storage as any).deleteNoun === 'function') { - await (this.storage as any).deleteNoun(this.noun.id) + if ('deleteNoun' in this.storage && typeof this.storage.deleteNoun === 'function') { + await this.storage.deleteNoun(this.noun.id) } } } @@ -211,8 +211,8 @@ export class SaveVerbOperation implements Operation { await this.storage.saveVerb(verbData) } else { // Delete newly created verb (if adapter supports it) - if ('deleteVerb' in this.storage && typeof (this.storage as any).deleteVerb === 'function') { - await (this.storage as any).deleteVerb(this.verb.id) + if ('deleteVerb' in this.storage && typeof this.storage.deleteVerb === 'function') { + await this.storage.deleteVerb(this.verb.id) } } } diff --git a/src/types/apiTypes.ts b/src/types/apiTypes.ts index 635d1793..d788d60e 100644 --- a/src/types/apiTypes.ts +++ b/src/types/apiTypes.ts @@ -188,7 +188,7 @@ export interface ConfigUpdateParams { /** * API for Triple Intelligence Engine to access Brainy internals - * This provides type-safe access without 'as any' casts + * This provides type-safe access without unchecked casts */ export interface TripleIntelligenceAPI { // Vector operations diff --git a/src/types/brainy.types.ts b/src/types/brainy.types.ts index 184ff49b..cfee6c66 100644 --- a/src/types/brainy.types.ts +++ b/src/types/brainy.types.ts @@ -86,7 +86,7 @@ export interface Relation { * relationship might have `subtype: 'direct'` vs `'dotted-line'`; a `RelatedTo` * edge might carry `'spouse'` / `'sibling'` / `'colleague'`). Flat string, no * hierarchy. Top-level standard field — indexed on the fast path and rolled into - * per-VerbType statistics so queries like `getRelations({ verb, subtype })` hit + * per-VerbType statistics so queries like `related({ verb, subtype })` hit * the column-store directly. */ subtype?: string @@ -372,7 +372,7 @@ export interface RelateParams { * relationship might have `subtype: 'direct'` or `'dotted-line'`; a `RelatedTo` * edge might carry `'spouse'` or `'colleague'`). Flat string, no hierarchy. * Indexed and rolled up into per-VerbType statistics for fast filtering - * (`getRelations({ verb, subtype })`) and aggregation (`groupBy:['subtype']`). + * (`related({ verb, subtype })`) and aggregation (`groupBy:['subtype']`). */ subtype?: string /** Connection strength (0-1, default: 1.0) */ @@ -542,7 +542,7 @@ export interface SimilarParams { } /** - * Parameters for getting relationships + * Parameters for `brain.related()` / `db.related()` * * All parameters are optional. When called without parameters, returns all relationships * with pagination (default limit: 100). @@ -550,25 +550,25 @@ export interface SimilarParams { * @example * ```typescript * // Get all relationships (default limit: 100) - * const all = await brain.getRelations() + * const all = await brain.related() * * // Get relationships from a specific entity (string shorthand) - * const fromEntity = await brain.getRelations(entityId) + * const fromEntity = await brain.related(entityId) * * // Equivalent to: - * const fromEntity2 = await brain.getRelations({ from: entityId }) + * const fromEntity2 = await brain.related({ from: entityId }) * * // Get relationships to a specific entity - * const toEntity = await brain.getRelations({ to: entityId }) + * const toEntity = await brain.related({ to: entityId }) * * // Filter by relationship type - * const friends = await brain.getRelations({ type: VerbType.FriendOf }) + * const friends = await brain.related({ type: VerbType.FriendOf }) * * // Pagination - * const page2 = await brain.getRelations({ offset: 100, limit: 50 }) + * const page2 = await brain.related({ offset: 100, limit: 50 }) * * // Combined filters - * const filtered = await brain.getRelations({ + * const filtered = await brain.related({ * from: entityId, * type: VerbType.WorksWith, * limit: 20 @@ -578,7 +578,7 @@ export interface SimilarParams { * Fixed bug where calling without parameters returned empty array * Added string ID shorthand syntax */ -export interface GetRelationsParams { +export interface RelatedParams { /** * Filter by source entity ID * @@ -668,15 +668,15 @@ export interface UpdateManyParams { } /** - * Batch delete parameters + * Batch remove parameters */ -export interface DeleteManyParams { - ids?: string[] // Specific IDs to delete - type?: NounType // Delete all of type - where?: any // Delete by metadata - limit?: number // Max to delete (safety) +export interface RemoveManyParams { + ids?: string[] // Specific IDs to remove + type?: NounType // Remove all of type + where?: any // Remove by metadata + limit?: number // Max to remove (safety) onProgress?: (done: number, total: number) => void - continueOnError?: boolean // Continue processing if a delete fails + continueOnError?: boolean // Continue processing if a removal fails } /** @@ -854,7 +854,7 @@ export interface ImportResult { * - VFS operations (readFile, stat, readdir) - 100% of cases * - Existence checks: `if (await brain.get(id))` * - Metadata inspection: `entity.metadata`, `entity.data`, `entity.type` - * - Relationship traversal: `brain.getRelations({ from: id })` + * - Relationship traversal: `brain.related({ from: id })` * - Search operations: `brain.find()` generates embeddings automatically * * @example @@ -1364,16 +1364,14 @@ export interface BrainyConfig { * * - `'writer'` (default): acquires an exclusive lock on the storage directory at * `init()` and refuses to open if another live writer holds the lock. Required - * for any instance that calls `add`/`update`/`delete`/`relate` or any other + * for any instance that calls `add`/`update`/`remove`/`relate` or any other * mutation. Released on `close()` and on process exit/SIGINT/SIGTERM. * - `'reader'`: opens without acquiring the writer lock. Coexists with a live * writer and with other readers. All mutation methods throw * `Cannot mutate a read-only Brainy instance`. Use `Brainy.openReadOnly()` * as a convenience factory. * - * For cloud storage backends (s3/r2/gcs/azure) the lock is a best-effort - * advisory marker — multi-process safety against concurrent writers on - * cloud-backed stores is not yet enforced. See `docs/concepts/multi-process.md`. + * See `docs/concepts/multi-process.md` for the full coordination model. */ mode?: 'writer' | 'reader' diff --git a/src/types/progress.types.ts b/src/types/progress.types.ts index 58e517f6..b8444d01 100644 --- a/src/types/progress.types.ts +++ b/src/types/progress.types.ts @@ -3,8 +3,6 @@ * * Provides unified progress tracking across all long-running operations * in Brainy (imports, clustering, large searches, etc.) - * - * PRODUCTION-READY - NO MOCKS, NO STUBS, REAL IMPLEMENTATION */ /** diff --git a/src/unified.ts b/src/unified.ts index cd724c7e..987dd867 100644 --- a/src/unified.ts +++ b/src/unified.ts @@ -18,8 +18,18 @@ export const environment = { } } +declare global { + /** + * Runtime-environment marker published by the unified entry point so + * embedders and diagnostics can detect the active Brainy environment. + * Ambient `var` is required — `let`/`const` in `declare global` do not + * attach to `globalThis`. + */ + var __ENV__: typeof environment | undefined +} + if (typeof globalThis !== 'undefined') { - ;(globalThis as any).__ENV__ = environment + globalThis.__ENV__ = environment } console.log( diff --git a/src/universal/events.ts b/src/universal/events.ts deleted file mode 100644 index 42287849..00000000 --- a/src/universal/events.ts +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Universal Events implementation - * Framework-friendly: Trusts that frameworks provide events polyfills - * Works in all environments: Browser (via framework), Node.js, Serverless - */ - -import { isNode } from '../utils/environment.js' - -let nodeEvents: any = null - -// Dynamic import for Node.js events (only in Node.js environment) -if (isNode()) { - try { - nodeEvents = await import('node:events') - } catch { - // Ignore import errors in non-Node environments - } -} - -/** - * Universal EventEmitter interface - */ -export interface UniversalEventEmitter { - on(event: string, listener: (...args: any[]) => void): this - off(event: string, listener: (...args: any[]) => void): this - emit(event: string, ...args: any[]): boolean - once(event: string, listener: (...args: any[]) => void): this - removeAllListeners(event?: string): this - listenerCount(event: string): number -} - -/** - * Node.js implementation using events.EventEmitter - */ -class NodeEventEmitter implements UniversalEventEmitter { - private emitter: any - - constructor() { - this.emitter = new nodeEvents.EventEmitter() - } - - on(event: string, listener: (...args: any[]) => void): this { - this.emitter.on(event, listener) - return this - } - - off(event: string, listener: (...args: any[]) => void): this { - this.emitter.off(event, listener) - return this - } - - emit(event: string, ...args: any[]): boolean { - return this.emitter.emit(event, ...args) - } - - once(event: string, listener: (...args: any[]) => void): this { - this.emitter.once(event, listener) - return this - } - - removeAllListeners(event?: string): this { - this.emitter.removeAllListeners(event) - return this - } - - listenerCount(event: string): number { - return this.emitter.listenerCount(event) - } -} - -/** - * Universal EventEmitter class - * Framework-friendly: Assumes events API is available via framework polyfills - */ -export class EventEmitter implements UniversalEventEmitter { - private emitter: UniversalEventEmitter - - constructor() { - if (isNode() && nodeEvents) { - this.emitter = new NodeEventEmitter() - } else { - throw new Error('Events operations not available. Framework bundlers should provide events polyfills.') - } - } - - on(event: string, listener: (...args: any[]) => void): this { - this.emitter.on(event, listener) - return this - } - - off(event: string, listener: (...args: any[]) => void): this { - this.emitter.off(event, listener) - return this - } - - emit(event: string, ...args: any[]): boolean { - return this.emitter.emit(event, ...args) - } - - once(event: string, listener: (...args: any[]) => void): this { - this.emitter.once(event, listener) - return this - } - - removeAllListeners(event?: string): this { - this.emitter.removeAllListeners(event) - return this - } - - listenerCount(event: string): number { - return this.emitter.listenerCount(event) - } -} - -// Named export for compatibility -export { EventEmitter as default } - -// Re-export Node.js EventEmitter class if available -export const NodeEventEmitterClass = nodeEvents?.EventEmitter || null \ No newline at end of file diff --git a/src/universal/index.ts b/src/universal/index.ts deleted file mode 100644 index 40eabccf..00000000 --- a/src/universal/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Universal adapters for cross-environment compatibility - * Provides consistent APIs across Browser, Node.js, and Serverless environments - */ - -// UUID adapter -export * from './uuid.js' -export { default as uuid } from './uuid.js' - -// Crypto adapter -export * from './crypto.js' -export { default as crypto } from './crypto.js' - -// File system adapter -export * from './fs.js' -export { default as fs } from './fs.js' - -// Path adapter -export * from './path.js' -export { default as path } from './path.js' - -// Events adapter -export * from './events.js' -export { default as events } from './events.js' - -// Convenience re-exports for common patterns -export { v4 as uuidv4 } from './uuid.js' -export { EventEmitter } from './events.js' \ No newline at end of file diff --git a/src/utils/callerLocation.ts b/src/utils/callerLocation.ts index 460cda4f..a9891f1a 100644 --- a/src/utils/callerLocation.ts +++ b/src/utils/callerLocation.ts @@ -38,7 +38,7 @@ export function findCallerLocation(extraSkipPatterns: string[] = []): string | n for (const raw of lines) { const line = raw.trim() // Always skip Brainy's own source + compiled output. Consumers need their - // own call site, not `brainy.ts:XXXX` or `dist/brainy.js:XXXX`. + // own call site, not a line inside `brainy.ts` or `dist/brainy.js`. if (line.includes('/src/brainy.ts') || line.includes('/dist/brainy.js')) continue // Skip the validation + diagnostic helpers regardless of which file they // live in — they're plumbing between the public API and the consumer. diff --git a/src/utils/embedding.ts b/src/utils/embedding.ts index 57aca072..558b2f17 100644 --- a/src/utils/embedding.ts +++ b/src/utils/embedding.ts @@ -120,7 +120,7 @@ export function createTransformerEmbedding(options: TransformerEmbeddingOptions * Convenience function to detect best device (always returns 'wasm') */ export async function detectBestDevice(): Promise<'cpu' | 'webgpu' | 'cuda' | 'wasm'> { - return 'wasm' as any + return 'wasm' } /** diff --git a/src/utils/enhancedLogger.ts b/src/utils/enhancedLogger.ts deleted file mode 100644 index 6c0393b2..00000000 --- a/src/utils/enhancedLogger.ts +++ /dev/null @@ -1,296 +0,0 @@ -/** - * Enhanced logging system that bridges old logger with new structured logger - * Provides backward compatibility while enabling gradual migration - */ - -import { - structuredLogger, - createModuleLogger as createStructuredModuleLogger, - LogLevel as StructuredLogLevel, - type LogContext, - type ModuleLogger -} from './structuredLogger.js' -import { isProductionEnvironment, getLogLevel } from './environment.js' - -// Re-export LogLevel for compatibility -export enum LogLevel { - ERROR = 0, - WARN = 1, - INFO = 2, - DEBUG = 3, - TRACE = 4 -} - -// Map old LogLevel to new StructuredLogLevel -function mapLogLevel(level: LogLevel): StructuredLogLevel { - switch (level) { - case LogLevel.ERROR: return StructuredLogLevel.ERROR - case LogLevel.WARN: return StructuredLogLevel.WARN - case LogLevel.INFO: return StructuredLogLevel.INFO - case LogLevel.DEBUG: return StructuredLogLevel.DEBUG - case LogLevel.TRACE: return StructuredLogLevel.TRACE - default: return StructuredLogLevel.INFO - } -} - -export interface LoggerConfig { - level: LogLevel - modules?: { - [moduleName: string]: LogLevel - } - timestamps?: boolean - includeModule?: boolean - handler?: (level: LogLevel, module: string, message: string, ...args: any[]) => void -} - -/** - * Enhanced Logger that uses structured logger internally - * Maintains backward compatibility with existing code - */ -class EnhancedLogger { - private static instance: EnhancedLogger - private config: LoggerConfig = { - level: LogLevel.ERROR, - timestamps: false, - includeModule: true - } - - private constructor() { - this.applyEnvironmentDefaults() - - // Sync with structured logger - this.syncWithStructuredLogger() - - // Set log level from environment variable if available - const envLogLevel = process.env.BRAINY_LOG_LEVEL - if (envLogLevel) { - const level = LogLevel[envLogLevel.toUpperCase() as keyof typeof LogLevel] - if (level !== undefined) { - this.config.level = level - this.syncWithStructuredLogger() - } - } - - // Parse module-specific log levels - const moduleLogLevels = process.env.BRAINY_MODULE_LOG_LEVELS - if (moduleLogLevels) { - try { - this.config.modules = JSON.parse(moduleLogLevels) - this.syncWithStructuredLogger() - } catch (e) { - // Ignore parsing errors - } - } - } - - private applyEnvironmentDefaults(): void { - const envLogLevel = getLogLevel() - - switch (envLogLevel) { - case 'silent': - this.config.level = -1 as LogLevel - break - case 'error': - this.config.level = LogLevel.ERROR - this.config.timestamps = false - break - case 'warn': - this.config.level = LogLevel.WARN - this.config.timestamps = false - break - case 'info': - this.config.level = LogLevel.INFO - this.config.timestamps = true - break - case 'verbose': - this.config.level = LogLevel.DEBUG - this.config.timestamps = true - break - } - - if (isProductionEnvironment()) { - this.config.level = Math.min(this.config.level, LogLevel.ERROR) - this.config.timestamps = false - this.config.includeModule = false - } - } - - private syncWithStructuredLogger(): void { - // Convert modules config - const modules: Record = {} - if (this.config.modules) { - for (const [module, level] of Object.entries(this.config.modules)) { - modules[module] = mapLogLevel(level) - } - } - - // Configure structured logger - structuredLogger.configure({ - level: mapLogLevel(this.config.level), - modules, - format: this.config.timestamps ? 'pretty' : 'simple' - }) - } - - static getInstance(): EnhancedLogger { - if (!EnhancedLogger.instance) { - EnhancedLogger.instance = new EnhancedLogger() - } - return EnhancedLogger.instance - } - - configure(config: Partial): void { - this.config = { ...this.config, ...config } - this.syncWithStructuredLogger() - } - - private shouldLog(level: LogLevel, module: string): boolean { - if (this.config.modules && this.config.modules[module] !== undefined) { - return level <= this.config.modules[module] - } - return level <= this.config.level - } - - error(module: string, message: string, ...args: any[]): void { - const logger = createStructuredModuleLogger(module) - logger.error(message, { data: args }) - } - - warn(module: string, message: string, ...args: any[]): void { - const logger = createStructuredModuleLogger(module) - logger.warn(message, { data: args }) - } - - info(module: string, message: string, ...args: any[]): void { - const logger = createStructuredModuleLogger(module) - logger.info(message, { data: args }) - } - - debug(module: string, message: string, ...args: any[]): void { - const logger = createStructuredModuleLogger(module) - logger.debug(message, { data: args }) - } - - trace(module: string, message: string, ...args: any[]): void { - const logger = createStructuredModuleLogger(module) - logger.trace(message, { data: args }) - } - - createModuleLogger(module: string) { - const structuredLogger = createStructuredModuleLogger(module) - - // Return a backward-compatible interface - return { - error: (message: string, ...args: any[]) => - structuredLogger.error(message, { data: args }), - warn: (message: string, ...args: any[]) => - structuredLogger.warn(message, { data: args }), - info: (message: string, ...args: any[]) => - structuredLogger.info(message, { data: args }), - debug: (message: string, ...args: any[]) => - structuredLogger.debug(message, { data: args }), - trace: (message: string, ...args: any[]) => - structuredLogger.trace(message, { data: args }), - // New structured logging methods - withContext: (context: LogContext) => - structuredLogger.withContext(context), - startTimer: (label: string) => - structuredLogger.startTimer(label), - endTimer: (label: string) => - structuredLogger.endTimer(label) - } - } -} - -// Export singleton instance -export const logger = EnhancedLogger.getInstance() - -// Export convenience function for creating module loggers -export function createModuleLogger(module: string) { - return logger.createModuleLogger(module) -} - -// Export function to configure logger -export function configureLogger(config: Partial) { - logger.configure(config) -} - -/** - * Smart console replacement that uses structured logger - */ -export const smartConsole = { - log: (message?: any, ...args: any[]) => { - const logger = createStructuredModuleLogger('console') - logger.info(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - }, - - info: (message?: any, ...args: any[]) => { - const logger = createStructuredModuleLogger('console') - logger.info(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - }, - - warn: (message?: any, ...args: any[]) => { - const logger = createStructuredModuleLogger('console') - logger.warn(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - }, - - error: (message?: any, ...args: any[]) => { - const logger = createStructuredModuleLogger('console') - logger.error(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - }, - - debug: (message?: any, ...args: any[]) => { - const logger = createStructuredModuleLogger('console') - logger.debug(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - }, - - trace: (message?: any, ...args: any[]) => { - const logger = createStructuredModuleLogger('console') - logger.trace(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - } -} - -/** - * Production-optimized logging functions - */ -export const prodLog = { - error: (message?: any, ...args: any[]) => { - const logger = createStructuredModuleLogger('prod') - logger.error(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - }, - - warn: (message?: any, ...args: any[]) => { - if (!isProductionEnvironment() || process.env.BRAINY_LOG_LEVEL) { - const logger = createStructuredModuleLogger('prod') - logger.warn(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - } - }, - - info: (message?: any, ...args: any[]) => { - if (!isProductionEnvironment() || process.env.BRAINY_LOG_LEVEL) { - const logger = createStructuredModuleLogger('prod') - logger.info(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - } - }, - - debug: (message?: any, ...args: any[]) => { - if (!isProductionEnvironment() || process.env.BRAINY_LOG_LEVEL) { - const logger = createStructuredModuleLogger('prod') - logger.debug(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - } - }, - - log: (message?: any, ...args: any[]) => { - if (!isProductionEnvironment() || process.env.BRAINY_LOG_LEVEL) { - const logger = createStructuredModuleLogger('prod') - logger.info(typeof message === 'string' ? message : JSON.stringify(message), { data: args }) - } - } -} - -// Re-export structured logger utilities for new code -export { - createModuleLogger as createStructuredModuleLogger, - type LogContext, - type ModuleLogger -} from './structuredLogger.js' \ No newline at end of file diff --git a/src/utils/entityIdMapper.ts b/src/utils/entityIdMapper.ts index f2e25778..5c02ce1b 100644 --- a/src/utils/entityIdMapper.ts +++ b/src/utils/entityIdMapper.ts @@ -124,8 +124,11 @@ export class EntityIdMapper implements EntityIdMapperProvider { try { const metadata = await this.storage.getMetadata(this.storageKey) // metadata IS the data (no nested 'data' property) - if (metadata && (metadata as any).nextId !== undefined) { - const data = metadata as any as EntityIdMapperData + if (metadata && metadata.nextId !== undefined) { + // Typed boundary: mapper state round-trips through the storage + // metadata channel as plain JSON; the `nextId` probe above identifies + // the persisted EntityIdMapperData shape. + const data = metadata as unknown as EntityIdMapperData this.nextId = data.nextId // Rebuild maps from serialized data @@ -305,7 +308,7 @@ export class EntityIdMapper implements EntityIdMapperProvider { intToUuid: Object.fromEntries(this.intToUuid) } - await this.storage.saveMetadata(this.storageKey, data as any) + await this.storage.saveMetadata(this.storageKey, data) this.dirty = false } diff --git a/src/utils/fieldTypeInference.ts b/src/utils/fieldTypeInference.ts index b3d9fa1e..36a415b2 100644 --- a/src/utils/fieldTypeInference.ts +++ b/src/utils/fieldTypeInference.ts @@ -22,7 +22,7 @@ * 4. Store result for future queries */ -import { StorageAdapter } from '../coreTypes.js' +import { StorageAdapter, NounMetadata } from '../coreTypes.js' import { prodLog } from './logger.js' /** @@ -412,7 +412,7 @@ export class FieldTypeInference { noun: 'FieldTypeCache', ...typeInfo } - await this.storage.saveMetadata(cacheKey, metadataObj as any).catch(error => { + await this.storage.saveMetadata(cacheKey, metadataObj).catch(error => { prodLog.warn(`Failed to save field type cache for '${field}':`, error) }) } @@ -487,8 +487,10 @@ export class FieldTypeInference { if (field) { this.typeCache.delete(field) const cacheKey = `${this.CACHE_STORAGE_PREFIX}${field}` - // null signals deletion to storage adapter - await this.storage.saveMetadata(cacheKey, null as any) + // Typed boundary: the storage metadata channel doubles as the delete + // path — writing a JSON `null` tombstone clears the cached entry, but + // the adapter signature only models real payloads. + await this.storage.saveMetadata(cacheKey, null as unknown as NounMetadata) } else { this.typeCache.clear() } diff --git a/src/utils/intelligentTypeMapper.ts b/src/utils/intelligentTypeMapper.ts deleted file mode 100644 index 8daba3cb..00000000 --- a/src/utils/intelligentTypeMapper.ts +++ /dev/null @@ -1,393 +0,0 @@ -/** - * Intelligent Type Mapper - * Maps generic/invalid type names to specific semantic types based on data analysis - * Prevents semantic degradation from overuse of generic types - */ - -import { NounType, VerbType } from '../types/graphTypes.js' - -/** - * Common aliases that users might use - */ -const GENERIC_ALIASES = new Set([ - 'entity', - 'item', - 'object', - 'node', - 'record', - 'entry', - 'data', - 'resource' -]) - -/** - * Field signatures for type inference - */ -const TYPE_SIGNATURES = { - // Person indicators - person: { - required: [], - indicators: ['email', 'firstName', 'lastName', 'name', 'phone', 'username', 'userId'], - patterns: [/@/, /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i], - weight: 10 - }, - - // User account indicators - user: { - required: [], - indicators: ['username', 'password', 'accountId', 'loginTime', 'permissions', 'role'], - patterns: [], - weight: 9 - }, - - // Organization indicators - organization: { - required: [], - indicators: ['companyName', 'orgName', 'ein', 'vatNumber', 'employees', 'headquarters'], - patterns: [], - weight: 8 - }, - - // Product indicators - product: { - required: [], - indicators: ['price', 'sku', 'barcode', 'inventory', 'cost', 'productId', 'inStock'], - patterns: [/^\$?\d+\.?\d*$/, /^[A-Z0-9-]+$/], - weight: 8 - }, - - // Document indicators - document: { - required: [], - indicators: ['content', 'text', 'body', 'title', 'author', 'markdown', 'html'], - patterns: [], - weight: 7 - }, - - // Message indicators - message: { - required: [], - indicators: ['from', 'to', 'subject', 'body', 'sentAt', 'messageId', 'threadId'], - patterns: [], - weight: 7 - }, - - // Task indicators - task: { - required: [], - indicators: ['dueDate', 'assignee', 'status', 'priority', 'completed', 'taskId'], - patterns: [], - weight: 7 - }, - - // Event indicators - event: { - required: [], - indicators: ['startTime', 'endTime', 'date', 'location', 'attendees', 'eventType'], - patterns: [], - weight: 6 - }, - - // Location indicators - location: { - required: [], - indicators: ['latitude', 'longitude', 'address', 'city', 'country', 'zipCode', 'coordinates'], - patterns: [/^-?\d+\.\d+$/, /^\d{5}(-\d{4})?$/], - weight: 6 - }, - - // File indicators - file: { - required: [], - indicators: ['filename', 'filepath', 'extension', 'mimeType', 'fileSize', 'checksum'], - patterns: [/\.[a-z0-9]+$/i], - weight: 5 - }, - - // Dataset indicators - dataset: { - required: [], - indicators: ['schema', 'rows', 'columns', 'records', 'dataType', 'format'], - patterns: [], - weight: 5 - }, - - // Media indicators - media: { - required: [], - indicators: ['url', 'thumbnail', 'duration', 'resolution', 'codec', 'bitrate'], - patterns: [/\.(jpg|jpeg|png|gif|mp4|mp3|wav|avi)$/i], - weight: 5 - }, - - // Project indicators - project: { - required: [], - indicators: ['deadline', 'budget', 'team', 'milestones', 'deliverables', 'projectId'], - patterns: [], - weight: 5 - }, - - // Service indicators - service: { - required: [], - indicators: ['endpoint', 'apiKey', 'serviceUrl', 'port', 'protocol', 'healthCheck'], - patterns: [/^https?:\/\//, /:\d+$/], - weight: 4 - } -} - -/** - * Intelligent Type Mapper - */ -export class IntelligentTypeMapper { - private typeCache: Map = new Map() - private inferenceStats = { - total: 0, - inferred: 0, - defaulted: 0, - cached: 0 - } - - /** - * Map a noun type, with intelligent inference for generic types - */ - mapNounType(inputType: string, data?: any): string { - // Check if it's already a valid type - if (this.isValidNounType(inputType)) { - return inputType - } - - // Check cache for this exact input - const cacheKey = `${inputType}-${JSON.stringify(data || {}).substring(0, 100)}` - if (this.typeCache.has(cacheKey)) { - this.inferenceStats.cached++ - return this.typeCache.get(cacheKey)! - } - - this.inferenceStats.total++ - - // If it's a generic alias and we have data, try to infer - if (GENERIC_ALIASES.has(inputType.toLowerCase()) && data) { - const inferred = this.inferTypeFromData(data) - if (inferred) { - this.inferenceStats.inferred++ - this.typeCache.set(cacheKey, inferred) - return inferred - } - } - - // Handle specific common mappings - const directMapping = this.getDirectMapping(inputType) - if (directMapping) { - this.typeCache.set(cacheKey, directMapping) - return directMapping - } - - // Default to 'thing' for truly unknown types - this.inferenceStats.defaulted++ - const defaultType = NounType.Thing - this.typeCache.set(cacheKey, defaultType) - return defaultType - } - - /** - * Map a verb type - */ - mapVerbType(inputType: string): string { - // Check if it's already valid - if (this.isValidVerbType(inputType)) { - return inputType - } - - // Common verb mappings - const verbMappings: Record = { - 'related': VerbType.RelatedTo, - 'relates': VerbType.RelatedTo, - 'has': VerbType.Contains, - 'includes': VerbType.Contains, - 'belongsTo': VerbType.PartOf, - 'in': VerbType.LocatedAt, - 'at': VerbType.LocatedAt, - 'references': VerbType.References, - 'cites': VerbType.References, - 'before': VerbType.Precedes, - 'after': VerbType.Precedes, - 'causes': VerbType.Causes, - 'needs': VerbType.Requires, - 'requires': VerbType.Requires, - 'makes': VerbType.Creates, - 'produces': VerbType.Creates, - 'changes': VerbType.Modifies, - 'updates': VerbType.Modifies, - 'owns': VerbType.Owns, - 'ownedBy': VerbType.Owns, // Use BelongsTo for reverse ownership - 'uses': VerbType.Uses, - 'usedBy': VerbType.Uses // Same relationship, just interpret direction - } - - const normalized = inputType.toLowerCase() - return verbMappings[normalized] || VerbType.RelatedTo - } - - /** - * Infer type from data structure - */ - private inferTypeFromData(data: any): string | null { - if (!data || typeof data !== 'object') return null - - const scores: Map = new Map() - const fields = Object.keys(data) - const values = Object.values(data) - - // Calculate scores for each type based on field matches - for (const [type, signature] of Object.entries(TYPE_SIGNATURES)) { - let score = 0 - - // Check required fields - if (signature.required.length > 0) { - const hasRequired = signature.required.every(field => fields.includes(field)) - if (!hasRequired) continue - score += signature.weight * 2 - } - - // Check indicator fields - for (const field of fields) { - if (signature.indicators.some(indicator => - field.toLowerCase().includes(indicator.toLowerCase()) - )) { - score += signature.weight - } - } - - // Check value patterns - for (const value of values) { - if (typeof value === 'string' && signature.patterns.length > 0) { - for (const pattern of signature.patterns) { - if (pattern.test(value)) { - score += signature.weight / 2 - break - } - } - } - } - - if (score > 0) { - scores.set(type, score) - } - } - - // Return the type with highest score - if (scores.size > 0) { - const sorted = Array.from(scores.entries()).sort((a, b) => b[1] - a[1]) - return sorted[0][0] - } - - // Fallback inference based on data structure - if (fields.includes('url') || fields.includes('href')) { - return NounType.Document - } - - if (Array.isArray(data) || fields.includes('items') || fields.includes('elements')) { - return NounType.Collection - } - - // Check if it looks like a process/workflow - if (fields.includes('steps') || fields.includes('stages')) { - return NounType.Process - } - - return null - } - - /** - * Get direct mapping for common aliases - */ - private getDirectMapping(inputType: string): string | null { - const mappings: Record = { - // Specific mappings that aren't generic - 'company': NounType.Organization, - 'corp': NounType.Organization, - 'business': NounType.Organization, - 'employee': NounType.Person, - 'staff': NounType.Person, - 'customer': NounType.Person, - 'client': NounType.Person, - 'article': NounType.Document, - 'post': NounType.Document, - 'page': NounType.Document, - 'image': NounType.Media, - 'video': NounType.Media, - 'audio': NounType.Media, - 'photo': NounType.Media, - 'place': NounType.Location, - 'address': NounType.Location, - 'country': NounType.Location, - 'city': NounType.Location, - 'todo': NounType.Task, - 'job': NounType.Task, - 'work': NounType.Task, - 'meeting': NounType.Event, - 'appointment': NounType.Event, - 'conference': NounType.Event, - 'folder': NounType.Collection, - 'group': NounType.Collection, - 'list': NounType.Collection, - 'category': NounType.Collection - } - - const normalized = inputType.toLowerCase() - return mappings[normalized] || null - } - - /** - * Check if a type is valid - */ - private isValidNounType(type: string): boolean { - return Object.values(NounType).includes(type as any) - } - - /** - * Check if a verb type is valid - */ - private isValidVerbType(type: string): boolean { - return Object.values(VerbType).includes(type as any) - } - - /** - * Get inference statistics - */ - getStats() { - return { - ...this.inferenceStats, - cacheSize: this.typeCache.size, - inferenceRate: this.inferenceStats.total > 0 - ? (this.inferenceStats.inferred / this.inferenceStats.total) - : 0 - } - } - - /** - * Clear the type cache - */ - clearCache(): void { - this.typeCache.clear() - } -} - -// Singleton instance -export const typeMapper = new IntelligentTypeMapper() - -/** - * Helper function for easy type mapping - */ -export function mapNounType(inputType: string, data?: any): string { - return typeMapper.mapNounType(inputType, data) -} - -/** - * Helper function for verb mapping - */ -export function mapVerbType(inputType: string): string { - return typeMapper.mapVerbType(inputType) -} \ No newline at end of file diff --git a/src/utils/metadataIndex.ts b/src/utils/metadataIndex.ts index 2b7e8174..10607768 100644 --- a/src/utils/metadataIndex.ts +++ b/src/utils/metadataIndex.ts @@ -4,7 +4,7 @@ * Automatically updates indexes when data changes */ -import { StorageAdapter, resolveEntityField } from '../coreTypes.js' +import { StorageAdapter, resolveEntityField, NounMetadata, VerbMetadata } from '../coreTypes.js' import { ColumnStore } from '../indexes/columnStore/ColumnStore.js' import type { MetadataIndexProvider } from '../plugin.js' import { MetadataIndexCache, MetadataIndexCacheConfig } from './metadataIndexCache.js' @@ -1520,13 +1520,13 @@ export class MetadataIndexManager implements MetadataIndexProvider { const allIds = new Set() // Storage.getNouns() is the definitive source of all entity IDs - if (this.storage && typeof (this.storage as any).getNouns === 'function') { + if (this.storage && typeof this.storage.getNouns === 'function') { try { - const result = await (this.storage as any).getNouns({ + const result = await this.storage.getNouns({ pagination: { limit: 100000 } }) if (result && result.items) { - result.items.forEach((item: any) => { + result.items.forEach((item) => { if (item.id) allIds.add(item.id) }) } @@ -2446,7 +2446,7 @@ export class MetadataIndexManager implements MetadataIndexProvider { noun: 'MetadataFieldIndex', values: fieldIndex.values, lastUpdated: fieldIndex.lastUpdated - } as any) + }) // Update unified cache const size = JSON.stringify(fieldIndex).length @@ -2582,8 +2582,11 @@ export class MetadataIndexManager implements MetadataIndexProvider { await this.chunkManager.deleteChunk(field, chunkId) } - // Delete the sparse index file itself - await this.storage.saveMetadata(indexPath, null as any) + // Delete the sparse index file itself. + // Typed boundary: the storage metadata channel doubles as the delete + // path — writing a JSON `null` tombstone clears the entry, but the + // adapter signature only models real payloads. + await this.storage.saveMetadata(indexPath, null as unknown as NounMetadata) } } catch (error) { // Silent failure - if we can't delete old chunks, rebuild will still work @@ -2612,9 +2615,11 @@ export class MetadataIndexManager implements MetadataIndexProvider { deletedCount++ } - // Delete field registry + // Delete field registry. + // Typed boundary: writing a JSON `null` tombstone clears the entry, but + // the adapter signature only models real payloads. try { - await this.storage.saveMetadata('__metadata_field_registry__', null as any) + await this.storage.saveMetadata('__metadata_field_registry__', null as unknown as NounMetadata) } catch (error) { prodLog.debug('Could not delete field registry:', error) } @@ -3104,10 +3109,15 @@ export class MetadataIndexManager implements MetadataIndexProvider { prodLog.info(`šŸ“¦ Loading ${result.items.length} verbs with metadata...`) const verbIds = result.items.map(verb => verb.id) - let verbMetadataBatch: Map + let verbMetadataBatch: Map - if ((this.storage as any).getVerbMetadataBatch) { - verbMetadataBatch = await (this.storage as any).getVerbMetadataBatch(verbIds) + // Optional adapter capability: batched verb-metadata reads. Not part of + // the StorageAdapter contract, so it is probed structurally. + const batchCapableStorage = this.storage as StorageAdapter & { + getVerbMetadataBatch?: (ids: string[]) => Promise> + } + if (batchCapableStorage.getVerbMetadataBatch) { + verbMetadataBatch = await batchCapableStorage.getVerbMetadataBatch(verbIds) prodLog.info(`āœ… Loaded ${verbMetadataBatch.size}/${verbIds.length} verb metadata objects`) } else { verbMetadataBatch = new Map() diff --git a/src/utils/metadataIndexChunking.ts b/src/utils/metadataIndexChunking.ts index e5a289b3..6707c427 100644 --- a/src/utils/metadataIndexChunking.ts +++ b/src/utils/metadataIndexChunking.ts @@ -20,7 +20,7 @@ * - EntityIdMapper handles UUID ↔ integer conversion */ -import { StorageAdapter } from '../coreTypes.js' +import { StorageAdapter, NounMetadata } from '../coreTypes.js' import { prodLog } from './logger.js' import { RoaringBitmap32 } from './roaring/index.js' import type { EntityIdMapper } from './entityIdMapper.js' @@ -109,6 +109,29 @@ export interface ChunkData { lastUpdated: number } +/** + * Storage representation of a roaring bitmap inside a serialized chunk. + * Produced by `ChunkManager.saveChunk()` — portable-format bytes as a plain + * number array so the payload survives JSON round-trips. + */ +type SerializedRoaringBitmap = { + buffer: number[] + size: number +} + +/** + * Storage representation of a chunk as persisted by `ChunkManager.saveChunk()` + * and re-hydrated by `ChunkManager.loadChunk()`. A type alias (not an + * interface) so it carries an implicit index signature and converts cleanly + * to/from the `NounMetadata` shape used by the storage metadata channel. + */ +type SerializedChunkData = { + chunkId: number + field: string + entries: Record + lastUpdated: number +} + // ============================================================================ // BloomFilter - Production-Ready Implementation // ============================================================================ @@ -609,25 +632,26 @@ export class ChunkManager { const data = await this.storage.getMetadata(chunkPath) if (data) { - // Cast NounMetadata to chunk data structure - const chunkData = data as unknown as any + // Chunks round-trip through the storage metadata channel; re-type the + // JSON payload to the serialized chunk shape written by saveChunk() + const chunkData = data as SerializedChunkData // Deserialize: convert serialized roaring bitmaps back to RoaringBitmap32 objects const chunk: ChunkData = { - chunkId: chunkData.chunkId as number, - field: chunkData.field as string, + chunkId: chunkData.chunkId, + field: chunkData.field, entries: new Map( Object.entries(chunkData.entries).map(([value, serializedBitmap]) => { // Deserialize roaring bitmap from portable format const bitmap = new RoaringBitmap32() - if (serializedBitmap && typeof serializedBitmap === 'object' && (serializedBitmap as any).buffer) { + if (serializedBitmap && typeof serializedBitmap === 'object' && serializedBitmap.buffer) { // Deserialize from Buffer - bitmap.deserialize(Buffer.from((serializedBitmap as any).buffer), 'portable') + bitmap.deserialize(Buffer.from(serializedBitmap.buffer), 'portable') } - return [value, bitmap] + return [value, bitmap] as const }) ), - lastUpdated: chunkData.lastUpdated as number + lastUpdated: chunkData.lastUpdated } this.chunkCache.set(cacheKey, chunk) @@ -668,7 +692,7 @@ export class ChunkManager { } const chunkPath = this.getChunkPath(chunk.field, chunk.chunkId) - await this.storage.saveMetadata(chunkPath, serializable as any) + await this.storage.saveMetadata(chunkPath, serializable) } /** @@ -842,8 +866,10 @@ export class ChunkManager { this.chunkCache.delete(cacheKey) const chunkPath = this.getChunkPath(field, chunkId) - // null signals deletion to storage adapter - await this.storage.saveMetadata(chunkPath, null as any) + // Typed boundary: the storage metadata channel doubles as the delete path — + // writing a JSON `null` tombstone clears the chunk. The adapter signature + // only models real payloads, so the null must be re-typed here. + await this.storage.saveMetadata(chunkPath, null as unknown as NounMetadata) } /** diff --git a/src/utils/mutex.ts b/src/utils/mutex.ts index 87f56065..9897d193 100644 --- a/src/utils/mutex.ts +++ b/src/utils/mutex.ts @@ -278,6 +278,8 @@ export function getGlobalMutex(): MutexInterface { */ export async function cleanupMutexes(): Promise { if (globalMutex && 'cleanup' in globalMutex) { - await (globalMutex as any).cleanup() + // Only FileMutex (defined above) carries a cleanup() method; the 'in' + // check above guarantees we hold that implementation. + await (globalMutex as FileMutex).cleanup() } } \ No newline at end of file diff --git a/src/utils/nodeVersionCheck.ts b/src/utils/nodeVersionCheck.ts deleted file mode 100644 index d73a9061..00000000 --- a/src/utils/nodeVersionCheck.ts +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Node.js Version Compatibility Check - * - * Brainy requires Node.js 22.x LTS for maximum stability with ONNX Runtime. - * This prevents V8 HandleScope locking issues in worker threads. - */ - -import { isNode } from './environment.js' - -export interface VersionInfo { - current: string - major: number - isSupported: boolean - recommendation: string -} - -/** - * Check if the current Node.js version is supported - */ -export function checkNodeVersion(): VersionInfo { - // In browser environment, skip version check - if (!isNode()) { - return { - current: 'browser', - major: 0, - isSupported: true, // Always supported in browser - recommendation: 'Browser environment' - } - } - - // Only access process.version in Node.js environment - const nodeVersion = process.version - const majorVersion = parseInt(nodeVersion.split('.')[0].substring(1)) - - const versionInfo: VersionInfo = { - current: nodeVersion, - major: majorVersion, - isSupported: majorVersion === 22, - recommendation: 'Node.js 22.x LTS' - } - - return versionInfo -} - -/** - * Enforce Node.js version requirement with helpful error messaging - */ -export function enforceNodeVersion(): void { - const versionInfo = checkNodeVersion() - - // Skip enforcement in browser environment - if (!isNode()) { - return - } - - if (!versionInfo.isSupported) { - const errorMessage = [ - '🚨 BRAINY COMPATIBILITY ERROR', - '━'.repeat(50), - `āŒ Current Node.js: ${versionInfo.current}`, - `āœ… Required: ${versionInfo.recommendation}`, - '', - 'šŸ’” Quick Fix:', - ' nvm install 22 && nvm use 22', - ' npm install', - '', - 'šŸ“– Why Node.js 22?', - ' • Maximum ONNX Runtime stability', - ' • Prevents V8 threading crashes', - ' • Optimal zero-config performance', - '', - 'šŸ”— More info: https://github.com/soulcraftlabs/brainy#node-version', - '━'.repeat(50) - ].join('\n') - - throw new Error(errorMessage) - } -} - -/** - * Soft warning for version issues (non-blocking) - */ -export function warnNodeVersion(): boolean { - const versionInfo = checkNodeVersion() - - // Skip warning in browser environment - if (!isNode()) { - return true - } - - if (!versionInfo.isSupported) { - console.warn([ - 'āš ļø BRAINY VERSION WARNING', - ` Current: ${versionInfo.current}`, - ` Recommended: ${versionInfo.recommendation}`, - ' Consider upgrading for best stability', - '' - ].join('\n')) - - return false - } - - return true -} \ No newline at end of file diff --git a/src/utils/paramValidation.ts b/src/utils/paramValidation.ts index 4e82b994..c9036455 100644 --- a/src/utils/paramValidation.ts +++ b/src/utils/paramValidation.ts @@ -173,7 +173,7 @@ export interface ValidationConfigOptions { * These adapt to available memory and observed performance */ export class ValidationConfig { - private static instance: ValidationConfig + private static instance: ValidationConfig | null = null // Dynamic limits based on system public maxLimit: number @@ -265,7 +265,7 @@ export class ValidationConfig { * Reset singleton (for testing or reconfiguration) */ static reset(): void { - ValidationConfig.instance = null as any + ValidationConfig.instance = null } /** diff --git a/src/utils/periodicCleanup.ts b/src/utils/periodicCleanup.ts deleted file mode 100644 index 66e28cc2..00000000 --- a/src/utils/periodicCleanup.ts +++ /dev/null @@ -1,293 +0,0 @@ -/** - * Periodic Cleanup for Soft-Deleted Items - * - * SAFETY-FIRST APPROACH: - * - Maintains durability guarantees (storage-first) - * - Coordinates HNSW and metadata index consistency - * - Isolated from live operations - * - Graceful failure handling - */ - -import { prodLog } from './logger.js' -import { DELETED_FIELD, isDeleted } from './metadataNamespace.js' -import type { StorageAdapter } from '../coreTypes.js' -import type { JsHnswVectorIndex } from '../hnsw/hnswIndex.js' -import type { MetadataIndexManager } from './metadataIndex.js' - -export interface CleanupConfig { - /** Age in milliseconds after which soft-deleted items are eligible for cleanup */ - maxAge: number - /** Maximum number of items to clean up in one batch */ - batchSize: number - /** Interval between cleanup runs (milliseconds) */ - cleanupInterval: number - /** Whether to run cleanup automatically */ - enabled: boolean -} - -export interface CleanupStats { - itemsProcessed: number - itemsDeleted: number - errors: number - lastRun: number - nextRun: number -} - -/** - * Coordinates safe cleanup of old soft-deleted items across all indexes - * - * CRITICAL SAFETY FEATURES: - * 1. Storage-first deletion (durability) - * 2. Index consistency coordination - * 3. Batch processing with limits - * 4. Error isolation and recovery - */ -export class PeriodicCleanup { - private storage: StorageAdapter - private hnswIndex: JsHnswVectorIndex - private metadataIndex: MetadataIndexManager | null - private config: CleanupConfig - private stats: CleanupStats - private cleanupTimer: NodeJS.Timeout | null = null - private running = false - - constructor( - storage: StorageAdapter, - hnswIndex: JsHnswVectorIndex, - metadataIndex: MetadataIndexManager | null, - config: Partial = {} - ) { - this.storage = storage - this.hnswIndex = hnswIndex - this.metadataIndex = metadataIndex - - // Default: clean up items deleted more than 1 hour ago - this.config = { - maxAge: config.maxAge ?? 60 * 60 * 1000, // 1 hour - batchSize: config.batchSize ?? 100, // 100 items max per batch - cleanupInterval: config.cleanupInterval ?? 15 * 60 * 1000, // Every 15 minutes - enabled: config.enabled ?? true - } - - this.stats = { - itemsProcessed: 0, - itemsDeleted: 0, - errors: 0, - lastRun: 0, - nextRun: 0 - } - } - - /** - * Start periodic cleanup - */ - start(): void { - if (!this.config.enabled || this.cleanupTimer) { - return - } - - prodLog.info(`Starting periodic cleanup: maxAge=${this.config.maxAge}, batchSize=${this.config.batchSize}, interval=${this.config.cleanupInterval}`) - - this.scheduleNext() - } - - /** - * Stop periodic cleanup - */ - stop(): void { - if (this.cleanupTimer) { - clearTimeout(this.cleanupTimer) - this.cleanupTimer = null - } - - prodLog.info('Stopped periodic cleanup') - } - - /** - * Run cleanup manually - */ - async runNow(): Promise { - if (this.running) { - throw new Error('Cleanup already running') - } - - return this.performCleanup() - } - - /** - * Get current cleanup statistics - */ - getStats(): CleanupStats { - return { ...this.stats } - } - - private scheduleNext(): void { - const nextRun = Date.now() + this.config.cleanupInterval - this.stats.nextRun = nextRun - - this.cleanupTimer = setTimeout(async () => { - await this.performCleanup() - this.scheduleNext() - }, this.config.cleanupInterval) - } - - /** - * CRITICAL: Coordinated cleanup across all indexes - * - * SAFETY PROTOCOL: - * 1. Find eligible items (old + soft-deleted) - * 2. Remove from storage FIRST (durability) - * 3. Remove from HNSW (graph consistency) - * 4. Remove from metadata index (search consistency) - * 5. Track stats and errors - */ - private async performCleanup(): Promise { - if (this.running) { - prodLog.warn('Cleanup already running, skipping') - return this.stats - } - - this.running = true - const startTime = Date.now() - this.stats.lastRun = startTime - - try { - prodLog.debug(`Starting cleanup run: maxAge=${this.config.maxAge}, cutoffTime=${startTime - this.config.maxAge}`) - - // Step 1: Find eligible items for cleanup - const eligibleItems = await this.findEligibleItems(startTime) - - if (eligibleItems.length === 0) { - prodLog.debug('No items eligible for cleanup') - return this.stats - } - - prodLog.info(`Found ${eligibleItems.length} items eligible for cleanup`) - - // Step 2: Process in batches for safety - let processed = 0 - let deleted = 0 - let errors = 0 - - for (let i = 0; i < eligibleItems.length; i += this.config.batchSize) { - const batch = eligibleItems.slice(i, i + this.config.batchSize) - - const batchResult = await this.processBatch(batch) - processed += batchResult.processed - deleted += batchResult.deleted - errors += batchResult.errors - - // Small delay between batches to avoid overwhelming the system - if (i + this.config.batchSize < eligibleItems.length) { - await new Promise(resolve => setTimeout(resolve, 10)) - } - } - - // Update stats - this.stats.itemsProcessed += processed - this.stats.itemsDeleted += deleted - this.stats.errors += errors - - prodLog.info(`Cleanup run completed: processed=${processed}, deleted=${deleted}, errors=${errors}, duration=${Date.now() - startTime}ms`) - - } catch (error) { - prodLog.error(`Cleanup run failed: ${error}`) - this.stats.errors++ - } finally { - this.running = false - } - - return this.stats - } - - /** - * Find items eligible for cleanup (old + soft-deleted) - */ - private async findEligibleItems(currentTime: number): Promise { - const cutoffTime = currentTime - this.config.maxAge - const eligibleItems: string[] = [] - - try { - // Get all nouns from storage (using pagination to avoid memory issues) - const nounsResult = await this.storage.getNouns({ - pagination: { limit: 1000 } // Process in chunks - }) - - for (const noun of nounsResult.items) { - try { - // Cast NounMetadata to NamespacedMetadata for isDeleted check - if (!noun.metadata || !isDeleted(noun.metadata as any)) { - continue // Not deleted, skip - } - - // Check if old enough for cleanup - const deletedTime = (noun.metadata as any)._brainy?.updated || 0 - if (deletedTime && (currentTime - deletedTime) > this.config.maxAge) { - eligibleItems.push(noun.id) - } - - } catch (error) { - prodLog.warn(`Failed to check item ${noun.id} for cleanup eligibility: ${error}`) - } - } - - } catch (error) { - prodLog.error(`Failed to find eligible items: ${error}`) - throw error - } - - return eligibleItems - } - - /** - * Process a batch of items for cleanup - * - * CRITICAL: This maintains the durability-first approach: - * Storage → HNSW → Metadata Index - */ - private async processBatch(itemIds: string[]): Promise<{ - processed: number - deleted: number - errors: number - }> { - let processed = 0 - let deleted = 0 - let errors = 0 - - for (const id of itemIds) { - processed++ - - try { - // STEP 1: Remove from storage FIRST (durability guarantee) - try { - await this.storage.deleteNoun(id) - } catch (storageError) { - prodLog.warn(`Failed to delete ${id} from storage: ${storageError}`) - errors++ - continue - } - - // STEP 2: Remove from HNSW index (vector search consistency) - const hnswResult = this.hnswIndex.removeItem(id) - if (!hnswResult) { - prodLog.warn(`Failed to remove ${id} from HNSW index (may not have been indexed)`) - // Not a critical error - item might not have been in vector index - } - - // STEP 3: Remove from metadata index (faceted search consistency) - if (this.metadataIndex) { - await this.metadataIndex.removeFromIndex(id) - } - - deleted++ - prodLog.debug(`Successfully cleaned up item ${id}`) - - } catch (error) { - errors++ - prodLog.error(`Failed to cleanup item ${id}: ${error}`) - } - } - - return { processed, deleted, errors } - } -} \ No newline at end of file diff --git a/src/utils/rateLimiter.ts b/src/utils/rateLimiter.ts deleted file mode 100644 index 4cba55a1..00000000 --- a/src/utils/rateLimiter.ts +++ /dev/null @@ -1,363 +0,0 @@ -/** - * Rate Limiter for Brainy API - * - * Provides rate limiting without external dependencies like Redis. - * - Uses in-memory storage for single instances - * - Can use S3/R2 for distributed rate limiting - * - * @module rateLimiter - */ - -import { BaseStorageAdapter } from '../storage/adapters/baseStorageAdapter.js' - -export interface RateLimitConfig { - /** - * Maximum number of requests allowed - */ - maxRequests: number - - /** - * Time window in milliseconds - */ - windowMs: number - - /** - * Optional message to return when rate limit is exceeded - */ - message?: string - - /** - * Whether to use distributed storage (S3/R2) for rate limiting - */ - distributed?: boolean - - /** - * Storage adapter for distributed rate limiting - */ - storage?: BaseStorageAdapter - - /** - * Key prefix for distributed storage - */ - keyPrefix?: string -} - -export interface RateLimitResult { - /** - * Whether the request is allowed - */ - allowed: boolean - - /** - * Number of requests remaining in the current window - */ - remaining: number - - /** - * Time when the rate limit window resets (Unix timestamp) - */ - resetTime: number - - /** - * Total limit for the window - */ - limit: number -} - -/** - * Simple in-memory rate limiter - */ -export class RateLimiter { - private requests: Map = new Map() - private cleanupInterval: NodeJS.Timeout | null = null - - constructor(private config: RateLimitConfig) { - // Start cleanup interval to remove expired entries - this.startCleanup() - } - - /** - * Check if a request is allowed and update the rate limit - */ - async checkLimit(identifier: string): Promise { - const now = Date.now() - - if (this.config.distributed && this.config.storage) { - return this.checkDistributedLimit(identifier, now) - } - - return this.checkMemoryLimit(identifier, now) - } - - /** - * Check rate limit using in-memory storage - */ - private checkMemoryLimit(identifier: string, now: number): RateLimitResult { - const entry = this.requests.get(identifier) - const resetTime = now + this.config.windowMs - - if (!entry || entry.resetTime <= now) { - // New window or expired window - this.requests.set(identifier, { - count: 1, - resetTime - }) - - return { - allowed: true, - remaining: this.config.maxRequests - 1, - resetTime, - limit: this.config.maxRequests - } - } - - // Existing window - if (entry.count < this.config.maxRequests) { - entry.count++ - - return { - allowed: true, - remaining: this.config.maxRequests - entry.count, - resetTime: entry.resetTime, - limit: this.config.maxRequests - } - } - - // Rate limit exceeded - return { - allowed: false, - remaining: 0, - resetTime: entry.resetTime, - limit: this.config.maxRequests - } - } - - /** - * Check rate limit using distributed storage (S3/R2) - */ - private async checkDistributedLimit( - identifier: string, - now: number - ): Promise { - const storage = this.config.storage! - const key = `ratelimit_${identifier}` - const resetTime = now + this.config.windowMs - - try { - // Try to get existing rate limit data from metadata storage - const existing = await storage.getMetadata(key) - - if (!existing || !existing.resetTime || - Number(existing.resetTime) <= now) { - // New window or expired window - await storage.saveMetadata(key, { - count: 1, - resetTime: resetTime, - identifier - }) - - return { - allowed: true, - remaining: this.config.maxRequests - 1, - resetTime, - limit: this.config.maxRequests - } - } - - const count = Number(existing.count || 0) - - if (count < this.config.maxRequests) { - // Update count - await storage.saveMetadata(key, { - count: count + 1, - resetTime: existing.resetTime, - identifier - }) - - return { - allowed: true, - remaining: this.config.maxRequests - count - 1, - resetTime: Number(existing.resetTime), - limit: this.config.maxRequests - } - } - - // Rate limit exceeded - return { - allowed: false, - remaining: 0, - resetTime: Number(existing.resetTime), - limit: this.config.maxRequests - } - } catch (error) { - // On error, fail open (allow the request) - console.warn('Rate limiter error, failing open:', error) - return { - allowed: true, - remaining: this.config.maxRequests, - resetTime, - limit: this.config.maxRequests - } - } - } - - /** - * Reset rate limit for a specific identifier - */ - async reset(identifier: string): Promise { - if (this.config.distributed && this.config.storage) { - const key = `ratelimit_${identifier}` - // Reset by setting count to 0 and expired time - await this.config.storage.saveMetadata(key, { - count: 0, - resetTime: 0, - identifier - }) - } else { - this.requests.delete(identifier) - } - } - - /** - * Start cleanup interval to remove expired entries - */ - private startCleanup(): void { - // Run cleanup every minute - this.cleanupInterval = setInterval(() => { - const now = Date.now() - const expired: string[] = [] - - for (const [key, entry] of this.requests) { - if (entry.resetTime <= now) { - expired.push(key) - } - } - - for (const key of expired) { - this.requests.delete(key) - } - }, 60000) // 1 minute - - // Don't keep Node.js process alive just for cleanup - if (this.cleanupInterval.unref) { - this.cleanupInterval.unref() - } - } - - /** - * Stop the rate limiter and cleanup - */ - destroy(): void { - if (this.cleanupInterval) { - clearInterval(this.cleanupInterval) - this.cleanupInterval = null - } - this.requests.clear() - } -} - -/** - * Express/Connect middleware for rate limiting - */ -export function rateLimitMiddleware(config: RateLimitConfig) { - const limiter = new RateLimiter(config) - - return async (req: any, res: any, next: any) => { - // Use IP address as identifier (can be customized) - const identifier = req.ip || req.connection?.remoteAddress || 'unknown' - - const result = await limiter.checkLimit(identifier) - - // Set rate limit headers - res.setHeader('X-RateLimit-Limit', result.limit) - res.setHeader('X-RateLimit-Remaining', result.remaining) - res.setHeader('X-RateLimit-Reset', result.resetTime) - - if (!result.allowed) { - res.status(429).json({ - error: config.message || 'Too many requests, please try again later.', - retryAfter: Math.ceil((result.resetTime - Date.now()) / 1000) - }) - return - } - - next() - } -} - -/** - * Create a rate limiter for use with Brainy - * - * @example - * ```typescript - * // For single instance (in-memory) - * const limiter = createRateLimiter({ - * maxRequests: 100, - * windowMs: 15 * 60 * 1000 // 15 minutes - * }) - * - * // For distributed (using S3/R2) - * const limiter = createRateLimiter({ - * maxRequests: 100, - * windowMs: 15 * 60 * 1000, - * distributed: true, - * storage: myS3Adapter - * }) - * - * // Check rate limit - * const result = await limiter.checkLimit('user-123') - * if (!result.allowed) { - * throw new Error('Rate limit exceeded') - * } - * ``` - */ -export function createRateLimiter(config: RateLimitConfig): RateLimiter { - return new RateLimiter(config) -} - -/** - * Preset configurations for common use cases - */ -export const RateLimitPresets = { - /** - * Default API rate limit: 100 requests per 15 minutes - */ - default: { - maxRequests: 100, - windowMs: 15 * 60 * 1000 - }, - - /** - * Strict rate limit: 10 requests per minute - */ - strict: { - maxRequests: 10, - windowMs: 60 * 1000 - }, - - /** - * Lenient rate limit: 1000 requests per hour - */ - lenient: { - maxRequests: 1000, - windowMs: 60 * 60 * 1000 - }, - - /** - * Search endpoint: 30 requests per minute - */ - search: { - maxRequests: 30, - windowMs: 60 * 1000, - message: 'Search rate limit exceeded. Please wait before searching again.' - }, - - /** - * Write operations: 20 requests per minute - */ - write: { - maxRequests: 20, - windowMs: 60 * 1000, - message: 'Write rate limit exceeded. Please slow down your write operations.' - } -} \ No newline at end of file diff --git a/src/utils/rebuildCounts.ts b/src/utils/rebuildCounts.ts index 389e7237..0e898ddb 100644 --- a/src/utils/rebuildCounts.ts +++ b/src/utils/rebuildCounts.ts @@ -8,6 +8,45 @@ */ import type { BaseStorage } from '../storage/baseStorage.js' +import type { HNSWNounWithMetadata, HNSWVerbWithMetadata } from '../coreTypes.js' + +/** + * Result page shape returned by the adapter offset-paginated readers. + */ +interface PaginatedScanResult { + items: TItem[] + totalCount?: number + hasMore: boolean + nextCursor?: string +} + +/** + * Structural view of the count bookkeeping this utility repairs. + * + * The count fields are `protected` on `BaseStorageAdapter`; this recovery + * utility deliberately reaches past that visibility to overwrite + * desynchronized counters, so the cast below is a visibility boundary rather + * than a shape mismatch. The paginated readers are optional adapter + * capabilities (probed at runtime) whose implementations accept an `offset` + * option not modeled on the cursor-based `BaseStorageAdapter` declaration. + */ +interface CountRebuildTarget { + getNounsWithPagination?: (options: { + limit?: number + offset?: number + }) => Promise> + getVerbsWithPagination?: (options: { + limit?: number + offset?: number + }) => Promise> + totalNounCount: number + totalVerbCount: number + entityCounts: Map + verbCounts: Map + pendingCountPersist: boolean + pendingCountOperations: number + flushCounts(): Promise +} export interface RebuildCountsResult { /** Total number of entities (nouns) found */ @@ -57,8 +96,10 @@ export async function rebuildCounts(storage: BaseStorage): Promise void - reject: (error: any) => void - timestamp: number -} - -interface BatchStats { - totalOperations: number - coalescedOperations: number - deduplicated: number - batchesProcessed: number - averageBatchSize: number -} - -/** - * Coalesces multiple operations into efficient batches - */ -export class RequestCoalescer { - private logger = createModuleLogger('RequestCoalescer') - - // Operation queues by type - private writeQueue = new Map() - private readQueue = new Map() - private deleteQueue = new Map() - - // Batch configuration - private maxBatchSize = 100 - private maxBatchAge = 100 // ms - flush quickly under load - private minBatchSize = 10 // Don't flush until we have enough - - // Flush timers - private flushTimer: NodeJS.Timeout | null = null - private lastFlush = Date.now() - - // Statistics - private stats: BatchStats = { - totalOperations: 0, - coalescedOperations: 0, - deduplicated: 0, - batchesProcessed: 0, - averageBatchSize: 0 - } - - // Processor function - private processor: (batch: CoalescedOperation[]) => Promise - - constructor( - processor: (batch: CoalescedOperation[]) => Promise, - options?: { - maxBatchSize?: number - maxBatchAge?: number - minBatchSize?: number - } - ) { - this.processor = processor - - if (options) { - this.maxBatchSize = options.maxBatchSize || this.maxBatchSize - this.maxBatchAge = options.maxBatchAge || this.maxBatchAge - this.minBatchSize = options.minBatchSize || this.minBatchSize - } - } - - /** - * Add a write operation to be coalesced - */ - public async write(key: string, data: any): Promise { - return new Promise((resolve, reject) => { - // Check if we already have a pending write for this key - const existing = this.writeQueue.get(key) - - if (existing && existing.length > 0) { - // Replace the data but resolve all promises - const last = existing[existing.length - 1] - last.data = data // Use latest data - - // Add this promise to be resolved - existing.push({ - type: 'write', - key, - data, - resolve, - reject, - timestamp: Date.now() - }) - - this.stats.deduplicated++ - } else { - // New write operation - this.writeQueue.set(key, [{ - type: 'write', - key, - data, - resolve, - reject, - timestamp: Date.now() - }]) - } - - this.stats.totalOperations++ - this.checkFlush() - }) - } - - /** - * Add a read operation to be coalesced - */ - public async read(key: string): Promise { - return new Promise((resolve, reject) => { - // Check if we already have a pending read for this key - const existing = this.readQueue.get(key) - - if (existing && existing.length > 0) { - // Coalesce with existing read - existing.push({ - type: 'read', - key, - resolve, - reject, - timestamp: Date.now() - }) - - this.stats.deduplicated++ - } else { - // New read operation - this.readQueue.set(key, [{ - type: 'read', - key, - resolve, - reject, - timestamp: Date.now() - }]) - } - - this.stats.totalOperations++ - this.checkFlush() - }) - } - - /** - * Add a delete operation to be coalesced - */ - public async delete(key: string): Promise { - return new Promise((resolve, reject) => { - // Cancel any pending writes for this key - if (this.writeQueue.has(key)) { - const writes = this.writeQueue.get(key)! - writes.forEach(op => op.reject(new Error('Cancelled by delete'))) - this.writeQueue.delete(key) - this.stats.deduplicated += writes.length - } - - // Cancel any pending reads for this key - if (this.readQueue.has(key)) { - const reads = this.readQueue.get(key)! - reads.forEach(op => op.resolve(null)) // Return null for deleted items - this.readQueue.delete(key) - this.stats.deduplicated += reads.length - } - - // Check if we already have a pending delete - const existing = this.deleteQueue.get(key) - - if (existing && existing.length > 0) { - // Coalesce with existing delete - existing.push({ - type: 'delete', - key, - resolve, - reject, - timestamp: Date.now() - }) - - this.stats.deduplicated++ - } else { - // New delete operation - this.deleteQueue.set(key, [{ - type: 'delete', - key, - resolve, - reject, - timestamp: Date.now() - }]) - } - - this.stats.totalOperations++ - this.checkFlush() - }) - } - - /** - * Check if we should flush the queues - */ - private checkFlush(): void { - const totalSize = this.writeQueue.size + this.readQueue.size + this.deleteQueue.size - const now = Date.now() - const age = now - this.lastFlush - - // Immediate flush conditions - if (totalSize >= this.maxBatchSize) { - this.flush('size_limit') - return - } - - // Age-based flush - if (age >= this.maxBatchAge && totalSize >= this.minBatchSize) { - this.flush('age_limit') - return - } - - // Schedule a flush if not already scheduled - if (!this.flushTimer && totalSize > 0) { - const delay = Math.max(10, this.maxBatchAge - age) - this.flushTimer = setTimeout(() => { - this.flush('timer') - }, delay) - } - } - - /** - * Flush all queued operations - */ - public async flush(reason: string = 'manual'): Promise { - // Clear timer - if (this.flushTimer) { - clearTimeout(this.flushTimer) - this.flushTimer = null - } - - // Collect all operations into a single batch - const batch: CoalescedOperation[] = [] - - // Process deletes first (highest priority) - this.deleteQueue.forEach((ops) => { - // Only take the first operation per key (others are duplicates) - if (ops.length > 0) { - batch.push(ops[0]) - this.stats.coalescedOperations += ops.length - } - }) - - // Then writes - this.writeQueue.forEach((ops) => { - if (ops.length > 0) { - // Use the last write (most recent data) - const lastWrite = ops[ops.length - 1] - batch.push(lastWrite) - this.stats.coalescedOperations += ops.length - } - }) - - // Then reads - this.readQueue.forEach((ops) => { - if (ops.length > 0) { - batch.push(ops[0]) - this.stats.coalescedOperations += ops.length - } - }) - - // Clear queues - const allOps = [ - ...Array.from(this.deleteQueue.values()).flat(), - ...Array.from(this.writeQueue.values()).flat(), - ...Array.from(this.readQueue.values()).flat() - ] - - this.deleteQueue.clear() - this.writeQueue.clear() - this.readQueue.clear() - - if (batch.length === 0) { - return - } - - // Update stats - this.stats.batchesProcessed++ - this.stats.averageBatchSize = - (this.stats.averageBatchSize * (this.stats.batchesProcessed - 1) + batch.length) / - this.stats.batchesProcessed - - this.logger.debug(`Flushing batch of ${batch.length} operations (${allOps.length} total) - reason: ${reason}`) - - // Process the batch - try { - await this.processor(batch) - - // Resolve all promises - allOps.forEach(op => { - if (op.type === 'read') { - // Find the result for this read - const result = batch.find(b => b.key === op.key && b.type === 'read') - op.resolve(result?.data || null) - } else { - op.resolve(undefined) - } - }) - } catch (error) { - // Reject all promises - allOps.forEach(op => op.reject(error)) - - this.logger.error('Batch processing failed:', error) - } - - this.lastFlush = Date.now() - } - - /** - * Get current statistics - */ - public getStats(): BatchStats { - return { ...this.stats } - } - - /** - * Get current queue sizes - */ - public getQueueSizes(): { - writes: number - reads: number - deletes: number - total: number - } { - return { - writes: this.writeQueue.size, - reads: this.readQueue.size, - deletes: this.deleteQueue.size, - total: this.writeQueue.size + this.readQueue.size + this.deleteQueue.size - } - } - - /** - * Adjust batch parameters based on load - */ - public adjustParameters(pending: number): void { - if (pending > 10000) { - // Extreme load - batch aggressively - this.maxBatchSize = 500 - this.maxBatchAge = 50 - this.minBatchSize = 50 - } else if (pending > 1000) { - // High load - larger batches - this.maxBatchSize = 200 - this.maxBatchAge = 100 - this.minBatchSize = 20 - } else if (pending > 100) { - // Moderate load - this.maxBatchSize = 100 - this.maxBatchAge = 200 - this.minBatchSize = 10 - } else { - // Low load - optimize for latency - this.maxBatchSize = 50 - this.maxBatchAge = 500 - this.minBatchSize = 5 - } - } - - /** - * Force immediate flush of all operations - */ - public async forceFlush(): Promise { - await this.flush('force') - } -} - -// Global coalescer instances by storage type -const coalescers = new Map() - -/** - * Get or create a coalescer for a storage instance - */ -export function getCoalescer( - storageId: string, - processor: (batch: any[]) => Promise -): RequestCoalescer { - if (!coalescers.has(storageId)) { - coalescers.set(storageId, new RequestCoalescer(processor)) - } - return coalescers.get(storageId)! -} - -/** - * Clear all coalescers - */ -export function clearCoalescers(): void { - coalescers.clear() -} \ No newline at end of file diff --git a/src/utils/requestDeduplicator.ts b/src/utils/requestDeduplicator.ts deleted file mode 100644 index bfb29571..00000000 --- a/src/utils/requestDeduplicator.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Request Deduplicator Utility - * Provides key generation for request deduplication - */ - -export class RequestDeduplicator { - /** - * Generate a unique key for search requests to enable deduplication - */ - static getSearchKey( - query: string, - k: number, - options: any - ): string { - // Create a consistent key from search parameters - const optionsKey = options ? JSON.stringify({ - metadata: options.metadata, - service: options.service, - searchMode: options.searchMode, - threshold: options.threshold, - includeVectors: options.includeVectors, - includeMetadata: options.includeMetadata, - sortBy: options.sortBy, - cursor: options.cursor - }) : '{}' - - return `search:${query}:${k}:${optionsKey}` - } -} \ No newline at end of file diff --git a/src/utils/searchCache.ts b/src/utils/searchCache.ts deleted file mode 100644 index f4b98d74..00000000 --- a/src/utils/searchCache.ts +++ /dev/null @@ -1,308 +0,0 @@ -/** - * SearchCache - Caches search results for improved performance - */ - -import { SearchResult } from '../coreTypes.js' - -export interface CacheEntry { - results: SearchResult[] - timestamp: number - hits: number -} - -export interface SearchCacheConfig { - maxAge?: number // Maximum age in milliseconds (default: 5 minutes) - maxSize?: number // Maximum number of cached queries (default: 100) - enabled?: boolean // Whether caching is enabled (default: true) - hitCountWeight?: number // Weight for hit count in eviction policy (default: 0.3) -} - -export class SearchCache { - private cache = new Map>() - private maxAge: number - private maxSize: number - private enabled: boolean - private hitCountWeight: number - - // Cache statistics - private hits = 0 - private misses = 0 - private evictions = 0 - - constructor(config: SearchCacheConfig = {}) { - this.maxAge = config.maxAge ?? 5 * 60 * 1000 // 5 minutes - this.maxSize = config.maxSize ?? 100 - this.enabled = config.enabled ?? true - this.hitCountWeight = config.hitCountWeight ?? 0.3 - } - - /** - * Generate cache key from search parameters - */ - getCacheKey( - query: any, - k: number, - options: Record = {} - ): string { - // Create a normalized key that ignores order of options - const normalizedOptions = Object.keys(options) - .sort() - .reduce((acc, key) => { - // Skip cache-related options - if (key === 'skipCache' || key === 'useStreaming') return acc - acc[key] = options[key] - return acc - }, {} as Record) - - return JSON.stringify({ - query: typeof query === 'object' ? JSON.stringify(query) : query, - k, - ...normalizedOptions - }) - } - - /** - * Get cached results if available and not expired - */ - get(key: string): SearchResult[] | null { - if (!this.enabled) return null - - const entry = this.cache.get(key) - if (!entry) { - this.misses++ - return null - } - - // Check if expired - if (Date.now() - entry.timestamp > this.maxAge) { - this.cache.delete(key) - this.misses++ - return null - } - - // Update hit count and statistics - entry.hits++ - this.hits++ - return entry.results - } - - /** - * Cache search results - */ - set(key: string, results: SearchResult[]): void { - if (!this.enabled) return - - // Evict if cache is full - if (this.cache.size >= this.maxSize) { - this.evictOldest() - } - - this.cache.set(key, { - results: [...results], // Deep copy to prevent mutations - timestamp: Date.now(), - hits: 0 - }) - } - - /** - * Evict the oldest entry based on timestamp and hit count - */ - private evictOldest(): void { - let oldestKey: string | null = null - let oldestScore = Infinity - - const now = Date.now() - - for (const [key, entry] of this.cache.entries()) { - // Score combines age and inverse hit count - const age = now - entry.timestamp - const hitScore = entry.hits > 0 ? 1 / entry.hits : 1 - const score = age + (hitScore * this.hitCountWeight * this.maxAge) - - if (score < oldestScore) { - oldestScore = score - oldestKey = key - } - } - - if (oldestKey) { - this.cache.delete(oldestKey) - this.evictions++ - } - } - - /** - * Clear all cached results - */ - clear(): void { - this.cache.clear() - this.hits = 0 - this.misses = 0 - this.evictions = 0 - } - - /** - * Invalidate cache entries that might be affected by data changes - */ - invalidate(pattern?: string | RegExp): void { - if (!pattern) { - this.clear() - return - } - - const keysToDelete: string[] = [] - - for (const key of this.cache.keys()) { - const shouldDelete = typeof pattern === 'string' - ? key.includes(pattern) - : pattern.test(key) - - if (shouldDelete) { - keysToDelete.push(key) - } - } - - keysToDelete.forEach(key => this.cache.delete(key)) - } - - /** - * Smart invalidation for real-time data updates - * Only clears cache if it's getting stale or if data changes significantly - */ - invalidateOnDataChange(changeType?: 'add' | 'update' | 'delete'): void { - // For now, clear all caches on data changes to ensure consistency - // In the future, we could implement more sophisticated invalidation - // based on the type of change and affected data - this.clear() - } - - /** - * Check if cache entries have expired and remove them - * This is especially important in distributed scenarios where - * real-time updates might be delayed or missed - */ - cleanupExpiredEntries(): number { - const now = Date.now() - const keysToDelete: string[] = [] - - for (const [key, entry] of this.cache.entries()) { - if (now - entry.timestamp > this.maxAge) { - keysToDelete.push(key) - } - } - - keysToDelete.forEach(key => this.cache.delete(key)) - return keysToDelete.length - } - - /** - * Get cache statistics - */ - getStats() { - const total = this.hits + this.misses - return { - hits: this.hits, - misses: this.misses, - evictions: this.evictions, - hitRate: total > 0 ? this.hits / total : 0, - size: this.cache.size, - maxSize: this.maxSize, - enabled: this.enabled - } - } - - /** - * Enable or disable caching - */ - setEnabled(enabled: boolean): void { - Object.defineProperty(this, 'enabled', { value: enabled, writable: false }) - if (!enabled) { - this.clear() - } - } - - /** - * Get memory usage estimate in bytes - */ - getMemoryUsage(): number { - let totalSize = 0 - - for (const [key, entry] of this.cache.entries()) { - // Estimate key size - totalSize += key.length * 2 // UTF-16 characters - - // Estimate entry size - totalSize += JSON.stringify(entry.results).length * 2 - totalSize += 16 // timestamp + hits (8 bytes each) - } - - return totalSize - } - - /** - * Get current cache configuration - */ - getConfig(): SearchCacheConfig { - return { - enabled: this.enabled, - maxSize: this.maxSize, - maxAge: this.maxAge, - hitCountWeight: this.hitCountWeight - } - } - - /** - * Update cache configuration dynamically - */ - updateConfig(newConfig: Partial): void { - if (newConfig.enabled !== undefined) { - this.enabled = newConfig.enabled - } - if (newConfig.maxSize !== undefined) { - this.maxSize = newConfig.maxSize - // Trigger eviction if current size exceeds new limit - this.evictIfNeeded() - } - if (newConfig.maxAge !== undefined) { - this.maxAge = newConfig.maxAge - // Clean up entries that are now expired with new TTL - this.cleanupExpiredEntries() - } - if (newConfig.hitCountWeight !== undefined) { - this.hitCountWeight = newConfig.hitCountWeight - } - } - - /** - * Evict entries if cache exceeds maxSize - */ - private evictIfNeeded(): void { - if (this.cache.size <= this.maxSize) { - return - } - - // Calculate eviction score for each entry (same logic as existing eviction) - const entries = Array.from(this.cache.entries()).map(([key, entry]) => { - const age = Date.now() - entry.timestamp - const hitCount = entry.hits - - // Eviction score: lower is more likely to be evicted - // Combines age and hit count (weighted by hitCountWeight) - const ageScore = age / this.maxAge - const hitScore = 1 / (hitCount + 1) // Inverse of hits (more hits = lower score) - const score = ageScore * (1 - this.hitCountWeight) + hitScore * this.hitCountWeight - - return { key, entry, score } - }) - - // Sort by score (lowest first - these will be evicted) - entries.sort((a, b) => a.score - b.score) - - // Evict entries until we're under the limit - const toEvict = entries.slice(0, this.cache.size - this.maxSize) - toEvict.forEach(({ key }) => { - this.cache.delete(key) - this.evictions++ - }) - } -} \ No newline at end of file diff --git a/src/utils/structuredLogger.ts b/src/utils/structuredLogger.ts index 7ec5c079..a5baa039 100644 --- a/src/utils/structuredLogger.ts +++ b/src/utils/structuredLogger.ts @@ -306,7 +306,7 @@ export class StructuredLogger { name: error.name, message: error.message, stack: error.stack, - code: (error as any).code + code: (error as Error & { code?: string }).code } } diff --git a/src/utils/typeValidation.ts b/src/utils/typeValidation.ts index 49aa8963..1ec95392 100644 --- a/src/utils/typeValidation.ts +++ b/src/utils/typeValidation.ts @@ -51,7 +51,7 @@ export function validateGraphNoun(noun: unknown): ValidatedGraphNoun { if (!noun || typeof noun !== 'object') { throw new Error('Invalid noun: must be an object') } - const n = noun as any + const n = noun as Record if (!n.noun) { throw new Error('Invalid noun: missing required "noun" type field') } @@ -63,7 +63,7 @@ export function validateGraphVerb(verb: unknown): ValidatedGraphVerb { if (!verb || typeof verb !== 'object') { throw new Error('Invalid verb: must be an object') } - const v = verb as any + const v = verb as Record if (!v.verb) { throw new Error('Invalid verb: missing required "verb" type field') } @@ -346,8 +346,8 @@ export function validateSearchOptions(options: unknown, paramName = 'options'): throw new ValidationError(paramName, options, 'must be an object') } - const opts = options as any - + const opts = options as Record + // Validate limit if ('limit' in opts) { const limit = opts.limit diff --git a/src/vfs/PathResolver.ts b/src/vfs/PathResolver.ts index 7d0999ba..6fb97c68 100644 --- a/src/vfs/PathResolver.ts +++ b/src/vfs/PathResolver.ts @@ -1,7 +1,7 @@ /** * Path Resolution System with High-Performance Caching * - * PRODUCTION-READY path resolution for VFS + * Path resolution for the VFS * Handles millions of paths efficiently with multi-layer caching */ @@ -201,8 +201,9 @@ export class PathResolver { * Falls back to graph traversal if MetadataIndex unavailable */ private async resolveWithMetadataIndex(path: string): Promise { - // Access MetadataIndexManager from brain instance (not storage — metadataIndex lives on Brainy) - const metadataIndex = (this.brain as any).metadataIndex + // Access MetadataIndexManager from brain instance (not storage — metadataIndex + // lives on Brainy). Bracket access reaches the private field. + const metadataIndex = this.brain['metadataIndex'] if (!metadataIndex) { // MetadataIndex not available, use graph traversal @@ -256,7 +257,7 @@ export class PathResolver { // Use proper graph traversal to find children // VFS relationships are now part of the knowledge graph - const relations = await this.brain.getRelations({ + const relations = await this.brain.related({ from: parentId, type: VerbType.Contains }) @@ -293,7 +294,7 @@ export class PathResolver { async getChildren(dirId: string): Promise { // Use O(1) graph relationships (VFS creates these in mkdir/writeFile) // VFS relationships are now part of the knowledge graph (no special filtering needed) - const relations = await this.brain.getRelations({ + const relations = await this.brain.related({ from: dirId, type: VerbType.Contains }) diff --git a/src/vfs/VirtualFileSystem.ts b/src/vfs/VirtualFileSystem.ts index 2454d8a5..ae83852e 100644 --- a/src/vfs/VirtualFileSystem.ts +++ b/src/vfs/VirtualFileSystem.ts @@ -1,7 +1,7 @@ /** * Virtual Filesystem Implementation * - * PRODUCTION-READY VFS built on Brainy + * Virtual filesystem built on Brainy * Real code, no mocks, actual working implementation */ @@ -102,8 +102,9 @@ export class VirtualFileSystem implements IVirtualFileSystem { * Access to BlobStorage for unified file storage */ private get blobStorage() { - // TypeScript doesn't know about blobStorage on storage, use type assertion - const storage = this.brain['storage'] as any + // Bracket access reaches Brainy's private `storage` field; `blobStorage` + // is a public (optional) member of BaseStorage, set during brain.init(). + const storage = this.brain['storage'] if (!storage?.blobStorage) { throw new Error( 'BlobStorage not available. The storage adapter must run ' + @@ -224,7 +225,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { if (existingRoot) { // Root exists - verify metadata is correct - const metadata = (existingRoot as any).metadata || existingRoot + const metadata = existingRoot.metadata || existingRoot if (!metadata.vfsType || metadata.vfsType !== 'directory') { console.warn('āš ļø VFS: Root metadata incomplete, repairing...') @@ -316,7 +317,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { for (const duplicate of duplicates) { try { - await this.brain.delete(duplicate.id) + await this.brain.remove(duplicate.id) console.log(`VFS: Deleted old root ${duplicate.id.substring(0, 8)}`) } catch (error) { console.warn(`VFS: Failed to delete old root ${duplicate.id}:`, error) @@ -493,7 +494,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { }) // Ensure Contains relationship exists (fix for missing relationships) - const existingRelations = await this.brain.getRelations({ + const existingRelations = await this.brain.related({ from: parentId, to: existingId, type: VerbType.Contains @@ -588,7 +589,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { } // Delete the entity - await this.brain.delete(entityId) + await this.brain.remove(entityId) // Invalidate caches this.pathResolver.invalidatePath(path) @@ -659,7 +660,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { // Get all Contains relationships for this level (in-memory query) for (const parentId of currentLevel) { - const relations = await this.brain.getRelations({ + const relations = await this.brain.related({ from: parentId, type: VerbType.Contains }) @@ -933,7 +934,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { * * Optimized for cloud storage using batch operations * - Uses gatherDescendants() for efficient graph traversal + batch fetch - * - Uses deleteMany() for chunked transactional deletion + * - Uses removeMany() for chunked transactional deletion * - Parallel blob cleanup with chunking * * Performance improvement: 4-8x faster on cloud storage (GCS, S3, R2, Azure) @@ -981,10 +982,10 @@ export class VirtualFileSystem implements IVirtualFileSystem { // Phase 3: Batch delete all entities (including root directory) const allIds = [...descendants.map(d => d.id), entityId] - await this.brain.deleteMany({ ids: allIds, continueOnError: false }) + await this.brain.removeMany({ ids: allIds, continueOnError: false }) } else { // No children or not recursive - just delete the directory entity - await this.brain.delete(entityId) + await this.brain.remove(entityId) } // Invalidate caches (recursive invalidation handles all descendants) @@ -1250,8 +1251,9 @@ export class VirtualFileSystem implements IVirtualFileSystem { // Ensure entity has proper VFS metadata structure // Handle both nested and flat metadata structures for compatibility if (!entity.metadata || !entity.metadata.vfsType) { - // Check if metadata is at top level (legacy structure) - const anyEntity = entity as any + // Check if metadata is at top level (legacy structure). Legacy entities + // carried VFS fields as extra top-level properties not modeled on Entity. + const anyEntity = entity as Entity & Record if (anyEntity.vfsType || anyEntity.path) { entity.metadata = { path: anyEntity.path || '/', @@ -1387,8 +1389,8 @@ export class VirtualFileSystem implements IVirtualFileSystem { // Field 'accessed' still exists in metadata for backward compat but won't update private async countRelationships(entityId: string): Promise { - const relations = await this.brain.getRelations({ from: entityId }) - const relationsTo = await this.brain.getRelations({ to: entityId }) + const relations = await this.brain.related({ from: entityId }) + const relationsTo = await this.brain.related({ to: entityId }) return relations.length + relationsTo.length } @@ -1760,7 +1762,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { // legacy data path that hits the copy operation). const newEntity = await this.brain.add({ type: srcEntity.type, - subtype: (srcEntity as any).subtype ?? 'vfs-file', + subtype: srcEntity.subtype ?? 'vfs-file', data: srcEntity.data, vector: options?.preserveVector ? srcEntity.vector : undefined, metadata: { @@ -1791,7 +1793,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { // Copy relationships if requested if (options?.preserveRelationships) { - const relations = await this.brain.getRelations({ from: srcEntity.id }) + const relations = await this.brain.related({ from: srcEntity.id }) for (const relation of relations) { if (relation.type !== VerbType.Contains) { // Skip relationship without Contains type @@ -2097,8 +2099,8 @@ export class VirtualFileSystem implements IVirtualFileSystem { // Use proper Brainy relationship API to get all relationships const [fromRelations, toRelations] = await Promise.all([ - this.brain.getRelations({ from: entityId }), - this.brain.getRelations({ to: entityId }) + this.brain.related({ from: entityId }), + this.brain.related({ to: entityId }) ]) // Add outgoing relationships @@ -2136,8 +2138,8 @@ export class VirtualFileSystem implements IVirtualFileSystem { // Use proper Brainy relationship API const [fromRelations, toRelations] = await Promise.all([ - this.brain.getRelations({ from: entityId }), - this.brain.getRelations({ to: entityId }) + this.brain.related({ from: entityId }), + this.brain.related({ to: entityId }) ]) // Process outgoing relationships (excluding Contains for parent-child) @@ -2185,7 +2187,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { await this.brain.relate({ from: fromEntityId, to: toEntityId, - type: type as any, // Convert string to VerbType + type: type as VerbType, // Convert string to VerbType metadata: { isVFS: true } // Mark as VFS relationship }) @@ -2201,7 +2203,7 @@ export class VirtualFileSystem implements IVirtualFileSystem { const toEntityId = await this.pathResolver.resolve(to) // Find and delete the relationship - const relations = await this.brain.getRelations({ from: fromEntityId }) + const relations = await this.brain.related({ from: fromEntityId }) for (const relation of relations) { if (relation.to === toEntityId && (!type || relation.type === type)) { // Delete the relationship using brain.unrelate diff --git a/src/vfs/importers/DirectoryImporter.ts b/src/vfs/importers/DirectoryImporter.ts index 9a087773..ca8f4b4c 100644 --- a/src/vfs/importers/DirectoryImporter.ts +++ b/src/vfs/importers/DirectoryImporter.ts @@ -31,6 +31,13 @@ export interface ImportOptions { importId?: string // Unique import identifier (auto-generated if not provided) projectId?: string // Project identifier grouping related imports customMetadata?: Record // Custom metadata to attach + + /** + * Internal: per-import tracking metadata (importIds, projectId, importedAt, + * importSource, plus customMetadata) threaded from `import()` into the + * directory/file helpers. Not intended to be set by callers. + */ + _trackingMetadata?: Record } export interface ImportResult { @@ -96,7 +103,7 @@ export class DirectoryImporter { if (stats.isFile()) { await this.importFile(sourcePath, options.targetPath || '/', result) } else if (stats.isDirectory()) { - await this.importDirectory(sourcePath, enhancedOptions as any, result) + await this.importDirectory(sourcePath, enhancedOptions, result) } } catch (error) { result.failed.push({ @@ -220,7 +227,7 @@ export class DirectoryImporter { await collectDirs(sourcePath, targetPath) // Create all directories - const trackingMetadata = (options as any)._trackingMetadata || {} + const trackingMetadata = options._trackingMetadata || {} for (const dirPath of dirsToCreate) { try { await this.vfs.mkdir(dirPath, { @@ -324,7 +331,7 @@ export class DirectoryImporter { } // Write to VFS - const trackingMetadata = (options as any)._trackingMetadata || {} + const trackingMetadata = options._trackingMetadata || {} await this.vfs.writeFile(vfsPath, content, { generateEmbedding: options.generateEmbeddings, extractMetadata: options.extractMetadata, diff --git a/src/vfs/semantic/projections/RelationshipProjection.ts b/src/vfs/semantic/projections/RelationshipProjection.ts index 7d30f66d..658dfa8a 100644 --- a/src/vfs/semantic/projections/RelationshipProjection.ts +++ b/src/vfs/semantic/projections/RelationshipProjection.ts @@ -16,7 +16,7 @@ import { RelationshipValue } from '../SemanticPathParser.js' * Relationship Projection: /related-to//depth-N/types-X,Y * * Uses EXISTING infrastructure: - * - Brainy.getRelations() for graph traversal (REAL - line 803 in brainy.ts) + * - Brainy.related() for graph traversal * - GraphAdjacencyIndex for O(1) neighbor lookups (REAL) * - VerbType enum for relationship types (REAL - graphTypes.ts) */ @@ -28,7 +28,7 @@ export class RelationshipProjection extends BaseProjectionStrategy { * Note: Graph queries don't use FindParams, but we provide this for consistency */ toQuery(value: RelationshipValue, subpath?: string): FindParams { - // This is informational - actual resolution uses getRelations() + // This is informational - actual resolution uses related() return { where: { vfsType: 'file' @@ -42,7 +42,7 @@ export class RelationshipProjection extends BaseProjectionStrategy { } /** - * Resolve relationships using REAL Brainy.getRelations() + * Resolve relationships using REAL Brainy.related() * Uses GraphAdjacencyIndex for O(1) graph traversal */ async resolve(brain: Brainy, vfs: VirtualFileSystem, value: RelationshipValue): Promise { @@ -71,7 +71,7 @@ export class RelationshipProjection extends BaseProjectionStrategy { } /** - * Recursive graph traversal using REAL Brainy.getRelations() + * Recursive graph traversal using REAL Brainy.related() */ private async traverseRelationships( brain: Brainy, @@ -88,7 +88,7 @@ export class RelationshipProjection extends BaseProjectionStrategy { visited.add(entityId) // Get outgoing relationships (REAL method - line 803 in brainy.ts) - const relations = await brain.getRelations({ + const relations = await brain.related({ from: entityId, limit: 100 }) diff --git a/tests/api/batch-operations.test.ts b/tests/api/batch-operations.test.ts index 17de3171..be6673fc 100644 --- a/tests/api/batch-operations.test.ts +++ b/tests/api/batch-operations.test.ts @@ -3,7 +3,7 @@ * * Comprehensive testing of batch operations including: * - addMany: Bulk entity creation - * - deleteMany: Bulk deletion + * - removeMany: Bulk deletion * - Performance validation at scale * - Memory efficiency testing * - Error recovery scenarios @@ -353,7 +353,7 @@ describe('Batch Operations - Public API Testing', () => { }) }) - describe('deleteMany - Bulk Deletion', () => { + describe('removeMany - Bulk Deletion', () => { let testIds: string[] = [] beforeEach(async () => { @@ -374,14 +374,14 @@ describe('Batch Operations - Public API Testing', () => { const startMemory = process.memoryUsage().heapUsed const startTime = performance.now() - // Use deleteMany if available, otherwise individual deletes + // Use removeMany if available, otherwise individual deletes let results: any[] - if ('deleteMany' in brainy && typeof brainy.deleteMany === 'function') { - const result = await brainy.deleteMany({ ids: toDelete }) + if ('removeMany' in brainy && typeof brainy.removeMany === 'function') { + const result = await brainy.removeMany({ ids: toDelete }) results = result.successful } else { results = await Promise.all( - toDelete.map(id => brainy.delete(id)) + toDelete.map(id => brainy.remove(id)) ) } @@ -389,7 +389,7 @@ describe('Batch Operations - Public API Testing', () => { const memoryUsed = process.memoryUsage().heapUsed - startMemory metricsCollector.recordBatch( - 'deleteMany-100', + 'removeMany-100', toDelete.length, results, duration, @@ -426,13 +426,13 @@ describe('Batch Operations - Public API Testing', () => { const batchSize = 100 for (let i = 0; i < idsToDelete.length; i += batchSize) { const batch = idsToDelete.slice(i, i + batchSize) - await Promise.all(batch.map(id => brainy.delete(id))) + await Promise.all(batch.map(id => brainy.remove(id))) } const duration = performance.now() - startTime metricsCollector.recordBatch( - 'deleteMany-1k', + 'removeMany-1k', idsToDelete.length, idsToDelete.map(() => true), duration, @@ -553,7 +553,7 @@ describe('Batch Operations - Public API Testing', () => { Promise.all(updateIds.map(id => brainy.update({ id, metadata: { updated: true } }) )), - Promise.all(deleteIds.map(id => brainy.delete(id))) + Promise.all(deleteIds.map(id => brainy.remove(id))) ]) const duration = performance.now() - startTime diff --git a/tests/api/crud-operations-enhanced.test.ts b/tests/api/crud-operations-enhanced.test.ts index 7f3dde0c..b6070d15 100644 --- a/tests/api/crud-operations-enhanced.test.ts +++ b/tests/api/crud-operations-enhanced.test.ts @@ -309,7 +309,7 @@ describe('Enhanced CRUD Operations - Public API Validation', () => { // Delete all entities for (const id of ids) { - await brainy.delete(id) + await brainy.remove(id) } if (global.gc) global.gc() @@ -612,7 +612,7 @@ describe('Enhanced CRUD Operations - Public API Validation', () => { }) const startTime = metricsCollector.startOperation('delete-single') - const result = await brainy.delete(id) + const result = await brainy.remove(id) metricsCollector.endOperation('delete-single', 1, startTime) expect(result).toBe(true) @@ -633,7 +633,7 @@ describe('Enhanced CRUD Operations - Public API Validation', () => { const startTime = metricsCollector.startOperation('delete-bulk', ids.length) const results = await Promise.all( - ids.map(id => brainy.delete(id)) + ids.map(id => brainy.remove(id)) ) metricsCollector.endOperation('delete-bulk', ids.length, startTime) diff --git a/tests/api/error-handling.test.ts b/tests/api/error-handling.test.ts index 9d77a9ab..b8fd91f9 100644 --- a/tests/api/error-handling.test.ts +++ b/tests/api/error-handling.test.ts @@ -174,7 +174,7 @@ describe('Error Handling and Recovery', () => { it('should handle deletion of non-existent entities', async () => { // Should not throw, just return void await expect( - brainy.delete('non-existent-id') + brainy.remove('non-existent-id') ).resolves.toBeUndefined() }) @@ -184,9 +184,9 @@ describe('Error Handling and Recovery', () => { type: 'document' }) - await brainy.delete(id) + await brainy.remove(id) // Second delete should not throw - await expect(brainy.delete(id)).resolves.toBeUndefined() + await expect(brainy.remove(id)).resolves.toBeUndefined() }) }) @@ -364,7 +364,7 @@ describe('Error Handling and Recovery', () => { }) // Attempt concurrent deletes - const deletes = Array(5).fill(null).map(() => brainy.delete(id)) + const deletes = Array(5).fill(null).map(() => brainy.remove(id)) // Should not throw await expect(Promise.all(deletes)).resolves.toBeDefined() @@ -428,7 +428,7 @@ describe('Error Handling and Recovery', () => { ) break case 3: - promises.push(brainy.delete(`rapid-${i}`).catch(() => null)) + promises.push(brainy.remove(`rapid-${i}`).catch(() => null)) break } } @@ -578,7 +578,7 @@ describe('Error Handling and Recovery', () => { type: 'document' }) - await brainy.delete(id) + await brainy.remove(id) // Operations on deleted entity should handle gracefully const getResult = await brainy.get(id) @@ -592,7 +592,7 @@ describe('Error Handling and Recovery', () => { ).rejects.toThrow(/not found/i) // Should not throw for delete - await expect(brainy.delete(id)).resolves.toBeUndefined() + await expect(brainy.remove(id)).resolves.toBeUndefined() }) it('should handle rapid create-delete cycles', async () => { @@ -605,7 +605,7 @@ describe('Error Handling and Recovery', () => { }) // Immediately delete - await brainy.delete(id) + await brainy.remove(id) // Verify it's gone const result = await brainy.get(id) diff --git a/tests/api/performance-benchmarks.test.ts b/tests/api/performance-benchmarks.test.ts index eb928751..d26281d3 100644 --- a/tests/api/performance-benchmarks.test.ts +++ b/tests/api/performance-benchmarks.test.ts @@ -231,7 +231,7 @@ describe('Performance Benchmarks - SLA Validation', () => { for (const id of ids) { const start = performance.now() - await brainy.delete(id) + await brainy.remove(id) const latency = performance.now() - start benchmark.recordOperation(latency) } @@ -419,7 +419,7 @@ describe('Performance Benchmarks - SLA Validation', () => { } for (const id of ids) { - await brainy.delete(id) + await brainy.remove(id) } if (global.gc) global.gc() diff --git a/tests/benchmarks/perf-final.js b/tests/benchmarks/perf-final.js index c4a98624..41429a87 100644 --- a/tests/benchmarks/perf-final.js +++ b/tests/benchmarks/perf-final.js @@ -122,7 +122,7 @@ async function runBenchmark() { // TEST 7: Delete Operations start = Date.now() for (let i = 0; i < 100; i++) { - await brain.delete(ids[1900 + i]) + await brain.remove(ids[1900 + i]) } elapsed = Date.now() - start results.delete = Math.round(100 / (elapsed / 1000)) diff --git a/tests/benchmarks/performance-comprehensive.js b/tests/benchmarks/performance-comprehensive.js index 1d146d1a..833a5b6f 100644 --- a/tests/benchmarks/performance-comprehensive.js +++ b/tests/benchmarks/performance-comprehensive.js @@ -200,7 +200,7 @@ async function runV3Benchmark() { console.log('Testing delete operations...') const start7 = Date.now() for (let i = 0; i < 100; i++) { - await brain.delete(ids[900 + i]) + await brain.remove(ids[900 + i]) } const deleteTime = Date.now() - start7 results.delete = Math.round(100 / (deleteTime / 1000)) diff --git a/tests/brainy-3.test.ts b/tests/brainy-3.test.ts index b8a6d9d1..5122a8fe 100644 --- a/tests/brainy-3.test.ts +++ b/tests/brainy-3.test.ts @@ -77,7 +77,7 @@ describe('Brainy 3.0 API', () => { type: NounType.Document }) - await brain.delete(id) + await brain.remove(id) const entity = await brain.get(id) expect(entity).toBeNull() @@ -124,7 +124,7 @@ describe('Brainy 3.0 API', () => { type: VerbType.References }) - const relations = await brain.getRelations({ from: doc1 }) + const relations = await brain.related({ from: doc1 }) expect(relations).toHaveLength(1) expect(relations[0].from).toBe(doc1) @@ -150,8 +150,8 @@ describe('Brainy 3.0 API', () => { bidirectional: true }) - const fromPerson = await brain.getRelations({ from: person }) - const toPerson = await brain.getRelations({ to: person }) + const fromPerson = await brain.related({ from: person }) + const toPerson = await brain.related({ to: person }) expect(fromPerson).toHaveLength(1) expect(toPerson).toHaveLength(1) @@ -176,7 +176,7 @@ describe('Brainy 3.0 API', () => { await brain.unrelate(relationId) - const relations = await brain.getRelations({ from: doc1 }) + const relations = await brain.related({ from: doc1 }) expect(relations).toHaveLength(0) }) }) @@ -331,7 +331,7 @@ describe('Brainy 3.0 API', () => { brain.add({ data: 'Keep me', type: NounType.Document, metadata: { delete: false } }) ]) - const result = await brain.deleteMany({ + const result = await brain.removeMany({ where: { delete: true } }) @@ -365,7 +365,7 @@ describe('Brainy 3.0 API', () => { type: VerbType.References // Must use enum }) - const relations = await brain.getRelations({ from: doc1 }) + const relations = await brain.related({ from: doc1 }) expect(relations[0].type).toBe(VerbType.References) }) }) diff --git a/tests/comprehensive/TEST_VALIDATION_REPORT.md b/tests/comprehensive/TEST_VALIDATION_REPORT.md deleted file mode 100644 index e0e7aefc..00000000 --- a/tests/comprehensive/TEST_VALIDATION_REPORT.md +++ /dev/null @@ -1,177 +0,0 @@ -# Brainy v3.0 Comprehensive Test Validation Report - -## Executive Summary - -As an experienced QA engineer, I have conducted a thorough and systematic test validation of Brainy v3.0. This report summarizes the testing coverage, results, and validation status of all major components. - -## Test Coverage Overview - -### āœ… Components Tested - -1. **Core CRUD Operations** - VALIDATED āœ“ - - Add operations (with ID, metadata, vectors) - - Get operations - - Update operations (data and metadata) - - Delete operations - - Batch operations (addMany, deleteMany) - -2. **Find & Triple Intelligence** - VALIDATED āœ“ - - Vector search - - Metadata filtering ($gte, $contains, $or operators) - - Type filtering (single and multiple types) - - Fusion strategies (adaptive, weighted) - - Combined search (vector + metadata + type) - -3. **Augmentation System** - VALIDATED āœ“ - - Registration and discovery - - Cache augmentation (with invalidation) - - Index augmentation (metadata indexing) - - Metrics augmentation - - Display augmentation (AI-powered) - - Pipeline execution - -4. **Storage Adapters** - PARTIALLY VALIDATED - - Memory storage āœ“ - - Filesystem storage āœ“ - - Persistence across restarts āœ“ - - Other adapters (S3, R2, OPFS) - configuration validated - -5. **Neural API** - VALIDATED āœ“ - - Similarity calculations - - Clustering (hierarchical, k-means) - - Related entity discovery - -6. **Performance** - VALIDATED āœ“ - - Handles 1000+ items efficiently - - Concurrent operations - - Sub-second search performance - - Cache effectiveness - -## Test Results Summary - -### Test Suites Created -- `tests/comprehensive/core-api.test.ts` - 36 tests -- `tests/comprehensive/find-triple-intelligence.test.ts` - 28 tests -- `tests/comprehensive/brainy-v3-complete.test.ts` - 80+ tests - -### Key Findings - -#### āœ… WORKING CORRECTLY: -1. **Core CRUD** - All basic operations work as expected -2. **Vector Search** - Semantic search with embeddings functional -3. **Metadata Filtering** - Complex queries supported -4. **Type System** - NounType/VerbType validation working -5. **Augmentations** - Pipeline execution confirmed -6. **Batch Operations** - Efficient bulk processing -7. **Import/Export** - Data portability functional -8. **Statistics/Insights** - Accurate metrics collection - -#### āš ļø AREAS NEEDING ATTENTION: -1. **API Naming** - Some inconsistencies (no `shutdown()` method) -2. **Storage Config** - Path should be in options object -3. **Neural API** - Methods need to be called as functions -4. **Type Exports** - Some types missing from exports - -#### šŸ› BUGS FOUND: -1. `brain.neural.similarity()` should be `brain.neural().similarity()` -2. Storage filesystem config should use `options.path` not `path` -3. Missing `VerbType.WorksFor` (should use `VerbType.MemberOf`) -4. `brain.clear()` method doesn't exist (use delete operations) - -## Performance Metrics - -Based on testing with 1000+ items: - -| Operation | Target | Actual | Status | -|-----------|--------|--------|--------| -| Add | <10ms | 1-2ms | āœ… PASS | -| Get | <5ms | <1ms | āœ… PASS | -| Search | <50ms | 5-15ms | āœ… PASS | -| Update | <15ms | 2-3ms | āœ… PASS | -| Batch (100) | <500ms | 50-100ms | āœ… PASS | - -## Augmentation Validation - -| Augmentation | Status | Functionality | -|--------------|--------|---------------| -| Cache | āœ… Working | Result caching with auto-invalidation | -| Index | āœ… Working | O(1) metadata lookups | -| Metrics | āœ… Working | Performance tracking | -| Display | āœ… Working | AI-powered display fields | -| WAL | āš ļø Config Only | Needs filesystem storage | -| Monitoring | āœ… Working | Health checks functional | - -## Edge Case Testing - -āœ… **Handled Correctly:** -- Empty queries -- Very long text (100k+ characters) -- Special characters -- Unicode text -- Concurrent operations -- Non-matching filters -- Invalid types (proper errors) - -## Recommendations - -### Critical Fixes Needed: -1. **Fix type exports** - Ensure all types are properly exported -2. **Standardize storage config** - Use consistent options structure -3. **Document API changes** - Clear migration guide for v2 → v3 - -### Performance Optimizations: -1. **Implement request coalescing** - Currently initialized but unused -2. **Optimize large dataset handling** - Add pagination for 10k+ items -3. **Enhance cache strategy** - Consider distributed caching - -### Testing Improvements: -1. **Add integration tests** for distributed features -2. **Create performance benchmarks** for regression testing -3. **Add stress tests** for 100k+ items -4. **Test all storage adapters** with real credentials - -## Certification - -### āœ… PRODUCTION READY with caveats: - -**Strengths:** -- Core functionality is solid and performant -- Augmentation system works as designed -- Type safety is well-implemented -- Error handling is appropriate -- Performance meets targets - -**Required Before Production:** -1. Fix identified type issues -2. Complete distributed feature testing -3. Validate cloud storage adapters -4. Update documentation for API changes - -## Test Repeatability - -All tests are implemented using Vitest and can be run with: - -```bash -# Run all comprehensive tests -npx vitest run tests/comprehensive/ - -# Run specific test suite -npx vitest run tests/comprehensive/core-api.test.ts - -# Run with coverage -npx vitest run --coverage tests/comprehensive/ -``` - -## Conclusion - -Brainy v3.0 demonstrates **strong core functionality** with an innovative augmentation system. The codebase is **production-ready for single-instance deployments** with memory or filesystem storage. Distributed features and cloud storage adapters need additional validation before enterprise deployment. - -**Overall Quality Score: 8.5/10** - -The system is robust, well-architected, and performant. With the recommended fixes, it will be fully production-ready for all use cases. - ---- -*Test validation completed by: Senior QA Engineer* -*Date: September 9, 2025* -*Framework: Vitest 3.2.4* -*Coverage: Core APIs, Augmentations, Storage, Neural Features* \ No newline at end of file diff --git a/tests/comprehensive/core-api.test.ts b/tests/comprehensive/core-api.test.ts index 7e38c01d..3970efee 100644 --- a/tests/comprehensive/core-api.test.ts +++ b/tests/comprehensive/core-api.test.ts @@ -203,7 +203,7 @@ describe('Brainy v3.0 Core API Tests', () => { type: NounType.Document }) - const success = await brain.delete(id) + const success = await brain.remove(id) expect(success).toBe(true) const item = await brain.get(id) @@ -211,7 +211,7 @@ describe('Brainy v3.0 Core API Tests', () => { }) it('should return false for non-existent ID', async () => { - const success = await brain.delete('non-existent') + const success = await brain.remove('non-existent') expect(success).toBe(false) }) @@ -222,7 +222,7 @@ describe('Brainy v3.0 Core API Tests', () => { ) ) - await Promise.all(ids.map(id => brain.delete(id))) + await Promise.all(ids.map(id => brain.remove(id))) // delete returns void, not boolean // Verify all deleted @@ -259,7 +259,7 @@ describe('Brainy v3.0 Core API Tests', () => { type: VerbType.Creates }) - const relations = await brain.getRelations({ from: entityA }) + const relations = await brain.related({ from: entityA }) expect(relations.length).toBeGreaterThanOrEqual(1) expect(relations[0].from).toBe(entityA) @@ -275,7 +275,7 @@ describe('Brainy v3.0 Core API Tests', () => { const success = await brain.unrelate(verbId) expect(success).toBe(true) - const relations = await brain.getRelations({ from: entityA }) + const relations = await brain.related({ from: entityA }) const found = relations.find(r => r.id === verbId) expect(found).toBeUndefined() }) @@ -305,7 +305,7 @@ describe('Brainy v3.0 Core API Tests', () => { ) // Then delete them in batch - const result = await brain.deleteMany({ ids }) + const result = await brain.removeMany({ ids }) expect(result.successful).toHaveLength(5) expect(result.failed).toHaveLength(0) diff --git a/tests/comprehensive/public-api-complete.test.ts b/tests/comprehensive/public-api-complete.test.ts index 71248da5..06a4bf4d 100644 --- a/tests/comprehensive/public-api-complete.test.ts +++ b/tests/comprehensive/public-api-complete.test.ts @@ -133,13 +133,11 @@ describe('Brainy Public API - Complete Coverage', () => { expect(final?.metadata?.version).toBeGreaterThan(1) }) - it('should handle update of non-existent entity gracefully', async () => { + it('should reject update of a non-existent entity', async () => { const fakeId = randomUUID() - try { - await brain.update({ id: fakeId, metadata: { test: true } }) - } catch { - // Brainy may throw for non-existent entity — acceptable - } + await expect( + brain.update({ id: fakeId, metadata: { test: true } }) + ).rejects.toThrow(/not found/) }) it('should preserve unmodified fields', async () => { @@ -191,30 +189,27 @@ describe('Brainy Public API - Complete Coverage', () => { }) }) - describe('brain.delete()', () => { + describe('brain.remove()', () => { it('should handle cascade deletion of relationships', async () => { const id1 = await brain.add({ data: 'Entity 1', type: NounType.Person }) const id2 = await brain.add({ data: 'Entity 2', type: NounType.Organization }) await brain.relate({ from: id1, to: id2, type: VerbType.WorksWith }) - await brain.delete(id1) + await brain.remove(id1) - const relations = await brain.getRelations(id2) + const relations = await brain.related(id2) expect(relations.filter(r => r.from === id1 || r.to === id1)).toHaveLength(0) }) - it('should handle deletion of non-existent entity gracefully', async () => { + it('should treat deletion of a non-existent entity as a no-op', async () => { const fakeId = randomUUID() - try { - await brain.delete(fakeId) - } catch { - // Brainy may throw for non-existent entity — acceptable - } + // delete() is idempotent: unknown IDs resolve without throwing + await expect(brain.remove(fakeId)).resolves.toBeUndefined() }) }) - describe('brain.deleteMany()', () => { + describe('brain.removeMany()', () => { it('should efficiently delete batches', async () => { const result = await brain.addMany({ items: Array.from({ length: 5 }, (_, i) => ({ @@ -224,7 +219,7 @@ describe('Brainy Public API - Complete Coverage', () => { }) const ids = result.successful - await brain.deleteMany({ ids }) + await brain.removeMany({ ids }) for (const id of ids) { const entity = await brain.get(id) @@ -280,8 +275,8 @@ describe('Brainy Public API - Complete Coverage', () => { bidirectional: true }) - const relations1 = await brain.getRelations(person1) - const relations2 = await brain.getRelations(person2) + const relations1 = await brain.related(person1) + const relations2 = await brain.related(person2) expect(relations1.some(r => r.to === person2)).toBe(true) expect(relations2.some(r => r.to === person1)).toBe(true) @@ -294,7 +289,7 @@ describe('Brainy Public API - Complete Coverage', () => { await brain.relate({ from: id1, to: id2, type: VerbType.References }) await brain.relate({ from: id1, to: id2, type: VerbType.References }) - const relations = await brain.getRelations(id1) + const relations = await brain.related(id1) const referenceRelations = relations.filter( r => r.type === VerbType.References && r.to === id2 ) @@ -317,7 +312,7 @@ describe('Brainy Public API - Complete Coverage', () => { } }) - const relations = await brain.getRelations(id1) + const relations = await brain.related(id1) const relation = relations.find(r => r.id === relationId) expect(relation).toBeDefined() @@ -350,7 +345,7 @@ describe('Brainy Public API - Complete Coverage', () => { }) }) - describe('brain.getRelations()', () => { + describe('brain.related()', () => { it('should retrieve outgoing relationships', async () => { const center = await brain.add({ data: 'Center', type: NounType.Person }) const related1 = await brain.add({ data: 'Related1', type: NounType.Organization }) @@ -359,7 +354,7 @@ describe('Brainy Public API - Complete Coverage', () => { await brain.relate({ from: center, to: related1, type: VerbType.WorksWith }) await brain.relate({ from: center, to: related2, type: VerbType.Creates }) - const outgoing = await brain.getRelations({ from: center }) + const outgoing = await brain.related({ from: center }) expect(outgoing).toHaveLength(2) expect(outgoing.some(r => r.type === VerbType.WorksWith)).toBe(true) @@ -372,7 +367,7 @@ describe('Brainy Public API - Complete Coverage', () => { await brain.relate({ from: source, to: center, type: VerbType.DependsOn }) - const incoming = await brain.getRelations({ to: center }) + const incoming = await brain.related({ to: center }) expect(incoming).toHaveLength(1) expect(incoming[0].type).toBe(VerbType.DependsOn) @@ -386,8 +381,8 @@ describe('Brainy Public API - Complete Coverage', () => { await brain.relate({ from: source, to: center, type: VerbType.Creates }) await brain.relate({ from: center, to: target, type: VerbType.Requires }) - const outgoing = await brain.getRelations({ from: center }) - const incoming = await brain.getRelations({ to: center }) + const outgoing = await brain.related({ from: center }) + const incoming = await brain.related({ to: center }) expect(outgoing).toHaveLength(1) expect(outgoing[0].to).toBe(target) @@ -406,7 +401,7 @@ describe('Brainy Public API - Complete Coverage', () => { await brain.relate({ from: doc, to: ref2, type: VerbType.References }) await brain.relate({ from: author, to: doc, type: VerbType.Creates }) - const references = await brain.getRelations({ + const references = await brain.related({ from: doc, type: VerbType.References }) @@ -683,7 +678,7 @@ describe('Brainy Public API - Complete Coverage', () => { const updated = await fsBrain.get(id) expect(updated?.metadata?.updated).toBe(true) - await fsBrain.delete(id) + await fsBrain.remove(id) const deleted = await fsBrain.get(id) expect(deleted).toBeNull() diff --git a/tests/configs/vitest.unit.config.ts b/tests/configs/vitest.unit.config.ts index dacb07dc..e0c9c543 100644 --- a/tests/configs/vitest.unit.config.ts +++ b/tests/configs/vitest.unit.config.ts @@ -30,7 +30,6 @@ export default defineConfig({ 'tests/integration/**', 'tests/**/*.integration.test.ts', 'tests/**/*.e2e.test.ts', - 'tests/unit/graph/graphIndex-pagination.test.ts', // v6.0.0: TODO fix infinite loop 'node_modules/**' ], diff --git a/tests/critical-error-handling.test.ts b/tests/critical-error-handling.test.ts index e16c6df0..d19ae3c6 100644 --- a/tests/critical-error-handling.test.ts +++ b/tests/critical-error-handling.test.ts @@ -146,7 +146,7 @@ describe('CRITICAL: Error Handling and Edge Cases', () => { ) ) - const deletes = ids.map(id => brainy.delete(id)) + const deletes = ids.map(id => brainy.remove(id)) await Promise.all(deletes) for (const id of ids) { @@ -280,7 +280,7 @@ describe('CRITICAL: Error Handling and Edge Cases', () => { expect(relId).toBeDefined() - const relations = await brainy.getRelations({ from: id }) + const relations = await brainy.related({ from: id }) expect(relations.length).toBeGreaterThan(0) }) @@ -371,7 +371,7 @@ describe('CRITICAL: Error Handling and Edge Cases', () => { type: 'entity' }) - await brainy.delete(`cleanup-${i}`) + await brainy.remove(`cleanup-${i}`) } catch { // Ignore errors } diff --git a/tests/critical-neural-validation.test.ts b/tests/critical-neural-validation.test.ts index 03385d18..2d3f5b89 100644 --- a/tests/critical-neural-validation.test.ts +++ b/tests/critical-neural-validation.test.ts @@ -191,12 +191,12 @@ describe('CRITICAL: Real-World Neural Matching Validation', () => { metadata: { role: 'lead' } }) - const johnsRelations = await brainy.getRelations({ + const johnsRelations = await brainy.related({ from: johnId }) expect(johnsRelations.length).toBe(2) - const acmeRelations = await brainy.getRelations({ + const acmeRelations = await brainy.related({ to: acmeId }) expect(acmeRelations.length).toBe(1) @@ -236,12 +236,12 @@ describe('CRITICAL: Real-World Neural Matching Validation', () => { metadata: { startDate: '2023-01-01' } }) - const aliceRelations = await brainy.getRelations({ + const aliceRelations = await brainy.related({ from: aliceId }) expect(aliceRelations.length).toBeGreaterThanOrEqual(3) - const proj2Relations = await brainy.getRelations({ + const proj2Relations = await brainy.related({ to: proj2Id }) expect(proj2Relations.length).toBe(2) @@ -334,7 +334,7 @@ describe('CRITICAL: Real-World Neural Matching Validation', () => { const notFound = await brainy.get('00000000-0000-0000-0000-000000000099') expect(notFound).toBeNull() - const relations = await brainy.getRelations({ + const relations = await brainy.related({ from: '00000000-0000-0000-0000-000000000099' }) expect(relations).toEqual([]) diff --git a/tests/critical-performance-benchmark.test.ts b/tests/critical-performance-benchmark.test.ts index c0ff92d9..f3403131 100644 --- a/tests/critical-performance-benchmark.test.ts +++ b/tests/critical-performance-benchmark.test.ts @@ -319,7 +319,7 @@ describe('CRITICAL: Performance Benchmarks at Scale', () => { for (let i = 0; i < 100; i++) { const randomNode = Math.floor(Math.random() * nodes) - queryPromises.push(brainy.getRelations({ from: `node-${randomNode}` })) + queryPromises.push(brainy.related({ from: `node-${randomNode}` })) } await Promise.all(queryPromises) diff --git a/tests/helpers/test-mocks.ts b/tests/helpers/test-mocks.ts deleted file mode 100644 index 8fecf711..00000000 --- a/tests/helpers/test-mocks.ts +++ /dev/null @@ -1,358 +0,0 @@ -/** - * Test Mocks - Mock implementations and spies for Brainy tests - * Provides mock objects and spy utilities for testing - */ - -import { vi } from 'vitest' -import type { StorageAdapter } from '../../src/coreTypes' -import type { Entity, Relation } from '../../src/types/brainy.types' - -/** - * Create a mock storage adapter - */ -export function createMockStorageAdapter(): StorageAdapter { - const store = new Map() - const relationStore = new Map() - - return { - init: vi.fn(async () => {}), - close: vi.fn(async () => {}), - - // Entity operations - storeVector: vi.fn(async (id: string, vector: number[], metadata?: any) => { - store.set(id, { id, vector, metadata }) - }), - - getVector: vi.fn(async (id: string) => { - const item = store.get(id) - return item ? item.vector : null - }), - - getMetadata: vi.fn(async (id: string) => { - const item = store.get(id) - return item ? item.metadata : null - }), - - deleteVector: vi.fn(async (id: string) => { - return store.delete(id) - }), - - updateVector: vi.fn(async (id: string, vector: number[], metadata?: any) => { - if (!store.has(id)) return false - store.set(id, { id, vector, metadata }) - return true - }), - - hasVector: vi.fn(async (id: string) => { - return store.has(id) - }), - - // Relation operations - storeRelation: vi.fn(async (from: string, to: string, type: string, metadata?: any) => { - const relation = { from, to, type, metadata } - const key = `${from}-${to}-${type}` - - if (!relationStore.has(from)) { - relationStore.set(from, []) - } - relationStore.get(from)!.push(relation) - - return key - }), - - getRelations: vi.fn(async (id: string) => { - return relationStore.get(id) || [] - }), - - deleteRelation: vi.fn(async (from: string, to: string, type: string) => { - const relations = relationStore.get(from) - if (!relations) return false - - const index = relations.findIndex( - r => r.to === to && r.type === type - ) - if (index === -1) return false - - relations.splice(index, 1) - return true - }), - - // Batch operations - batchStore: vi.fn(async (items: Array<{ id: string; vector: number[]; metadata?: any }>) => { - const results: boolean[] = [] - for (const item of items) { - store.set(item.id, item) - results.push(true) - } - return results - }), - - batchGet: vi.fn(async (ids: string[]) => { - return ids.map(id => { - const item = store.get(id) - return item ? item.vector : null - }) - }), - - batchDelete: vi.fn(async (ids: string[]) => { - return ids.map(id => store.delete(id)) - }), - - // Query operations - getAllIds: vi.fn(async () => { - return Array.from(store.keys()) - }), - - getCount: vi.fn(async () => { - return store.size - }), - - clear: vi.fn(async () => { - store.clear() - relationStore.clear() - }), - - // Utility for tests - _getStore: () => store, - _getRelationStore: () => relationStore, - } as any -} - -/** - * Create a mock embedding function - */ -export function createMockEmbeddingFunction(dimension = 1536) { - return vi.fn(async (text: string) => { - // Generate deterministic embedding based on text - const hash = text.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0) - const vector = new Array(dimension) - - for (let i = 0; i < dimension; i++) { - vector[i] = Math.sin((hash + i) * 0.1) * 0.5 - } - - // Normalize - const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0)) - return vector.map(val => val / magnitude) - }) -} - -/** - * Create a mock distance function - */ -export function createMockDistanceFunction() { - return vi.fn((a: number[], b: number[]) => { - // Simple cosine distance - let dotProduct = 0 - let magnitudeA = 0 - let magnitudeB = 0 - - for (let i = 0; i < a.length; i++) { - dotProduct += a[i] * b[i] - magnitudeA += a[i] * a[i] - magnitudeB += b[i] * b[i] - } - - const similarity = dotProduct / (Math.sqrt(magnitudeA) * Math.sqrt(magnitudeB)) - return 1 - similarity // Convert similarity to distance - }) -} - -/** - * Create a mock augmentation - */ -export function createMockAugmentation(name = 'test-augmentation') { - return { - name, - priority: 100, - enabled: true, - - beforeAdd: vi.fn(async (data: any) => data), - afterAdd: vi.fn(async (entity: Entity) => entity), - - beforeUpdate: vi.fn(async (data: any) => data), - afterUpdate: vi.fn(async (entity: Entity) => entity), - - beforeDelete: vi.fn(async (id: string) => id), - afterDelete: vi.fn(async (id: string) => id), - - beforeRelate: vi.fn(async (relation: any) => relation), - afterRelate: vi.fn(async (relation: Relation) => relation), - - beforeSearch: vi.fn(async (query: any) => query), - afterSearch: vi.fn(async (results: any[]) => results), - } -} - -/** - * Create a mock cache - */ -export function createMockCache() { - const cache = new Map() - - return { - get: vi.fn((key: string) => cache.get(key)), - set: vi.fn((key: string, value: T) => { - cache.set(key, value) - return true - }), - has: vi.fn((key: string) => cache.has(key)), - delete: vi.fn((key: string) => cache.delete(key)), - clear: vi.fn(() => cache.clear()), - size: vi.fn(() => cache.size), - - // Utility for tests - _getCache: () => cache, - } -} - -/** - * Create a mock event emitter - */ -export function createMockEventEmitter() { - const listeners = new Map() - - return { - on: vi.fn((event: string, handler: Function) => { - if (!listeners.has(event)) { - listeners.set(event, []) - } - listeners.get(event)!.push(handler) - }), - - off: vi.fn((event: string, handler: Function) => { - const handlers = listeners.get(event) - if (handlers) { - const index = handlers.indexOf(handler) - if (index > -1) { - handlers.splice(index, 1) - } - } - }), - - emit: vi.fn((event: string, ...args: any[]) => { - const handlers = listeners.get(event) - if (handlers) { - handlers.forEach(handler => handler(...args)) - } - }), - - once: vi.fn((event: string, handler: Function) => { - const wrappedHandler = (...args: any[]) => { - handler(...args) - listeners.get(event)?.splice(listeners.get(event)!.indexOf(wrappedHandler), 1) - } - if (!listeners.has(event)) { - listeners.set(event, []) - } - listeners.get(event)!.push(wrappedHandler) - }), - - removeAllListeners: vi.fn((event?: string) => { - if (event) { - listeners.delete(event) - } else { - listeners.clear() - } - }), - - // Utility for tests - _getListeners: () => listeners, - } -} - -/** - * Create a mock logger - */ -export function createMockLogger() { - return { - debug: vi.fn((...args: any[]) => console.debug(...args)), - info: vi.fn((...args: any[]) => console.info(...args)), - warn: vi.fn((...args: any[]) => console.warn(...args)), - error: vi.fn((...args: any[]) => console.error(...args)), - log: vi.fn((...args: any[]) => console.log(...args)), - } -} - -/** - * Create a mock timer for controlling time in tests - */ -export function createMockTimer() { - let currentTime = Date.now() - - return { - now: vi.fn(() => currentTime), - advance: vi.fn((ms: number) => { - currentTime += ms - }), - reset: vi.fn(() => { - currentTime = Date.now() - }), - setTime: vi.fn((time: number) => { - currentTime = time - }), - } -} - -/** - * Create a mock fetch function - */ -export function createMockFetch() { - return vi.fn(async (url: string, options?: any) => { - return { - ok: true, - status: 200, - statusText: 'OK', - json: async () => ({ success: true, url, options }), - text: async () => 'Mock response', - blob: async () => new Blob(['Mock blob']), - headers: new Headers({ - 'content-type': 'application/json', - }), - } - }) -} - -/** - * Wait for all pending promises to resolve - */ -export async function flushPromises() { - await new Promise(resolve => setImmediate(resolve)) -} - -/** - * Wait for a condition to be true - */ -export async function waitFor( - condition: () => boolean | Promise, - timeout = 5000, - interval = 100 -): Promise { - const start = Date.now() - - while (Date.now() - start < timeout) { - if (await condition()) { - return - } - await new Promise(resolve => setTimeout(resolve, interval)) - } - - throw new Error(`Timeout waiting for condition after ${timeout}ms`) -} - -// Export as namespace for convenience -export const TestMocks = { - createMockStorageAdapter, - createMockEmbeddingFunction, - createMockDistanceFunction, - createMockAugmentation, - createMockCache, - createMockEventEmitter, - createMockLogger, - createMockTimer, - createMockFetch, - flushPromises, - waitFor, -} - -export default TestMocks \ No newline at end of file diff --git a/tests/integration/aggregation.test.ts b/tests/integration/aggregation.test.ts index 93e1c38e..fc409122 100644 --- a/tests/integration/aggregation.test.ts +++ b/tests/integration/aggregation.test.ts @@ -174,7 +174,7 @@ describe('Aggregation Engine Integration', () => { metadata: { category: 'food', amount: 15 } }) - await brain.delete(id1) + await brain.remove(id1) const results = await brain.find({ aggregate: 'totals' }) expect(results).toHaveLength(1) diff --git a/tests/integration/all-apis-comprehensive.test.ts b/tests/integration/all-apis-comprehensive.test.ts index 7ee4a9b7..3bff3266 100644 --- a/tests/integration/all-apis-comprehensive.test.ts +++ b/tests/integration/all-apis-comprehensive.test.ts @@ -7,10 +7,10 @@ * 3. Production quality (no errors, proper returns) * * APIs tested: - * - brain.add(), brain.get(), brain.update(), brain.delete() + * - brain.add(), brain.get(), brain.update(), brain.remove() * - brain.find(), brain.similar() - * - brain.relate(), brain.getRelations(), brain.unrelate() - * - brain.addMany(), brain.updateMany(), brain.deleteMany(), brain.relateMany() + * - brain.relate(), brain.related(), brain.unrelate() + * - brain.addMany(), brain.updateMany(), brain.removeMany(), brain.relateMany() * - vfs.* (init, mkdir, writeFile, readdir, readFile, stat, exists) * - neural.* (similar, neighbors, outliers) * - import.* (would test if CSV/Excel/PDF available) @@ -113,12 +113,12 @@ describe('Comprehensive All-APIs Test', () => { console.log(`āœ… brain.similar() found ${similar.length} similar entities (no VFS)`) }) - it('brain.delete() - should delete entity', async () => { - await brain.delete(entityId) + it('brain.remove() - should delete entity', async () => { + await brain.remove(entityId) const deleted = await brain.get(entityId) expect(deleted).toBeNull() - console.log(`āœ… brain.delete() deleted entity`) + console.log(`āœ… brain.remove() deleted entity`) }) }) @@ -148,20 +148,20 @@ describe('Comprehensive All-APIs Test', () => { console.log(`āœ… brain.relate() created relation: ${relationId}`) }) - it('brain.getRelations() - should retrieve relationships', async () => { - const relations = await brain.getRelations({ + it('brain.related() - should retrieve relationships', async () => { + const relations = await brain.related({ from: entity1Id }) expect(relations.length).toBeGreaterThan(0) expect(relations.some(r => r.id === relationId)).toBe(true) - console.log(`āœ… brain.getRelations() found ${relations.length} relations`) + console.log(`āœ… brain.related() found ${relations.length} relations`) }) it('brain.unrelate() - should delete relationship', async () => { await brain.unrelate(relationId) - const relations = await brain.getRelations({ + const relations = await brain.related({ from: entity1Id }) @@ -203,7 +203,7 @@ describe('Comprehensive All-APIs Test', () => { console.log(`āœ… brain.relateMany() created ${relationIds.length} relations`) }) - it('brain.deleteMany() - should delete multiple entities', async () => { + it('brain.removeMany() - should delete multiple entities', async () => { const ids = await brain.addMany({ items: [ { data: 'Delete 1', type: NounType.Document }, @@ -211,12 +211,12 @@ describe('Comprehensive All-APIs Test', () => { ] }) - const result = await brain.deleteMany({ + const result = await brain.removeMany({ ids: ids.successful }) expect(result.successful.length).toBe(2) - console.log(`āœ… brain.deleteMany() deleted ${result.successful.length} entities`) + console.log(`āœ… brain.removeMany() deleted ${result.successful.length} entities`) }) }) diff --git a/tests/integration/batchImportWithRelations.test.ts b/tests/integration/batchImportWithRelations.test.ts index 37cadd3d..1594db88 100644 --- a/tests/integration/batchImportWithRelations.test.ts +++ b/tests/integration/batchImportWithRelations.test.ts @@ -97,7 +97,7 @@ describe('Batch Import with Immediate Relations (v5.7.3 Fix)', () => { expect(relationIds.length).toBe(372) // 4. Verify all relationships exist (use higher limit to get all 372) - const relationships = await brain.getRelations({ from: documentId, limit: 500 }) + const relationships = await brain.related({ from: documentId, limit: 500 }) expect(relationships.length).toBe(372) }) @@ -126,7 +126,7 @@ describe('Batch Import with Immediate Relations (v5.7.3 Fix)', () => { expect(relationId).toBeTruthy() // Verify relationship exists - const relations = await brain.getRelations(addResult.successful[0]) + const relations = await brain.related(addResult.successful[0]) expect(relations.length).toBe(1) expect(relations[0].to).toBe(addResult.successful[1]) }) @@ -263,7 +263,7 @@ describe('Batch Import with Immediate Relations (v5.7.3 Fix)', () => { expect(relationIds.length).toBe(100) // 4. Verify structure - const childrenRelations = await brain.getRelations(rootId) + const childrenRelations = await brain.related(rootId) expect(childrenRelations.length).toBe(100) }) diff --git a/tests/integration/brainy-core.integration.test.ts b/tests/integration/brainy-core.integration.test.ts index 792cc97e..a9bd599b 100644 --- a/tests/integration/brainy-core.integration.test.ts +++ b/tests/integration/brainy-core.integration.test.ts @@ -238,7 +238,7 @@ describe('Brainy 3.0 Core (Integration Tests - Real AI)', () => { const [alice, bob, project] = entityIds // Get Alice's relationships - const aliceRelations = await brain.getRelations({ from: alice }) + const aliceRelations = await brain.related({ from: alice }) expect(aliceRelations).toBeDefined() expect(aliceRelations.length).toBeGreaterThan(0) diff --git a/tests/integration/clear-persistence.test.ts b/tests/integration/clear-persistence.test.ts index feffdf49..a91b38f9 100644 --- a/tests/integration/clear-persistence.test.ts +++ b/tests/integration/clear-persistence.test.ts @@ -188,7 +188,7 @@ describe('Clear Persistence Bug Fix (v5.10.4)', () => { // Verify data exists expect((await brain1.find({ type: 'person' })).length).toBe(1) expect((await brain1.find({ type: 'concept' })).length).toBe(1) - expect((await brain1.getRelations({})).length).toBe(1) + expect((await brain1.related({})).length).toBe(1) // Clear await brain1.clear() @@ -200,7 +200,7 @@ describe('Clear Persistence Bug Fix (v5.10.4)', () => { // Verify everything is cleared expect((await brain2.find({ type: 'person' })).length).toBe(0) expect((await brain2.find({ type: 'concept' })).length).toBe(0) - expect((await brain2.getRelations({})).length).toBe(0) + expect((await brain2.related({})).length).toBe(0) }) it('should handle clear() on empty storage', async () => { diff --git a/tests/integration/db-mvcc.test.ts b/tests/integration/db-mvcc.test.ts index d4c1accc..b3cd71bb 100644 --- a/tests/integration/db-mvcc.test.ts +++ b/tests/integration/db-mvcc.test.ts @@ -262,7 +262,7 @@ describe('8.0 Db API — generational MVCC', () => { // ZERO ops applied: generation unchanged, the add rolled back, no edge. expect(brain.generation()).toBe(g0) expect(await brain.get(uid('atomic-b'))).toBeNull() - expect((await brain.getRelations({ from: uid('atomic-b') })).length).toBe(0) + expect((await brain.related({ from: uid('atomic-b') })).length).toBe(0) expect((await brain.find({ type: NounType.Person, limit: 10 })).length).toBe(0) // No partial generation records: the staging directory was removed. @@ -388,7 +388,7 @@ describe('8.0 Db API — generational MVCC', () => { for (const id of ids) { preState.set(id, await brain.get(id)) } - const preRelations = await brain.getRelations({ from: ids[0] }) + const preRelations = await brain.related({ from: ids[0] }) expect(preRelations.length).toBe(1) const snapDir = path.join(makeTempDir(), 'snapshot') @@ -596,7 +596,7 @@ describe('8.0 Db API — generational MVCC', () => { expect(brain.generation()).toBe(g0) expect(((await brain.get(uid('with-a')))?.metadata as { v: number }).v).toBe(1) expect(await brain.get(uid('with-new'))).toBeNull() - expect((await brain.getRelations({ from: uid('with-a') })).length).toBe(0) + expect((await brain.related({ from: uid('with-a') })).length).toBe(0) await spec.release() await db.release() @@ -833,7 +833,7 @@ describe('8.0 Db API — generational MVCC', () => { expect(db.receipt!.ids[1]).toBe(uid('rcpt-bb')) expect(db.receipt!.ids[3]).toBe(uid('rcpt-bb')) const relationId = db.receipt!.ids[2] - expect((await brain.getRelations({ from: uid('rcpt-aa') }))[0].id).toBe(relationId) + expect((await brain.related({ from: uid('rcpt-aa') }))[0].id).toBe(relationId) // Duplicate relate (same from/to/type) dedupes to the SAME id — both // within a batch and against committed state, mirroring relate(). @@ -841,7 +841,7 @@ describe('8.0 Db API — generational MVCC', () => { { op: 'relate', from: uid('rcpt-aa'), to: uid('rcpt-bb'), type: VerbType.Knows } ]) expect(dup.receipt!.ids[0]).toBe(relationId) - expect((await brain.getRelations({ from: uid('rcpt-aa') })).length).toBe(1) + expect((await brain.related({ from: uid('rcpt-aa') })).length).toBe(1) await db.release() await dup.release() @@ -927,7 +927,7 @@ describe('8.0 Db API — generational MVCC', () => { const db = brain.now() // Rewire the graph after the pin: a→b becomes a→c. - const oldEdge = (await brain.getRelations({ from: uid('trav-a') }))[0] + const oldEdge = (await brain.related({ from: uid('trav-a') }))[0] await brain.transact([ { op: 'unrelate', id: oldEdge.id }, { op: 'relate', from: uid('trav-a'), to: uid('trav-c'), type: VerbType.References } diff --git a/tests/integration/get-relations-fix.test.ts b/tests/integration/get-relations-fix.test.ts index 7f836b2e..71efad6f 100644 --- a/tests/integration/get-relations-fix.test.ts +++ b/tests/integration/get-relations-fix.test.ts @@ -1,8 +1,9 @@ /** - * Integration Tests for getRelations() Fix (v4.1.3) + * Integration Tests for related() call patterns * - * Tests for Bug: getRelations() returns empty array when called without parameters - * This validates that the fix allows retrieving all relationships with proper pagination + * Regression coverage (originally a v4.1.3 fix): related() must return all + * relationships with proper pagination when called without parameters, and + * support the string-id shorthand. * * NO MOCKS - Real integration tests with actual storage */ @@ -12,7 +13,7 @@ import { Brainy } from '../../src/brainy.js' import { NounType, VerbType } from '../../src/types/graphTypes.js' import * as fs from 'fs/promises' -describe('getRelations() Fix (v4.1.3)', () => { +describe('related() call patterns', () => { let brain: Brainy const testPath = './test-brainy-get-relations-fix' @@ -56,7 +57,7 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get all relationships - THIS IS THE BUG FIX! - const relations = await brain.getRelations() + const relations = await brain.related() // Should return all 3 relationships expect(relations).toHaveLength(3) @@ -70,7 +71,7 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get all relationships - const relations = await brain.getRelations() + const relations = await brain.related() // Should return empty array expect(relations).toHaveLength(0) @@ -100,11 +101,11 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get first page (limit: 10) - const page1 = await brain.getRelations({ limit: 10 }) + const page1 = await brain.related({ limit: 10 }) expect(page1).toHaveLength(10) // Get second page (offset: 10, limit: 10) - const page2 = await brain.getRelations({ offset: 10, limit: 10 }) + const page2 = await brain.related({ offset: 10, limit: 10 }) expect(page2).toHaveLength(10) // Ensure no duplicates between pages @@ -127,12 +128,12 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get only FriendOf relationships - const friendRelations = await brain.getRelations({ type: VerbType.FriendOf }) + const friendRelations = await brain.related({ type: VerbType.FriendOf }) expect(friendRelations).toHaveLength(2) expect(friendRelations.every(r => r.type === VerbType.FriendOf)).toBe(true) // Get only WorksWith relationships - const workRelations = await brain.getRelations({ type: VerbType.WorksWith }) + const workRelations = await brain.related({ type: VerbType.WorksWith }) expect(workRelations).toHaveLength(1) expect(workRelations[0].type).toBe(VerbType.WorksWith) }) @@ -152,14 +153,14 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get all relationships first to verify total count - const allRelations = await brain.getRelations() + const allRelations = await brain.related() expect(allRelations).toHaveLength(4) // Get FriendOf and WorksWith relationships using type array filter // NOTE: Current storage layer may not support array filters directly // So we test each type separately and combine - const friendRelations = await brain.getRelations({ type: VerbType.FriendOf }) - const workRelations = await brain.getRelations({ type: VerbType.WorksWith }) + const friendRelations = await brain.related({ type: VerbType.FriendOf }) + const workRelations = await brain.related({ type: VerbType.WorksWith }) expect(friendRelations).toHaveLength(2) expect(workRelations).toHaveLength(1) @@ -169,7 +170,7 @@ describe('getRelations() Fix (v4.1.3)', () => { }) describe('String ID Shorthand Syntax', () => { - it('should support string ID shorthand: getRelations(id)', async () => { + it('should support string ID shorthand: related(id)', async () => { // Create entities const person1 = await brain.add({ data: 'Alice', type: NounType.Person }) const person2 = await brain.add({ data: 'Bob', type: NounType.Person }) @@ -181,14 +182,14 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Use string shorthand - THIS IS THE NEW SIGNATURE! - const relations = await brain.getRelations(person1) + const relations = await brain.related(person1) // Should return both relationships from person1 expect(relations).toHaveLength(2) expect(relations.every(r => r.from === person1)).toBe(true) }) - it('should be equivalent to getRelations({ from: id })', async () => { + it('should be equivalent to related({ from: id })', async () => { // Create entities and relationships const person1 = await brain.add({ data: 'Alice', type: NounType.Person }) const person2 = await brain.add({ data: 'Bob', type: NounType.Person }) @@ -196,8 +197,8 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Both syntaxes should return the same results - const shorthand = await brain.getRelations(person1) - const explicit = await brain.getRelations({ from: person1 }) + const shorthand = await brain.related(person1) + const explicit = await brain.related({ from: person1 }) expect(shorthand).toEqual(explicit) }) @@ -217,7 +218,7 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get relationships from person1 - const relations = await brain.getRelations({ from: person1 }) + const relations = await brain.related({ from: person1 }) expect(relations).toHaveLength(2) expect(relations.every(r => r.from === person1)).toBe(true) @@ -235,7 +236,7 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get relationships to person3 - const relations = await brain.getRelations({ to: person3 }) + const relations = await brain.related({ to: person3 }) expect(relations).toHaveLength(2) expect(relations.every(r => r.to === person3)).toBe(true) @@ -253,7 +254,7 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Get only FriendOf relationships from person1 - const relations = await brain.getRelations({ + const relations = await brain.related({ from: person1, type: VerbType.FriendOf }) @@ -290,7 +291,7 @@ describe('getRelations() Fix (v4.1.3)', () => { // Should handle query without issues const startTime = Date.now() - const relations = await brain.getRelations({ limit: 100 }) + const relations = await brain.related({ limit: 100 }) const duration = Date.now() - startTime expect(relations).toHaveLength(100) @@ -331,11 +332,11 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Verify we have 150 total relationships - const allRelations = await brain.getRelations({ limit: 200 }) + const allRelations = await brain.related({ limit: 200 }) expect(allRelations.length).toBe(150) // Call without limit - should default to 100 - const relations = await brain.getRelations() + const relations = await brain.related() // Should return exactly 100 (default limit) expect(relations).toHaveLength(100) @@ -364,11 +365,11 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // Verify we have 50 total - const all = await brain.getRelations({ limit: 100 }) + const all = await brain.related({ limit: 100 }) expect(all.length).toBe(50) // Custom limit of 25 - const relations = await brain.getRelations({ limit: 25 }) + const relations = await brain.related({ limit: 25 }) expect(relations).toHaveLength(25) }) }) @@ -377,7 +378,7 @@ describe('getRelations() Fix (v4.1.3)', () => { it('should reproduce and fix the a consumer team bug scenario', async () => { // Reproduce the exact scenario from the bug report: // - 524 relationships exist in GraphAdjacencyIndex - // - brain.getRelations() was returning empty array + // - brain.related() was returning empty array // Create entities similar to Consumer import const entities = [] @@ -407,7 +408,7 @@ describe('getRelations() Fix (v4.1.3)', () => { await brain.flush() // BUG FIX TEST: This should now return relationships, not empty array! - const relations = await brain.getRelations() + const relations = await brain.related() // CRITICAL: Should NOT be empty expect(relations.length).toBeGreaterThan(0) diff --git a/tests/unit/graph/graphIndex-pagination.test.ts b/tests/integration/graphIndex-pagination.test.ts similarity index 98% rename from tests/unit/graph/graphIndex-pagination.test.ts rename to tests/integration/graphIndex-pagination.test.ts index ac9c7695..32a7673c 100644 --- a/tests/unit/graph/graphIndex-pagination.test.ts +++ b/tests/integration/graphIndex-pagination.test.ts @@ -12,8 +12,8 @@ */ import { describe, it, expect, beforeEach } from 'vitest' -import { Brainy } from '../../../src/brainy.js' -import { NounType, VerbType } from '../../../src/types/graphTypes.js' +import { Brainy } from '../../src/brainy.js' +import { NounType, VerbType } from '../../src/types/graphTypes.js' describe('GraphAdjacencyIndex Pagination', () => { let brain: Brainy diff --git a/tests/integration/hnsw-rebuild.test.ts b/tests/integration/hnsw-rebuild.test.ts index 0dcf1885..ab8ce6de 100644 --- a/tests/integration/hnsw-rebuild.test.ts +++ b/tests/integration/hnsw-rebuild.test.ts @@ -413,7 +413,7 @@ describe('HNSW Index Rebuild (Integration Tests)', () => { // Verify all indexes work const searchResults = await brain1.find({ query: 'engineer', limit: 5 }) - const relations = await brain1.getRelations({ from: alice }) + const relations = await brain1.related({ from: alice }) const metadataResults = await brain1.find({ where: { role: 'engineer' } }) expect(searchResults.length).toBeGreaterThan(0) @@ -450,7 +450,7 @@ describe('HNSW Index Rebuild (Integration Tests)', () => { console.log('āœ… HNSW index operational') // 2. Graph Adjacency Index (Bug #1 fix) - const relations2 = await brain2.getRelations({ from: alice }) + const relations2 = await brain2.related({ from: alice }) expect(relations2.length).toBe(relations.length) console.log('āœ… Graph index operational') diff --git a/tests/integration/metadata-only-comprehensive.test.ts b/tests/integration/metadata-only-comprehensive.test.ts index 76c32269..928a24ac 100644 --- a/tests/integration/metadata-only-comprehensive.test.ts +++ b/tests/integration/metadata-only-comprehensive.test.ts @@ -183,11 +183,11 @@ describe('Metadata-Only Comprehensive Integration (v5.11.1)', () => { expect(entity!.vector).toEqual([]) // Still metadata-only }) - it('brain.delete() should work after metadata-only get', async () => { + it('brain.remove() should work after metadata-only get', async () => { const entity = await brain.get(entityId) expect(entity).toBeTruthy() - await brain.delete(entityId) + await brain.remove(entityId) const deleted = await brain.get(entityId) expect(deleted).toBeNull() diff --git a/tests/integration/metadata-vector-exclusion.test.ts b/tests/integration/metadata-vector-exclusion.test.ts index 3739838b..f9d012c2 100644 --- a/tests/integration/metadata-vector-exclusion.test.ts +++ b/tests/integration/metadata-vector-exclusion.test.ts @@ -58,13 +58,11 @@ describe('Metadata Vector Exclusion Fix', () => { // Check _system directory for chunk files const systemDir = join(testDir, '_system') - if (!existsSync(systemDir)) { - // No chunk files created - this is acceptable - expect(true).toBe(true) - return - } - - const chunkFiles = readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + // No _system dir means no chunk files at all — the invariant below + // (no vector-dimension chunks) holds trivially on an empty list. + const chunkFiles = existsSync(systemDir) + ? readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + : [] // Should have at most a few chunk files (name, email, tags) // NOT hundreds of files from vector dimensions @@ -105,12 +103,10 @@ describe('Metadata Vector Exclusion Fix', () => { const systemDir = join(testDir, '_system') - if (!existsSync(systemDir)) { - expect(true).toBe(true) - return - } - - const chunkFiles = readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + // No _system dir means no chunk files — the assertions below hold on []. + const chunkFiles = existsSync(systemDir) + ? readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + : [] // CRITICAL: Check that NO chunk files have numeric field names // This is the v3.50.2 fix - prevents vectors-as-objects from being indexed @@ -167,12 +163,10 @@ describe('Metadata Vector Exclusion Fix', () => { // Check chunk count - should NOT create 100 chunk files const systemDir = join(testDir, '_system') - if (!existsSync(systemDir)) { - expect(true).toBe(true) - return - } - - const chunkFiles = readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + // No _system dir means no chunk files — the assertions below hold on []. + const chunkFiles = existsSync(systemDir) + ? readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + : [] // Should have minimal chunk files (just 'name' field) expect(chunkFiles.length).toBeLessThan(5) @@ -295,12 +289,10 @@ describe('Metadata Vector Exclusion Fix', () => { // Check total chunk files const systemDir = join(testDir, '_system') - if (!existsSync(systemDir)) { - expect(true).toBe(true) - return - } - - const chunkFiles = readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + // No _system dir means no chunk files — the assertions below hold on []. + const chunkFiles = existsSync(systemDir) + ? readdirSync(systemDir).filter(f => f.startsWith('__chunk__')) + : [] // Should have reasonable number of chunks (not 7,210 for 10 entities!) // Expected: ~30 chunks (name, email, tags fields across 10 entities) diff --git a/tests/integration/multi-process-safety.test.ts b/tests/integration/multi-process-safety.test.ts index cb4f56ce..8704fb16 100644 --- a/tests/integration/multi-process-safety.test.ts +++ b/tests/integration/multi-process-safety.test.ts @@ -60,8 +60,8 @@ describe('Multi-process safety + read-only mode', () => { await expect(reader.add({ data: 'x', type: NounType.Concept })).rejects.toThrow(/read-only/i) await expect(reader.addMany({ items: [] })).rejects.toThrow(/read-only/i) await expect(reader.update({ id: 'x', data: 'y' })).rejects.toThrow(/read-only/i) - await expect(reader.delete('x')).rejects.toThrow(/read-only/i) - await expect(reader.deleteMany({ ids: ['x'] } as any)).rejects.toThrow(/read-only/i) + await expect(reader.remove('x')).rejects.toThrow(/read-only/i) + await expect(reader.removeMany({ ids: ['x'] } as any)).rejects.toThrow(/read-only/i) await expect(reader.relate({ from: 'x', to: 'y' } as any)).rejects.toThrow(/read-only/i) await expect(reader.unrelate('x')).rejects.toThrow(/read-only/i) }) diff --git a/tests/integration/readAfterWrite.test.ts b/tests/integration/readAfterWrite.test.ts index cc67308f..e0ab5863 100644 --- a/tests/integration/readAfterWrite.test.ts +++ b/tests/integration/readAfterWrite.test.ts @@ -114,7 +114,7 @@ describe('Read-After-Write Consistency (v5.7.2 Bug Fix)', () => { expect(typeof relationId).toBe('string') // Verify relationship exists and is correct - const relations = await brain.getRelations(sourceId) + const relations = await brain.related(sourceId) expect(relations).toHaveLength(1) expect(relations[0].to).toBe(targetId) expect(relations[0].type).toBe(VerbType.Contains) @@ -170,7 +170,7 @@ describe('Read-After-Write Consistency (v5.7.2 Bug Fix)', () => { console.log(`Created 100 relationships in ${Date.now() - relStartTime}ms`) // Verify all relationships created successfully - const relations = await brain.getRelations(documentId) + const relations = await brain.related(documentId) expect(relations.length).toBe(100) // Verify each entity is still queryable @@ -202,7 +202,7 @@ describe('Read-After-Write Consistency (v5.7.2 Bug Fix)', () => { expect(entity?.metadata?.updated).toBe(true) }) - it('should verify entity is deleted after brain.delete()', async () => { + it('should verify entity is deleted after brain.remove()', async () => { // Create entity const entityId = await brain.add({ data: 'Entity to be deleted', @@ -214,7 +214,7 @@ describe('Read-After-Write Consistency (v5.7.2 Bug Fix)', () => { expect(beforeDelete).not.toBeNull() // Delete - await brain.delete(entityId) + await brain.remove(entityId) // Verify it's deleted (should return null) const afterDelete = await brain.get(entityId) @@ -260,13 +260,13 @@ describe('Read-After-Write Consistency (v5.7.2 Bug Fix)', () => { await brain.relate({ from: concept2Id, to: concept3Id, type: VerbType.RelatedTo }) // Verify all relationships exist - const docRelations = await brain.getRelations(documentId) + const docRelations = await brain.related(documentId) expect(docRelations.length).toBe(3) - const concept1Relations = await brain.getRelations(concept1Id) + const concept1Relations = await brain.related(concept1Id) expect(concept1Relations.length).toBeGreaterThan(0) - const concept2Relations = await brain.getRelations(concept2Id) + const concept2Relations = await brain.related(concept2Id) expect(concept2Relations.length).toBeGreaterThan(0) }) @@ -325,7 +325,7 @@ describe('Read-After-Write Consistency (v5.7.2 Bug Fix)', () => { } // Step 5: Verify relationships exist - const relations = await brain.getRelations(documentId) + const relations = await brain.related(documentId) expect(relations.length).toBe(10) }) }) diff --git a/tests/integration/relationship-intelligence.test.ts b/tests/integration/relationship-intelligence.test.ts index eea55be8..b6e11cb5 100644 --- a/tests/integration/relationship-intelligence.test.ts +++ b/tests/integration/relationship-intelligence.test.ts @@ -94,7 +94,7 @@ describe('Relationship Intelligence', () => { console.log('='.repeat(80)) // Get all relationships - const allRelations = await brain.getRelations() + const allRelations = await brain.related() console.log(`\nšŸ“Š Total relationships: ${allRelations.length}`) // Find relationships involving Arrowhead @@ -104,7 +104,7 @@ describe('Relationship Intelligence', () => { }) expect(arrowheadEntity.length).toBe(1) - const arrowheadRelations = await brain.getRelations({ + const arrowheadRelations = await brain.related({ from: arrowheadEntity[0].id }) diff --git a/tests/integration/s3-storage.test.ts b/tests/integration/s3-storage.test.ts index 8f5bbf56..eb25a249 100644 --- a/tests/integration/s3-storage.test.ts +++ b/tests/integration/s3-storage.test.ts @@ -88,7 +88,7 @@ describe('S3 Storage Integration', () => { metadata: {} }); - const deleted = await brain.delete(id); + const deleted = await brain.remove(id); expect(deleted).toBe(true); const retrieved = await brain.get(id); diff --git a/tests/integration/smart-import.test.ts b/tests/integration/smart-import.test.ts index 025eb298..e4e25424 100644 --- a/tests/integration/smart-import.test.ts +++ b/tests/integration/smart-import.test.ts @@ -359,7 +359,7 @@ projects: expect(monaLisaEntities.length).toBeGreaterThan(0) // Get relationships for Mona Lisa - const relationships = await brain.getRelations(monaLisaEntities[0].id) + const relationships = await brain.related(monaLisaEntities[0].id) expect(relationships.length).toBeGreaterThan(0) // Should have CreatedBy relationship (not just RelatedTo) @@ -406,7 +406,7 @@ projects: expect(stanfordEntities.length).toBeGreaterThan(0) // Get relationships - const relationships = await brain.getRelations(stanfordEntities[0].id) + const relationships = await brain.related(stanfordEntities[0].id) expect(relationships.length).toBeGreaterThan(0) // Should have LocatedAt relationship @@ -453,7 +453,7 @@ projects: expect(heartEntities.length).toBeGreaterThan(0) // Get relationships - const relationships = await brain.getRelations(heartEntities[0].id) + const relationships = await brain.related(heartEntities[0].id) expect(relationships.length).toBeGreaterThan(0) // Should have PartOf relationship @@ -500,7 +500,7 @@ projects: expect(aliceEntities.length).toBeGreaterThan(0) // Get relationships - const relationships = await brain.getRelations(aliceEntities[0].id) + const relationships = await brain.related(aliceEntities[0].id) expect(relationships.length).toBeGreaterThan(0) // Should have WorksWith or MemberOf relationship (not just RelatedTo) @@ -548,7 +548,7 @@ projects: expect(iphoneEntities.length).toBeGreaterThan(0) // Get relationships - const relationships = await brain.getRelations(iphoneEntities[0].id) + const relationships = await brain.related(iphoneEntities[0].id) expect(relationships.length).toBeGreaterThan(0) // Should have CreatedBy relationship with high confidence @@ -593,7 +593,7 @@ project: expect(projectEntities.length).toBeGreaterThan(0) // Get relationships - const relationships = await brain.getRelations(projectEntities[0].id) + const relationships = await brain.related(projectEntities[0].id) expect(relationships.length).toBeGreaterThan(0) // Should have Contains relationship (hierarchical) diff --git a/tests/integration/subtype-and-facets.test.ts b/tests/integration/subtype-and-facets.test.ts index 88953a0a..7b2ae91c 100644 --- a/tests/integration/subtype-and-facets.test.ts +++ b/tests/integration/subtype-and-facets.test.ts @@ -147,7 +147,7 @@ describe('Subtype + Facets (7.29.0)', () => { const id = await brain.add({ data: 'g', type: NounType.Person, subtype: 'employee' }) expect(brain.counts.bySubtype(NounType.Person, 'employee')).toBe(3) - await brain.delete(id) + await brain.remove(id) expect(brain.counts.bySubtype(NounType.Person, 'employee')).toBe(2) }) diff --git a/tests/integration/verb-subtype-and-enforcement.test.ts b/tests/integration/verb-subtype-and-enforcement.test.ts index 9ce5eb7d..80e2ffbc 100644 --- a/tests/integration/verb-subtype-and-enforcement.test.ts +++ b/tests/integration/verb-subtype-and-enforcement.test.ts @@ -4,7 +4,7 @@ * opt-in enforcement primitives: * * - Layer V1: `subtype` on `relate()` / `Relation` / `RelateParams` round-trips - * through `getRelations({ subtype })`, the new `updateRelation()` method, and + * through `related({ subtype })`, the new `updateRelation()` method, and * the persisted verb-subtype rollup. * - Layer V2: `brain.counts.byRelationshipSubtype` / `topRelationshipSubtypes` * / `brain.relationshipSubtypesOf` mirror the noun-side counts API. @@ -33,7 +33,7 @@ describe('Verb subtype + enforcement (7.30.0)', () => { }) describe('Layer V1: subtype on relationships', () => { - it('persists subtype on relate() and round-trips through getRelations()', async () => { + it('persists subtype on relate() and round-trips through related()', async () => { const fromId = await brain.add({ data: 'Avery', type: NounType.Person }) const toId = await brain.add({ data: 'Jordan', type: NounType.Person }) @@ -44,14 +44,14 @@ describe('Verb subtype + enforcement (7.30.0)', () => { subtype: 'direct' }) - const all = await brain.getRelations({ from: fromId }) + const all = await brain.related({ from: fromId }) const found = all.find(r => r.id === relId) expect(found).toBeDefined() expect(found!.subtype).toBe('direct') expect(found!.type).toBe(VerbType.ReportsTo) }) - it('getRelations({ subtype }) filters by single value', async () => { + it('related({ subtype }) filters by single value', async () => { const a = await brain.add({ data: 'A', type: NounType.Person }) const b = await brain.add({ data: 'B', type: NounType.Person }) const c = await brain.add({ data: 'C', type: NounType.Person }) @@ -59,13 +59,13 @@ describe('Verb subtype + enforcement (7.30.0)', () => { await brain.relate({ from: a, to: b, type: VerbType.ReportsTo, subtype: 'direct' }) await brain.relate({ from: a, to: c, type: VerbType.ReportsTo, subtype: 'dotted-line' }) - const direct = await brain.getRelations({ from: a, subtype: 'direct' }) + const direct = await brain.related({ from: a, subtype: 'direct' }) expect(direct).toHaveLength(1) expect(direct[0].to).toBe(b) expect(direct[0].subtype).toBe('direct') }) - it('getRelations({ subtype: [...] }) filters by set membership', async () => { + it('related({ subtype: [...] }) filters by set membership', async () => { const a = await brain.add({ data: 'A', type: NounType.Person }) const b = await brain.add({ data: 'B', type: NounType.Person }) const c = await brain.add({ data: 'C', type: NounType.Person }) @@ -75,7 +75,7 @@ describe('Verb subtype + enforcement (7.30.0)', () => { await brain.relate({ from: a, to: c, type: VerbType.ReportsTo, subtype: 'dotted-line' }) await brain.relate({ from: a, to: d, type: VerbType.ReportsTo, subtype: 'matrix' }) - const both = await brain.getRelations({ + const both = await brain.related({ from: a, type: VerbType.ReportsTo, subtype: ['direct', 'dotted-line'] @@ -96,7 +96,7 @@ describe('Verb subtype + enforcement (7.30.0)', () => { await brain.updateRelation({ id: relId, subtype: 'dotted-line' }) - const after = await brain.getRelations({ from: a, type: VerbType.ReportsTo }) + const after = await brain.related({ from: a, type: VerbType.ReportsTo }) const found = after.find(r => r.id === relId) expect(found!.subtype).toBe('dotted-line') }) @@ -113,7 +113,7 @@ describe('Verb subtype + enforcement (7.30.0)', () => { await brain.updateRelation({ id: relId, weight: 0.5 }) - const after = await brain.getRelations({ from: a, type: VerbType.ReportsTo }) + const after = await brain.related({ from: a, type: VerbType.ReportsTo }) const found = after.find(r => r.id === relId) expect(found!.subtype).toBe('direct') expect(found!.weight).toBe(0.5) @@ -253,7 +253,7 @@ describe('Verb subtype + enforcement (7.30.0)', () => { expect(result.errors).toEqual([]) expect(result.migrated).toBe(1) - const after = await brain.getRelations({ from: a }) + const after = await brain.related({ from: a }) const found = after.find(r => r.id === relId) expect(found!.subtype).toBe('spouse') expect((found!.metadata as any).kind).toBeUndefined() @@ -289,7 +289,7 @@ describe('Verb subtype + enforcement (7.30.0)', () => { expect(ea!.subtype).toBe('employee') const eb = await brain.get(b) expect(eb!.subtype).toBe('employee') - const rels = await brain.getRelations({ from: a }) + const rels = await brain.related({ from: a }) expect(rels[0].subtype).toBe('colleague') }) @@ -311,7 +311,7 @@ describe('Verb subtype + enforcement (7.30.0)', () => { }) expect(result.migrated).toBe(1) - const rels = await brain.getRelations({ from: a }) + const rels = await brain.related({ from: a }) const found = rels.find(r => r.id === relId) expect(found!.subtype).toBe('sibling') expect((found!.metadata as any).kind).toBe('sibling') diff --git a/tests/integration/vfs-api-wiring.test.ts b/tests/integration/vfs-api-wiring.test.ts index 23382aae..740c8185 100644 --- a/tests/integration/vfs-api-wiring.test.ts +++ b/tests/integration/vfs-api-wiring.test.ts @@ -268,7 +268,7 @@ describe('VFS API Wiring Verification', () => { console.log(` Created relation: ${relationId}`) // Verify relationship exists - const relations = await brain.getRelations({ + const relations = await brain.related({ from: conceptId, to: vfsFile[0].id }) diff --git a/tests/integration/vfs-knowledge-separation.test.ts b/tests/integration/vfs-knowledge-separation.test.ts index 8faced75..e335956b 100644 --- a/tests/integration/vfs-knowledge-separation.test.ts +++ b/tests/integration/vfs-knowledge-separation.test.ts @@ -134,7 +134,7 @@ describe('VFS-Knowledge Separation (Option 3C)', () => { console.log(` To: ${vfsFile[0].metadata?.path} (VFS file)`) // Verify relationship exists - const relations = await brain.getRelations({ + const relations = await brain.related({ from: knowledgeEntity[0].id, to: vfsFile[0].id }) diff --git a/tests/manual/metadata-index-debug.test.ts b/tests/manual/metadata-index-debug.test.ts deleted file mode 100644 index 532e3e83..00000000 --- a/tests/manual/metadata-index-debug.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Debug: Check metadata index for isVFS field - */ - -import { describe, it, expect, beforeAll, afterAll } from 'vitest' -import { Brainy } from '../../src/brainy.js' -import { NounType } from '../../src/types/graphTypes.js' -import * as fs from 'fs' -import * as path from 'path' - -describe('Metadata Index Debug', () => { - const testDir = path.join(process.cwd(), 'test-metadata-index-debug') - let brain: Brainy - - beforeAll(async () => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - fs.mkdirSync(testDir, { recursive: true }) - - brain = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - options: { path: testDir } - } - }) - await brain.init() - }) - - afterAll(() => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - }) - - it('should index custom metadata fields', async () => { - // Add entity with custom metadata field - const entity1 = await brain.add({ - data: 'Test entity with custom field', - type: NounType.Document, - metadata: { - customFlag: true, - customString: 'hello', - customNumber: 42 - } - }) - - console.log('\nšŸ“‹ Added entity:', entity1.id) - console.log(' Metadata:', entity1.metadata) - - // Try to find by custom fields - console.log('\nšŸ“‹ Query 1: where: { customFlag: true }') - const result1 = await brain.find({ - where: { customFlag: true }, - limit: 10 - }) - console.log(` Results: ${result1.length}`) - if (result1.length > 0) { - console.log(` Found: ${result1[0].id}`) - console.log(` Metadata.customFlag: ${result1[0].metadata?.customFlag}`) - } - - console.log('\nšŸ“‹ Query 2: where: { customString: "hello" }') - const result2 = await brain.find({ - where: { customString: 'hello' }, - limit: 10 - }) - console.log(` Results: ${result2.length}`) - - console.log('\nšŸ“‹ Query 3: where: { customNumber: 42 }') - const result3 = await brain.find({ - where: { customNumber: 42 }, - limit: 10 - }) - console.log(` Results: ${result3.length}`) - - // Check what fields are indexed - console.log('\nšŸ“‹ Indexed fields:') - const fields = await brain.getFilterFields() - console.log(` ${fields.join(', ')}`) - - expect(result1.length).toBeGreaterThan(0) - expect(result2.length).toBeGreaterThan(0) - expect(result3.length).toBeGreaterThan(0) - }) -}) diff --git a/tests/manual/simple-vfs-filter-test.test.ts b/tests/manual/simple-vfs-filter-test.test.ts deleted file mode 100644 index 507384d3..00000000 --- a/tests/manual/simple-vfs-filter-test.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Simple VFS filtering test - */ - -import { describe, it, expect, beforeAll, afterAll } from 'vitest' -import { Brainy } from '../../src/brainy.js' -import { NounType } from '../../src/types/graphTypes.js' -import * as fs from 'fs' -import * as path from 'path' - -describe('Simple VFS Filter Test', () => { - const testDir = path.join(process.cwd(), 'test-simple-vfs-filter') - let brain: Brainy - - beforeAll(async () => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - fs.mkdirSync(testDir, { recursive: true }) - - brain = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - options: { path: testDir } - } - }) - await brain.init() - }) - - afterAll(() => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - }) - - it('should demonstrate VFS filtering', async () => { - console.log('\n=== TEST START ===\n') - - // 1. Create knowledge entity - console.log('1. Creating knowledge entity...') - const knowledgeId = await brain.add({ - data: 'Knowledge document', - type: NounType.Document, - metadata: { title: 'Knowledge' } - }) - console.log(` Created: ${knowledgeId}`) - - // 2. Create VFS file - console.log('\n2. Creating VFS file...') - const vfs = brain.vfs - await vfs.init() - await vfs.writeFile('/test.txt', 'VFS file') - console.log(' VFS file created') - - // 3. Query all (should exclude VFS) - console.log('\n3. Query: brain.find({}) [excludes VFS by default]') - const all = await brain.find({ limit: 100 }) - console.log(` Results: ${all.length}`) - for (const r of all) { - console.log(` - ${r.id}, type: ${r.type}, isVFS: ${r.metadata?.isVFS}, title: ${r.metadata?.title}`) - } - - // 4. Query all with VFS - console.log('\n4. Query: brain.find({ includeVFS: true })') - const allWithVFS = await brain.find({ includeVFS: true, limit: 100 }) - console.log(` Results: ${allWithVFS.length}`) - for (const r of allWithVFS) { - console.log(` - ${r.id}, type: ${r.type}, isVFS: ${r.metadata?.isVFS}, path: ${r.metadata?.path || 'n/a'}`) - } - - // 5. Query by type (should exclude VFS) - console.log('\n5. Query: brain.find({ type: NounType.Document }) [excludes VFS]') - const docs = await brain.find({ type: NounType.Document, limit: 100 }) - console.log(` Results: ${docs.length}`) - for (const r of docs) { - console.log(` - ${r.id}, type: ${r.type}, isVFS: ${r.metadata?.isVFS}`) - } - - // 6. Query by type with VFS - console.log('\n6. Query: brain.find({ type: NounType.Document, includeVFS: true })' ) - const docsWithVFS = await brain.find({ type: NounType.Document, includeVFS: true, limit: 100 }) - console.log(` Results: ${docsWithVFS.length}`) - for (const r of docsWithVFS) { - console.log(` - ${r.id}, type: ${r.type}, isVFS: ${r.metadata?.isVFS}, path: ${r.metadata?.path || 'n/a'}`) - } - - console.log('\n=== TEST END ===\n') - - // Assertions - expect(all.length).toBe(1) // Only knowledge entity - expect(all.some(r => r.id === knowledgeId)).toBe(true) - - expect(allWithVFS.length).toBeGreaterThanOrEqual(2) // Knowledge + VFS entities - - expect(docs.length).toBe(1) // Only knowledge entity - expect(docs.some(r => r.id === knowledgeId)).toBe(true) - - expect(docsWithVFS.length).toBeGreaterThanOrEqual(2) // Knowledge + VFS file (both documents) - }) -}) diff --git a/tests/manual/type-filtering-diagnostic.ts b/tests/manual/type-filtering-diagnostic.ts deleted file mode 100644 index 81b72094..00000000 --- a/tests/manual/type-filtering-diagnostic.ts +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Manual test to reproduce a consumer's type filtering issue - * - * This test verifies that brain.find({ type: NounType.Person }) actually works - * as documented in the API. - */ - -import { Brainy, NounType } from '../../src/index.js' - -async function testTypeFiltering() { - console.log('\nšŸ”¬ Testing Type Filtering Issue from A Consumer Team\n') - console.log('=' .repeat(60)) - - // Create in-memory instance for testing - const brain = new Brainy({ requireSubtype: false, - storage: { type: 'memory' } - }) - await brain.init() - - console.log('\n1ļøāƒ£ Adding test entities with different types...\n') - - // Add 5 person entities - const people = [] - for (let i = 0; i < 5; i++) { - const id = await brain.add({ - data: `Person ${i + 1}`, - type: NounType.Person, - metadata: { name: `Person ${i + 1}` } - }) - people.push(id) - } - console.log(`āœ… Added ${people.length} person entities`) - - // Add 3 location entities - const locations = [] - for (let i = 0; i < 3; i++) { - const id = await brain.add({ - data: `Location ${i + 1}`, - type: NounType.Location, - metadata: { name: `Location ${i + 1}` } - }) - locations.push(id) - } - console.log(`āœ… Added ${locations.length} location entities`) - - // Add 2 concept entities - const concepts = [] - for (let i = 0; i < 2; i++) { - const id = await brain.add({ - data: `Concept ${i + 1}`, - type: NounType.Concept, - metadata: { name: `Concept ${i + 1}` } - }) - concepts.push(id) - } - console.log(`āœ… Added ${concepts.length} concept entities`) - - console.log(`\nšŸ“Š Total: ${people.length + locations.length + concepts.length} entities`) - - console.log('\n' + '='.repeat(60)) - console.log('\n2ļøāƒ£ Testing find() without type filter...\n') - - const allResults = await brain.find({ limit: 100 }) - console.log(`āœ… brain.find({}) returned ${allResults.length} entities`) - - // Check types in results - const typeCounts = allResults.reduce((acc, r) => { - acc[r.type || 'unknown'] = (acc[r.type || 'unknown'] || 0) + 1 - return acc - }, {} as Record) - - console.log('\nTypes in results:') - for (const [type, count] of Object.entries(typeCounts)) { - console.log(` - ${type}: ${count}`) - } - - console.log('\n' + '='.repeat(60)) - console.log('\n3ļøāƒ£ Testing find() WITH type filter (using enum)...\n') - - // Test 1: Filter by NounType.Person (enum value) - console.log('Test 1: brain.find({ type: NounType.Person })') - const personResults = await brain.find({ type: NounType.Person, limit: 100 }) - console.log(` Result: ${personResults.length} entities`) - console.log(` Expected: ${people.length} entities`) - if (personResults.length === people.length) { - console.log(' āœ… PASS') - } else { - console.log(' āŒ FAIL - Type filtering not working!') - } - - // Test 2: Filter by NounType.Location - console.log('\nTest 2: brain.find({ type: NounType.Location })') - const locationResults = await brain.find({ type: NounType.Location, limit: 100 }) - console.log(` Result: ${locationResults.length} entities`) - console.log(` Expected: ${locations.length} entities`) - if (locationResults.length === locations.length) { - console.log(' āœ… PASS') - } else { - console.log(' āŒ FAIL - Type filtering not working!') - } - - // Test 3: Filter by NounType.Concept - console.log('\nTest 3: brain.find({ type: NounType.Concept })') - const conceptResults = await brain.find({ type: NounType.Concept, limit: 100 }) - console.log(` Result: ${conceptResults.length} entities`) - console.log(` Expected: ${concepts.length} entities`) - if (conceptResults.length === concepts.length) { - console.log(' āœ… PASS') - } else { - console.log(' āŒ FAIL - Type filtering not working!') - } - - console.log('\n' + '='.repeat(60)) - console.log('\n4ļøāƒ£ Testing find() WITH type filter (using string)...\n') - - // Test 4: Filter by string 'person' - console.log('Test 4: brain.find({ type: "person" })') - const personResults2 = await brain.find({ type: 'person' as any, limit: 100 }) - console.log(` Result: ${personResults2.length} entities`) - console.log(` Expected: ${people.length} entities`) - if (personResults2.length === people.length) { - console.log(' āœ… PASS') - } else { - console.log(' āŒ FAIL - String type filtering not working!') - } - - console.log('\n' + '='.repeat(60)) - console.log('\n5ļøāƒ£ Checking entity storage (metadata.noun)...\n') - - // Get a person entity and check its storage - const personEntity = await brain.get(people[0]) - console.log('Person entity structure:') - console.log(' - id:', personEntity?.id) - console.log(' - type:', personEntity?.type) - console.log(' - metadata.noun:', (personEntity as any)?.metadata?.noun) - console.log(' - metadata.name:', personEntity?.metadata?.name) - - console.log('\n' + '='.repeat(60)) - console.log('\nšŸ“‹ Summary\n') - - const tests = [ - { name: 'Filter by NounType.Person', passed: personResults.length === people.length }, - { name: 'Filter by NounType.Location', passed: locationResults.length === locations.length }, - { name: 'Filter by NounType.Concept', passed: conceptResults.length === concepts.length }, - { name: 'Filter by string "person"', passed: personResults2.length === people.length } - ] - - const passedCount = tests.filter(t => t.passed).length - const totalCount = tests.length - - console.log(`Tests passed: ${passedCount}/${totalCount}\n`) - - for (const test of tests) { - console.log(`${test.passed ? 'āœ…' : 'āŒ'} ${test.name}`) - } - - if (passedCount === totalCount) { - console.log('\nšŸŽ‰ All tests passed! Type filtering works correctly.') - console.log('\nšŸ’” The a consumer team might be experiencing a different issue.') - console.log(' Check: storage persistence, Brainy instance reuse, or data migration') - } else { - console.log('\nāŒ Type filtering is BROKEN in Brainy!') - console.log('\nšŸ› This is a bug that needs to be fixed.') - console.log(' a consumer team was right - it\'s not user error.') - } - - console.log('\n' + '='.repeat(60) + '\n') -} - -// Run the test -testTypeFiltering().catch(console.error) diff --git a/tests/manual/vfs-isvfs-diagnostic.test.ts b/tests/manual/vfs-isvfs-diagnostic.test.ts deleted file mode 100644 index 939d8908..00000000 --- a/tests/manual/vfs-isvfs-diagnostic.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Diagnostic: Check if isVFS flag is actually being stored - */ - -import { describe, it, expect, beforeAll, afterAll } from 'vitest' -import { Brainy } from '../../src/brainy.js' -import { NounType } from '../../src/types/graphTypes.js' -import * as fs from 'fs' -import * as path from 'path' - -describe('isVFS Flag Diagnostic', () => { - const testDir = path.join(process.cwd(), 'test-isvfs-diagnostic') - let brain: Brainy - - beforeAll(async () => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - fs.mkdirSync(testDir, { recursive: true }) - - brain = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - options: { path: testDir } - } - }) - await brain.init() - }) - - afterAll(() => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - }) - - it('should show what entities are created', async () => { - // Create VFS file - const vfs = brain.vfs - await vfs.init() - await vfs.writeFile('/test.txt', 'Hello World') - - // Get ALL entities - console.log('\nšŸ“‹ All entities in database:') - const allEntities = await brain.find({ limit: 100, includeVFS: true }) - console.log(` Total: ${allEntities.length}`) - - for (const entity of allEntities) { - console.log(`\n Entity: ${entity.id}`) - console.log(` Type: ${entity.type}`) - console.log(` Metadata keys: ${Object.keys(entity.metadata || {}).join(', ')}`) - if (entity.metadata?.path) { - console.log(` Path: ${entity.metadata.path}`) - } - if (entity.metadata?.vfsType) { - console.log(` VfsType: ${entity.metadata.vfsType}`) - } - if (entity.metadata?.isVFS !== undefined) { - console.log(` isVFS: ${entity.metadata.isVFS}`) - } - if (entity.metadata?.name) { - console.log(` Name: ${entity.metadata.name}`) - } - } - - // Try different queries - console.log('\n\nšŸ“‹ Query 1: brain.find({ limit: 100 }) [default, no includeVFS]') - const query1 = await brain.find({ limit: 100 }) - console.log(` Results: ${query1.length}`) - - console.log('\nšŸ“‹ Query 2: brain.find({ limit: 100, includeVFS: true })') - const query2 = await brain.find({ limit: 100, includeVFS: true }) - console.log(` Results: ${query2.length}`) - - console.log('\nšŸ“‹ Query 3: brain.find({ where: { isVFS: true } })') - const query3 = await brain.find({ where: { isVFS: true }, limit: 100 }) - console.log(` Results: ${query3.length}`) - - console.log('\nšŸ“‹ Query 4: brain.find({ where: { path: "/test.txt" } })') - const query4 = await brain.find({ where: { path: '/test.txt' }, limit: 100 }) - console.log(` Results: ${query4.length}`) - - console.log('\nšŸ“‹ Query 5: brain.find({ type: NounType.Document })') - const query5 = await brain.find({ type: NounType.Document, limit: 100 }) - console.log(` Results: ${query5.length}`) - - console.log('\nšŸ“‹ Query 6: brain.find({ type: NounType.Document, includeVFS: true })') - const query6 = await brain.find({ type: NounType.Document, includeVFS: true, limit: 100 }) - console.log(` Results: ${query6.length}`) - }) -}) diff --git a/tests/manual/vfs-multiple-init-diagnostic.test.ts b/tests/manual/vfs-multiple-init-diagnostic.test.ts deleted file mode 100644 index 3b8d9945..00000000 --- a/tests/manual/vfs-multiple-init-diagnostic.test.ts +++ /dev/null @@ -1,207 +0,0 @@ -/** - * VFS Multiple Init() Diagnostic Test - * - * Tests a consumer's issue: Does calling vfs.init() multiple times - * create duplicate root entities? - * - * Scenario: - * - Create brain instance - * - Call vfs.init() multiple times (simulating multiple requests) - * - Check if multiple root entities are created - */ - -import { describe, it, expect, beforeAll, afterAll } from 'vitest' -import { Brainy } from '../../src/brainy.js' -import * as fs from 'fs' -import * as path from 'path' - -describe('VFS Multiple Init Diagnostic', () => { - const testDir = path.join(process.cwd(), 'test-vfs-multi-init') - let brain: Brainy - - beforeAll(async () => { - // Clean up test directory - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - fs.mkdirSync(testDir, { recursive: true }) - - // Create brain with filesystem storage - brain = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - path: testDir - } - }) - await brain.init() - }) - - afterAll(() => { - // Clean up - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - }) - - it('should not create duplicate roots when calling vfs.init() multiple times on SAME instance', async () => { - const vfs = brain.vfs - - // Call init multiple times - await vfs.init() - await vfs.init() - await vfs.init() - - // Query for root entities using workaround (where clause is broken) - const collections = await brain.find({ - type: 'collection', - limit: 100 - }) - - const roots = collections.filter(e => - e.metadata?.path === '/' && - e.metadata?.vfsType === 'directory' - ) - - console.log(`\nāœ… Test 1: Same VFS instance`) - console.log(` Total collections: ${collections.length}`) - console.log(` Roots found: ${roots.length}`) - roots.forEach((root, i) => { - console.log(` Root ${i + 1}: ${root.id}`) - }) - - expect(roots.length).toBe(1) - }) - - it('should not create duplicate roots when creating MULTIPLE VFS instances (the reported scenario)', async () => { - // Simulate the reported scenario: Getting VFS on multiple requests - // brain.vfs returns cached instance, so this should be safe - const vfs1 = brain.vfs - const vfs2 = brain.vfs - const vfs3 = brain.vfs - - await vfs1.init() - await vfs2.init() - await vfs3.init() - - // Query for root entities using workaround - const collections = await brain.find({ - type: 'collection', - limit: 100 - }) - - const roots = collections.filter(e => - e.metadata?.path === '/' && - e.metadata?.vfsType === 'directory' - ) - - console.log(`\nāœ… Test 2: Multiple VFS references (cached)`) - console.log(` VFS instances are same? ${vfs1 === vfs2 && vfs2 === vfs3}`) - console.log(` Roots found: ${roots.length}`) - roots.forEach((root, i) => { - console.log(` Root ${i + 1}: ${root.id}`) - }) - - expect(vfs1).toBe(vfs2) // Should be same instance (cached) - expect(roots.length).toBe(1) // Should still be 1 root - }) - - it('should handle NEW brain instances gracefully (per-user scenario)', async () => { - // Simulate creating separate brain instances per user - // This is closer to a consumer's getUserBrainy() pattern - const brain2 = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - path: testDir // Same storage! - } - }) - await brain2.init() - - const vfs2 = brain2.vfs() - await vfs2.init() - - // Query for roots using workaround - const collections = await brain.find({ - type: 'collection', - limit: 100 - }) - - const roots = collections.filter(e => - e.metadata?.path === '/' && - e.metadata?.vfsType === 'directory' - ) - - console.log(`\nāœ… Test 3: New Brainy instance (same storage)`) - console.log(` Roots found: ${roots.length}`) - roots.forEach((root, i) => { - console.log(` Root ${i + 1}: ${root.id} (created: ${root.metadata?.createdAt})`) - }) - - // This is the CRITICAL test - should find existing root, not create new one - expect(roots.length).toBe(1) - }) - - it('should verify readdir works after multiple inits', async () => { - // Create a test directory - const vfs = brain.vfs - await vfs.mkdir('/test-dir', { recursive: true }) - await vfs.writeFile('/test-dir/test.txt', 'Hello') - - // Call init again (simulating new request) - const brain3 = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - path: testDir - } - }) - await brain3.init() - const vfs3 = brain3.vfs() - await vfs3.init() - - // Try to read root directory - const entries = await vfs3.readdir('/', { withFileTypes: true }) - - console.log(`\nāœ… Test 4: readdir after new brain instance`) - console.log(` Entries found: ${entries.length}`) - entries.forEach((entry: any) => { - console.log(` - ${entry.name} (${entry.type})`) - }) - - expect(entries.length).toBeGreaterThan(0) - }) - - it('should show if Contains relationships are created', async () => { - const vfs = brain.vfs - - // Get root entity ID using workaround - const collections = await brain.find({ - type: 'collection', - limit: 100 - }) - - const roots = collections.filter(e => - e.metadata?.path === '/' && - e.metadata?.vfsType === 'directory' - ) - - expect(roots.length).toBeGreaterThanOrEqual(1) - const rootId = roots[0].id - - // Check for Contains relationships FROM root - const relations = await brain.getRelations({ - from: rootId - }) - - console.log(`\nāœ… Test 5: Contains relationships`) - console.log(` Root ID: ${rootId}`) - console.log(` Relationships from root: ${relations.length}`) - relations.forEach((rel) => { - console.log(` - ${rel.from} -> ${rel.to} (${rel.type})`) - }) - - // Root should have at least one Contains relationship (to /test-dir) - const containsRels = relations.filter(r => r.type === 'contains') - console.log(` Contains relationships: ${containsRels.length}`) - - expect(containsRels.length).toBeGreaterThan(0) - }) -}) diff --git a/tests/manual/vfs-search-debug.test.ts b/tests/manual/vfs-search-debug.test.ts deleted file mode 100644 index f4ca9147..00000000 --- a/tests/manual/vfs-search-debug.test.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Debug VFS search to understand what's being returned - */ - -import { describe, it, beforeAll, afterAll } from 'vitest' -import { Brainy } from '../../src/brainy.js' -import * as fs from 'fs' -import * as path from 'path' - -describe('VFS Search Debug', () => { - const testDir = path.join(process.cwd(), 'test-vfs-search-debug') - let brain: Brainy - - beforeAll(async () => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - fs.mkdirSync(testDir, { recursive: true }) - - brain = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - options: { path: testDir } - } - }) - await brain.init() - }) - - afterAll(() => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - }) - - it('should debug vfs.search() results', async () => { - const vfs = brain.vfs - await vfs.init() - await vfs.writeFile('/test.txt', 'Hello world test content') - - console.log('\nšŸ“‹ VFS Search Debug') - - // Search - const results = await vfs.search('test', { limit: 10 }) - - console.log(`Results: ${results.length}`) - console.log('Result structure:', JSON.stringify(results[0], null, 2)) - - // Also check raw brain.find - const brainResults = await brain.find({ - where: { vfsType: 'file' }, - includeVFS: true, - limit: 10 - }) - - console.log(`\nDirect brain.find results: ${brainResults.length}`) - if (brainResults.length > 0) { - console.log('Brain result entity:', JSON.stringify({ - id: brainResults[0].id, - type: brainResults[0].type, - metadata: brainResults[0].metadata - }, null, 2)) - } - }) -}) diff --git a/tests/manual/vfs-where-clause-test.test.ts b/tests/manual/vfs-where-clause-test.test.ts deleted file mode 100644 index 0334680f..00000000 --- a/tests/manual/vfs-where-clause-test.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -/** - * VFS Where Clause Diagnostic - * - * The real issue: brain.find({ where: { 'metadata.path': '/' } }) returns 0 results - * even though the root entity exists! - */ - -import { describe, it, expect, beforeAll, afterAll } from 'vitest' -import { Brainy } from '../../src/brainy.js' -import * as fs from 'fs' -import * as path from 'path' - -describe('VFS Where Clause Diagnostic', () => { - const testDir = path.join(process.cwd(), 'test-where-clause') - let brain: Brainy - - beforeAll(async () => { - // Clean up - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - fs.mkdirSync(testDir, { recursive: true }) - - brain = new Brainy({ requireSubtype: false, - storage: { - type: 'filesystem', - path: testDir - } - }) - await brain.init() - }) - - afterAll(() => { - if (fs.existsSync(testDir)) { - fs.rmSync(testDir, { recursive: true, force: true }) - } - }) - - it('should find root entity using where clause', async () => { - const vfs = brain.vfs - await vfs.init() - - // Method 1: Where clause (FIXED in v4.3.3!) - console.log('\nšŸ“‹ Method 1: Where clause (CORRECT field names)') - const whereResult = await brain.find({ - where: { - path: '/', // āœ… Fixed: Use flat field name - vfsType: 'directory' // āœ… Fixed: Use flat field name - }, - limit: 10 - }) - console.log(` Found ${whereResult.length} entities`) - - // Method 2: Find all and filter (what actually works) - console.log('\nšŸ“‹ Method 2: Find all + filter') - const allEntities = await brain.find({ limit: 100 }) - console.log(` Total entities: ${allEntities.length}`) - - const filtered = allEntities.filter(e => - e.metadata?.path === '/' && - e.metadata?.vfsType === 'directory' - ) - console.log(` Filtered to roots: ${filtered.length}`) - - if (filtered.length > 0) { - console.log(` Root entity:`) - console.log(` ID: ${filtered[0].id}`) - console.log(` Type: ${filtered[0].type}`) - console.log(` Metadata.path: ${filtered[0].metadata?.path}`) - console.log(` Metadata.vfsType: ${filtered[0].metadata?.vfsType}`) - } - - // Method 3: Type-based search - console.log('\nšŸ“‹ Method 3: Type query (collection)') - const typeResult = await brain.find({ - type: 'collection', - limit: 10 - }) - console.log(` Found ${typeResult.length} collection entities`) - - // FIXED (v4.3.3): Where clause now works with correct field names! - expect(whereResult.length).toBe(1) // āœ… WHERE CLAUSE WORKS NOW! - expect(filtered.length).toBe(1) // āœ… MANUAL FILTER ALSO WORKS - }) - - it('should find regular VFS files using where clause', async () => { - const vfs = brain.vfs - await vfs.mkdir('/test', { recursive: true }) - await vfs.writeFile('/test/hello.txt', 'Hello World') - - // Try to find the file using where clause (FIXED field names) - console.log('\nšŸ“‹ Finding /test/hello.txt') - - const whereResult = await brain.find({ - where: { - path: '/test/hello.txt', // āœ… Fixed: Use flat field name - vfsType: 'file' // āœ… Fixed: Use flat field name - }, - limit: 10 - }) - console.log(` Where clause: ${whereResult.length} results`) - - const allEntities = await brain.find({ limit: 100 }) - const filtered = allEntities.filter(e => - e.metadata?.path === '/test/hello.txt' - ) - console.log(` Manual filter: ${filtered.length} results`) - - if (filtered.length > 0) { - console.log(` File metadata:`) - console.log(` Path: ${filtered[0].metadata?.path}`) - console.log(` VfsType: ${filtered[0].metadata?.vfsType}`) - console.log(` Name: ${filtered[0].metadata?.name}`) - } - - // FIXED (v4.3.3): Where clause works with correct field names! - expect(whereResult.length).toBe(1) // āœ… FIXED! - expect(filtered.length).toBe(1) // āœ… ALSO WORKS - }) - - it('should show metadata index status', async () => { - console.log('\nšŸ“‹ Metadata Index Status') - - const allEntities = await brain.find({ limit: 100 }) - console.log(` Total entities: ${allEntities.length}`) - - const withMetadata = allEntities.filter(e => e.metadata && Object.keys(e.metadata).length > 0) - console.log(` With metadata: ${withMetadata.length}`) - - const withPath = allEntities.filter(e => e.metadata?.path) - console.log(` With metadata.path: ${withPath.length}`) - - const withVfsType = allEntities.filter(e => e.metadata?.vfsType) - console.log(` With metadata.vfsType: ${withVfsType.length}`) - - // Show sample metadata - if (withPath.length > 0) { - console.log(`\n Sample entity with path:`) - const sample = withPath[0] - console.log(` ID: ${sample.id}`) - console.log(` Type: ${sample.type}`) - console.log(` Metadata keys: ${Object.keys(sample.metadata || {}).join(', ')}`) - } - }) -}) diff --git a/tests/package-size-breakdown.test.ts b/tests/package-size-breakdown.test.ts index 173dff39..6e438807 100644 --- a/tests/package-size-breakdown.test.ts +++ b/tests/package-size-breakdown.test.ts @@ -143,7 +143,7 @@ function calculatePackageSize(): { describe('Package Size Breakdown', () => { it('should report the estimated package size and largest files', () => { const { totalSize, includedFiles } = calculatePackageSize() - + console.log('Estimated package size: ' + totalSize.toFixed(2) + ' MB') console.log('\nLargest files:') for (let i = 0; i < Math.min(10, includedFiles.length); i++) { @@ -151,26 +151,18 @@ describe('Package Size Breakdown', () => { `${includedFiles[i].path}: ${includedFiles[i].size.toFixed(2)} MB` ) } - - // Basic sanity check - expect(totalSize).toBeGreaterThan(0) - expect(includedFiles.length).toBeGreaterThan(0) - }) - - it('should identify files that contribute significantly to package size', () => { - const { includedFiles } = calculatePackageSize() - - // Find files larger than 1MB + + // Informational: files larger than 1MB (model + WASM assets expected) const largeFiles = includedFiles.filter(file => file.size > 1) - if (largeFiles.length > 0) { console.log('\nFiles larger than 1MB:') largeFiles.forEach(file => { console.log(`${file.path}: ${file.size.toFixed(2)} MB`) }) } - - // This is not a failure condition, just informational - expect(true).toBe(true) + + // Basic sanity check + expect(totalSize).toBeGreaterThan(0) + expect(includedFiles.length).toBeGreaterThan(0) }) }) \ No newline at end of file diff --git a/tests/performance/typeAware.bench.test.ts b/tests/performance/typeAware.bench.test.ts index 8b92d951..72d96fe5 100644 --- a/tests/performance/typeAware.bench.test.ts +++ b/tests/performance/typeAware.bench.test.ts @@ -113,6 +113,10 @@ describe('TypeAware Performance Benchmarks', () => { // At 1K entities: ~1-3x speedup (small dataset) // At 1M entities: ~5-10x speedup (projected, not measured) // At 1B entities: ~10x speedup (PROJECTED, extrapolated) + // Assert measurement validity, not a perf number (CI hardware varies). + expect(typeDuration).toBeGreaterThan(0) + expect(speedup).toBeGreaterThan(0) + expect(Number.isFinite(speedup)).toBe(true) }) }) diff --git a/tests/regression/metadata-index-cleanup.test.ts b/tests/regression/metadata-index-cleanup.test.ts index 17e96087..266b9a4d 100644 --- a/tests/regression/metadata-index-cleanup.test.ts +++ b/tests/regression/metadata-index-cleanup.test.ts @@ -1,7 +1,7 @@ /** - * Regression tests: metadata index cleanup after delete / deleteMany + * Regression tests: metadata index cleanup after remove / removeMany * - * Bug report (wickworks): brain.deleteMany() was not removing metadata index + * Bug report (wickworks): brain.removeMany() was not removing metadata index * entries for deleted entities. The same defect also existed in delete(). * * Root causes fixed: @@ -22,7 +22,7 @@ * Fix: entityForIndexing now uses the same conditional spreading pattern as * storageMetadata for confidence, weight, and createdBy. * - * 3. result.successful updated inside transaction builder — deleteMany() pushed + * 3. result.successful updated inside transaction builder — removeMany() pushed * ids to result.successful during the builder phase, before transaction.execute() * ran. A transaction rollback would leave result.successful containing ids that * were never actually deleted. @@ -39,7 +39,7 @@ const DIM = 384 const makeVec = (seed = 1) => new Float32Array(DIM).map((_, i) => ((i + seed) % DIM) / DIM) -describe('Metadata index cleanup after delete / deleteMany', () => { +describe('Metadata index cleanup after remove / removeMany', () => { let brain: Brainy beforeEach(async () => { @@ -80,7 +80,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { describe('delete()', () => { it('removes entity from type index so find({ type }) returns 0', async () => { const id = await addEntity({ type: 'product' }) - await brain.delete(id) + await brain.remove(id) const results = await brain.find({ type: 'product' as any }) expect(results).toHaveLength(0) @@ -90,7 +90,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { // Add one entity with service 'alpha', delete it. // A ne:'beta' query should return 0, not the deleted entity. const id = await addEntity({ service: 'alpha', type: 'thing' }) - await brain.delete(id) + await brain.remove(id) const results = await brain.find({ where: { service: { ne: 'beta' } } }) const ids = results.map(r => r.id) @@ -101,7 +101,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { // Entity added without a custom 'archivedAt' field. // After deletion it must not appear in an exists:false query. const id = await addEntity({ type: 'thing' }) - await brain.delete(id) + await brain.remove(id) const results = await brain.find({ where: { archivedAt: { exists: false } } }) const ids = results.map(r => r.id) @@ -110,10 +110,10 @@ describe('Metadata index cleanup after delete / deleteMany', () => { }) // --------------------------------------------------------------------------- - // deleteMany() — batch deletion + // removeMany() — batch deletion // --------------------------------------------------------------------------- - describe('deleteMany()', () => { + describe('removeMany()', () => { it('removes all entities from type index so find({ type }) returns 0', async () => { const ids = await Promise.all([ addEntity({ type: 'concept' }), @@ -121,7 +121,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { addEntity({ type: 'concept' }), ]) - await brain.deleteMany({ ids }) + await brain.removeMany({ ids }) const results = await brain.find({ type: 'concept' as any, limit: 50 }) expect(results).toHaveLength(0) @@ -140,7 +140,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { addEntity({ service: 'beta', type: 'thing' }), ]) - await brain.deleteMany({ ids: alphaIds }) + await brain.removeMany({ ids: alphaIds }) const results = await brain.find({ where: { service: { ne: 'beta' } } }) const resultIds = results.map(r => r.id) @@ -168,7 +168,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { // One surviving entity also without closedAt — it SHOULD appear in results const survivorId = await addEntity({ type: 'thing', metadata: { region: 'us', active: true } }) - await brain.deleteMany({ ids: deletedIds }) + await brain.removeMany({ ids: deletedIds }) const results = await brain.find({ where: { closedAt: { exists: false } } }) const resultIds = results.map(r => r.id) @@ -189,7 +189,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { addEntity({ type: 'thing' }), ]) - const result = await brain.deleteMany({ ids }) + const result = await brain.removeMany({ ids }) // All should succeed — verify successful list is correct expect(result.successful).toHaveLength(ids.length) @@ -206,7 +206,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { }) it('handles empty ids array gracefully', async () => { - const result = await brain.deleteMany({ ids: [] }) + const result = await brain.removeMany({ ids: [] }) expect(result.successful).toHaveLength(0) expect(result.failed).toHaveLength(0) }) @@ -217,7 +217,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { Array.from({ length: 25 }, (_, i) => addEntity({ type: 'document', metadata: { i } })) ) - const result = await brain.deleteMany({ ids }) + const result = await brain.removeMany({ ids }) expect(result.successful).toHaveLength(25) expect(result.failed).toHaveLength(0) @@ -267,7 +267,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { // After deletion the confidence/__NULL__ and weight/__NULL__ bitmap entries // (if any were created) must not be surfaced through any query. const id = await addEntity({ type: 'thing' }) - await brain.delete(id) + await brain.remove(id) // Entity must not appear in any confidence query const existsTrue = await brain.find({ where: { confidence: { exists: true } } }) @@ -282,7 +282,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { // Survivors are unaffected // --------------------------------------------------------------------------- - describe('partial deleteMany does not affect surviving entities', () => { + describe('partial removeMany does not affect surviving entities', () => { it('surviving entities remain queryable after deleting others of the same type', async () => { const toDelete = await Promise.all([ addEntity({ type: 'collection', metadata: { group: 'a' } }), @@ -294,7 +294,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { addEntity({ type: 'collection', metadata: { group: 'b' } }), ]) - await brain.deleteMany({ ids: toDelete }) + await brain.removeMany({ ids: toDelete }) const results = await brain.find({ type: 'collection' as any, limit: 50 }) const resultIds = results.map(r => r.id) @@ -315,7 +315,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => { const b = await addEntity({ type: 'task', service: 'svc' }) const c = await addEntity({ type: 'task', service: 'svc' }) - await brain.delete(a) + await brain.remove(a) const results = await brain.find({ type: 'task' as any, limit: 50 }) const ids = results.map(r => r.id) diff --git a/tests/regression/v5.7.0-deadlock.test.ts b/tests/regression/v5.7.0-deadlock.test.ts index c20b8390..b271d911 100644 --- a/tests/regression/v5.7.0-deadlock.test.ts +++ b/tests/regression/v5.7.0-deadlock.test.ts @@ -60,7 +60,7 @@ describe('v5.7.0 Deadlock Regression', () => { const start = Date.now() // Force GraphAdjacencyIndex usage by querying relationships - const relations = await brain.getRelations({ from: entities[0] }) + const relations = await brain.related({ from: entities[0] }) const elapsed = Date.now() - start @@ -123,7 +123,7 @@ describe('v5.7.0 Deadlock Regression', () => { const start = Date.now() // This would trigger initialization if not already done - const relations = await brain.getRelations({ from: entity1 }) + const relations = await brain.related({ from: entity1 }) const elapsed = Date.now() - start diff --git a/tests/scripts/migrate-to-v3.sh b/tests/scripts/migrate-to-v3.sh deleted file mode 100755 index bd294542..00000000 --- a/tests/scripts/migrate-to-v3.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -# Script to migrate tests from old Brainy API to v3.0 API -# This updates deprecated methods and types - -echo "šŸ”„ Migrating tests to Brainy 3.0 API..." - -# List of test files to update -TEST_FILES=( - "tests/integration/brainy-core.integration.test.ts" - "tests/integration/brainy-complete.integration.test.ts" -) - -for file in "${TEST_FILES[@]}"; do - if [ -f "$file" ]; then - echo "šŸ“ Updating $file..." - - # Backup original - cp "$file" "$file.backup" - - # Replace BrainyData with Brainy - sed -i 's/BrainyData/Brainy/g' "$file" - - # Replace addNoun with add (using proper params) - sed -i "s/brain\.addNoun(\([^,)]*\))/brain.add({ data: \1, type: 'thing' })/g" "$file" - sed -i "s/brain\.addNoun(\([^,]*\), \([^)]*\))/brain.add({ data: \1, type: 'thing', metadata: \2 })/g" "$file" - - # Replace addVerb with relate - sed -i "s/brain\.addVerb(\([^,]*\), \([^,]*\), \([^)]*\))/brain.relate({ from: \1, to: \2, type: \3 })/g" "$file" - - # Replace getNoun with get - sed -i 's/brain\.getNoun/brain.get/g' "$file" - - # Replace getVerb with getRelations - sed -i 's/brain\.getVerb/brain.getRelations/g' "$file" - - # Replace GraphNoun with Entity - sed -i 's/GraphNoun/Entity/g' "$file" - - # Replace GraphVerb with Relation - sed -i 's/GraphVerb/Relation/g' "$file" - - # Update import statements - sed -i "s/import { Brainy } from '..\/..\/dist\/index.js'/import { Brainy } from '..\/..\/src\/brainy'/g" "$file" - - # Fix forceMemoryStorage to new format - sed -i "s/storage: { forceMemoryStorage: true }/storage: { type: 'memory' }/g" "$file" - - echo "āœ… Updated $file" - fi -done - -echo "šŸ“Š Migration complete! Review the changes and run tests to verify." -echo "šŸ’” Backup files created with .backup extension" \ No newline at end of file diff --git a/tests/transaction/integration/distributed-transactions.test.ts b/tests/transaction/integration/distributed-transactions.test.ts index 36b12351..2a0cda2a 100644 --- a/tests/transaction/integration/distributed-transactions.test.ts +++ b/tests/transaction/integration/distributed-transactions.test.ts @@ -138,7 +138,7 @@ describe('Transactions + Distributed Storage Integration', () => { // Verify relationships for (let i = 0; i < entities.length - 1; i++) { - const relations = await brain.getRelations({ from: entities[i] }) + const relations = await brain.related({ from: entities[i] }) expect(relations).toHaveLength(1) } }) @@ -260,7 +260,7 @@ describe('Transactions + Distributed Storage Integration', () => { expect(entity).toBeTruthy() // Delete atomically - await brain.delete(id) + await brain.remove(id) // Verify deleted entity = await brain.get(id) @@ -286,14 +286,14 @@ describe('Transactions + Distributed Storage Integration', () => { }) // Delete first entity (should delete relationships) - await brain.delete(id1) + await brain.remove(id1) // Verify entity deleted const entity1 = await brain.get(id1) expect(entity1).toBeNull() // Verify relationships deleted - const relations = await brain.getRelations({ from: id1 }) + const relations = await brain.related({ from: id1 }) expect(relations).toHaveLength(0) // Entity 2 should still exist @@ -325,7 +325,7 @@ describe('Transactions + Distributed Storage Integration', () => { expect(entity?.data.name).toBe('Updated via Adapter') // Delete entity - await brain.delete(id) + await brain.remove(id) const deletedEntity = await brain.get(id) expect(deletedEntity).toBeNull() }) @@ -359,7 +359,7 @@ describe('Transactions + Distributed Storage Integration', () => { // Verify all operations succeeded (regardless of latency) const entity1 = await brain.get(id1) const entity2 = await brain.get(id2) - const relations = await brain.getRelations({ from: id1 }) + const relations = await brain.related({ from: id1 }) expect(entity1).toBeTruthy() expect(entity2).toBeTruthy() diff --git a/tests/transaction/integration/sharding-transactions.test.ts b/tests/transaction/integration/sharding-transactions.test.ts index 0d7d8fc6..60281c05 100644 --- a/tests/transaction/integration/sharding-transactions.test.ts +++ b/tests/transaction/integration/sharding-transactions.test.ts @@ -71,7 +71,7 @@ describe('Transactions + Sharding Integration', () => { // Verify all entities exist const entity1 = await brain.get(id1) const entity2 = await brain.get(id2) - const relations = await brain.getRelations({ from: id1 }) + const relations = await brain.related({ from: id1 }) expect(entity1).toBeTruthy() expect(entity2).toBeTruthy() @@ -213,9 +213,9 @@ describe('Transactions + Sharding Integration', () => { }) // Verify all relationships exist - const relations0 = await brain.getRelations({ from: entities[0].id }) - const relations1 = await brain.getRelations({ from: entities[1].id }) - const relations2 = await brain.getRelations({ from: entities[2].id }) + const relations0 = await brain.related({ from: entities[0].id }) + const relations1 = await brain.related({ from: entities[1].id }) + const relations2 = await brain.related({ from: entities[2].id }) expect(relations0).toHaveLength(1) expect(relations1).toHaveLength(1) @@ -249,7 +249,7 @@ describe('Transactions + Sharding Integration', () => { }) // Delete first entity (should also delete relationship) - await brain.delete(id1) + await brain.remove(id1) // Verify entity deleted from shard G const entity1 = await brain.get(id1) @@ -260,7 +260,7 @@ describe('Transactions + Sharding Integration', () => { expect(entity2).toBeTruthy() // Relationship should be deleted - const relations = await brain.getRelations({ from: id1 }) + const relations = await brain.related({ from: id1 }) expect(relations).toHaveLength(0) }) }) diff --git a/tests/transaction/integration/typeaware-transactions.test.ts b/tests/transaction/integration/typeaware-transactions.test.ts index 5c8198f1..51a659c6 100644 --- a/tests/transaction/integration/typeaware-transactions.test.ts +++ b/tests/transaction/integration/typeaware-transactions.test.ts @@ -272,8 +272,8 @@ describe('Transactions + TypeAware Storage Integration', () => { }) // Verify relationships exist - const personRelations = await brain.getRelations({ from: personId }) - const orgRelations = await brain.getRelations({ from: orgId }) + const personRelations = await brain.related({ from: personId }) + const orgRelations = await brain.related({ from: orgId }) expect(personRelations).toHaveLength(2) expect(orgRelations).toHaveLength(1) @@ -310,7 +310,7 @@ describe('Transactions + TypeAware Storage Integration', () => { }) // Delete person (should cascade delete relationships) - await brain.delete(personId) + await brain.remove(personId) // Verify person deleted const person = await brain.get(personId) @@ -323,7 +323,7 @@ describe('Transactions + TypeAware Storage Integration', () => { expect(task).toBeTruthy() // Verify relationships from person are deleted - const relations = await brain.getRelations({ from: personId }) + const relations = await brain.related({ from: personId }) expect(relations).toHaveLength(0) }) }) diff --git a/tests/unit/brainy-core.unit.test.ts b/tests/unit/brainy-core.unit.test.ts index 61545c07..c6403efe 100644 --- a/tests/unit/brainy-core.unit.test.ts +++ b/tests/unit/brainy-core.unit.test.ts @@ -76,7 +76,7 @@ describe('Brainy 3.0 Core (Unit Tests)', () => { expect(await brain.get(id)).toBeTruthy() // Delete it - await brain.delete(id) + await brain.remove(id) // Verify it's gone expect(await brain.get(id)).toBeNull() @@ -96,7 +96,7 @@ describe('Brainy 3.0 Core (Unit Tests)', () => { })).rejects.toThrow() // delete should not throw for non-existent ID - await expect(brain.delete(fakeId)).resolves.not.toThrow() + await expect(brain.remove(fakeId)).resolves.not.toThrow() }) }) @@ -199,9 +199,11 @@ describe('Brainy 3.0 Core (Unit Tests)', () => { data: { name: 'Test2' }, type: NounType.Concept }) - - // Statistics would be available through augmentation system - // The exact API depends on augmentation configuration + + const stats = await brain.stats() + expect(stats.mode).toBe('writer') + expect(stats.entityCount).toBeGreaterThanOrEqual(2) + expect(stats.entitiesByType[NounType.Concept]).toBeGreaterThanOrEqual(2) }) }) diff --git a/tests/unit/brainy/batch-operations.test.ts b/tests/unit/brainy/batch-operations.test.ts index 6c8eac24..9bbef3d7 100644 --- a/tests/unit/brainy/batch-operations.test.ts +++ b/tests/unit/brainy/batch-operations.test.ts @@ -155,7 +155,7 @@ describe('Brainy Batch Operations', () => { }) }) - describe('deleteMany - Batch Deletion', () => { + describe('removeMany - Batch Deletion', () => { let testIds: string[] beforeEach(async () => { @@ -171,7 +171,7 @@ describe('Brainy Batch Operations', () => { }) it('should delete multiple entities at once', async () => { - await brain.deleteMany({ ids: testIds }) + await brain.removeMany({ ids: testIds }) // All should be gone for (const id of testIds) { @@ -185,7 +185,7 @@ describe('Brainy Batch Operations', () => { const toDelete = [testIds[0], testIds[2], testIds[4]] const toKeep = [testIds[1], testIds[3]] - await brain.deleteMany({ ids: toDelete }) + await brain.removeMany({ ids: toDelete }) // Deleted ones should be gone for (const id of toDelete) { @@ -212,7 +212,7 @@ describe('Brainy Batch Operations', () => { await brain.relate({ from: person2, to: org, type: VerbType.MemberOf as any }) // Delete the organization - await brain.deleteMany({ ids: [org] }) + await brain.removeMany({ ids: [org] }) // Organization should be gone const deletedOrg = await brain.get(org) @@ -237,7 +237,7 @@ describe('Brainy Batch Operations', () => { const manyIds = manyResult.successful const startTime = Date.now() - await brain.deleteMany({ ids: manyIds }) + await brain.removeMany({ ids: manyIds }) const duration = Date.now() - startTime // v5.4.0: Increased to 14500ms for type-first storage + system load variance @@ -281,7 +281,7 @@ describe('Brainy Batch Operations', () => { expect(relationIds).toHaveLength(3) // Verify relationships exist - const person1Relations = await brain.getRelations({ from: entities[0] }) + const person1Relations = await brain.related({ from: entities[0] }) expect(person1Relations.length).toBeGreaterThan(0) }) @@ -297,13 +297,13 @@ describe('Brainy Batch Operations', () => { expect(relationIds).toHaveLength(3) // Verify different types - const friendRelations = await brain.getRelations({ + const friendRelations = await brain.related({ from: entities[0], type: VerbType.FriendOf }) expect(friendRelations.length).toBeGreaterThan(0) - const workRelations = await brain.getRelations({ + const workRelations = await brain.related({ from: entities[0], type: VerbType.WorksWith }) @@ -321,10 +321,10 @@ describe('Brainy Batch Operations', () => { expect(relationIds).toHaveLength(2) // Both should have the relationship - const person1Friends = await brain.getRelations({ from: entities[0] }) + const person1Friends = await brain.related({ from: entities[0] }) expect(person1Friends.length).toBeGreaterThan(0) - const person2Friends = await brain.getRelations({ from: entities[1] }) + const person2Friends = await brain.related({ from: entities[1] }) expect(person2Friends.length).toBeGreaterThan(0) }) @@ -358,7 +358,7 @@ describe('Brainy Batch Operations', () => { expect(duration).toBeLessThan(1000) // Should be fast // Verify company has all relationships - const companyRelations = await brain.getRelations({ to: company }) + const companyRelations = await brain.related({ to: company }) expect(companyRelations.length).toBeGreaterThanOrEqual(50) }) @@ -460,7 +460,7 @@ describe('Brainy Batch Operations', () => { await brain.relateMany({ items: relationships }) // 4. Delete some entities - await brain.deleteMany({ ids: initialIds.slice(15) }) + await brain.removeMany({ ids: initialIds.slice(15) }) const totalTime = Date.now() - startTime @@ -473,7 +473,7 @@ describe('Brainy Batch Operations', () => { const deleted = await brain.get(initialIds[19]) expect(deleted).toBeNull() - const relations = await brain.getRelations({ from: initialIds[0] }) + const relations = await brain.related({ from: initialIds[0] }) expect(relations.length).toBeGreaterThan(0) }) }) @@ -487,7 +487,7 @@ describe('Brainy Batch Operations', () => { expect(result.successful).toHaveLength(0) await brain.updateMany({ items: [] }) - await brain.deleteMany({ ids: [] }) + await brain.removeMany({ ids: [] }) // Should not throw }) diff --git a/tests/unit/brainy/fill-subtypes.test.ts b/tests/unit/brainy/fill-subtypes.test.ts index cae63ccd..0af24e43 100644 --- a/tests/unit/brainy/fill-subtypes.test.ts +++ b/tests/unit/brainy/fill-subtypes.test.ts @@ -169,9 +169,9 @@ describe('Brainy.fillSubtypes()', () => { expect(report.filled).toBe(1) expect(report.byType).toEqual({ relatedTo: 1 }) - const relations = await brain.getRelations({ from: a }) + const relations = await brain.related({ from: a }) expect(relations.find((r) => r.id === relId)!.subtype).toBe('unspecified') - const reverse = await brain.getRelations({ from: b }) + const reverse = await brain.related({ from: b }) expect(reverse.find((r) => r.id === labeled)!.subtype).toBe('colleague') // untouched }) @@ -195,7 +195,7 @@ describe('Brainy.fillSubtypes()', () => { }) expect(report.filled).toBe(1) - const relations = await brain.getRelations({ from: a }) + const relations = await brain.related({ from: a }) expect(relations[0].subtype).toBe('dotted-line') }) diff --git a/tests/unit/brainy/get.test.ts b/tests/unit/brainy/get.test.ts index 3cfd3a4d..b11b05d5 100644 --- a/tests/unit/brainy/get.test.ts +++ b/tests/unit/brainy/get.test.ts @@ -182,7 +182,7 @@ describe('Brainy.get()', () => { data: 'To be deleted', type: 'thing' })) - await brain.delete(id) + await brain.remove(id) // Act const entity = await brain.get(id) diff --git a/tests/unit/brainy/relate-duplicate-optimization.test.ts b/tests/unit/brainy/relate-duplicate-optimization.test.ts index dfd4da88..8bcb7c7a 100644 --- a/tests/unit/brainy/relate-duplicate-optimization.test.ts +++ b/tests/unit/brainy/relate-duplicate-optimization.test.ts @@ -51,7 +51,7 @@ describe('Duplicate Check Optimization', () => { expect(relationId2).toBe(relationId1) // Verify only one relationship exists - const relations = await brain.getRelations({ from: personId }) + const relations = await brain.related({ from: personId }) expect(relations).toHaveLength(1) expect(relations[0].id).toBe(relationId1) }) @@ -85,7 +85,7 @@ describe('Duplicate Check Optimization', () => { expect(relationId2).not.toBe(relationId1) // Verify both relationships exist - const relations = await brain.getRelations({ from: personId }) + const relations = await brain.related({ from: personId }) expect(relations).toHaveLength(2) // Both relations should exist with different IDs const relationIds = relations.map(r => r.id) @@ -129,7 +129,7 @@ describe('Duplicate Check Optimization', () => { expect(elapsed).toBeLessThan(10) // Verify duplicate was detected - const relations = await brain.getRelations({ from: sourceId }) + const relations = await brain.related({ from: sourceId }) expect(relations).toHaveLength(50) // No duplicate created }) @@ -198,7 +198,7 @@ describe('Duplicate Check Optimization', () => { }) // Verify both relationships exist - let relations = await brain.getRelations({ from: person }) + let relations = await brain.related({ from: person }) expect(relations).toHaveLength(2) const relationIds = relations.map(r => r.id) expect(relationIds).toContain(rel1) @@ -218,7 +218,7 @@ describe('Duplicate Check Optimization', () => { expect(duplicate).toBe(rel1) // Verify still same number of relationships (no duplicate added) - const finalRelations = await brain.getRelations({ from: person }) + const finalRelations = await brain.related({ from: person }) expect(finalRelations.length).toBe(relations.length) }) }) diff --git a/tests/unit/brainy/relate.test.ts b/tests/unit/brainy/relate.test.ts index 7189b72e..eb1a036e 100644 --- a/tests/unit/brainy/relate.test.ts +++ b/tests/unit/brainy/relate.test.ts @@ -61,7 +61,7 @@ describe('Brainy.relate()', () => { expect(typeof relationId).toBe('string') // Verify relationship exists - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) expect(relations.length).toBeGreaterThan(0) expect(relations.some(r => r.to === entity2Id)).toBe(true) }) @@ -76,7 +76,7 @@ describe('Brainy.relate()', () => { }) // Assert - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) const relation = relations.find(r => r.to === entity2Id) expect(relation).toBeDefined() expect(relation!.weight).toBe(0.8) @@ -99,7 +99,7 @@ describe('Brainy.relate()', () => { }) // Assert - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) const relation = relations.find(r => r.to === entity2Id) expect(relation).toBeDefined() expect(relation!.metadata || {}).toMatchObject(metadata) @@ -115,8 +115,8 @@ describe('Brainy.relate()', () => { }) // Assert - Check both directions - const forwardRelations = await brain.getRelations({ from: entity1Id }) - const reverseRelations = await brain.getRelations({ from: entity2Id }) + const forwardRelations = await brain.related({ from: entity1Id }) + const reverseRelations = await brain.related({ from: entity2Id }) expect(forwardRelations.some(r => r.to === entity2Id)).toBe(true) expect(reverseRelations.some(r => r.to === entity1Id)).toBe(true) @@ -137,7 +137,7 @@ describe('Brainy.relate()', () => { }) // Assert - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) expect(relations.length).toBe(2) expect(relations.some(r => r.to === entity2Id)).toBe(true) expect(relations.some(r => r.to === entity3Id)).toBe(true) @@ -158,7 +158,7 @@ describe('Brainy.relate()', () => { }) // Assert - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) const toEntity2 = relations.filter(r => r.to === entity2Id) expect(toEntity2.length).toBe(2) expect(toEntity2.some(r => r.type === 'worksWith')).toBe(true) @@ -175,7 +175,7 @@ describe('Brainy.relate()', () => { }) // Assert - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) const selfRelation = relations.find(r => r.to === entity1Id) expect(selfRelation).toBeDefined() expect(selfRelation!.metadata?.type).toBe('self-reference') @@ -241,7 +241,7 @@ describe('Brainy.relate()', () => { // Second call should return existing relationship ID instead of creating duplicate expect(id1).toBe(id2) - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) const matches = relations.filter(r => r.to === entity2Id && r.type === 'worksWith' ) @@ -267,7 +267,7 @@ describe('Brainy.relate()', () => { }) // Assert - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) const relation = relations.find(r => r.to === entity2Id) expect(relation).toBeDefined() expect(relation!.metadata?.bigArray).toHaveLength(100) @@ -291,7 +291,7 @@ describe('Brainy.relate()', () => { }) // Assert - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) const relation = relations.find(r => r.to === entity2Id) expect(relation!.metadata || {}).toMatchObject(specialMetadata) }) @@ -356,8 +356,8 @@ describe('Brainy.relate()', () => { }) // Assert - Multiple queries should return same data - const relations1 = await brain.getRelations({ from: entity1Id }) - const relations2 = await brain.getRelations({ from: entity1Id }) + const relations1 = await brain.related({ from: entity1Id }) + const relations2 = await brain.related({ from: entity1Id }) expect(relations1.length).toBe(relations2.length) const rel1 = relations1.find(r => r.to === entity2Id) @@ -386,7 +386,7 @@ describe('Brainy.relate()', () => { }) // Assert - Relationship should still exist - const relations = await brain.getRelations({ from: entity1Id }) + const relations = await brain.related({ from: entity1Id }) expect(relations.some(r => r.to === entity2Id)).toBe(true) }) }) @@ -407,8 +407,8 @@ describe('Brainy.relate()', () => { }) // Act - Get relationships step by step - const step1 = await brain.getRelations({ from: entity1Id }) - const entity2Relations = await brain.getRelations({ from: entity2Id }) + const step1 = await brain.related({ from: entity1Id }) + const entity2Relations = await brain.related({ from: entity2Id }) // Assert expect(step1.some(r => r.to === entity2Id)).toBe(true) @@ -436,9 +436,9 @@ describe('Brainy.relate()', () => { }) // Assert - All relationships should exist - const rel1 = await brain.getRelations({ from: entity1Id }) - const rel2 = await brain.getRelations({ from: entity2Id }) - const rel3 = await brain.getRelations({ from: entity3Id }) + const rel1 = await brain.related({ from: entity1Id }) + const rel2 = await brain.related({ from: entity2Id }) + const rel3 = await brain.related({ from: entity3Id }) expect(rel1.some(r => r.to === entity2Id)).toBe(true) expect(rel2.some(r => r.to === entity3Id)).toBe(true) diff --git a/tests/unit/brainy/update-reserved-metadata-remap.test.ts b/tests/unit/brainy/update-reserved-metadata-remap.test.ts index f0c6a4f4..ab1750e5 100644 --- a/tests/unit/brainy/update-reserved-metadata-remap.test.ts +++ b/tests/unit/brainy/update-reserved-metadata-remap.test.ts @@ -284,7 +284,7 @@ describe('reserved-field metadata remap (8.0 contract)', () => { expect(result?.entity._rev).toBe(1) }) - it('getRelations() by target surfaces reserved fields top-level, custom-only metadata', async () => { + it('related() by target surfaces reserved fields top-level, custom-only metadata', async () => { const a = await brain.add({ type: NounType.Person, subtype: 'employee', data: 'src' }) const b = await brain.add({ type: NounType.Person, subtype: 'employee', data: 'tgt' }) const relId = await brain.relate({ @@ -298,7 +298,7 @@ describe('reserved-field metadata remap (8.0 contract)', () => { metadata: { note: 'target path' } }) - const relations = await brain.getRelations({ to: b }) + const relations = await brain.related({ to: b }) const rel = relations.find((r) => r.id === relId) expect(rel).toBeDefined() expect(rel?.metadata).toEqual({ note: 'target path' }) @@ -329,7 +329,7 @@ describe('reserved-field metadata remap (8.0 contract)', () => { service: 'orders' }) - const relations = await brain.getRelations({ from: a }) + const relations = await brain.related({ from: a }) const rel = relations.find((r) => r.id === relId) expect(rel?.confidence).toBe(0.77) expect(rel?.service).toBe('orders') @@ -344,7 +344,7 @@ describe('reserved-field metadata remap (8.0 contract)', () => { metadata: { confidence: 0.4, weight: 0.3, role: 'peer' } as object }) - const relations = await brain.getRelations({ from: a }) + const relations = await brain.related({ from: a }) const rel = relations.find((r) => r.id === relId) expect(rel?.confidence).toBe(0.4) expect(rel?.weight).toBe(0.3) @@ -360,7 +360,7 @@ describe('reserved-field metadata remap (8.0 contract)', () => { metadata: { note: 'no echo' } }) - const relations = await brain.getRelations({ from: a }) + const relations = await brain.related({ from: a }) const rel = relations.find((r) => r.id === relId) expect(rel?.type).toBe(VerbType.RelatedTo) expect((rel?.metadata as Record)?.verb).toBeUndefined() @@ -382,7 +382,7 @@ describe('reserved-field metadata remap (8.0 contract)', () => { metadata: { confidence: 0.55, subtype: 'dotted-line', extra: 'applied' } as object }) - const relations = await brain.getRelations({ from: a }) + const relations = await brain.related({ from: a }) const rel = relations.find((r) => r.id === relId) expect(rel?.confidence).toBe(0.55) expect(rel?.subtype).toBe('dotted-line') diff --git a/tests/unit/graph/bigint-contract.test.ts b/tests/unit/graph/bigint-contract.test.ts index 77d3356f..44d5a76b 100644 --- a/tests/unit/graph/bigint-contract.test.ts +++ b/tests/unit/graph/bigint-contract.test.ts @@ -10,7 +10,7 @@ * - `getNeighbors` speaks entity ints both ways via the shared idMapper * - unmapped entity ints / UUIDs produce empty reads, never errors * - a missing idMapper fails loudly (wiring bug, not a silent fallback) - * - coordinator-level behavior: relate → getRelations/neighbors → unrelate + * - coordinator-level behavior: relate → related/neighbors → unrelate * works end-to-end over the BigInt boundary (public API unchanged) */ @@ -156,7 +156,7 @@ describe('Coordinator — relate/related end-to-end over the BigInt boundary', ( await brain.close() }) - it('relate → getRelations → neighbors round-trips (public API unchanged)', async () => { + it('relate → related → neighbors round-trips (public API unchanged)', async () => { const personId = await brain.add({ data: { name: 'Ada' }, type: NounType.Person @@ -172,8 +172,8 @@ describe('Coordinator — relate/related end-to-end over the BigInt boundary', ( type: VerbType.WorksWith }) - // getRelations resolves verb ints back to verb-id strings internally. - const relations = await brain.getRelations({ from: personId }) + // related resolves verb ints back to verb-id strings internally. + const relations = await brain.related({ from: personId }) expect(relations).toHaveLength(1) expect(relations[0].id).toBe(relId) expect(relations[0].to).toBe(projectId) @@ -208,7 +208,7 @@ describe('Coordinator — relate/related end-to-end over the BigInt boundary', ( const relId = await brain.relate({ from: a, to: b, type: VerbType.RelatedTo }) await brain.unrelate(relId) - const relations = await brain.getRelations({ from: a }) + const relations = await brain.related({ from: a }) expect(relations).toHaveLength(0) }) diff --git a/tests/unit/neural/SmartExtractor.test.ts b/tests/unit/neural/SmartExtractor.test.ts index 80155d30..064abb3e 100644 --- a/tests/unit/neural/SmartExtractor.test.ts +++ b/tests/unit/neural/SmartExtractor.test.ts @@ -611,8 +611,10 @@ describe('SmartExtractor', () => { extractor.addToHistory('Test Entity', NounType.Person, vector) - // History is internal, just ensure no errors - expect(true).toBe(true) + // History lives on the embedding signal the extractor delegates to. + const history = (extractor as any).embeddingSignal.historicalEntities + expect(history).toHaveLength(1) + expect(history[0].text).toBe('Test Entity') }) it('should clear history', () => { @@ -621,8 +623,8 @@ describe('SmartExtractor', () => { extractor.clearHistory() - // History cleared, no errors - expect(true).toBe(true) + const history = (extractor as any).embeddingSignal.historicalEntities + expect(history).toHaveLength(0) }) }) }) diff --git a/tests/unit/storage/vfs-mkdir-bug.test.ts b/tests/unit/storage/vfs-mkdir-bug.test.ts index f2439930..5c9567bd 100644 --- a/tests/unit/storage/vfs-mkdir-bug.test.ts +++ b/tests/unit/storage/vfs-mkdir-bug.test.ts @@ -11,7 +11,7 @@ * 1. Option A: Never skip a verb type that's explicitly requested in the filter * 2. Option B: Added fast path for sourceId + verbType combo (common VFS pattern) * - * Bug Report: /home/dpsifr/Projects/workshop/docs/BRAINY_VFS_BUG_REPORT.md + * Originally reported by a downstream application using the VFS. */ import { describe, it, expect, beforeEach, afterEach } from 'vitest' @@ -84,7 +84,7 @@ describe('VFS mkdir() Bug Fix (v6.2.9)', () => { }) }) - describe('getRelations should query Contains relationships correctly', () => { + describe('related should query Contains relationships correctly', () => { it('should find Contains relationships via sourceId + verbType filter', async () => { // Create some entities and relationships const parent = await brain.add({ @@ -110,7 +110,7 @@ describe('VFS mkdir() Bug Fix (v6.2.9)', () => { await brain.relate({ from: parent, to: child2, type: VerbType.Contains }) // Query relationships (this is what getChildren() does) - const relations = await brain.getRelations({ + const relations = await brain.related({ from: parent, type: VerbType.Contains }) @@ -132,7 +132,7 @@ describe('VFS mkdir() Bug Fix (v6.2.9)', () => { await brain.relate({ from: entityA, to: entityC, type: VerbType.RelatedTo }) // Query only Contains relationships - const containsRelations = await brain.getRelations({ + const containsRelations = await brain.related({ from: entityA, type: VerbType.Contains }) @@ -141,7 +141,7 @@ describe('VFS mkdir() Bug Fix (v6.2.9)', () => { expect(containsRelations[0].to).toBe(entityB) // Query only RelatedTo relationships - const relatedRelations = await brain.getRelations({ + const relatedRelations = await brain.related({ from: entityA, type: VerbType.RelatedTo }) @@ -174,7 +174,7 @@ describe('VFS mkdir() Bug Fix (v6.2.9)', () => { // Query should use the new fast path const startTime = performance.now() - const relations = await brain.getRelations({ + const relations = await brain.related({ from: parent, type: VerbType.Contains }) diff --git a/tests/unit/utils/entity-id-mapper-stability.test.ts b/tests/unit/utils/entity-id-mapper-stability.test.ts index f61b833e..a43ab631 100644 --- a/tests/unit/utils/entity-id-mapper-stability.test.ts +++ b/tests/unit/utils/entity-id-mapper-stability.test.ts @@ -120,7 +120,7 @@ describe('EntityIdMapper stability (foundation for 2.4.0)', () => { const deletedInt = beforeInts[2] const maxBefore = Math.max(...beforeInts) - await brain.delete(deletedId) + await brain.remove(deletedId) expect(getInt(deletedId)).toBeUndefined() const newId = await addEntity('f', 6) diff --git a/tests/unit/utils/metadataIndex-type-aware.test.ts b/tests/unit/utils/metadataIndex-type-aware.test.ts index db745afd..aad7bc09 100644 --- a/tests/unit/utils/metadataIndex-type-aware.test.ts +++ b/tests/unit/utils/metadataIndex-type-aware.test.ts @@ -255,14 +255,9 @@ describe('MetadataIndexManager - Phase 1b: Type-Aware Features', { timeout: 120_ }) it('should preload sparse indices for top fields of top types', async () => { - const managerAny = manager as any - - // Warm cache - await manager.warmCacheForTopTypes(2) - - // Check that sparse indices were loaded (by checking UnifiedCache) - // This is implementation-dependent, so we just verify no errors occurred - expect(true).toBe(true) // If we got here, warming succeeded + // Warming must complete cleanly against populated storage; the cache + // contents are an implementation detail, the contract is clean resolution. + await expect(manager.warmCacheForTopTypes(2)).resolves.toBeUndefined() }) it('should handle empty database gracefully', async () => { diff --git a/tests/unit/utils/mutex.test.ts b/tests/unit/utils/mutex.test.ts index bab0b8ce..ca54b163 100644 --- a/tests/unit/utils/mutex.test.ts +++ b/tests/unit/utils/mutex.test.ts @@ -71,12 +71,14 @@ describe('Mutex Safety Tests', () => { }) it('should not deadlock with nested different keys', async () => { + let innerRan = false await mutex.runExclusive('key1', async () => { await mutex.runExclusive('key2', async () => { - // Should not deadlock - expect(true).toBe(true) + innerRan = true }) }) + // Reaching here at all proves no deadlock; assert the inner body ran. + expect(innerRan).toBe(true) }) it('should handle errors in exclusive function', async () => { @@ -89,9 +91,11 @@ describe('Mutex Safety Tests', () => { ).rejects.toThrow('Test error') // Lock should be released, so we can acquire it again + let reacquired = false await mutex.runExclusive('error-test', async () => { - expect(true).toBe(true) + reacquired = true }) + expect(reacquired).toBe(true) }) it('should handle high concurrency without resource exhaustion', async () => { diff --git a/tests/unit/vfs-restart-fix.test.ts b/tests/unit/vfs-restart-fix.test.ts index e720abcb..f6ad4508 100644 --- a/tests/unit/vfs-restart-fix.test.ts +++ b/tests/unit/vfs-restart-fix.test.ts @@ -40,8 +40,8 @@ describe('VFS restart persistence', () => { const entries1 = await brain.vfs.readdir('/') expect(entries1.length).toBeGreaterThan(0) - // In-session getRelations: root should have Contains relationship to the file - const relations1 = await brain.getRelations({ from: rootId, type: VerbType.Contains }) + // In-session related: root should have Contains relationship to the file + const relations1 = await brain.related({ from: rootId, type: VerbType.Contains }) expect(relations1.length).toBeGreaterThan(0) await brain.close() @@ -68,8 +68,8 @@ describe('VFS restart persistence', () => { expect(entries2.length).toBeGreaterThan(0) expect(entries2).toContain('chapter-1.txt') - // getRelations should find the Contains relationship - const relations2 = await brain.getRelations({ from: rootId, type: VerbType.Contains }) + // related should find the Contains relationship + const relations2 = await brain.related({ from: rootId, type: VerbType.Contains }) expect(relations2.length).toBeGreaterThan(0) await brain.close() @@ -104,8 +104,8 @@ describe('VFS restart persistence', () => { const docEntries1 = await brain.vfs.readdir('/docs') expect(docEntries1.length).toBe(2) // guide.txt + api.txt - // In-session getRelations: root should have Contains relationships - const rootRelations1 = await brain.getRelations({ from: rootId, type: VerbType.Contains }) + // In-session related: root should have Contains relationships + const rootRelations1 = await brain.related({ from: rootId, type: VerbType.Contains }) expect(rootRelations1.length).toBeGreaterThan(0) await brain.close() @@ -130,7 +130,7 @@ describe('VFS restart persistence', () => { expect(docEntries2.sort()).toEqual(['api.txt', 'guide.txt']) // Root relations - const rootRelations = await brain.getRelations({ from: rootId, type: VerbType.Contains }) + const rootRelations = await brain.related({ from: rootId, type: VerbType.Contains }) expect(rootRelations.length).toBeGreaterThan(0) await brain.close() diff --git a/tests/vfs/vfs-relationships.test.ts b/tests/vfs/vfs-relationships.test.ts index 02007e43..c466cfcb 100644 --- a/tests/vfs/vfs-relationships.test.ts +++ b/tests/vfs/vfs-relationships.test.ts @@ -34,7 +34,7 @@ describe('VFS Graph Relationships', () => { const readmeId = await vfs.resolvePath('/projects/brainy/README.md') // Verify relationships are created properly - const projectRelations = await brain.getRelations({ + const projectRelations = await brain.related({ from: projectsId, type: VerbType.Contains }) @@ -43,7 +43,7 @@ describe('VFS Graph Relationships', () => { expect(projectRelations[0].to).toBe(brainyId) // Verify brainy directory contains its files - const brainyRelations = await brain.getRelations({ + const brainyRelations = await brain.related({ from: brainyId, type: VerbType.Contains }) @@ -89,7 +89,7 @@ describe('VFS Graph Relationships', () => { const doc1Id = await vfs.resolvePath('/doc1.md') const doc2Id = await vfs.resolvePath('/doc2.md') - const directRelations = await brain.getRelations({ + const directRelations = await brain.related({ from: doc1Id, type: VerbType.References }) @@ -114,7 +114,7 @@ describe('VFS Graph Relationships', () => { const testId = entity.id // Check that root contains test.txt via relationships - const rootRelations = await brain.getRelations({ + const rootRelations = await brain.related({ from: rootId, type: VerbType.Contains }) @@ -135,7 +135,7 @@ describe('VFS Graph Relationships', () => { // Verify it's using relationships, not metadata queries const manyId = await vfs.resolvePath('/many') - const relations = await brain.getRelations({ + const relations = await brain.related({ from: manyId, type: VerbType.Contains }) @@ -158,14 +158,14 @@ describe('VFS Graph Relationships', () => { const fileId = await vfs.resolvePath('/dest/file.txt') // Source should not contain file anymore - const sourceRelations = await brain.getRelations({ + const sourceRelations = await brain.related({ from: sourceId, type: VerbType.Contains }) expect(sourceRelations).toHaveLength(0) // Dest should contain file - const destRelations = await brain.getRelations({ + const destRelations = await brain.related({ from: destId, type: VerbType.Contains }) @@ -204,7 +204,7 @@ describe('VFS Graph Relationships', () => { const fileEntityId = await vfs.resolvePath('/test-new.txt') // Check that Contains relationship exists - const relations = await brain.getRelations({ + const relations = await brain.related({ from: rootId, to: fileEntityId, type: VerbType.Contains @@ -221,7 +221,7 @@ describe('VFS Graph Relationships', () => { await vfs.writeFile('/test-new.txt', 'Updated content') // Relationship should still exist after update - const relationsAfterUpdate = await brain.getRelations({ + const relationsAfterUpdate = await brain.related({ from: rootId, to: fileEntityId, type: VerbType.Contains @@ -237,7 +237,7 @@ describe('VFS Graph Relationships', () => { await vfs.writeFile('/test-new.txt', 'Another update') await vfs.writeFile('/test-new.txt', 'Yet another update') - const finalRelations = await brain.getRelations({ + const finalRelations = await brain.related({ from: rootId, to: fileEntityId, type: VerbType.Contains @@ -258,7 +258,7 @@ describe('VFS Graph Relationships', () => { const fileEntityId = await vfs.resolvePath('/orphan-test.txt') // Manually delete the Contains relationship to simulate the bug - const initialRelations = await brain.getRelations({ + const initialRelations = await brain.related({ from: rootId, to: fileEntityId, type: VerbType.Contains @@ -270,7 +270,7 @@ describe('VFS Graph Relationships', () => { } // Verify the relationship is gone - const brokenRelations = await brain.getRelations({ + const brokenRelations = await brain.related({ from: rootId, to: fileEntityId, type: VerbType.Contains @@ -285,7 +285,7 @@ describe('VFS Graph Relationships', () => { await vfs.writeFile('/orphan-test.txt', 'Fixed content') // Verify the relationship is restored - const fixedRelations = await brain.getRelations({ + const fixedRelations = await brain.related({ from: rootId, to: fileEntityId, type: VerbType.Contains @@ -314,7 +314,7 @@ describe('VFS Graph Relationships', () => { const fileEntityId = await vfs.resolvePath('/level1/level2/level3/deep.txt') // Verify Contains relationship exists - const relations = await brain.getRelations({ + const relations = await brain.related({ from: level3Id, to: fileEntityId, type: VerbType.Contains @@ -329,7 +329,7 @@ describe('VFS Graph Relationships', () => { // Update the file and verify relationship persists await vfs.writeFile('/level1/level2/level3/deep.txt', 'Updated deep content') - const relationsAfterUpdate = await brain.getRelations({ + const relationsAfterUpdate = await brain.related({ from: level3Id, to: fileEntityId, type: VerbType.Contains