From 9919d8710a7a7a317d9f004ae2491d87b2bfe42e Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Fri, 17 Jul 2026 16:19:18 +0300 Subject: [PATCH] fix(text): verify visible international font rendering - Register CanvasKit faces under their source family names so CJK and Arabic glyphs paint instead of only shaping metrics - Add deterministic CJK, Arabic, mixed-script, first-paint, and interactive fallback image oracles - Cover typed and tool-created text parity with a repository-owned Noto CJK subset Fixes #324 Fixes #291 --- CHANGELOG.md | 1 + knip.json | 1 - packages/core/src/text/fonts.ts | 51 +-- tests/e2e/fonts/cjk-fallback.spec.ts | 34 +- tests/e2e/fonts/cjk-rendering-visual.spec.ts | 423 ++++++++++++++---- ...lback-text-rendering-openpencil-darwin.png | Bin 52342 -> 0 bytes ...ont-fallback-pending-openpencil-darwin.png | Bin 0 -> 25715 bytes ...nt-fallback-resolved-openpencil-darwin.png | Bin 0 -> 44328 bytes ...nal-text-first-paint-openpencil-darwin.png | Bin 0 -> 58262 bytes tests/engine/text/fonts/lifecycle.test.ts | 13 +- tests/engine/text/fonts/loading.test.ts | 31 +- tests/fixtures/fonts/NotoSansCJK-Test.otf | Bin 0 -> 17208 bytes tests/fixtures/fonts/OFL.txt | 93 ++++ 13 files changed, 469 insertions(+), 178 deletions(-) delete mode 100644 tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/cjk-fallback-text-rendering-openpencil-darwin.png create mode 100644 tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/interactive-font-fallback-pending-openpencil-darwin.png create mode 100644 tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/interactive-font-fallback-resolved-openpencil-darwin.png create mode 100644 tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/international-text-first-paint-openpencil-darwin.png create mode 100644 tests/fixtures/fonts/NotoSansCJK-Test.otf create mode 100644 tests/fixtures/fonts/OFL.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index fcc07455b..77440eb56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ - Make canvas text rendering demand missing font faces and verify CJK/Arabic fallback coverage from CanvasKit shaping results instead of coarse script predictions. - Resolve fonts before loaded, pasted, imported, and tool-created nodes render; invalidate generation-stale text caches and use baked `.fig` glyphs only after live font resolution is exhausted. - Load character-specific remote font subsets without Latin-only assumptions, preserve cumulative subset coverage, and reject unavailable desktop font styles instead of substituting the first family face. +- Render downloaded CJK and Arabic faces under their source family names so CanvasKit produces visible glyphs, with first-paint and interactive fallback snapshots covering CJK, Arabic, and mixed scripts. - Fix live CLI and MCP automation drifting to the wrong open document or page when multiple files are open. - Improve Chinese, Japanese, and Korean text rendering with glyph-aware fallback fonts and outline rendering when needed. - Preserve imported Figma text sizing more accurately, especially auto-sized text inside auto-layout frames. diff --git a/knip.json b/knip.json index 7d4224ab6..59a0d24c1 100644 --- a/knip.json +++ b/knip.json @@ -8,7 +8,6 @@ "ignoreWorkspaces": ["packages/acp", "packages/demos"], "ignoreUnresolved": [ "~icons/*", - "/packages/core/src/text/fonts.ts", "/src/app/editor/fonts/index.ts", "#core/*" ], diff --git a/packages/core/src/text/fonts.ts b/packages/core/src/text/fonts.ts index 6127be85a..f26fe3c6e 100644 --- a/packages/core/src/text/fonts.ts +++ b/packages/core/src/text/fonts.ts @@ -3,7 +3,6 @@ import type { CanvasKit, TypefaceFontProvider } from 'canvaskit-wasm' import type { SceneGraph } from '@open-pencil/scene-graph' import { DEFAULT_FONT_FAMILY, IS_BROWSER } from '#core/constants' -import { fontFaceRenderFamily } from '#core/text/face' import { chooseLocalFontMatch, isVariableFont, @@ -52,9 +51,6 @@ export class FontManager { private fallbackUserAgent: string | undefined private hostFontLoader: HostFontLoader | null = null private webFonts = new WebFontResolver() - private registeredRenderFamilies = new Set() - private renderFamilyAliases = new Map() - private renderFamilyRevisions = new Map() private cjkFallbackFamilies: string[] = [] private cjkFallbackPromise: Promise | null = null private arabicFallbackFamilies: string[] = [] @@ -64,18 +60,13 @@ export class FontManager { this.fontProvider = provider this.registrationGeneration++ this.providerRegistrations.clear() - this.registeredRenderFamilies.clear() - this.renderFamilyAliases.clear() - this.renderFamilyRevisions.clear() for (const [cacheKey, data] of this.loadedFamilies) { const separator = cacheKey.indexOf('|') const family = cacheKey.slice(0, separator) - const style = cacheKey.slice(separator + 1) this.registerFontInCanvasKit(family, data) for (const supplemental of this.supplementalFamilyData.get(cacheKey) ?? []) { this.registerFontInCanvasKit(family, supplemental) } - this.registerInitialRenderFamily(family, style, data) } } @@ -333,22 +324,11 @@ export class FontManager { return this.loadedFamilies.get(`${family}|${style}`) ?? null } - renderFamily(family: string, style: string): string { - const data = this.loadedData(family, style) - if (!data) return family - - const key = `${family}|${style}` - const renderFamily = this.renderFamilyAliases.get(key) ?? fontFaceRenderFamily(family, style) - if (!this.registeredRenderFamilies.has(renderFamily)) { - if (this.registerFontInCanvasKit(renderFamily, data)) { - this.renderFamilyAliases.set(key, renderFamily) - this.renderFamilyRevisions.set(key, 1) - this.registeredRenderFamilies.add(renderFamily) - } else { - return family - } - } - return renderFamily + renderFamily(family: string, _style: string): string { + // CanvasKit can shape metrics but paint no glyphs for some CJK/Arabic faces registered under a + // synthetic alias. Keep every shard under the font's source family; character-aware remote + // requests already fetch cumulative coverage before replacing the primary buffer. + return family } collectFontKeys(graph: SceneGraph, nodeIds: string[]): Array<[string, string]> { @@ -535,31 +515,10 @@ export class FontManager { if (existing) this.registerSupplemental(family, style, existing) this.loadedFamilies.set(key, buffer) this.registerFontInCanvasKit(family, buffer) - const currentRenderFamily = this.renderFamilyAliases.get(key) - if (currentRenderFamily) { - const revision = (this.renderFamilyRevisions.get(key) ?? 1) + 1 - const renderFamily = `${fontFaceRenderFamily(family, style)}__${revision}` - if (this.registerFontInCanvasKit(renderFamily, buffer)) { - this.renderFamilyAliases.set(key, renderFamily) - this.renderFamilyRevisions.set(key, revision) - this.registeredRenderFamilies.add(renderFamily) - } - } else { - this.registerInitialRenderFamily(family, style, buffer) - } this.registerFontInBrowser(family, style, buffer) return buffer } - private registerInitialRenderFamily(family: string, style: string, data: ArrayBuffer): void { - const key = `${family}|${style}` - const renderFamily = fontFaceRenderFamily(family, style) - if (!this.registerFontInCanvasKit(renderFamily, data)) return - this.renderFamilyAliases.set(key, renderFamily) - this.renderFamilyRevisions.set(key, 1) - this.registeredRenderFamilies.add(renderFamily) - } - private registerFontInCanvasKit(family: string, data: ArrayBuffer): boolean { if (!this.fontProvider || data.byteLength < 4) return false const registeredData = this.providerRegistrations.get(family) diff --git a/tests/e2e/fonts/cjk-fallback.spec.ts b/tests/e2e/fonts/cjk-fallback.spec.ts index c2f64c630..561e755c9 100644 --- a/tests/e2e/fonts/cjk-fallback.spec.ts +++ b/tests/e2e/fonts/cjk-fallback.spec.ts @@ -1,5 +1,7 @@ import { test, expect } from '@playwright/test' +import type { FontManager } from '#core/text/fonts' + import { CanvasHelper } from '#tests/helpers/canvas' test('tool-created CJK text requests fallback through app font loading', async ({ page }) => { @@ -13,13 +15,20 @@ test('tool-created CJK text requests fallback through app font loading', async ( const { ensureGraphFonts, loadFont } = await import('/src/app/editor/fonts/index.ts') await loadFont('Inter', 'Regular') - const { fontManager } = await import('/packages/core/src/text/fonts.ts') + const fontModuleUrl = performance + .getEntriesByType('resource') + .map((entry) => entry.name) + .find((url) => url.includes('/packages/core/src/text/fonts.ts')) + if (!fontModuleUrl) throw new Error('Active font manager module not found') + const { fontManager } = (await import(/* @vite-ignore */ fontModuleUrl)) as { + fontManager: FontManager + } const originalEnsureFallbackPack = fontManager.ensureFallbackPack.bind(fontManager) let requestedScripts: string[] = [] fontManager.ensureFallbackPack = async (scripts = ['cjk', 'arabic']) => { requestedScripts = [...scripts] - return { cjk: ['Regression CJK Fallback'], arabic: [] } + return { cjk: ['Noto Sans CJK SC'], arabic: [] } } const pageNode = store.graph.getNode(store.state.currentPageId) @@ -66,9 +75,16 @@ test('CJK text waits for fallback fonts and repaints after they load', async ({ const store = window.openPencil?.getStore?.() if (!store?.renderer) throw new Error('OpenPencil renderer not initialized') const renderer = store.renderer - const response = await fetch('/tests/fixtures/fonts/NotoSansSC-Regular.ttf') + const response = await fetch('/tests/fixtures/fonts/NotoSansCJK-Test.otf') const fallbackData = await response.arrayBuffer() - const { fontManager } = await import('/packages/core/src/text/fonts.ts') + const fontModuleUrl = performance + .getEntriesByType('resource') + .map((entry) => entry.name) + .find((url) => url.includes('/packages/core/src/text/fonts.ts')) + if (!fontModuleUrl) throw new Error('Active font manager module not found') + const { fontManager } = (await import(/* @vite-ignore */ fontModuleUrl)) as { + fontManager: FontManager + } const manager = fontManager as typeof fontManager & { cjkFallbackFamilies: string[] } const originalFamilies = [...manager.cjkFallbackFamilies] const originalEnsureFallbackPack = fontManager.ensureFallbackPack.bind(fontManager) @@ -84,9 +100,9 @@ test('CJK text waits for fallback fonts and repaints after they load', async ({ const originalRender = renderer.renderFromEditorState.bind(renderer) fontManager.ensureFallbackPack = async (scripts = ['cjk', 'arabic']) => { await fallbackGate - fontManager.markLoaded('Regression CJK Fallback', 'Regular', fallbackData) - fontManager.setCJKFallbackFamily('Regression CJK Fallback') - return Object.fromEntries(scripts.map((script) => [script, ['Regression CJK Fallback']])) + fontManager.markLoaded('Noto Sans CJK SC', 'Regular', fallbackData) + fontManager.setCJKFallbackFamily('Noto Sans CJK SC') + return Object.fromEntries(scripts.map((script) => [script, ['Noto Sans CJK SC']])) } renderer.renderFromEditorState = ( ...args: Parameters @@ -101,7 +117,7 @@ test('CJK text waits for fallback fonts and repaints after they load', async ({ y: 80, width: 300, height: 60, - text: '上班打卡App', + text: '你好世界App', textLanguage: 'zh-Hans', fontSize: 32, fontFamily: 'Inter', @@ -131,6 +147,7 @@ test('CJK text waits for fallback fonts and repaints after they load', async ({ return { loadedBeforeFallback, loadedAfterFallback: renderer.isNodeFontLoaded(text), + readiness: renderer.nodeFontReadiness(text), fallbackRenderCount, renderCount } @@ -142,6 +159,7 @@ test('CJK text waits for fallback fonts and repaints after they load', async ({ }) expect(result.loadedBeforeFallback).toBe(false) + expect(result.readiness).toBe('ready') expect(result.loadedAfterFallback).toBe(true) expect(result.fallbackRenderCount).toBe(1) expect(result.renderCount).toBeGreaterThan(0) diff --git a/tests/e2e/fonts/cjk-rendering-visual.spec.ts b/tests/e2e/fonts/cjk-rendering-visual.spec.ts index 410953303..aa7124b49 100644 --- a/tests/e2e/fonts/cjk-rendering-visual.spec.ts +++ b/tests/e2e/fonts/cjk-rendering-visual.spec.ts @@ -1,121 +1,358 @@ -import { existsSync, readFileSync } from 'node:fs' +import { Buffer } from 'node:buffer' -import { expect, test, useEditorSetupWithClear } from '#tests/e2e/fixtures' +import type { Page } from '@playwright/test' -const editor = useEditorSetupWithClear('/?test&no-chrome&no-rulers') -const appleGothic = '/System/Library/Fonts/Supplemental/AppleGothic.ttf' +import type { FontManager } from '#core/text/fonts' -test.skip( - process.platform !== 'darwin' || !existsSync(appleGothic), - 'CJK visual snapshot uses macOS AppleGothic for Hangul coverage' -) +import { expect, test } from '#tests/e2e/fixtures' +import { CanvasHelper } from '#tests/helpers/canvas' -async function expectCanvas(name: string) { - editor.canvas.assertNoErrors() - const buffer = await editor.canvas.canvas.screenshot() - expect(buffer).toMatchSnapshot(`${name}.png`) -} - -test('renders Simplified Chinese, Traditional Chinese, Japanese, and Korean fallback text', async () => { - await editor.page.route('**/__test-fonts/apple-gothic.ttf', async (route) => { - await route.fulfill({ body: readFileSync(appleGothic), contentType: 'font/ttf' }) - }) - - const smoke = await editor.page.evaluate(async () => { +async function openEditor(page: Page): Promise { + await page.goto('/?test&no-chrome&no-rulers') + const canvas = new CanvasHelper(page) + await canvas.waitForInit() + await page.evaluate(() => { const store = window.openPencil?.getStore?.() if (!store) throw new Error('OpenPencil store not initialized') - const pageId = store.state.currentPageId - const { fontManager } = await import('/packages/core/src/text/fonts.ts') + const pageNode = store.graph.getNode(store.state.currentPageId) + const childIds = pageNode?.childIds.slice() ?? [] + for (const id of childIds) store.graph.deleteNode(id) + store.clearSelection() + store.renderer?.invalidateAllPictures() + store.requestRender() + store.renderer?.renderFromEditorState( + store.state, + store.graph, + store.textEditor, + window.innerWidth, + window.innerHeight, + false, + 'full' + ) + }) + await canvas.waitForRender() + return canvas +} - const [notoResponse, appleGothicResponse] = await Promise.all([ - fetch('/tests/fixtures/fonts/NotoSansSC-Regular.ttf'), - fetch('/__test-fonts/apple-gothic.ttf') - ]) - if (!notoResponse.ok) throw new Error(`Failed to load Noto Sans SC: ${notoResponse.status}`) - if (!appleGothicResponse.ok) { - throw new Error(`Failed to load AppleGothic: ${appleGothicResponse.status}`) +async function expectCanvas(canvas: CanvasHelper, name: string): Promise { + await canvas.page.evaluate( + () => + new Promise((resolve) => { + requestAnimationFrame(() => requestAnimationFrame(resolve)) + }) + ) + canvas.assertNoErrors() + expect(await canvas.canvas.screenshot()).toMatchSnapshot(`${name}.png`) +} + +test('international text is correct on its first visible paint', async ({ page }) => { + await openEditor(page) + + const result = await page.evaluate(async () => { + const store = window.openPencil?.getStore?.() + if (!store?.renderer) throw new Error('OpenPencil renderer not initialized') + const fontModuleUrl = performance + .getEntriesByType('resource') + .map((entry) => entry.name) + .find((url) => url.includes('/packages/core/src/text/fonts.ts')) + if (!fontModuleUrl) throw new Error('Active font manager module not found') + const { fontManager } = (await import(/* @vite-ignore */ fontModuleUrl)) as { + fontManager: FontManager } - - fontManager.markLoaded('Noto Sans SC', 'Regular', await notoResponse.arrayBuffer()) - fontManager.markLoaded('AppleGothic', 'Regular', await appleGothicResponse.arrayBuffer()) - fontManager.setCJKFallbackFamily('Noto Sans SC') - fontManager.setCJKFallbackFamily('AppleGothic') - - const lines = [ - { label: 'Simplified Chinese', text: '你好世界' }, - { label: 'Traditional Chinese', text: '繁體中文' }, - { label: 'Japanese', text: '日本語かなカナ' }, - { label: 'Korean', text: '안녕하세요' } + const pageId = store.state.currentPageId + const samples = [ + { + label: 'Simplified Chinese', + text: '你好世界', + language: 'zh-Hans', + family: 'Noto Sans CJK SC' + }, + { + label: 'Traditional Chinese', + text: '繁體中文', + language: 'zh-Hant', + family: 'Noto Sans CJK SC' + }, + { label: 'Japanese', text: '日本語かなカナ', language: 'ja', family: 'Noto Sans CJK SC' }, + { label: 'Korean', text: '안녕하세요', language: 'ko', family: 'Noto Sans CJK SC' }, + { label: 'Arabic', text: 'مرحبا بالعالم', language: 'ar', family: 'Noto Naskh Arabic' }, + { + label: 'Mixed scripts', + text: 'OpenPencil · 你好 · مرحبا', + language: 'en', + family: 'Noto Sans CJK SC' + } ] - store.graph.createNode('FRAME', pageId, { - name: 'CJK rendering visual backdrop', - x: 64, - y: 52, - width: 720, - height: 312, - cornerRadius: 20, - fills: [ - { type: 'SOLID', color: { r: 0.97, g: 0.98, b: 1, a: 1 }, visible: true, opacity: 1 } - ], - strokes: [ - { - color: { r: 0.78, g: 0.84, b: 0.95, a: 1 }, - weight: 1, - visible: true, - opacity: 1, - align: 'INSIDE' - } - ] - }) - - for (const [index, line] of lines.entries()) { - const y = 84 + index * 64 + const sampleIds = samples.map((sample, index) => { + const y = 70 + index * 62 store.graph.createNode('TEXT', pageId, { - name: `${line.label} label`, - x: 96, - y, - width: 210, + name: `${sample.label} label`, + x: 88, + y: y + 4, + width: 220, height: 28, - text: line.label, + text: sample.label, fontFamily: 'Inter', - fontSize: 17, + fontSize: 16, fontWeight: 600, fills: [ { type: 'SOLID', color: { r: 0.25, g: 0.32, b: 0.45, a: 1 }, visible: true, opacity: 1 } ] }) - store.graph.createNode('TEXT', pageId, { - name: `${line.label} sample`, - x: 328, - y: y - 4, - width: 360, - height: 42, - text: line.text, - fontFamily: 'Inter', - fontSize: 32, - textAutoResize: 'HEIGHT', + return store.graph.createNode('TEXT', pageId, { + name: `${sample.label} sample`, + x: 330, + y, + width: 430, + height: 44, + text: sample.text, + textLanguage: sample.language, + fontFamily: sample.family, + fontSize: 30, + textAutoResize: 'NONE', + styleRuns: + sample.label === 'Mixed scripts' + ? [ + { + start: sample.text.indexOf('مرحبا'), + length: 'مرحبا'.length, + style: { fontFamily: 'Noto Naskh Arabic', textLanguage: 'ar' } + } + ] + : [], fills: [ { type: 'SOLID', color: { r: 0.04, g: 0.06, b: 0.12, a: 1 }, visible: true, opacity: 1 } ] + }).id + }) + + fontManager.blockNodesUntilFontsResolve(sampleIds) + const blockedBeforeFonts = sampleIds.every((id) => fontManager.isNodeBlocked(id)) + const [cjk, arabic] = await Promise.all([ + fetch('/tests/fixtures/fonts/NotoSansCJK-Test.otf').then((response) => + response.arrayBuffer() + ), + fetch('/tests/fixtures/fonts/NotoNaskhArabic-Regular.ttf').then((response) => + response.arrayBuffer() + ) + ]) + fontManager.markLoaded('Noto Sans CJK SC', 'Regular', cjk) + fontManager.markLoaded('Noto Naskh Arabic', 'Regular', arabic) + fontManager.setCJKFallbackFamily('Noto Sans CJK SC') + fontManager.setArabicFallbackFamily('Noto Naskh Arabic') + + await store.loadFontsForNodes(sampleIds) + fontManager.unblockNodes(sampleIds) + for (const id of sampleIds) { + const node = store.graph.getNode(id) + if (node?.type === 'TEXT') store.graph.updateNode(id, { text: node.text }) + } + store.clearSelection() + store.renderer.invalidateAllPictures() + store.requestRender() + store.renderer.renderFromEditorState( + store.state, + store.graph, + store.textEditor, + window.innerWidth, + window.innerHeight, + false, + 'full' + ) + const pageNode = store.graph.getNode(pageId) + const image = await store.renderExportImage(pageNode?.childIds ?? [], 2, 'PNG') + if (!image) throw new Error('First-paint export failed') + return { + blockedBeforeFonts, + image: Array.from(image), + readiness: sampleIds.map((id) => { + const node = store.graph.getNode(id) + return { + name: node?.name, + state: node ? store.renderer?.nodeFontReadiness(node) : 'missing' + } + }), + unblockedAfterFonts: sampleIds.every((id) => !fontManager.isNodeBlocked(id)) + } + }) + + const { image, ...state } = result + expect(state).toEqual({ + blockedBeforeFonts: true, + readiness: [ + { name: 'Simplified Chinese sample', state: 'ready' }, + { name: 'Traditional Chinese sample', state: 'ready' }, + { name: 'Japanese sample', state: 'ready' }, + { name: 'Korean sample', state: 'ready' }, + { name: 'Arabic sample', state: 'ready' }, + { name: 'Mixed scripts sample', state: 'ready' } + ], + unblockedAfterFonts: true + }) + expect(Buffer.from(image)).toMatchSnapshot('international-text-first-paint.png') +}) + +test('typed and tool-created text repaint with the same resolved fallbacks', async ({ page }) => { + const canvas = await openEditor(page) + + const ids = await page.evaluate(async () => { + const store = window.openPencil?.getStore?.() + if (!store) throw new Error('OpenPencil store not initialized') + const pageId = store.state.currentPageId + + const labels = ['Tool-created', 'Interactively typed'] + for (const [index, label] of labels.entries()) { + store.graph.createNode('TEXT', pageId, { + name: `${label} label`, + x: 88, + y: 112 + index * 92, + width: 190, + height: 28, + text: label, + fontFamily: 'Inter', + fontSize: 16, + fontWeight: 600, + fills: [ + { type: 'SOLID', color: { r: 0.25, g: 0.32, b: 0.45, a: 1 }, visible: true, opacity: 1 } + ] }) } - await store.loadFontsForNodes(store.graph.getPages().flatMap((page) => page.childIds)) - store.clearSelection() - store.requestRender() - - return { - loaded: { - noto: fontManager.isStyleLoaded('Noto Sans SC', 'Regular'), - appleGothic: fontManager.isStyleLoaded('AppleGothic', 'Regular') - }, - fallbacks: fontManager.getCJKFallbackFamilies() + const common = { + width: 450, + height: 52, + textLanguage: 'zh-Hans', + fontFamily: 'Inter', + fontSize: 30, + textAutoResize: 'NONE' as const, + fills: [ + { + type: 'SOLID' as const, + color: { r: 0.04, g: 0.06, b: 0.12, a: 1 }, + visible: true, + opacity: 1 + } + ] } + const tool = store.graph.createNode('TEXT', pageId, { + ...common, + name: 'Tool-created mixed script', + x: 300, + y: 104, + text: 'OpenPencil · 你好 · مرحبا' + }) + const typed = store.graph.createNode('TEXT', pageId, { + ...common, + name: 'Interactively typed mixed script', + x: 300, + y: 196, + text: '' + }) + const nodeIds = [tool.id, typed.id] + const fontModuleUrl = performance + .getEntriesByType('resource') + .map((entry) => entry.name) + .find((url) => url.includes('/packages/core/src/text/fonts.ts')) + if (!fontModuleUrl) throw new Error('Active font manager module not found') + const { fontManager } = (await import(/* @vite-ignore */ fontModuleUrl)) as { + fontManager: FontManager + } + fontManager.blockNodesUntilFontsResolve(nodeIds) + store.select([typed.id]) + store.startTextEditing(typed.id) + store.requestRender() + return { nodeIds, toolId: tool.id, typedId: typed.id } }) - expect(smoke.loaded).toEqual({ noto: true, appleGothic: true }) - expect(smoke.fallbacks).toEqual(expect.arrayContaining(['Noto Sans SC', 'AppleGothic'])) - await editor.canvas.waitForRender() - await expectCanvas('cjk-fallback-text-rendering') + await page.locator('textarea[aria-hidden="true"]').fill('OpenPencil · 你好 · مرحبا') + await page.evaluate(() => { + const store = window.openPencil?.getStore?.() + if (!store?.renderer) throw new Error('OpenPencil renderer not initialized') + store.renderer.invalidateAllPictures() + store.renderer.renderFromEditorState( + store.state, + store.graph, + store.textEditor, + window.innerWidth, + window.innerHeight, + false, + 'full' + ) + }) + await canvas.waitForRender() + const pending = await page.evaluate(async (nodeIds) => { + const fontModuleUrl = performance + .getEntriesByType('resource') + .map((entry) => entry.name) + .find((url) => url.includes('/packages/core/src/text/fonts.ts')) + if (!fontModuleUrl) throw new Error('Active font manager module not found') + const { fontManager } = (await import(/* @vite-ignore */ fontModuleUrl)) as { + fontManager: FontManager + } + return nodeIds.every((id) => fontManager.isNodeBlocked(id)) + }, ids.nodeIds) + expect(pending).toBe(true) + await expectCanvas(canvas, 'interactive-font-fallback-pending') + + const resolved = await page.evaluate(async ({ nodeIds, toolId, typedId }) => { + const store = window.openPencil?.getStore?.() + if (!store?.renderer) throw new Error('OpenPencil renderer not initialized') + const fontModuleUrl = performance + .getEntriesByType('resource') + .map((entry) => entry.name) + .find((url) => url.includes('/packages/core/src/text/fonts.ts')) + if (!fontModuleUrl) throw new Error('Active font manager module not found') + const { fontManager } = (await import(/* @vite-ignore */ fontModuleUrl)) as { + fontManager: FontManager + } + const [cjk, arabic] = await Promise.all([ + fetch('/tests/fixtures/fonts/NotoSansCJK-Test.otf').then((response) => + response.arrayBuffer() + ), + fetch('/tests/fixtures/fonts/NotoNaskhArabic-Regular.ttf').then((response) => + response.arrayBuffer() + ) + ]) + fontManager.markLoaded('Noto Sans CJK SC', 'Regular', cjk) + fontManager.markLoaded('Noto Naskh Arabic', 'Regular', arabic) + fontManager.setCJKFallbackFamily('Noto Sans CJK SC') + fontManager.setArabicFallbackFamily('Noto Naskh Arabic') + store.commitTextEdit() + await store.loadFontsForNodes(nodeIds) + fontManager.unblockNodes(nodeIds) + for (const id of nodeIds) { + const node = store.graph.getNode(id) + if (node?.type === 'TEXT') store.graph.updateNode(id, { text: node.text }) + } + store.clearSelection() + store.renderer.invalidateAllPictures() + store.requestRender() + store.renderer.renderFromEditorState( + store.state, + store.graph, + store.textEditor, + window.innerWidth, + window.innerHeight, + false, + 'full' + ) + + const tool = store.graph.getNode(toolId) + const typed = store.graph.getNode(typedId) + const pageNode = store.graph.getNode(store.state.currentPageId) + const image = await store.renderExportImage(pageNode?.childIds ?? [], 2, 'PNG') + if (!image) throw new Error('Interactive export failed') + return { + image: Array.from(image), + textsMatch: tool?.type === 'TEXT' && typed?.type === 'TEXT' && tool.text === typed.text, + toolReady: tool ? store.renderer.isNodeFontLoaded(tool) : false, + typedReady: typed ? store.renderer.isNodeFontLoaded(typed) : false, + unblocked: nodeIds.every((id) => !fontManager.isNodeBlocked(id)) + } + }, ids) + + const { image, ...state } = resolved + expect(state).toEqual({ textsMatch: true, toolReady: true, typedReady: true, unblocked: true }) + expect(Buffer.from(image)).toMatchSnapshot('interactive-font-fallback-resolved.png') }) diff --git a/tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/cjk-fallback-text-rendering-openpencil-darwin.png b/tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/cjk-fallback-text-rendering-openpencil-darwin.png deleted file mode 100644 index 71844438eccdd87c1c66fad0db65a0c3128ae756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52342 zcmeFZXH?VM_AVT^U8LARrHKkCRYeFLm5m4ph&1W26_6T=^b)pGLM#{2c;3yl2Anrp7P=9=@F&rIku4Q0kNSIML0aOw~6N4o1{JOsi5QTg+sj%V@;_T-mKb2SQUf17v{YxI?bUeq0z zxvF;YBVXM8msPi~UQoe6p-}awALrrfqI`T>(U++KE&D{1=da4RYe2e}A3- z!~9=g3i15+O9{_!@rH8%PPpnZgrv*j!%8Plj>K^kS-Urzq2}y z@xW29(H&cfR)Jx;i|uf(Nwr?egrS>jdX<~)aM6XqB5grvOFy_nQe;5j)~)xyuJepz zE5y(w*!U0FPHN3LaOuItsNc!WjJD81vpi=C%Xww+RmFLTb>ydgN0AXE${hCmw^6nG z>WS?J!E94(auuq4d3LC+Q)*4{w;@%5nLfUbr%*8vrlDqk=OO`TQVAO-)X2C84cA^H zuy8Tlw~Oh|*E;p?1_W|#|5Sh-`V+}?NeuyNRLB zrJw~UU4^$&SdJErqw~yL{(k$r%FSg=qT6QZ4!B|~eZ;A=wEB)=xifBP^(1vC--0qx zA-p8+aFcu-JlOV9tv*$p-Q(xXBdE=n@mi(TDyx`3AOVR_A;yjNLhtnoaiwq?bs~9e z)o>6tSmt;r=G|rFifN6%_0*(ax$WRmPp(GTW3U*{6i)}(Ma8o3z(z{=h3>Jx~u*hNA?xi4kXQ!iD+fnDH$E>}eG zwvl_$i&8nE`?jCPQMwwAT~u%ceb+ixCtg?B@Om+^rg~?kKp&c|HhzL}IqAbm@Q|co z1yRVj!m6bZ>$5!6x;Q40or-4xa;2XN$g58Ac|BX3`aK+^bFAo^zQ!`xqX zz}guvih^67@ir)iuD!l4n|A7d?g2(m5FOEa0jvW_VgyzP2@p8Xr5yJm z6l!=EM%RDyvAV(b`PJT`)gY8qxlBbNHxLJ+!#-u9=5h*uF+TO&?l5%Jd|XL z=douDkWWYPkKapwH4Yu^$Co)~9RLX---o7K*w)j}f_14n2hnF3cjx*-K?46^6&_2Y zFZ7_Hr|&<*O#Mxl1q)0lsPp)K1CCWa<8VTZEDBBUxnI-o{Q#+4TE%fw;fr-?Ds6Bu zWWZG(|M%y(UI(^ZrR(E5q|kfZJ@~9AypfFBUYh+AJOvpv^#r$A2A;h77z`1x^cZ5i zU9l>=W;B`=?sB;9SFiiWoKqMA_vSJmaT*-2n5pxX3THnRa5%z^|GaofaKgwA_{4I% zVaFF{5HK;wz~w2e$DV2DxawcklSDmFKeCwLg@{pW)nGDbh$*|>I%p!(umioP0-%jL|mwpKCRL zm;+HY=;F|*M`@8dd2x`-;H}>+rcYj7Z)60^naBd6+YtX5KNxgi-{Sob%sKM?@U-c5S z%XSssED`OzIpo?czd8_2wsPEWXxH}N%)V=cyqFO1w@NWsrf#|=M)&_v&{BTRel zkz0Zc(O!VMQh$)G*G+s-JHmN2B&RHYia}`F8r=%R0 zg5liz2i!FBt9hoATf|Gci(W6v-V6#x1^mQsF~QA0;;P##?&4&5n+n-yuK#8!=^`(#@vYA_k# zOOV55uZQmEw&E>1v_+|;$d_vUu9FA6X8T<o6XA5PmTD*&f5y7!RW{^Izgyva*}RP@6^Alai2R z@nY?ep(&$|KAc;{rkT*fW;?p?Ig<&~Yfr&&$g+6g?UO@zCU{ zfShBStU~H>A*p^#>QFSaKv6@ZD+r(b!+VvCkv(`iagWmJ6%-V-9#9h&U*Nm4=xkxp zKVN|HGhcziXfHS-fSDZh%E49LH%23CL^J%Bq4tS)yqe!CwJ#4AjOQpWPvKJrE43Ok zG#}QJZujFwJna^NYp8l-JDzPl9Id&ci*&@6&74N;;xRR1=5Eo=j4;a9_WlkLfpl7A zFJ%S3q?1bF(X$^aPz(8L%_!9WsbMMrzJvD=_=@m$e3UfQ=|Py-UQ6$85oVY)jN3}S zZ#kb>&OS3|rOpnYisrsGC7S_PwXk^7ACIZ=Zfq_nw;f&@LYah+9LPJ1afv8a>!ArH zF{>^!jI-;L^l_xaV7C77!=w8{c^)HsIUwoKk)Fz+Y~h)+y7qlq3b>_2iDhMuQwPlQ zeh-LTDUbc|G`%AK?6c%W>&+r|DfF*TGSndkHc`04Sn{A9bY-HvT5(*DvhSuqnWZN1 z-`q_0SR4^C_4^Ie6gH?3Fy(R{MIF^#sj+Dv0{hYg^Soy=2?FYT7iaZHi! z{VZfsYujfBE5sFhZ4SMyC@^|M7%8;FyZiaL32*$7nTk+Sn@p91^^WHaIgFHLy0y=n zNSDjFnd6E>Zun2fESBQC%t|a~;+zNKfN*QJ-I@l)CR981Lz!fy_qc-J>@`V1grBv-%8Dug?d$FZA$je*Yl0w{3vgoB0weIGj~J zoRj3!smtbX-lUXZ<6%GgK^Jq-nBI^35Amvku@VVJ)sw#w+3si znu73`;MDL&5OxCd>zNEE$mYv>b6NU2@RVb0Lx zN_Oswp4(%H=O5lee|<;YYl3rm?&iok8?_W}v_Uy$7{1l74E!X#lejJ2qe!mdCe=_}mz>MP3OT57E%=matF$1L)lu?z5Ki@o4AR%Y#)%SfzPv;v2!{vF!I=_xs%*p zq&fYpOIQ5n=I2S^i1EtQIB$G4VG$i#M}V5o;sSGf^IJ8os4Vb~UhsZ|EV;)FkQ~K7`xPu`dtS+>TFi zCBJX)3XgXUYkjD#o*=QGfZvE7Ji)kR;Uf25iTxZmx3`N=eOIO2%~76PoX(?OTBD58+ks*yQ+m>k zvdfnxlU%_1~M&FH%Q{QL$y7AfUOxSMxbJe4AZ@ zf-#dz_AYA_m9*=*O#%D9;`QQ(Yy_NlqS4t$@)BmR{|k-MY<*oaN=6w+8Pr1R>mk#H zIUf5{GtlVz^`+vk*36vV?lG%;Prpd|H#EH}mo`4c-P5uz00;hPo;;}*BDdbLo534s zG_@U~px{sX9o;Rv+H{2CQ)bsMko)D6_aum0qqSUNRZ}0vF>b_hSdof!vKKi3=D(LU zk?cWO+JgyGfS*)912;q5MFv84^UTN#J*65E@rrc^Ig!TL9KR&91H$J@OKg?8=*Oh< z8^6APe01we$GLH|L3BoqQ; z7)E|sN3UH(w~2FWk7S`K${Slslh?@}FEq)M!EEjg5xeAN?ALD7LpdaMhi&dx0Fu-6 z`9!&E_4f^5^88NCPLzeS!v3X+!BNeRBJ#BS{i{%45M?^IU+6|BAFE@QBl~X11V0YH z>bt{^VEW;_5gKn2v(vs$+uJH79-R8Uz36J)ZRGn1M>uy;bT%iQSOrA~Gjg7PJ~$oq zGsEZwms?ALE_-zZVolZaXM1DByDjKtzhSvn{RmYyNQ;VBiS$y$ctl7B2i=q1k~?xI zcIL*gS*@2{eftF_b_Qgz6YO;;yQ2Nx8EALsaVqW9?>ZJvV_*8Vmj}ZHT9xn!w>h6K6^F&%@|ly5nP}~})KGoAsPWbF z%g>ooIG6jY?Z$i?rKF^w#;z*oAw=PcYAb9O!DRAufSJaXEuR;YIVxnIg=^h%uJg&r zC?`31AG7g|L(Gc-r}c~FSfIp@UG{NM+a z*E(Cl7h)5yL{{C%tvq+5C@gnu5mGU;JDuG7D=kHxPmR>l;Rr4pVa_q6hRJH*?V3~NYT1f^uQ!MP)Zp-G4O0AI zk0F29jDmO$tssYB6UlLCF7{|MnTyjT!XR(c(k81&=L+j}QpPDya?<8BWH&SB3AHAk zX}K@QZ$3EQ^o_eM#8?$1zZxb5Mo0}El@A>1v1erCN_OHO3 z_uRy9e*U@rH2i$J0OwoD)hCj1$-Z>O{o(_8Qvcd!7utLz&A^o{9BxStZ0*;^zYhdsDoaN}r{?)}3wbJvovn|#xz2x=4 zLh(Vl`F=!OB2lW;R^s*OMzI*i6<>Joc%2eK3<^bBwr8sta7)(A+6)rP&VTtreyaLG}4JU zOvBgS@SphhQ;@Vet}io_8uG%H)AqC~;sW=}#$cw<+=jr@7Z|hYkQ`*-4N#2%$ieC^ z_=F5w%adx6`UNR+u=R=KYLB?kZfXzv@S@BL{goE)1V!bbxjMX>ud0i7J+!Uy>anaW zj^hio zz(kuyxp=R(>FJDv;A^OdeO*SkFR>EB*$UBH$<|bgs%;uq9KzG1{NX$A#xD8oCBZJ@ z*xoa7cS#?u(Vzf~Bi4oKyM}xFN4LD3f0hU`4 zkT2<(dIg3cW@9V@Y2kJ#bGRopvlT;~`BFm+eg)rczrdE_VbyrT^47Ghsx7z9MD^4u z=%2)6buzdD7P;mM;;l`5GY_G#QQ4-@3^QWmopfJ51{>$%h|LOT4)ci@G8_DAvV2Q0 zBL(?f)!*V7QX_>3UoHhHNBtF8SNBQ~gYw zv_yjA>Ao{Td2bHzp<3nV5OFgSN4X^4{Q55AC}@fA^}xFB1~ws?1l>+=>)t4eq_0;% z`U6PEk7q@uSV561L-_{L+*m*OM2XK%DikjyyU-iddowd!v*6Piwcd9cXPS)im)T;cIS?)RWT+#Pp`g?|15XH zFzczTZ+-E@VN*A)+t9N|oHQIYp1alfH_n$CgkK1YFMJwj7cZ?R3mdUvmfh_No-s=x z{a`PW{7Yp=yE_6QwO`=r^~>OBx^0d@|KnDd_l?Sa>y2*91EFoV`1$!K)~4LXvx|%> zJ%1(x&?K2MWLMM;02$3b{0`jfpo>QJeY1OQ7F+%1U??6Ikrowmr+~P7=3|v_nXcFS z%Uwy=F3>0V{VTxQ1_rJG8U!_E2@zM27|Q|)5pq}_QWQH9e`jsuu7vgEG)RK2Dlqad zO_ywuBCF}SJxKld^*y3ar-si=pZ#vcUm3FRJ<4L`r>jA#`+%1`c}f`355JL z*G65tAyDWP5vUf^lv)4#B;rFn$c;SLKI7%7U-MKK6g=vqZc-RExO!xA?q2p7iP( zy)hzN%~WW4{5cmV@!t6rlQ~^AX~EIgpJ~-pd-#*Eb09mxP@B>HCrH92c)_C1 ziSp%VdoQail)2h=M?7cOX~w=(1D@|{4ihy#JBqZYwFYn6>S_Ug1-u}@#Mbsta)rfb zcYfI)in;_Mebr^{O5|FqnQYmc(YB$2Bn0$L&+$eLqW_&fF5l*Wn-KqbR49?#SqmIl z{S|)XJr|9dE6+Dg(FH`#q;yE1yB_1qtEBgA(FCGm}cJ2d67?PZ!kPqy5IJ0A?R2jeaMrxg&M z>i{Eg>`9yKDb?hZ*o_g>kmGsVh?OD}1_sZ!!NEaQ7m}H(YqaLQd#AyY{bSWzWqJ9R ze1?a0Kv1F7jX(d?wyTu!;f*BEgr4|c7Y52irG zGf~D{?mS$GjW$DU57JPg+rFmW&ZfWzeOt2ql@KDb(|*B}*59ZZ^j@yKajAS6?nYBc zf9JLuosHhx#h7-rww}(j8+N#iP!P_*SnP$u!vXYXv!wTR)0H^i_7J#({^paxNreDZ zKaNjMEu(EP(>N4tyvKNg1TXdB7JeIdbz|<>kgHMhH$e%Pyn(x?^iz2}Fqi$Kchj%s zKEqs+4&6{8I>~3u1#(T2^cqDuIL_yIx-|w1r`J+Sy|0fJ_c2+td1^qaYSDOk{e zfLq?Vc!WpO-d~ZKKQwF0eivAR!%1)7y}%T47oTIj$#BN~CeeLm#2r*Jlyvc>+!&G_ zjY6BAV@db77>MlVlvn`yA<}WsmvHcNhEKz&?6p!K3c!ihwMlIuYr7zP^O;UqUtj7N zg<%g+G{*5%VBM*5LH(0oc8WIQXwBa4%WwKm;(TakOh55F8va}BZ2v-}f$R5kB^ilL zCL>7i0_HoDd>4+!KOP+U)PM3U$ZG+<){+O`$GeJZCc7^xDSGd$lsNYf<%rFrlWE>d z2R%1L6-2qb_G6-%Vlg31W_v?5@fhpZukA)Tyj)T3##?1>nkKpma1P>4{e{u@e1b2#46rFA zODAui#K9ML^|M+U8Csgd5m!yMcv16h3?8eKo4;|i*s{P%C@psJ=Qa#mwFkxcy6T2! zo2X9R_oqe=Pj1Ba%HSwd4Inn8t>Ih3R+6E!F$~>OH%tkWnT>n+)b;7g+v~QHmo#N5 zF2<;&y>kHEmo;GIpAAFQQujS5A~p$9b{3wO_CgV8n^*VImN46CB zkTuNT%$UkvJvYDOFp1s)^OO)1i&(ic;SrWv# zY8<-_0E`z|8@L;fi(_wzWvL5Rb?PKCCG@%^Jb|mZH>o{aWT)5IA+b*&Pv;iKP?RF# zUUMnUYp$2yR6yjZ!)Wekh=S7|$RM7ox2qE08^un1bzdh^XMK>=6@6wpKvN+1%7=b1 zpwxubBvW0I|DKqbU@!FQz5))J5wRKCW?xsU#cP~S{V=^k`i0_(L@Xp)4+IVKF4`ove`yMCKESEthwf zT#+e>OGqLujI9%hSn`2dQG{2?`)cW?RYc9+7$|0n7t~n1J3*riYRc{)TAAfHiUvw{ zn@&@_eMvLJ8JUNUB4us2f9BrH->Gua@b&)TZ9=cq+r~`Bud?)`Ib3o5p5gDU_6OqPPvH z#L{Zz9y#g0k{>R%pzwfF%3qP?-v&qkh|7eH{4Qn`^O(%l-ONxtE#KRYw%( zGNW8rZQpgk+m17>vHzLq zv>Qa~BOmhb6liC6Z6Jqla${>vmcJW6BKcwm<3FMg4x||3@;!ajNAU9n$5+S7R)A%k z_M-!Cxg)}nZ@#|sc3aLMlrjw3s=9Qn)tcC68e6oVpGq3naIYgg- zY|_=vE;Iu85s-kHX9aKHzI~r7=GsbF+nJs0yb7gb_LRT$De^iX`*gl=GMD&%1Pdr9kO$joe_V#x=CWXPGvKY- z$Kx9V8&9TpUF@s>5ppun=Ja2S>B}x0MnC(_=$06;ROEgPGVoyT@`2P#!nkUee81HV zk)Q;GKmL4Fbn-DpTx8t9E_H7!Qj>-&| zF{wS5aab6!JqCyx19whZ_X)d_jfT|Qc*>KJfup_`G9%skZNmg#RLcU0?AwL_kCcW? zYl8MQYts%mhxX!STn+dBq{T8ZtP%O7M9 z2l;RVGVeL?&&K!&u}uS5kDA?S8%F@X4y=i*kNxh}TC~E;k(#RLFN9p;r{7+q76S9z zn?IG7by~~Os)xOAqC-d0ExKa^w{YtTdpGL-71yzVR^F|roW_ai0u$y1V{gLRGC9f@ z>92T@d4WFtXS1@kb5C3&pYIWOpKC6#Cq0X!=KR>vI#YZoSIIlTV6hGE5E$uuI>#;@ zsDGY|yJo8_ALX*h4@rI2{Q7W$zdiZD3==I@zJzGE%nPfNlb(2IIh-#UJky0{C*2_z z`ZWAdx|Am@GIi&}#}AG8xY~J1hl!Q-%t;B~xP;KdQ#nxy5NX68pYn@-G+B~WkU)tp z`E8*XGCRj8VmBi7*Q}dL@l|)-p&1pN;MY8Bp#t&u96V)@)h!Q; zNd1Ml&L1tZ@hyAua&LVYJ58QGSKvWyl_3up&uvt&WC!VIcFZKrdhrx8v|Fl5Gqe7# zjY8%1!BVTPPUFu@CqXLPf}SE{7GZCSb>zf*nd3$6xej&F@`0|4C@qf(z1!O{my%yV zGk)4wR$Go)0A19&Zeh>q@*5A8eVF`y@%X}&h`I@564JK6)3}Q+fs;MpMWylO*j;)#vea@S^UnIY@RS zxiZ!BjhLLzIYluA2Yq6TyVs`9saZL@BIPhU^@_&xPKY8oVk4f6dhhp^7?RZAR@Ia4XF7CkhyYiHzKzgyRvvb;)waa1F z2kLoM5lkP^ayS1(&F#iMs8k#(GKunf7Zmw=Fe_=90aBQ;Ko)7 zHWN`CPc36_4_}-6jwp;_7Ivw^jR56cRj~MLsr*(y_Po11^@&+qQyqQI&rrweAWptH zO!c3Jm!kN#f?F6z!;4boqJpIv~?l3%vS`WAQB{nVNQQqK2aMI3sSqHZ?3GYKH`O@9UQ3q#1)U zPBSK4|Gi+&QR%-L6&3mC9?Vju`gzWyEp|34S5k+#asQgZR27@YqGI(HoooncdwBc~ zghTWmenL*Q-nLadOX)*o#;;L}yjOA4FK;ycNGH4(_?CapW`XsmedWcw;j9H(_0^E)t;!%8h@lk*x<@ZJ(VE4-5#gKMg!rN*WJo6 zA%c@%^yL?12KvaCEKa=!^l6UO4cv#1f27v_(kTb>On=oOu-B&zEesIrLG1G0?E(fV{v(H~QskMs$;2VS77R=H(?QrxLFG zw}xJ0i~6mX>#wcCU9P&-wV1Z*9~Nc52Lns^H1~)liFHP|djr?;?x}iAwEVr_FZnig z^6Cyxza>rJkqkr}q$fY+a%EmFy50|oyzFISs3!UA$4joRj$F$+-Ar$)BYh_S_;{iC zc&Ma!6+>R{T`e;6nMK&xslnDGA(tzEovqBDQPb8-xZ%Pq=5WaS8#snK2l+G@<&FD< z54y9x5I!xlW&YrDsWkfELB`x@6MDCO0-J0|7CtC8I z4l6m|uYp62Lp0*yaqFM`xap|&p42VoyRJGHGW@EqS~LWP0^gK9n`loTDotAK>DRfqJz|}v2Aw4Tg*QraqLV27CjQ!o* zPvDe8CC_{iItU+(@wTJC?;8EEn8Bu`6XmDv%VX~yw>LIV95qec+IioAyj3FSuwmX8 z!$Ns%i5NIMUB0{g0leQNBfB?gp_&jLQ8L|!YfCh%*fN{C#hW-~G*J09DlES_B1p#{ z$foj-r8M6KGIJ0g{bK8@UAV=7h?4r^^g1WM=l-$Q*pXF9En^E0Nj0#+h5ive@d;S# zz&c{Zd0avAb?m@d$v?YdWzcKI&sPL|Uxy3!$>lbTK2d9$S)LZ6o7#g;OJKTbuXz|c z+SxhY4yt~%nX#QI9#@ULJR`>@mF8@WvwtviJ&56)X0&~WHGSH@n99$9rls7j4&LfU zT(l1~5|XB>{^ibHY1_@2=P9Ty$OEO07sa;^IC~1{JZK$e;1dFl&ca)Spde=$?FP_y&%zN+iWy<8g29M7t$#GOAa zwFrWT%mT=>3#S8ezEFDUT-CNrN368gcCkfc+^o?SC`{VGZ_~D`34Z*O{;yUTb`I7^ z1QVI&Jiq}2Ih`7MqWB@Di*r1S;50g(2iqUh1niLuaR@(Z?6@O}CnHiTe0vtt%-_zI z>hoB~9Z>$@4$a8`Yuh4kp%RD^He;`6=kTU3Q=eEn6Rm2i-Lb*5OMw(1T*IY*cs;*V z|1i((sP)_bwq%W~RXq3dx#!i3tb~+%4({iJabzIq0y1)#Tn#@Y_HjjXL@oo|MAdFKrm(g+JUVS}oT_i~C4_5tiv z?!6j3F7M}OiDl13zdd{h!~oE|f&v3pwYjUMOZ_^>!U5~|u0ai8ssWC2`$&bJPK}96 z{qN9dtEP6hPAimcu{8UenVIh041iD1V!EpDBdo*b|}SzAyBd5;epgH^|^|T^$F@1`2e8z_~11;mC)1Aa5lt}8i7D`Vw8goaF5k#RLhvRR5M97prPJh4^o96d$K1%}GE zZkyJ)`%!1F03>;=c(E=RTkS5nS#}{&+#za=zg)y?y(E?==`2H%1dOtJ^d-h?zlBxE zkOXL>A#rnpLpQPWU1l3Khy!`k2xdv&A{=G!N99}&p0CUXiv~P#C9XceMMXQ4bj@V6mY@Yf3qD5Ft%F-Mj`G63V!|j4Qv>isOHUZP?eaP z;lBDA)xEpcupXHt>9Dw=yDVXU2LDw%M4~Y`x$m1ne+M-||IVbMWlHNp-LJtQ(K$@* z!Rp}D^`TsoJR`h2U>q#svW+$yiFr@Q&s1n4Q09vzu~T}?%9pwn0VA$~S8_UF3RH~! zoErw*mZ1f>O5Wt|!jv($m7e(~f4QZhoD2WhehZ+U=-R@!+Ge3qDaeRQX!Vx#CTKn zxMk?~omf%dTVfP-W7oN$(s_|YSxYN4d4(a`v1+PDN@`J?6r3mK+?IqPH{P&0s!W@w z-X&tl-w_f0WY_J*b zM=aigO0#6tiq#O}3XYrY6Z|4S`hER1d+*Eo{DCNZIW;zK*s`|Vozkp@+rxBhK}V1< zTsM3_5)(=B&`}{-cAVt6B(Aasiit1^84Ku)D~s0rfgWt4MprJu+J_v>Xaql-1WS8g zYFT$=m0f35_?4s>8b_S2Bzge0Gqo%tD5cNTN&rWOnjWZZ2pJkS4I@A$kBHl@2H>=` zCnvZ6EDA>XtMoGe|fk#JI-9LD>5aq&XfVO9d+ z;0NVayYg>Gw<~%2$$&4GfHAjeO#uW{mtoqzt09E-TRr!LA1#U(7GG@f`HJaYj1^=K z)HnP$s}*n+Za$~|h6=H}fJjLJg~Xq3r;K{{`i5dpX86D7j$|8cm?5if%Svc_yiOBNTi zQ+q1Z!;q{PEI1r{HUQmfb6!+sRZNID0E(t|xWYluW0Okho*m2^Zdv_0&R&X>22CIt z_^=CES(&NBA1j@Hht{~dxL9==?C$o9vRzzxuUY^r5~1^iEvAB;i{t?Tu+q8iw44HU z%7ZW8q4(gF7{+n5YL&20jT&=lPP-r~iT^kx>?Ukn^KUF5sld2~8VavLn@^Qg`gIc; z5Y*{UCYkmE4vuH}b$l_$ zyr}G(F3l?=NZs~%Kx)uPk;aiXI<;`Fj1U+0il>j{HGw z!+U$7q`+KR5}l1`$01>62YQml48bY#Y4Gm%GaVo+>gq^ODttK!Sm`Pq42ViMx?A`E@C%EY^O)NGGblc0EpE!#OgcwHHD*Y088$ak%G zvz`$P+>tfKHvL1dwi}_w)W6R)&JfujRd0r*kdhQ4{5H&pf3}CQ7VHjV_)WbQQA&hd zBV>fa?vQn&xF5fZ{B}kyDE`vsV3W~rJRQg@k`?*Cq=XQiMhsDNpyTV$SpL8)v+C6w z0DS+TACfGe=1=kN#;j@hmbkVQCb+W2Z~s<<^QFJz-(o4u7%_$p(RdhA1QTN?AedH+=4{3 zR|>YTBC7AIfW+Qxb)Fr^Ub{iS5<95XE`wtwC+ad4qU!;3lXtMM9bHoUL_^sV?~4V`I~op#>oL|t!v)bfDpA>fdfOIPd(g#Yu;t33QNGcgw$miwVKqJPFFa7L|( zjufx=_!bsrbtH_Tw5!2ZOhv6G08a_nzynW+3kmXe^+PeQwvOHiwkCm~oa9EV-jz|< zbwgLZUjG0(_S{w{5*70e%<@QY?9Uu2(^-noYG-ZvrDizX3cc9_|;x+hdkI7XFW9Tv25j|!cGE8 z&-5SKCDVDX@w6G|VC1Us9q#tb^4b8cs z#{X#Mx7Z0;(ro3zf{$JA#w(Op7@ypv@cL7+Vt7&VMDi=9v7haFtXCjVn~6K6Ka@5V zZKgrlO-v?c8|bMtMh)e*O!^*G=BT@6+yI&fKTdjDqkh3mO75k!4kX#uH&`O!GugeL zZys;*^M2zvkug=_q512ACgxyPY=+KD(CijTkttusrfUQ4M}LK|kkHc<^d3D78U8GP z#}MW1(Bzyx;S95hx%1)PM*#S)UntacxI%~4{p)h6fR$DrPV% z=C2--gAwa+fk~1gY<1k@Vo1Pb)#|g0pjf(d{pjMtgI0Si%Sk@54aaf4V2HRILPhR% zzAwJm*RWjnzQ9J7a4g9gg(?rTFS^7jVe>}k$_JU~BxDS#!LvKnBR4PUzT;LXb7UnR z&&&r4N>7ordF=T!&(GVVW&tfG!YyCszUonHV=L@tAphgrIeBrVz2IjexGp+s4Zuhp zR-S9JC$`fvrE;gqfxEKhZBntlA0wZfJH!}uH2*NS4Z!-44nWU_#urIpf%Jj3{D>gLSiZD6Xor-{Ay1&}^mQ!e9G0I~W!ikD zp2KyWdQsM_tOUwWBDabFTD#M%_&%BsBe5@t!2Ga@KB_xV?H*A73^Ppxd0#HKO5PiLrHegdqqzpFF!-=o1Gmk?kPE)hdn2Ht>Ja<1#6kB(iK7$duM#_Wtj?hO-d#}5JY^d;>o;8I{6Cd%f1WHYJv zjAyBb0d|kiMyOwvn++m5`T~?{ePE}s2Zwh}NVr{_E?<_ov~w=-&%kLPs1& zr+e0ggybEtHP)I-8E9c6iEx1|5cK$h)?h&>GssPjjm+K{JPy zTLIvIG1vO3fo!s$Y%gk+I$$a%J%_m`XPOF9QhJxC>ln6pQ>Cc$V?-zyR+_IJ{3d{L zsiWffkW$A}wC7@5L(KZ$K5rITbf40Xp8NJa=D!U1BfH^prWBClFiFj1M72L}$@+7^ zZE2qLR7!tPmEQ706kiSB`+2+$#DoP#{79pCrUc{!pjzq|VS9e~B`uieIC`e|ka8^c z$`@U0Hyh3P^=*5MHo{5JuwU*s9-GErecrqs ze^@&eEcKQYruf-+DDqx>la+ahZRb8QWRbUMXqv54?dOVhl(y)5#d?HZ7J=xhL7uwl z7gKt6JA@4-I-iOtnoAUZ$#KwRA0ZwREaQcZ#NC=F`ZX63L;S}Y^Rxv5B6DkNs_59$ za-2u7hyOgT$QShPiB-$(tpvXE0=y?f(5QQ;7?cUXOK#r6mM_zvf-q&v0j>F+)}9inPFoJZ~q znuJ+}N6)FVBZGDF9hO;D)SjRT@U_r{QdU-!1890pLcTs<@j)L>-o!*yZQtNWjL0mq zklb-FT3nTiRgKl>s{=*xLNLKw4y*Pfd%SFC=>XyS5{|lOyerb!tsn-)r@%u2Z_J=heNZ9_^z@{q&- z7P$1gO|3gLH}4-xqeW|9?E2CUd?SR#KExMV-VK6&?mk>`G2n(fp}_A6os%BO)8ARd zZ|fXq%>X`NEb1U^Y79Hy6kT5{~lALtqCE(~k@&cR_2S^Y+0RPAi@Ixaw zs~a`|q*+UOXJ!h}3T!pkuuutcFdb;&z72tLe`zMln zTzB{0DOO3ib~Ush{84FXvWnaul9K+QuQ7>Pfo#81n4(u`N^iP8!mH7Hm5GWIt+^U; z(-btN(N?FF5!E1wrtEKdI*hH*+s_@ANg1xEu8M+&r|i_@0m3E<$l=ZEW zN~ol<#8i@GD?+xRY$3+JGg?r|k~Qm;T}auP86!f-z7Au?*!SHGGiK)Z8t>2N_Pc(6 zT-SBG{=UBFziv6NIp=j=%kw-R_vho(U3TS?7}FCG+NOT2Qg2uXOEhEN54(WR8>!uc z87i~eCV%tL%jqymxCU9*67h#O#rBwR1^}ula1qNiM+=_7Nq?leysOrMW+5u`K&I`M z(^#o$n8Eo}0I+#X(Gj(%SdS`hu;V5U7>xe=X3!g+LijgXME}l00(V^CIt%dnZ3$x7 zHAO&XHeW%l3nboQ*)$)1zCBG2YDl-V^6-F&qi&M@mP_FQaamDqnug){Nt zAkiCsx#0Em4}22D@j6uz$pl5P=2fna-Ie|gb1Rpfz$>w$?F8?%YTvLr-47Npxj#~w zf%NuZg5vmot>}>_z-ftpvw>T@-pJgqFL=CBN6Tj0tkk=Kl_fe09Ya3@c+_%A0W6?l zo5wuBjey$xCEBVp_ot`SY2?N|s?~pU0XvqE8pxR3Bde=7uZWSua*l8n9lL1LzLs32 zZ$lL*Z|Oju%<*mD-IL>_`)L)KQ9mEh$|n|5_#yds1*l9cX6cY@#X)SJ`A3r^q(3Vn znkO#Fgw1yXELw#(iq=DsDFcXBgtf0rGG%@^UD@)H{1<|ZFWmruo`8APwi*-zE$fE#G>dO;?}!tS zLnqEoFoic)k#s5?Y{VsRS(ycD*|2hVsrvY#^cMiFiP3~GOkA&7?>L>9X-r)GMS4xl zb8EY@_xtZPqPN_$l2%6$Oi|PGFNYTs#y}V_c>o`_su~eR*nXB5<)h5{6h5 zQ>~%>nwO&gZ5zm35W}cs+~>pw4yzIUW`CR|rzEd8beJOQWmT7}tdLtP?{os)t>_0f zbp@uSpH>%I_!)QnUG{(x?68%zd_%K9C%K@~3jQ0pUL&%6Lb$VtSpGB#>*LnAUk1-*eer}jEekMZqT1s_& zR9yCwXyNn9*OM&ABp|q+;;j|r1?;MbYk#d(Ss>5Z;Jt%94rR?l9%YYEJ z(yq0(Xnn<|#*$3b_qQeqpj?_r%1+$I2ZvN4tDLV*$YU3Z7O3 zx>3F_0wlIK_t_f^jV!$C7yM;OPXt4)&JXQKLdm_Xacv6$xpMLh!R|Izm~(DGdW}az zIqhlKlonU&hxj&K;$@0FdQ2&_c>O}SzvJxtA8`NUDj##@* zNgFZ9bJi05Z_~h^D9*l36VtQ=RkF0Az}0ieoj>np;Zjel{U_(j1Oy=Voxr!pStYHr z!UUAUei*)*(ukHh7&5@}O7M2rj<%M7z$IT0v#l!~wUvJwR>qwBbIcY0Or=AL{<6%4 z*^7sqN2zxv8>^?pGYn#?jC)*XdS6du(yS^i@jrZ^0e_Y>oDtd&p+>A+9V|#Q&Ow+{V?ir_dH`mt= zi09||Je!+9i3@HcxyHN4N0)IbF=#(sa?pIk@$Kj6mb z6AzzgNU=+{-KqrHAsO~R$M$4T#U`GC-77z22z^`AT*k#AS|((yu39}VuBqwpY1iwm zwu|L;8esvDhj65Gz~jZqyiv_m4Y`tQ9)V-ge)muO&iH51II?Cw?PuIcwjBEHUpl+@ zKYH;v8~bgoXoZ27a}z~&MhhUXI0+!T>mpi0?<-Vd5p8&p#J%>nr)cdw< zTpS&3^u^T5(%n1aBHMR&wY)=eGOb>_>&$=K<8QEz$P?grW|EQ?Qn2w(wK}Vr{6WL9 z{-8ecw6vhk(7xvPy5$L1(PWp&7bo{fFn5U&%liPk!2MGe1>v$D|0Bsr=I=ShC%`A3 ziEe0SeUeXvMo(Z${>Ir+z%@RLyHRk1HCLnZ0O)CzdaUJwYP@K+r0eyO?$g)S zs{ejM>KWFfK(LJB>gv`6jzueXsQ z&X@G0T~t2=g$Y7;ff_kq02Dpai?i7`&Wgv*tbq4k4daIq;bCEcp`hN{^8`gl=()mi zgYiqDD!Kkw<`wfh*m{jFn6~t4m@Xv-$>fKcU1!~y+&31P#0f^4K^vmnvLpk=`TFQX#6!Sjn;kAHHqno>&! zY>0j4nik6B^|@0Fn^6Aw_5|lS{*bipVi{rd< zMg;U_wdGh12m+5Mwnyi}ixvQVctxQ(NFySU$K{gqr)$oGDpONm#WL$wU0wD!iJ4$M z)zQb!u0+qLNn9*h+VpjtaNIC$6~t{rmDt)YO)__L(Jd z${=`-IdSs|v92#-4~t^rV;K^#0MQG4(P#t5>a6f{LJ8B^_px79F0o^0R!$E-DZ+{3 z58EYN$KTC56L_oSEPk|ub-we<(|h^ZicR0mUq5If<@9#CcLw5--<{*N`la*n8NfSL zuD)s#k&E^V^Ox`so5^hktdGme>#1p-%RRR{6QTSoZ&=N+$=R@;Sy{_Tdi)Rl6s$1d zUZ06^9Wk?F6QoAUX0BX2?(~_JZZa5u^(71?a=~gJS(L8N*j1aFK7xl-{K#4r`yRYg zA8!x5AhSDxy z9#MK*tAM|=+~mf)pMMy60`YK@9=%vW1EdVfY?Rc zEHzn(+gTYu4c>HA@l;sTb*hlL|7%6Y1CrAx{hUb~G^oqv+$UshRhwwtseOTUvx0tm zE!h4X5Y6WFakP$$vbm2{|Kl5b7IRGOlzf+TpIW7eu)z8wHNRB`uR@EeP5D!zBf zDPtz>4TAfRV6{)(ufsuM$)c4T8A{?A>V_R};VkI$^-q561xok_{(lq*H$6Q3TkIduqLnfi z<9R{ zd1H7I`hFR`Dk>@592|+B<3M;GQY4F|h9QEV$34ZxhdnH(Zbp z-}{B>8P(r0>;&t*s-Ub`4)&*WGU&I(O6ncfg|a;n0narz@1fLop{Xj@bx`er8|Qx8 zNy!$}m6sXKzYi19kGAyGj({}iCx-f+!=FgZbC%uy_gq0ZYoX8+66~njd1jk3o4xo9 z>`Po4XLPpS#Z)y4bzdL-aj>M;CUNWtqTVd_Bl!yZ?j_FM2IEgw|BsQ(xr)EKBhl<5 zr4~hkI7h){F-0GcW@%EUb5?mg@!Z~yiMF5meYI3RXZ6u4tChCJZaAxSfDLDEHkcK4o_3`~74TIRp57()B3=yv*3;we zUcR%#=SN@mWt+Ts-!j?WJr39KE6HU^uI4v#v`KY+4@bT&g ztp1u@(-KXwe#k>t256`*;eqHQ?o^G4SNSCRZg$G37NE;foDWZzK-|9fUq7r4^A7$Z zbw1mUrX!SCMSap4l5$_fU#liN0YuAsSL^U|}w(7QU>&Kj~ypeI+uw!V_ zGGjtfT)(m<&VwWF!hr}bSc3DDXbV=)Mmj}vQRsDr{5uYcI3&O#+bsgeO}h8G$peVPltPa2rsK3!vZ&nMXLoX6`4 z&B^5Xih_rq^%WK^{`B-v-X%@2EA{!pj+%ChY%s0byq>fdaMvdN3e*cDRw8k3~>Tc0U}d*QhGR?`w{?s zvnD)6XCz&pkN27y$vVrwH4!tN%&esj#_q&lkvbI7MAzmjc+ES(YRvgozW$>}#~ypw zNa2JSX?T>+J~lNRSP`xVs16Ftvp%NLojUKpu|pr@N|e*-bRlL zlrt16+{3C?gJK7LSK#eDdDHS&_KMf-3Sd(U9C3l4>SwmoLE{Dwd}6F$iGYd=F|ZT` z%{79dcDwHwbua50o+$i38J`AbHtPR37r^#E&Zw*o`yZ>=-Cp?rHW=J`G4g&SmK&zQ z^43o1TwlJxp512H;Ac7&xcPUND zFT4FS1VQSKbLfZUniuJ}W`kNipOzqHwH>?}%Cp0)a$_;hA))Xo2Ds3IoB=2>EH)X4 zV5e^8>gO96PXig1u?^R0Y6W$Sj5=}X4^WNVtY-@_0IRlYEe}^W@HVfs^)aT}{iWCM zjuEu=Jb-t;n_%tejgr7gX>KUbtclA}dto30q%_3fm4z0xjYN)kDU&Kdi#op*8Y){F z$T5){!sE~FxWTIZ`!WXzrr2lepz0CiD`xON%|KFsN}fyFmi@O!ciky4EQc|wj-|L} ziopbG8RI_KCW0<@8mZ0;2TY_l@NZmoZ9SzmE%o#|sNpSuVU!(*_lR%oY%~!DN=$Oj zQUue9SWuMOlqOtZ>-B63^?zabdK-c4dI357({lKjA#uGm)TYBIc4(S`y>$(MOFD>+ zxl?V)r?#tt{Ww^Fjt;j{82~~`D~v0g0(-&@)1dB;J_&?G(f$ugE)wzLw~tQ_Zxsn3 zZ=_`9)s5Cf_~!gDy$50@^nCPR{x~Q}dODf7V{@<12;~Fc8vbrgzvu^wHhujcR?--s z__9t_Nr56&38u$#U2yA%VSmEwtdePI`RN5cS6A2QMjUXVOui-!BUJfyKt-4x{e}Az zfy-FMDoB410oPZMJj%iFUhjejFcV0%+GS4{N ze5o+r%V5b20S>^8iio8#Y|~mJKNJHinjQ5XuSJ~OP;KDs!4m&INDU<{uV?CH6^Xi; zoEGp*_fVG~W#I&P#JA5B5`M_+I1b+u2Q%ecC~z}O1#TgTc^Y;Qz;4YWHfVWf2Lh2@ z=>-(6vWncRvgN>nW_f320C2b(yDky`f#{y3a|)E>H<=7U1-@-3IbeuX=?H-nJeQ?K zhOh{P{rLaJ*d#7@txIcCC+U&dvIOR6Oc6#IHNh!zhE|t3V3S=AGFO`kH7*pO20R?R zEI7dgc~d~2{#&WX_Ne~M-lT6EfUnKU#sZlT=KpIHB=27i{$OlCrj%BTR@I9Y$$2g! zr{&QAVrp3Yrj>k3q-JR?Mti0YZ8YAXVF>0}hh{2S+q4=u=sr|Cp1%eMBqj)#E*~;JQk(o zr&f6XgRJ!~qX0c(RTe<&H#ChN0A{O>`xWm_115|+lpnkK*KM2csA9lvX4>i;Fs%^r zvo|e%h9sDUaw%8&4MaTiA&pIT+=99+4u!9pu>5e(bZwSO+Vy8QPQ zK)N1h93ayAZ57MlJVk&l+XUupzay7vtt>??e#bC7^h>EBh23a@L8mp{+SDy}{11nA zA!d|i(Pv#B8VJlOYk={iOKa?aEiWG%5b0MB5~-Rc*;-?Lpu|9NW`bePm{L*?9mwv` z-a85gBXhB9I;JATTy85qxk&wfJ(u}nG{-^2I0`C#aqxHr3(SgP^CqKJT!7TkwoFAz zPfXRUM^ZlO>BvzQdX(L0kz=DilPzUEwo<3v*IvE)BChFc38aDM5F~AaCM}T0CmpK9 z4PE|=i1gdcq0nWWaIhciRea)R0S)_)-wwYHsJmuY7~%Kj!{*~Nl#z2)wgn)T1xKy| zz%N@$?Yn>g$5>uOGDk15(}2V~1Hh;U-NdJq??O6?lbs*S=lkJToD2ud-CO_|We-5* zV4WH)aO_ZT&AbF}?RqPOD+x&3$J@DZ*y zXMCo524J>;FFJKCY`tB>A-ESI*#NSXO?;NzmEw zLqWv?pxiQAB{Uc~M+!ZrzfDm_pJm1$*8hPqjVb{~W@57WStG z{pkFuGMw3wt|}4e!-N*0e7%8TPfX*AYPV;ZwZkuo81DVmfO?RDKRfOw9QvDzLtuG~ z|E8f{fXzJ*wg1bF8ihGBAS;s#LMB-W>8evcz}ZFDAt5rPsqxm6_nVzA-;@?cxg2Ir z4;Y4{l|5L~DTITs?=}zD&gkfm^R#yq0akxB@d9!CZmL3+Xd3VZ?Mu&+U`YdTA_HI; zFM)Mm8Os|g3||gPDH^Qf1N^)+;tdOpD?Ci@#59IBV1P7XQthw*=Xt^vvnuz7xhOOs z&^>X*_31dJ;NZvCl5R*nZ^WN!;}-f0(5ms^V>UVM3OgGmJarNZ(E#CY z?f;&fGGmaFdi!XB>y+G+21U4k*h2U(%kU_~Pw0p`YPIpH5#t=$?=&6uvTw(LocO!T z(Y~V3Wj91DJ~2t(zW%xeZu9o0C|mXi0CCYiHJN*_h;%IJ6p|&wZWbD!q!^TBhwB*v zOYsMLM^{{cF%4}Kc*~mlKXcjc{iZKrq;2n0ucl^QVcP*56XX_j{JnoGK@nGdBm|j2 zey)>%E%u=1Ri{&3wpYHEIbdbJ)5=`~o&z1`P;R2`)R)4&^%1nW`eRrC;hgvQXC~^U zwaZ22xd@XCelfQdTZp6Vr&Bhe2sIGn?I6fY`;?cewYRpQcF_bcjVg}GD-^BaeJ3A1 zc`|eP2-UkFx8pLbpu4(5xjND>SHtLdk;lOB=H8Qzs|F`OWtZXqc@*IqtNZX$R%zD8 z!=&i}2C3t!jJkMCqSe#@#czGi!R9*UJT00jP9$=(%?RxIT+?Fq)O+mhHN{ksw&slH z7X5tYWH(&WjOyKe@XbMp7o|{CQhK{TTg#-I$E4hejyDV(tXUyvVqX%vKWz}oQ!WMq zIyFRr)(1BmF)HX%{xQ+D;xR56Ce0W%Q47bXVN{HCsN{ES8!Zb)d~NVZw?lF*g>IHD z>(?3<&d6wMvj*Yrg-~apfy#<>5+xNeWtSyfK0mXtwJ}|zSIP*<_Un8VqjprJdg80K zj?$)P2c^Wxtl}KnNAHJ9D3`X5KSd3D#TX$VAV49)JKpm&Dp%RJsc=K%pR~Utskn9s zd;GprAHs>7Exe#5h)i{Q@xpuaOi$#ko!b3jOIz!&heZOdd`O#cOu#B1gVv(szwp|5 z@_2pdB!N7^6ZznwZ<-1ZTT6Go=%|ld(ZV*NQODnf?~QYXB1TzBV(>;qM3bf?g_SzJ z-LcPt`mHL7K8CbZe_c{j@KA`Hx3|1TT`Ts zr~`iSx3)UN;N$7ZOV#UXVrn9RoimT6mpt)(eX_KAINZ)jn=LmRFFIOtz7hR?m_Oxx z0p*jPWwz|yzpUI??g21fl8T80$_Vp;uW#R+Y_OsC<>@;0n8u3I(##wYpN$3_F@TJt z_aOZd&%XM5*0)27M}9mTKi6uYnTR$dRX9~|rY&qRXp6E|E9AqY){)S}MF_sLb0tv+ z_BlC4uOqJPl@oUzyO3M2C>oCAMm`` zQcli4Re}E5%I_hTqKBj#lhcJwYOe1ajr!m=yhG=flAyl(iX(atk6A{@IS)Q6!5)jl zl_=}>-SZ;`%GJczBHa2!t0v$Wfy-YvP9qbWi_|0$wgW6O=V{GgN4_RJMF zCUq#-7UO#VnVVUa{U#Jao+lmFRB~s|iVOP;U22LHQnII)2n4!sE(;q|x5j9~OGEve zi$(sfJC)a}DijzqD%^_hOcWn9HZ5Q+Z?Pd@Wi(#TRxkm>j@=pAN#Em5YV$H%+g=Wd zT=+fCjr6QLo`ZDt*Nb6Ruw6S8puxj`ti;yrhMz(38`HwR7GG1Syh)Ox{s30!u~RcE z0d;%7?1fGUZ9(>uVgQp}qlmFBQu4Uhc?^8AfYgo>{`36@QQ6NbrzuikbBr_LR#Juk zMq_xg6n%^W4C7K_Mn!MW$80?R;3Q6Fmek@sfa^lpt0r1W-;9X)6^qUTx(<`L?04 zw0Q?Uyay$^J)+%lxIBQShCRxhBCLE>izm`*yB8MTu69h5?8Jo=&Ae4;j!d`7A_WEW zwF{wy9U^htu6SIZ=)G=6s&6^<>%f;shv4Jl+DqH>3yIUAMQKGn!$F1)WyQ<$;-Oxn zDT&i&*Qbj!%}bYGvX43kuUOUT9YJbil_XfBCig@};D-KiX$BV2SA-m1*?GDMj8Vf> zA;f@*X9sUUAR~bT>{ViARavu>j!m|<+)2f7Pbx_*p1Ga^Pw}uB-ugM5@BFUVkg-7_ z)n!^C8If?zSZPdzqA&2he#1nsl+S<1%FlQHnw5sG2GPmdI-$>%+-F9^6}w$8<{@|f zA~36)Im;Exu>t+JN*Mi$%a~`s z9C7?zzy6lM;vpE$+MqusMc%dgE8B0;3e(-vnK{!H%q+zHzG=RNyp#(hXCH4npZZ@T z&2`S^rzpE=`oMqKdJM-KKQc!Bh_^sRS+kUpKe3*azml|!9mS7$2_REBQ`d6OakWgn zfuqK2R^m2(l?{xXt~nwtqU=9|B2cUOI=BRUm;TDsP%_N3Y!jprYhg?e)oy9VRGGB7 zcaIqbd$myD>_*=@0khS#44Z1~e zlSX@M-+X|1-tY|$?B7-4a+X6~U}D|f`zWB#r1s`-^bvv&^lkG}h?ZN7mC1bR30vKK zKE3r5b~p{)P#y7nY@U1qOu4AQuT^PdA8R@I<<5F-YA}VKuGVa$@KG|f@mbN4L%vY9?Ol@0;v<&ZSUjpn8 zO6#=OEY{x}%+!jPI36YZ%Etuc27`lOvBNhb@^w2-&JAZma+5E7LX6q{&9-OjW2qKp$2$XEa7~yqS6Tsa|=lrUH-I`c;M9 z((_gK@^PILrC~S2i;je^|D2R?lZM;b1=i2&C{7pXsYRSl^NPv7qs4UYQY=dHTjYgq zn~{VVMe8t32MooeSrdI2{vzLASXwe}4ri!^@BD6(dJ0wzD6PRGY+3TUIK6xw#zS>? zb8{n1_UOosX(X8LWFQ$!A>`pBaM@hDPDP??Kdwkw_Qn*rZf}1aHeh0C9-c&Noj3e$ zno1e@lo5huzIM||4bpsho-PyWU>`dUk)Bm8A?>Ryc|HVlg$hrpFYQV8vUEP{RUK%=8iu8HpbFq?dCto2aSbwmwYQ zNGgHJkC!Vhb4S*=_Vow}rTS?mIXAXy?5?2XcDQ-<> z8o~iD8$ezE{i7lZc4L)v@`&5quNZ(k42^Jxa-CVD8m7ATOW5GSRuC#;Rx?4G3=ik@ zTe!&>Wf#{`df}>}p|O{3pz@nej}%RY>6=XC-TP0ZMH zBZyOOS?f{8p1H16jkLo|VPzcg6g%7P!mB{I*~pI~`j(A4UMRYkZS9_u5KDPVwt zIHdnBJ|k`OVYIs>624!(Wq7lB**yXOoZ}9~=}=|iTZz#52}fRhQ{`zVftu>p+S%YS zG1hcs*9M9TRUa38McOmuI=`-|6G1~&4T^MD?G7WxnW zWw_TKMY!n9ihmu-n3~*UJf`R~J6Sb-d9D7~l2ubAuCDH=>8J2l^LMxUI7FOe1C{GX z;(unjcn)ve>p2&|Lb<=c;B2F1MqggohtBB1TJ1pcqOL%_AV*A}&*~s`O{C2?aWWkpsF-pB7VcBh zg~5cn2ch^8_a9}USU}KV)}dOq+d_XN9F;Vmp86OsRWRrICoT^16mMYJaqIl>3V8|^ zT~mR3;7$tprPSN0%(Z8^cjxlJ2KaiT)T;gy`?KNRXLSXce-J)7o;!;2RW*xnhx zAIIjQ$p%z88_v0koKz=d3i`*4JAYbz22y4noxs%vd$Mt9QtA(WGUc7kJHq6Y?*7>VXk_ zPO2*I1BZ}T{A_IRfQo-%Mw;Cv9DY^@P6!9tNW&yoDnR zWA+CEFTIg+$nM8k%Q8}6%l!OTb#bwx8k5Ge7#~RDwTzvQNsxQ6KK)n@q?NgS070z> zJ`bh5L33x_FLpOCZ7MckwRl_0P7`c-I`0a6U$!p57-CowL0LdcZEUSBSoL8sUrsR4=NAVi2e8JfV1B#Y0(Ft=guC^-q zHy9?KQQr$5InQTSU*#PnvvH3jbMt zi8q?IX1j0Q!A5ig4b6OKVQ2{&3o^Di3`~wfPTHW4Ra2j8s?4`>XxwC9G9sv5edJb( znTz$g^ix`IJkNN(sgIT)wg-$F#N4xg&;4*LXit#wyeWN(vx z`mNf%kp1Lviyi?qCR8-n_+1qe9`Q1&^lEJXfX?H`!90C8cgdXGldNVef;o$HO_-;W zl;+d77p09}DBN<-t+W2SN6n6H03oH~_w$4~RY$x3AGa`%n_L3gy>+O^a*Schqa;ex zDfZ|X4%?aGIjlWvZR$P5YVbkuCL|XY!C5$;RAo5fc+-?@-1#Z*54A%b`W+0cFt-)&q~h5V9)<4E1X?I(rL7C|?&_E2`-uAfR> z(gqZS|HiS-kn4_W)7 ziPxLYcC`|i&r|AN>yoQ2vz3m|-aVB5lu>8<7*^>hJvdy3*f3oRYwSI5%aC3CGTWiU zeXfpVLXyDimoas}z7Pwy)GS8_qgcb}Vk&@>Hu9HrO~Kcozt5Xgcf%De8|%{DYMVJq z(&#c_rst|@k6Nx`%?(a-iD*%KqLmiYpatpI$_hPvxj&(%Dd*`19h6SK;QE$0>Z>dC z$n)R6e*CxX8AS9Q+&VfZ%n~cRj>9 zEYLj36iR8(4Rl?DnO)kfcvMY;LkrFjMhJuIVkf0KN8r$jkv{YBUHqMQ;4>TBMp#tR z_e4L{B{9)&!5Rn9Y{BBk((W%kZxG{p-zW;deREc&{R%qYIBdo`q4yD@epq*7>Z?Np zQm$&HEa5APYErdIWIX+XdgL{4m%rO=p9S!5oq^i1Yf~VS{6;+(GYxbF`de>;_NlZ% zbpI?)Xh~rck~gyjCr~@eepJIre;wXW@u5IQw?45Za<3tZabZ8wL!WP^edEWX7i%}U z&C3cBut)M_Iia$0I~5%5=T5a3#$#T%RpzH__z%RQ@0q17#dAud_JlrEn(l7pAY#h< z?Ra+*3;uj`J;Oa@Mwi`XFCU44ae40rgFNEdD(Js(uuL$}Gw-7Q>FK-i64fu2{VDkj2uFKV)F1qY%)gInyqLoXf%JFiiQ$cjps3BFo z;MPqu%k5EYUiucx!qgr4^eMWd-`ER@gksR_Q3?!oTfd z!H{92W}bZy!8e0fnHYv{sSEkh)EfVscHf^Z_~qZdXv$4Ac_ohXhV6%l>*9)j^0T!5 z;qSPSvx}HQEUwU(wx`TMl+6p$nNn@D#9P>x*AA|eZ365+Y@YI8-KWfSe_5Hl(Muy; z;ytkZ@=KNN*TSWZ$=FrjdaWU__Hyo_beI@o)DGXlpm+;yJE|Y-8u87DupY_9eQD+P zi8CkEs@oK+G7|iRqVLJa?AX}WIc%h-A^@r z2~qfjR|~M<`hF_2{&lHU4i1GnkrHra#}rv6v7}ft%-#rl1m> zz?eidr z+dYCFfC=>P@rgAKc8{~H%iKNg-Tj{iK}Y=mvkyNX`AnIgXZm)$nVoH>EilLsWZ#Hv zh2t=}P-JK4y||%m!cmc%8_NvOsUKf~P_uh{f$y`pJlfS{z?f{rX6IDAoSj*+H#0K> zPEs9#tI69qF`#ZSX*tTdyGtZk&s0H@WU$;ZbtGWEX`K;e!jhAqo7_y=mrJw@|2BGC z>`?7S477|$g+i&;OJdCF41^!Z=KlA;gTa4?nk-dP+{~$gOJaOA(|C}vPyF{}wzzX_ zdLF>#eh}Nfec#Z~(6c$2xYAMr!zKOa4|v7c^voimKj(OmjG~ALKFEQIqn?S%lRlEQ@zqcM9mp$Bq)7KQ=XR15%w8; z)lp!A2%r@LD-IZH3HN@yN$>|#xku+#dRCSEzf(Er;jy5+^s@PW#F`8f6F3sG5Upn% zNv}n9NG7?y2^WBv$u1A&Pn&^w@KJcm@#VKM2`5<#x^!ujU#EZ(%)%>IP6e$);Ws8IW=_oGARWZ*u>-By!ZgJf`I|)Qb^Uvd zk3KZ+`)1MFUkDyQWeH(n=h@t=LS{nwFd3-H2tz3SuPSqEdkF+$B^m4BlNuC|YSi@2 z5cN@hfS62%&VFau2tQq$!T#O0c`#7LCsjSUBs>S7YJ$@0&7G?9QOl9jVR}y#$89+?Hkb(oL5ImB?GlFPq*F{Apvv zoxnSu!CzGlVi|oog03rpDhDd?ZbX%V9csuzSHi8z1w*X4^AgTB(^gSIp@uwyoFr^# zs*iWbZN63E#v$60JRl?G-i+77#o!y-(*s(HjCaCmgDy>)N~@K5G#!FNpPobDdT6j0 zaovJk$dX7NhYEq9lXct{0Sm&@L$ySpp))t8lS?!%Xr5lrLwGNP!G}UMr<*L-%*LZi zO2kv0x0;|k5x?FbiD4Cs6B#;kHgneIj61&IgTsYH>aPywvKp~(1QW0oFpXuU>78T* z_pTdaJv=+KwL#*mf|?vRyXX>70{wDDi7|Bl)!}&Bql2g)v9Otr_It zN2R@PF)!f#2iyc8TmlL={xcn!;`YWC@)BR}Xu=Jts-ZXRAwCMT4VZB> zqHCoFwj7R>H23N2_^#C3bX6);u2qE)FSPBzA7e*6>OZ;K#MbznJ^! zoU$*;gh-(vwK|;el|HLB{yv<0oqkF(@tcpO8YHdTU~@JODwnRI4CkC z%$Y7P{?6k1bojVy4+>Sno#>ngIQci?A!&*GM}d+jj`X#`2JEx=($A9Ig?=FX+3sx?QfVp$VP(T zyQIWpr9jyUA7QM4w#F*(pdYkurISYl)BS(H%bfw~OkPd%U1>a=b zDF<`LcopK0!n{_6l+;noujU2=i<)cV4@A6cl}Tp+5SS5csJQi|8Fy?&$ZG_7VAP`f z_bS|b#164Olu%^Cd`T)Se>pPL-CYX4SiZ4PZ3{WyAm}&oE0}MoWZJ39cHq0;%{{q1 zb_!a|!XCDi!$oKP`yMxI6UiI*jK>@d`n`G#%r>;zVcNdNyU|dP@`<2XZZLF5@#Zk3 zV?pvf*zP>1Zj5Jy1$SG~qLx-x3Wt}`(n_?^`be>cy(^y|pF1LrX8y9q&5ChL(OA3% zE^(z`P0H@Yi^2ZBO%@+e{Ia25L&Uryus&W=$V(a)oke_NtF~%1-PMrx6v#o9E*WWo zzGl9j}|r>5Zaxrs?h^vPZIMLbsQ=5k4Eo z4+`C|CZbzGzg|-mIy;{hbHUw<8%#nOj#`HS_=AV#o+H%EgmR|<^?oyq%_1neUj}+f z^asCYSi|AlBX(iw(|ucljyI0DdBD7oO7rJ-Q zSi0#ti2N|XHL7^(vLUd zk;1aqQ7b}xfpfEc4m@nse{NKrkvY|P&Bv%zy1%HjC+AM-lKqSR06*H-xAQp=_4<_s zBaz3iSqoAwU-;oCPt?@ZmT*&3Q;`9q2-%x8TQTISq8*F2ArBl5L;fu1?d;}Bt`Tef zKv?WAG=Vec18_L@oQ0U!g;91GdTkLA@CB7W0w!YQEvol`hSylY=r2BGM?UNteOx54 zX@e)?Pa&2>o%bsdy>=UVs7t~>73A7iWCO=0&_&MA9{A#@6=fEKSH3L05F^DVZN|tlY^r^q(7F)=Kc@ z3f_u6(**My37_?vrq5CJvW3hlk8B`^;KS9E+oggvet(Z2ydb8yI+#bK5@cs*!8Bd| zn$?=4Nsw4p0C612NU8c|!`s7_uzp`W=x(6mr;*mm7BD;q}Cg| zZ(p+7Y}rsWLqF%rQ}^kSFp-BH1lQp)qFKd^ehw5-fB>J?wBEB-LlfEVfYT@7#I^(Rm*xp4#t#3=XK@mY^0^WqzCNq7@U#Ph!Cnl<{qF9%|y137|| zc-LSzl9w;Y{)3LmH1D%Z_W8)j3UW0MeK<10^NWYzL3H3oWx z94Z1!GxO=rToo5y-?`ZsDpJkVs=%kFF}91~Ge@eZzs~`!G3BLsq31Ft(GEplBLk_U-;Wa!zXYJnIFW2ttiv4FAYwPnm3wdG=6(H2Vqf;@3Fb48o+L?{lrz>U z*6R&PbTmashJybT?l<{PC1#MVQW~=lSVPCK zq;5BXn_0Gq)p>zB!@Z9*d{6smRvS&1|A;$c9Gl)~IH&A4wOwT^v1!XWn>s;H5AFe@ z?%e5ARvG_4%HfAM62NC1U8v1!*0v%bqKuqoh$>-*-~M!CY^(S!Re=Bl{_-VyMQOTb zidQDO7`?tz!Wc+4A6fUfAHmOd6wzypI)8!F2kzVW9j&WFhgDY-^R?b111bzPWzM*jBfC)Ii)?vCa3}sB( zVz+vFbc$M0BnfTBSe+HTtc7*5{G5l5K_I?AhE zP|@ZIVNy-lbJQBSO>1SWhgL~E&bgpNa3hBjJ)0+q8We5k3njz7V2o-Cojh-BQhMl=JgNf*e0V zM5UHB{CoNLd_FShwXEKwt#DmQ$p@LnzX&#Z5Wp>BsR4eT&6^xfN*iCA?J9+Cy3Y{N zg3K}onPO?2($L zpU6|{;J8GBB*L|>vdeE-e)e6Sp6^p5DtJ5g-;NGj_FL&{peUht-s{izJHD{zci-vK zGbi}IbaPuj9;$_Ni#$9ls}?TE7%Su&L}g8GoBsryCNE}sJVIdt$0@)8=Xmr1y-Mt! zhhNxNh;P%Xe_zdIjPaXFfThKXp;faY1IhMn6X|!VKSp}+#RA(IjQZq?1Wy|gsAFK~ zl>ogUH!Um8VJ-%fKi{#^SI>J_SBd=RO}(M+Yk+bfw+8pCOKS;2Z~AY}U3hbVQ(wBiiNs^|Fppz47pS@@*H!`O;GC&zDL;=6HC z-#L&x`*hK7)jsS1Ut9&lP13<3wI4ogXz0A@!MYYebDjo2@kiSTId4h*VA(@lx!j)S z6L>c`wua&6Jw06^eP!s*L933@mHAFsn{{G-1(l_|vOQtt^sdcltR@jd-!}>;&C9wK zbvB;WD=loV+E{b;!Hw7Po*|^}YDm-5%2_`8G+b*yR*7xEdDguJ@q;V7ZPpUzye(%Q@x6jDvJzWsCSA-9*XR0qAcP5}1iOl9aMGGD=T zn9oP0*0$r;|7!1A1EJd5|DN#F>ayZb&D`G8N+0b!VozzbU4F*t=<28`hWR<=+pbo{$kJUbMEn(6c{h20JZZ3?N!)S?|>d>id_d zG%sI0da;4=GoJlnt%?@^bR^9Yq=MU-rvkIW$trK<*H{H(N6cT962F|>?>Cc(3Zh>L zCCn+K0w|&8t6Rh+GBwgqmeOg`kdhsV2pzmdOt>%4c`m%&?_&FvL`zXS3Bp& z?dVx;V`AKe(&FEnhEA4R7vhIt{E2u%5!~44C!!aUMdhW{-Y>FMcpX~F-OxS9l1ZY< z1z-B9u)#xLW9bxKCuz>tt|kB9thuYY&pJ8RpMA0TMeX0=NuI%5CUVXSSq1!zx1-g+ z;ac0?9M)z2Nw#B$p_;`%1~f}Q$@ex{w~ahj6!(Ho3}FSBpSkz!#QWXijzyn%-hqoV zmR%8?_}PGqRVp_F8JMC51D~jKq|Rl%P?kg3S>I3qIJgs=z|8339AA)YiX<2lnZ&dMQ;?*cOIGsHCs%NDOo{(PU+LR<(1`;JLRax+w({p^jG)fIutvlig_hz zUM-Y}wZvX?ZFbw8W~J%6?Ng4i^>eKafgUr~_BEU!Ht+GE^x=E6VUldNqL;t5`qbf! zRmBwDMROiZt`kCCK(%Ox?H~QFUuhjwoedQ!{90<2Iv+Z;oYleqb@LrG*foVE1=X&`b_-|6 z{2i7r@gtPjuQX@+sCYeP+s6*kYz`&4UctYpGOdOwLmaImYN=@1s~O1Qb2E%q-3wn{ zM@95Wl7QK6Mfp%u=5XQt-m)u!Z1LJTiwvabUWQCWIQNs5>>6=k(JR0{ZO))>B^YMe z6Kxkv%7yaW`O})6(LM6@RvU1eXLLbnw@%Hl_3i91FpN+2biDp?27t$(^0d1ZTHRgQoIqZblM;hD zf5K8P$feM(!wS>SLFFw1Ykf!f7#47Pi4UTDB)z z%2);dX!m>wS?W)zYfFvk9&@M(XC>nNmf1fuj)`ljX*Dl2m3X-DErSz=bFf4*MvZl8 zS!U2PY@9o@fMf3=E5Q1JjVY)yWHP4Ba+1{y$kH17QrmyS^aPnv&ClrMyq=X{N{Ol& zJ5RrJO*foVRi%73J6Ds@Vs{RoZ0P^+k$7Fcp1xT9 z<%?1J+hoW*qXNi0(s|%#>-6NZ{hV%Fd`_r#d{cXpGua9~sU4HzF7(!!P$SHDh|mV` z5T>u?H8{n4zX2aLZ#A=qme>_dyjxl3CHnj0;*i+QR#b{ralZnd!~bIMR3)s^oR5}e zCAI-SIYDG>pwP4Pog%cedP#qT0hE5A(&E>UGi{y28oacQq;dzBDf^i#qwS(oG1mw4 z|02Vp6k-U=&8cz8eb>5|%y>)Zs>XXRmFvq}+220!afp}Jlz#oj{^5;h<@W7Wnae1a zV7CtiJgw{L4T}T6tr_$5F&n~sh>MJJ+%|NZEQI1cj5&y#oh1aqH}L-kDDRp4rpyrA z203%BGRo?1*sYCZ%zE&P0$T@uZU5_?bt3!<;WsK%ED)@ljKBiY-*68e$;FxCECuG}P0p$tH^0Hb!W`$&49&s5h&cj@x+^PwSS zuK887`tLhm?a1;3t5Vk!|9~sWZji!+7963ou~7Zhw{FB<{Z~2eo#KfH7QK6WoaY@l zrJM72md#0; z7YeB+S7r6m-VV!G9pZ*%FQd}+mm*-c;~o{(l51=6?yR{>0}NdiPKMu;T3*3~^JvG) zcT(G9fx`92^!VTWGl8{0Pu}*rwlwq|9gWfQ6u>w#ea%K-pYW6p{0k%^C_AEj5L8-G zHvFh+b@l-lBONR@Dgu;zKs_8G)Wj?Gm~HX}w>rj%(&b1w>Z-2YI1cC}h{LtHn3(wy z5ChrlTswkcRE;(~(%1jjW$-BTZH_Qj4&LUeu9-!=dHZwv5m$fS9w(N4oEuv+zttcuE;x6h;* zq&#_CFF{h=J*r8LGhzZPw|^t%)=13O8vf~9!Owtgf^TBxZA?PXLK2EAx=W4n2d*v~ zpPa&>#ebt=vrTR}(K>)%gUZOJI>}@4Bob*Hcf*@Kh}Ka1>+ljg6*@$Ou{0Mjpv>nY zjY7p)%Cd&HZS+bPn1wLhHtMq2bR|kiPHY_k0}{9*jXEy#v(wv}Q+dE?0Tv6>Be!zl zbTXfRd&<>uX^zXu4e1%vNGE~zU~eKLekm$)E60WeH)5IV);ChF47E+aG&({F4usCg zritDp!_5Md$z+JYhxc+kY(_~jic`3)Yk&+9PkTMQJ|xf6wl~FGMw!udI?ZO+c8z7Q(LR=sEvTR7F?vN!YCu}04MImKa{|QYVko0%XXzva?`J$tPd{^ zJ^u}Q(#u9fp`SSWPv}XCpNkTLy=q7iym|*X?Nzoc`Pnix-NB7etG60)dXDQENm`*) zfvdL}T{|L2X&oSOj)7N>anCO`2f`^dBI~1f(J=S%Pj)C204*Y%Z@D2~>DdUH866Rg-bp+9E8cyF zLZ(Rc9*9O!0!rY6KVA04*V02M9RFAO0{Tl|OGowAN{Sz^vxy+nFdIO-i&*c0%M}$2 zpBXcyJ7s}y7;j%|L@qFWCQ6i7Uc!JoF9`@}UswP*gPpF?6}d3%69-=!%R7M-ZBk4Z zi!GcPDkXaZPw@ODjX}v zP6OQ_^XwWi=cnh(|EjiR#cDrPU{ov*v`CWy7{bUwhB3pK^A@J{g5X)j&Bfht3OC3e%GPiJOt6XY{{eIsxB1+RUQ0uFevXk5U(mfyU^ zWpClv2Mp(1uced;a7#uCYe#C{ze_yC_x?J+H2(YD z$BI+NV650H?x*#jLLw^dfn@!R;ek@$W2QBOfn~0fH;3Aej+&^5i2*&55X0yxb^Dq# zdzIB`XV`gLNyvi#@ky65xLbX2hm7>8u)k{o2al zARq2PWr)RiOBct>Iqsseg7j9y+dUJUn4KgbMF2G)8HoBOZ$4X2uE`j#(jc#gh92w> zbiibzST9vM=u(6%s0>I-5nLI)%n}c;_sDzjV&*6#^NR~U=m%y%Nl6NyH2iU=YFYBT6{+4!HM0;fbSfB%ZG9wfxk zYritw+rw)Y$j72rV-yOZ1NQ=A2qNH_KsBIQ2+Ro)cny$~6F5giu%IA_VBHji2XI*s zgaF+SGy4DD$bu~K>Z+|vO+C<^budg9Lh2_)3v>2hP%!Js6IREIj4%K4Kh{(3@&Et; diff --git a/tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/interactive-font-fallback-pending-openpencil-darwin.png b/tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/interactive-font-fallback-pending-openpencil-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d95e8f1a61e04d12ed5d1bfbf5bd1b156fc6ee GIT binary patch literal 25715 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 R9F715$h=dOEEk6c{2#4xANBwM literal 0 HcmV?d00001 diff --git a/tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/international-text-first-paint-openpencil-darwin.png b/tests/e2e/fonts/cjk-rendering-visual.spec.ts-snapshots/international-text-first-paint-openpencil-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..5f47cff42abcd91d99b481f373f3c60e2668f96a GIT binary patch literal 58262 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 )pUQ63}_Wn(;ed)ILmzZywZLD<8aveU(wg)AA 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%0APglILiN2_)0t7;1ddgh^Y$0;5a!pptP_Cv>--; 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 { expect(providerGeneration).toBeGreaterThan(0) expect(registrationGeneration).toBeGreaterThan(providerGeneration) expect(manager.generation()).toBe(registrationGeneration) - expect(registrations).toEqual(['Generation Test', '__op_font__Generation_Test__Regular']) + expect(registrations).toEqual(['Generation Test']) }) - test('moves replaced subset fonts to a fresh render family', () => { + test('keeps cumulative subset registrations under the source family', () => { const manager = new FontManager() const registrations: string[] = [] const provider = { @@ -39,13 +39,12 @@ describe('font lifecycle', () => { manager.attachProvider({} as CanvasKit, provider) manager.markLoaded('Subset Font', 'Regular', new ArrayBuffer(8)) - const firstRenderFamily = manager.renderFamily('Subset Font', 'Regular') + const firstGeneration = manager.generation() manager.markLoaded('Subset Font', 'Regular', new ArrayBuffer(12)) - const secondRenderFamily = manager.renderFamily('Subset Font', 'Regular') - expect(firstRenderFamily).toBe('__op_font__Subset_Font__Regular') - expect(secondRenderFamily).toBe('__op_font__Subset_Font__Regular__2') - expect(registrations).toContain(secondRenderFamily) + expect(manager.renderFamily('Subset Font', 'Regular')).toBe('Subset Font') + expect(manager.generation()).toBeGreaterThan(firstGeneration) + expect(registrations).toEqual(['Subset Font', 'Subset Font']) }) test('tracks nodes gated by pre-render font resolution', () => { diff --git a/tests/engine/text/fonts/loading.test.ts b/tests/engine/text/fonts/loading.test.ts index fb7b28d0a..327b785f5 100644 --- a/tests/engine/text/fonts/loading.test.ts +++ b/tests/engine/text/fonts/loading.test.ts @@ -132,16 +132,10 @@ describe('FontManager loaded font cache', () => { manager.attachProvider(canvasKit, first.provider) manager.markLoaded('ProviderLifecycle', 'Regular', new ArrayBuffer(12)) - expect(first.registrations).toEqual([ - { family: 'ProviderLifecycle', byteLength: 12 }, - { family: '__op_font__ProviderLifecycle__Regular', byteLength: 12 } - ]) + expect(first.registrations).toEqual([{ family: 'ProviderLifecycle', byteLength: 12 }]) manager.attachProvider(canvasKit, second.provider) - expect(second.registrations).toEqual([ - { family: 'ProviderLifecycle', byteLength: 12 }, - { family: '__op_font__ProviderLifecycle__Regular', byteLength: 12 } - ]) + expect(second.registrations).toEqual([{ family: 'ProviderLifecycle', byteLength: 12 }]) manager.detachProvider(first.provider) expect(manager.provider()).toBe(second.provider) @@ -149,7 +143,7 @@ describe('FontManager loaded font cache', () => { expect(manager.provider()).toBeNull() }) - test('registers loaded faces under exact render families', () => { + test('renders loaded faces under their source families', () => { const manager = new FontManager() const recording = createRecordingProvider() @@ -158,13 +152,10 @@ describe('FontManager loaded font cache', () => { const renderFamily = manager.renderFamily('Inter', 'SemiBold') - expect(renderFamily).toBe('__op_font__Inter__SemiBold') - expect(recording.registrations).toEqual([ - { family: 'Inter', byteLength: 12 }, - { family: '__op_font__Inter__SemiBold', byteLength: 12 } - ]) + expect(renderFamily).toBe('Inter') + expect(recording.registrations).toEqual([{ family: 'Inter', byteLength: 12 }]) expect(manager.renderFamily('Inter', 'SemiBold')).toBe(renderFamily) - expect(recording.registrations).toHaveLength(2) + expect(recording.registrations).toHaveLength(1) }) test('prefers local font data before downloaded cache', async () => { @@ -206,10 +197,7 @@ describe('FontManager loaded font cache', () => { }) await expect(manager.loadFont('DownloadedCache', 'Regular')).resolves.toBe(data) - expect(recording.registrations).toEqual([ - { family: 'DownloadedCache', byteLength: 16 }, - { family: '__op_font__DownloadedCache__Regular', byteLength: 16 } - ]) + expect(recording.registrations).toEqual([{ family: 'DownloadedCache', byteLength: 16 }]) expect(writes).toBe(0) }) @@ -226,10 +214,7 @@ describe('FontManager loaded font cache', () => { const data = await manager.loadFont('Inter', 'ExtraBold') expect(data?.byteLength).toBeGreaterThan(0) - expect(recording.registrations).toEqual([ - { family: 'Inter', byteLength: data?.byteLength }, - { family: '__op_font__Inter__ExtraBold', byteLength: data?.byteLength } - ]) + expect(recording.registrations).toEqual([{ family: 'Inter', byteLength: data?.byteLength }]) } finally { globalThis.fetch = originalFetch } diff --git a/tests/fixtures/fonts/NotoSansCJK-Test.otf b/tests/fixtures/fonts/NotoSansCJK-Test.otf new file mode 100644 index 0000000000000000000000000000000000000000..7eccd1cc736a5662f7b135b6d523861084a6c331 GIT binary patch literal 17208 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 X0ah?Lf6|QjJQvQN`1$|mAN79#5k4fr literal 0 HcmV?d00001 diff --git a/tests/fixtures/fonts/OFL.txt b/tests/fixtures/fonts/OFL.txt new file mode 100644 index 000000000..1c9f43281 --- /dev/null +++ b/tests/fixtures/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source' + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE.