From 812e369c85010c99c3dbb7e5b450ef86e4f17fd7 Mon Sep 17 00:00:00 2001 From: seveibar Date: Sun, 27 Jul 2025 22:18:20 -0700 Subject: [PATCH 1/4] render elements --- lib/render-elements.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/render-elements.ts b/lib/render-elements.ts index 2591646..df921eb 100644 --- a/lib/render-elements.ts +++ b/lib/render-elements.ts @@ -75,6 +75,9 @@ export async function buildRenderElements( images: Img[] texId: Map }> { + const startTime = performance.now() + console.log("🎯 Starting buildRenderElements") + const W = opt.width ?? W_DEF const H = opt.height ?? H_DEF const focal = scene.camera.focalLength ?? FOCAL @@ -88,28 +91,36 @@ export async function buildRenderElements( const texId = new Map() // Load STL meshes for boxes that have stlUrl + const meshLoadStart = performance.now() const stlMeshes = new Map() const objMeshes = new Map() for (const box of scene.boxes) { if (box.stlUrl && !stlMeshes.has(box.stlUrl)) { try { + const stlStart = performance.now() const mesh = await loadSTL(box.stlUrl) stlMeshes.set(box.stlUrl, mesh) + console.log(`📦 Loaded STL ${box.stlUrl} in ${(performance.now() - stlStart).toFixed(2)}ms`) } catch (error) { console.warn(`Failed to load STL from ${box.stlUrl}:`, error) } } if (box.objUrl && !objMeshes.has(box.objUrl)) { try { + const objStart = performance.now() const mesh = await loadOBJ(box.objUrl) objMeshes.set(box.objUrl, mesh) + console.log(`📦 Loaded OBJ ${box.objUrl} in ${(performance.now() - objStart).toFixed(2)}ms`) } catch (error) { console.warn(`Failed to load OBJ from ${box.objUrl}:`, error) } } } + console.log(`⏱️ Total mesh loading: ${(performance.now() - meshLoadStart).toFixed(2)}ms`) + const boxProcessingStart = performance.now() for (const box of scene.boxes) { + const boxStart = performance.now() const bw = verts(box) const bc = bw.map((v) => toCam(v, scene.camera)) const bp = bc.map((v) => proj(v, W, H, focal)) @@ -127,6 +138,7 @@ export async function buildRenderElements( // Handle STL rendering if (box.stlUrl && stlMeshes.has(box.stlUrl)) { + const stlRenderStart = performance.now() const mesh = stlMeshes.get(box.stlUrl)! const transformedVertices = scaleAndPositionMesh( mesh, @@ -165,7 +177,9 @@ export async function buildRenderElements( }) } } + console.log(`📦 STL render for ${box.stlUrl}: ${(performance.now() - stlRenderStart).toFixed(2)}ms (${mesh.triangles.length} triangles)`) } else if (box.objUrl && objMeshes.has(box.objUrl)) { + const objRenderStart = performance.now() const mesh = objMeshes.get(box.objUrl)! const transformedVertices = scaleAndPositionMesh( mesh, @@ -206,8 +220,10 @@ export async function buildRenderElements( }) } } + console.log(`📦 OBJ render for ${box.objUrl}: ${(performance.now() - objRenderStart).toFixed(2)}ms (${mesh.triangles.length} triangles)`) } else { // Handle regular box rendering + const regularBoxStart = performance.now() const vw = verts(box) const vc = vw.map((v) => toCam(v, scene.camera)) const vp = vc.map((v) => proj(v, W, H, focal)) @@ -236,6 +252,7 @@ export async function buildRenderElements( // top face image if (box.faceImages?.top) { + const imageStart = performance.now() const pts = TOP.map((i) => vw[i]) if (pts.every(Boolean)) { const dst = pts as [Point3, Point3, Point3, Point3] @@ -346,6 +363,7 @@ export async function buildRenderElements( } } } + console.log(`🖼️ Top face image processing: ${(performance.now() - imageStart).toFixed(2)}ms (${quadsPerSide * quadsPerSide * 2} triangles)`) } // top label @@ -379,8 +397,11 @@ export async function buildRenderElements( } } } + console.log(`📦 Regular box processing: ${(performance.now() - regularBoxStart).toFixed(2)}ms`) } + console.log(`📦 Box processed in ${(performance.now() - boxStart).toFixed(2)}ms`) } + console.log(`⏱️ Total box processing: ${(performance.now() - boxProcessingStart).toFixed(2)}ms`) // BSP sort faces before merging with other elements function sortFacesBSP( @@ -509,8 +530,11 @@ export async function buildRenderElements( return ordered } + const bspStart = performance.now() const orderedFaces = sortFacesBSP(faces, W, H, focal) + console.log(`🔄 BSP face sorting: ${(performance.now() - bspStart).toFixed(2)}ms (${faces.length} faces)`) + const elementBuildStart = performance.now() const elements: RenderElement[] = [] for (const f of orderedFaces) { const img = faceToImg.get(f) @@ -526,6 +550,11 @@ export async function buildRenderElements( .sort((a, b) => a.depth - b.depth) .map((e) => ({ type: "edge" as const, data: e })), ) + console.log(`🔨 Element building: ${(performance.now() - elementBuildStart).toFixed(2)}ms`) + + const totalTime = performance.now() - startTime + console.log(`✅ buildRenderElements completed in ${totalTime.toFixed(2)}ms`) + console.log(`📊 Final stats: ${elements.length} elements, ${images.length} images, ${texId.size} textures`) return { width: W, From 2ad49266de6791667837f3136dc7de6f18bf37b7 Mon Sep 17 00:00:00 2001 From: seveibar Date: Sun, 27 Jul 2025 23:49:46 -0700 Subject: [PATCH 2/4] add perf opt --- lib/render-elements.ts | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/render-elements.ts b/lib/render-elements.ts index df921eb..c702cad 100644 --- a/lib/render-elements.ts +++ b/lib/render-elements.ts @@ -413,8 +413,8 @@ export async function buildRenderElements( const EPS = 1e-6 type Node = { face: Face - normal: Point3 - point: Point3 + normal: Point3 // splitter plane normal (need not be unit length) + planeD: number // plane constant: n·x + d = 0 (d = –n·p0) front: Node | null back: Node | null } @@ -422,10 +422,19 @@ export async function buildRenderElements( function build(list: Face[]): Node | null { if (!list.length) return null const face = list[0]! - const p0 = face.cam[0]! - const p1 = face.cam[1]! - const p2 = face.cam[2]! - const normal = cross(sub(p1, p0), sub(p2, p0)) + const [p0, p1, p2] = face.cam as [Point3, Point3, Point3] + + // --- inline cross( p1-p0 , p2-p0 ) -------------------------- + const ax = p1.x - p0.x, ay = p1.y - p0.y, az = p1.z - p0.z + const bx = p2.x - p0.x, by = p2.y - p0.y, bz = p2.z - p0.z + const normal = { + x: ay * bz - az * by, + y: az * bx - ax * bz, + z: ax * by - ay * bx, + } + // plane constant d = –n·p0 + const planeD = -(normal.x * p0.x + normal.y * p0.y + normal.z * p0.z) + const front: Face[] = [] const back: Face[] = [] @@ -436,7 +445,7 @@ export async function buildRenderElements( neg = 0 const d: number[] = [] for (const v of f.cam) { - const dist = dot(normal, sub(v!, p0)) + const dist = normal.x * v.x + normal.y * v.y + normal.z * v.z + planeD d.push(dist) if (dist > EPS) pos++ else if (dist < -EPS) neg++ @@ -504,7 +513,7 @@ export async function buildRenderElements( return { face, normal, - point: p0, + planeD, front: build(front), back: build(back), } @@ -512,8 +521,7 @@ export async function buildRenderElements( function traverse(node: Node | null, out: Face[]) { if (!node) return - const cameraSide = dot(node.normal, scale(node.point, -1)) - if (cameraSide >= 0) { + if (node.planeD >= 0) { // camera (origin) is on the “front” side traverse(node.back, out) out.push(node.face) traverse(node.front, out) From 93f25f0011079a1c9c7fe0d0b10f6f77558b8255 Mon Sep 17 00:00:00 2001 From: seveibar Date: Sun, 27 Jul 2025 23:53:38 -0700 Subject: [PATCH 3/4] remove perf logging code --- lib/render-elements.ts | 45 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/lib/render-elements.ts b/lib/render-elements.ts index c702cad..f7c73e0 100644 --- a/lib/render-elements.ts +++ b/lib/render-elements.ts @@ -75,9 +75,6 @@ export async function buildRenderElements( images: Img[] texId: Map }> { - const startTime = performance.now() - console.log("🎯 Starting buildRenderElements") - const W = opt.width ?? W_DEF const H = opt.height ?? H_DEF const focal = scene.camera.focalLength ?? FOCAL @@ -91,36 +88,28 @@ export async function buildRenderElements( const texId = new Map() // Load STL meshes for boxes that have stlUrl - const meshLoadStart = performance.now() const stlMeshes = new Map() const objMeshes = new Map() for (const box of scene.boxes) { if (box.stlUrl && !stlMeshes.has(box.stlUrl)) { try { - const stlStart = performance.now() const mesh = await loadSTL(box.stlUrl) stlMeshes.set(box.stlUrl, mesh) - console.log(`📦 Loaded STL ${box.stlUrl} in ${(performance.now() - stlStart).toFixed(2)}ms`) } catch (error) { console.warn(`Failed to load STL from ${box.stlUrl}:`, error) } } if (box.objUrl && !objMeshes.has(box.objUrl)) { try { - const objStart = performance.now() const mesh = await loadOBJ(box.objUrl) objMeshes.set(box.objUrl, mesh) - console.log(`📦 Loaded OBJ ${box.objUrl} in ${(performance.now() - objStart).toFixed(2)}ms`) } catch (error) { console.warn(`Failed to load OBJ from ${box.objUrl}:`, error) } } } - console.log(`⏱️ Total mesh loading: ${(performance.now() - meshLoadStart).toFixed(2)}ms`) - const boxProcessingStart = performance.now() for (const box of scene.boxes) { - const boxStart = performance.now() const bw = verts(box) const bc = bw.map((v) => toCam(v, scene.camera)) const bp = bc.map((v) => proj(v, W, H, focal)) @@ -138,7 +127,6 @@ export async function buildRenderElements( // Handle STL rendering if (box.stlUrl && stlMeshes.has(box.stlUrl)) { - const stlRenderStart = performance.now() const mesh = stlMeshes.get(box.stlUrl)! const transformedVertices = scaleAndPositionMesh( mesh, @@ -177,9 +165,7 @@ export async function buildRenderElements( }) } } - console.log(`📦 STL render for ${box.stlUrl}: ${(performance.now() - stlRenderStart).toFixed(2)}ms (${mesh.triangles.length} triangles)`) } else if (box.objUrl && objMeshes.has(box.objUrl)) { - const objRenderStart = performance.now() const mesh = objMeshes.get(box.objUrl)! const transformedVertices = scaleAndPositionMesh( mesh, @@ -220,10 +206,8 @@ export async function buildRenderElements( }) } } - console.log(`📦 OBJ render for ${box.objUrl}: ${(performance.now() - objRenderStart).toFixed(2)}ms (${mesh.triangles.length} triangles)`) } else { // Handle regular box rendering - const regularBoxStart = performance.now() const vw = verts(box) const vc = vw.map((v) => toCam(v, scene.camera)) const vp = vc.map((v) => proj(v, W, H, focal)) @@ -252,7 +236,6 @@ export async function buildRenderElements( // top face image if (box.faceImages?.top) { - const imageStart = performance.now() const pts = TOP.map((i) => vw[i]) if (pts.every(Boolean)) { const dst = pts as [Point3, Point3, Point3, Point3] @@ -363,7 +346,6 @@ export async function buildRenderElements( } } } - console.log(`🖼️ Top face image processing: ${(performance.now() - imageStart).toFixed(2)}ms (${quadsPerSide * quadsPerSide * 2} triangles)`) } // top label @@ -397,12 +379,8 @@ export async function buildRenderElements( } } } - console.log(`📦 Regular box processing: ${(performance.now() - regularBoxStart).toFixed(2)}ms`) } - console.log(`📦 Box processed in ${(performance.now() - boxStart).toFixed(2)}ms`) } - console.log(`⏱️ Total box processing: ${(performance.now() - boxProcessingStart).toFixed(2)}ms`) - // BSP sort faces before merging with other elements function sortFacesBSP( polys: Face[], @@ -413,8 +391,8 @@ export async function buildRenderElements( const EPS = 1e-6 type Node = { face: Face - normal: Point3 // splitter plane normal (need not be unit length) - planeD: number // plane constant: n·x + d = 0 (d = –n·p0) + normal: Point3 // splitter plane normal (need not be unit length) + planeD: number // plane constant: n·x + d = 0 (d = –n·p0) front: Node | null back: Node | null } @@ -425,8 +403,12 @@ export async function buildRenderElements( const [p0, p1, p2] = face.cam as [Point3, Point3, Point3] // --- inline cross( p1-p0 , p2-p0 ) -------------------------- - const ax = p1.x - p0.x, ay = p1.y - p0.y, az = p1.z - p0.z - const bx = p2.x - p0.x, by = p2.y - p0.y, bz = p2.z - p0.z + const ax = p1.x - p0.x, + ay = p1.y - p0.y, + az = p1.z - p0.z + const bx = p2.x - p0.x, + by = p2.y - p0.y, + bz = p2.z - p0.z const normal = { x: ay * bz - az * by, y: az * bx - ax * bz, @@ -521,7 +503,8 @@ export async function buildRenderElements( function traverse(node: Node | null, out: Face[]) { if (!node) return - if (node.planeD >= 0) { // camera (origin) is on the “front” side + if (node.planeD >= 0) { + // camera (origin) is on the “front” side traverse(node.back, out) out.push(node.face) traverse(node.front, out) @@ -538,11 +521,8 @@ export async function buildRenderElements( return ordered } - const bspStart = performance.now() const orderedFaces = sortFacesBSP(faces, W, H, focal) - console.log(`🔄 BSP face sorting: ${(performance.now() - bspStart).toFixed(2)}ms (${faces.length} faces)`) - const elementBuildStart = performance.now() const elements: RenderElement[] = [] for (const f of orderedFaces) { const img = faceToImg.get(f) @@ -558,11 +538,6 @@ export async function buildRenderElements( .sort((a, b) => a.depth - b.depth) .map((e) => ({ type: "edge" as const, data: e })), ) - console.log(`🔨 Element building: ${(performance.now() - elementBuildStart).toFixed(2)}ms`) - - const totalTime = performance.now() - startTime - console.log(`✅ buildRenderElements completed in ${totalTime.toFixed(2)}ms`) - console.log(`📊 Final stats: ${elements.length} elements, ${images.length} images, ${texId.size} textures`) return { width: W, From e57bb1d746724f61e59db1a0281f3db284df0165 Mon Sep 17 00:00:00 2001 From: seveibar Date: Sun, 27 Jul 2025 23:55:34 -0700 Subject: [PATCH 4/4] update snapshots --- tests/__snapshots__/obj1.snap.svg | 246 +-- tests/__snapshots__/obj2.snap.svg | 148 +- tests/__snapshots__/scene1.snap.svg | 4 +- tests/__snapshots__/scene2.snap.svg | 10 +- tests/__snapshots__/stl2.snap.svg | 16 +- tests/__snapshots__/topimage2.snap.svg | 2 +- tests/repros/__snapshots__/repro3.snap.svg | 1636 ++++++++++---------- 7 files changed, 1030 insertions(+), 1032 deletions(-) diff --git a/tests/__snapshots__/obj1.snap.svg b/tests/__snapshots__/obj1.snap.svg index 31b628b..e839244 100644 --- a/tests/__snapshots__/obj1.snap.svg +++ b/tests/__snapshots__/obj1.snap.svg @@ -47,7 +47,7 @@ - + @@ -89,7 +89,7 @@ - + @@ -115,7 +115,7 @@ - + @@ -140,22 +140,22 @@ - + + - - + - - + + @@ -163,11 +163,11 @@ - + @@ -255,21 +255,21 @@ - + - + - + @@ -418,16 +418,16 @@ - + - - + + - + @@ -496,20 +496,20 @@ - + - + + - - + @@ -520,12 +520,12 @@ - - + + - + @@ -560,8 +560,8 @@ - + @@ -601,7 +601,7 @@ - + @@ -610,7 +610,7 @@ - + @@ -941,7 +941,7 @@ - + @@ -950,7 +950,7 @@ - + @@ -1071,7 +1071,7 @@ - + @@ -1082,12 +1082,12 @@ - + - + @@ -1098,7 +1098,7 @@ - + @@ -1125,13 +1125,13 @@ - + - + @@ -1143,7 +1143,7 @@ - + @@ -1151,7 +1151,7 @@ - + @@ -1260,14 +1260,14 @@ - + - + @@ -1277,10 +1277,10 @@ - + - + @@ -1295,32 +1295,32 @@ - + - + - + - + - + - + - + - + @@ -1339,10 +1339,10 @@ - + - + @@ -1600,7 +1600,7 @@ - + @@ -1609,6 +1609,7 @@ + @@ -1627,7 +1628,6 @@ - @@ -1647,7 +1647,6 @@ - @@ -1889,7 +1888,7 @@ - + @@ -1956,72 +1955,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + + - + - - + - + - + - + - + - + - + @@ -2032,9 +2031,9 @@ - + - + @@ -2192,6 +2191,7 @@ + @@ -2576,7 +2576,7 @@ - + @@ -2609,7 +2609,7 @@ - + @@ -5681,7 +5681,7 @@ - + @@ -5693,7 +5693,7 @@ - + @@ -5705,7 +5705,7 @@ - + @@ -5728,7 +5728,7 @@ - + @@ -5750,7 +5750,7 @@ - + @@ -5764,7 +5764,7 @@ - + @@ -5816,7 +5816,7 @@ - + @@ -5835,7 +5835,7 @@ - + @@ -5853,7 +5853,7 @@ - + @@ -5878,7 +5878,7 @@ - + @@ -5898,7 +5898,7 @@ - + @@ -5918,6 +5918,7 @@ + @@ -5927,8 +5928,6 @@ - - @@ -6020,7 +6019,7 @@ - + @@ -6049,6 +6048,7 @@ + @@ -6094,6 +6094,7 @@ + @@ -6112,7 +6113,6 @@ - @@ -6200,9 +6200,9 @@ - + - + @@ -6229,7 +6229,7 @@ - + @@ -6389,7 +6389,7 @@ - + @@ -6404,7 +6404,7 @@ - + @@ -6412,18 +6412,18 @@ - + + - @@ -6433,7 +6433,7 @@ - + @@ -6448,7 +6448,7 @@ - + @@ -6550,32 +6550,32 @@ - + - - - + + + - - - + + + - + @@ -6590,16 +6590,16 @@ + - + - + - @@ -6610,7 +6610,7 @@ - + @@ -6722,7 +6722,7 @@ - + @@ -6761,7 +6761,7 @@ - + @@ -6837,11 +6837,11 @@ - + - + @@ -6863,7 +6863,7 @@ - + @@ -6876,7 +6876,7 @@ - + diff --git a/tests/__snapshots__/obj2.snap.svg b/tests/__snapshots__/obj2.snap.svg index 0b9fce8..1a5c025 100644 --- a/tests/__snapshots__/obj2.snap.svg +++ b/tests/__snapshots__/obj2.snap.svg @@ -48,7 +48,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -120,9 +120,8 @@ - - + @@ -130,6 +129,7 @@ + @@ -160,7 +160,6 @@ - @@ -168,21 +167,22 @@ + - - + + @@ -336,22 +336,22 @@ - + - - + + - + - + - + @@ -362,10 +362,10 @@ - + - + @@ -434,7 +434,7 @@ - + @@ -448,7 +448,7 @@ - + @@ -784,10 +784,10 @@ - + - + @@ -902,7 +902,7 @@ - + @@ -920,7 +920,7 @@ - + @@ -969,15 +969,15 @@ - + - + - + - + @@ -1000,13 +1000,13 @@ - + - + @@ -1116,20 +1116,20 @@ - + - + - + - + @@ -1568,7 +1568,7 @@ - + @@ -1588,7 +1588,7 @@ - + @@ -1758,9 +1758,9 @@ - + - + @@ -1771,9 +1771,9 @@ - + - + @@ -1807,9 +1807,9 @@ - + - + @@ -1822,21 +1822,21 @@ - + - + - + - + - + - + @@ -3385,7 +3385,6 @@ - @@ -3399,6 +3398,7 @@ + @@ -4108,7 +4108,7 @@ - + @@ -4126,7 +4126,7 @@ - + @@ -5519,11 +5519,11 @@ - + @@ -5557,7 +5557,7 @@ - + @@ -5573,7 +5573,7 @@ - + @@ -5647,6 +5647,7 @@ + @@ -5684,7 +5685,7 @@ - + @@ -5704,6 +5705,7 @@ + @@ -5870,7 +5872,6 @@ - @@ -5968,9 +5969,9 @@ - + - + @@ -6007,7 +6008,6 @@ - @@ -6033,7 +6033,7 @@ - + @@ -6242,7 +6242,7 @@ - + @@ -6264,7 +6264,7 @@ - + @@ -6278,7 +6278,7 @@ - + @@ -6287,7 +6287,7 @@ - + @@ -6375,14 +6375,14 @@ - - + + - - + + @@ -6416,6 +6416,7 @@ + @@ -6425,7 +6426,6 @@ - @@ -6456,7 +6456,7 @@ - + @@ -6471,7 +6471,7 @@ - + @@ -6627,7 +6627,7 @@ - + @@ -6664,7 +6664,7 @@ - + @@ -6696,7 +6696,7 @@ - + @@ -6707,7 +6707,7 @@ - + @@ -6801,12 +6801,12 @@ - + - + diff --git a/tests/__snapshots__/scene1.snap.svg b/tests/__snapshots__/scene1.snap.svg index 2bf5fd7..38e87bf 100644 --- a/tests/__snapshots__/scene1.snap.svg +++ b/tests/__snapshots__/scene1.snap.svg @@ -10,9 +10,7 @@ - - Hello World - + Hello World \ No newline at end of file diff --git a/tests/__snapshots__/scene2.snap.svg b/tests/__snapshots__/scene2.snap.svg index 7aeae8f..13bb030 100644 --- a/tests/__snapshots__/scene2.snap.svg +++ b/tests/__snapshots__/scene2.snap.svg @@ -2,17 +2,15 @@ + + + - - - - Hello World - - + Hello World \ No newline at end of file diff --git a/tests/__snapshots__/stl2.snap.svg b/tests/__snapshots__/stl2.snap.svg index 389c0b1..eae6c6e 100644 --- a/tests/__snapshots__/stl2.snap.svg +++ b/tests/__snapshots__/stl2.snap.svg @@ -45,7 +45,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -119,7 +119,7 @@ - + @@ -153,7 +153,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -203,15 +203,15 @@ - + - + @@ -235,7 +235,7 @@ - + diff --git a/tests/__snapshots__/topimage2.snap.svg b/tests/__snapshots__/topimage2.snap.svg index 0174ee3..dcfc459 100644 --- a/tests/__snapshots__/topimage2.snap.svg +++ b/tests/__snapshots__/topimage2.snap.svg @@ -12,8 +12,8 @@ - + diff --git a/tests/repros/__snapshots__/repro3.snap.svg b/tests/repros/__snapshots__/repro3.snap.svg index 2a577c1..6b1c0a7 100644 --- a/tests/repros/__snapshots__/repro3.snap.svg +++ b/tests/repros/__snapshots__/repro3.snap.svg @@ -2762,7 +2762,7 @@ - + @@ -2774,23 +2774,23 @@ - + - - + + - + @@ -2802,7 +2802,7 @@ - + @@ -3070,19 +3070,19 @@ + - - + @@ -3172,7 +3172,7 @@ - + @@ -3184,7 +3184,7 @@ - + @@ -3555,29 +3555,29 @@ - + - + - + - - + - + + @@ -3587,8 +3587,9 @@ - + + @@ -3597,14 +3598,13 @@ - + - @@ -3768,19 +3768,19 @@ + - + - + - @@ -3995,16 +3995,16 @@ - - + + @@ -4021,20 +4021,20 @@ - + - + - + - + @@ -4063,7 +4063,7 @@ - + @@ -4115,9 +4115,9 @@ - - + + @@ -4125,7 +4125,7 @@ - + @@ -4135,9 +4135,9 @@ - + - + @@ -4153,7 +4153,7 @@ - + @@ -4312,11 +4312,11 @@ - + @@ -4430,6 +4430,7 @@ + @@ -4515,11 +4516,11 @@ - + @@ -4536,12 +4537,11 @@ + - - @@ -4637,19 +4637,19 @@ - + - + - + @@ -4675,13 +4675,13 @@ - - + + - + @@ -4752,16 +4752,17 @@ + - + @@ -4771,7 +4772,6 @@ - @@ -4779,7 +4779,7 @@ - + @@ -4800,7 +4800,7 @@ - + @@ -4894,7 +4894,7 @@ - + @@ -4977,12 +4977,12 @@ + - @@ -4996,7 +4996,6 @@ - @@ -5008,6 +5007,7 @@ + @@ -5023,7 +5023,6 @@ - @@ -5033,12 +5032,12 @@ + + - - @@ -5046,11 +5045,11 @@ + - @@ -5060,12 +5059,13 @@ + - + @@ -5097,11 +5097,11 @@ + - @@ -5144,8 +5144,8 @@ - + @@ -5159,7 +5159,6 @@ - @@ -5185,11 +5184,11 @@ + - @@ -5201,6 +5200,7 @@ + @@ -5220,10 +5220,10 @@ + - @@ -5313,7 +5313,7 @@ - + @@ -5385,7 +5385,6 @@ - @@ -5407,6 +5406,7 @@ + @@ -5477,7 +5477,6 @@ - @@ -5499,6 +5498,7 @@ + @@ -5546,7 +5546,6 @@ - @@ -5560,13 +5559,14 @@ + - + @@ -5610,7 +5610,7 @@ - + @@ -5624,7 +5624,7 @@ - + @@ -5722,7 +5722,6 @@ - @@ -5734,6 +5733,7 @@ + @@ -5769,7 +5769,7 @@ - + @@ -5827,7 +5827,6 @@ - @@ -5835,6 +5834,7 @@ + @@ -5858,7 +5858,7 @@ - + @@ -5893,7 +5893,7 @@ - + @@ -5901,7 +5901,7 @@ - + @@ -5999,8 +5999,8 @@ - + @@ -6035,7 +6035,7 @@ - + @@ -6047,12 +6047,12 @@ - + - + @@ -6077,7 +6077,7 @@ - + @@ -6134,7 +6134,7 @@ - + @@ -6194,11 +6194,11 @@ - + - + @@ -6233,13 +6233,13 @@ - + - + @@ -6271,13 +6271,13 @@ - + - + @@ -6312,9 +6312,9 @@ + - @@ -6333,7 +6333,7 @@ - + @@ -6358,7 +6358,7 @@ - + @@ -6373,20 +6373,19 @@ - + - @@ -6406,6 +6405,7 @@ + @@ -6423,14 +6423,14 @@ - + - + @@ -6445,11 +6445,11 @@ - + @@ -6460,7 +6460,6 @@ - @@ -6470,6 +6469,7 @@ + @@ -6485,7 +6485,7 @@ - + @@ -6502,22 +6502,20 @@ - + - - - + @@ -6536,6 +6534,7 @@ + @@ -6545,9 +6544,9 @@ + - @@ -6569,6 +6568,7 @@ + @@ -6591,9 +6591,9 @@ + - @@ -6705,7 +6705,7 @@ - + @@ -6718,6 +6718,7 @@ + @@ -6734,9 +6735,9 @@ + - @@ -6745,7 +6746,6 @@ - @@ -6882,17 +6882,17 @@ - + + + - - @@ -6903,7 +6903,7 @@ - + @@ -6923,7 +6923,7 @@ - + @@ -6999,9 +6999,9 @@ - + - + @@ -7021,7 +7021,7 @@ - + @@ -7035,7 +7035,7 @@ - + @@ -7047,13 +7047,13 @@ - + - + @@ -7063,7 +7063,7 @@ - + @@ -7343,7 +7343,6 @@ - @@ -7361,14 +7360,16 @@ + - + + @@ -7376,7 +7377,6 @@ - @@ -7448,9 +7448,9 @@ - + @@ -7546,6 +7546,7 @@ + @@ -7559,11 +7560,9 @@ - - @@ -7628,6 +7627,7 @@ + @@ -7805,6 +7805,7 @@ + @@ -7894,8 +7895,8 @@ - + @@ -7927,7 +7928,6 @@ - @@ -7938,9 +7938,9 @@ - + @@ -8061,7 +8061,7 @@ - + @@ -8163,7 +8163,7 @@ - + @@ -8344,11 +8344,11 @@ + - @@ -8364,8 +8364,8 @@ - + @@ -8452,10 +8452,10 @@ + - @@ -8491,8 +8491,8 @@ - + @@ -8631,7 +8631,7 @@ - + @@ -8642,32 +8642,32 @@ + - - + - + - - + + @@ -8676,7 +8676,7 @@ - + @@ -8685,7 +8685,7 @@ - + @@ -8693,13 +8693,13 @@ - + - + @@ -8718,7 +8718,7 @@ - + @@ -8733,7 +8733,7 @@ - + @@ -8744,7 +8744,7 @@ - + @@ -8752,8 +8752,8 @@ - + @@ -8761,10 +8761,10 @@ - + @@ -8873,7 +8873,6 @@ - @@ -8895,6 +8894,7 @@ + @@ -9033,8 +9033,8 @@ - + @@ -9122,8 +9122,8 @@ - + @@ -9325,13 +9325,13 @@ - + @@ -9427,7 +9427,6 @@ - @@ -9436,6 +9435,7 @@ + @@ -9443,9 +9443,9 @@ + - @@ -9540,8 +9540,8 @@ - + @@ -9581,11 +9581,11 @@ - + @@ -9645,15 +9645,15 @@ - + - + @@ -9679,24 +9679,24 @@ - + - + - - + + @@ -9721,14 +9721,14 @@ - + - + @@ -9792,8 +9792,8 @@ - + @@ -9844,7 +9844,7 @@ - + @@ -9864,7 +9864,7 @@ - + @@ -9894,21 +9894,21 @@ - + - + - + @@ -9924,7 +9924,7 @@ - + @@ -9937,7 +9937,7 @@ - + @@ -10003,6 +10003,7 @@ + @@ -10010,7 +10011,6 @@ - @@ -10032,12 +10032,12 @@ + - @@ -10064,8 +10064,8 @@ - + @@ -10112,14 +10112,15 @@ - - - - - - + + + + + + + @@ -10127,12 +10128,13 @@ + + + + - - - @@ -10140,14 +10142,12 @@ - - - + @@ -10400,8 +10400,8 @@ - + @@ -10459,8 +10459,8 @@ - + @@ -10489,10 +10489,10 @@ - + - + @@ -10504,7 +10504,6 @@ - @@ -10512,6 +10511,7 @@ + @@ -10583,7 +10583,7 @@ - + @@ -10608,7 +10608,7 @@ - + @@ -10627,7 +10627,6 @@ - @@ -10638,9 +10637,10 @@ + - + @@ -10654,8 +10654,8 @@ - + @@ -10668,8 +10668,8 @@ - + @@ -10750,12 +10750,12 @@ - + - - + + @@ -10793,11 +10793,11 @@ + - @@ -10814,7 +10814,6 @@ - @@ -10851,6 +10850,7 @@ + @@ -10898,8 +10898,8 @@ - + @@ -10923,8 +10923,8 @@ - + @@ -10949,6 +10949,7 @@ + @@ -10975,7 +10976,6 @@ - @@ -10984,6 +10984,7 @@ + @@ -10991,7 +10992,6 @@ - @@ -11042,10 +11042,10 @@ + - @@ -11057,6 +11057,7 @@ + @@ -11064,7 +11065,6 @@ - @@ -11072,7 +11072,6 @@ - @@ -11096,6 +11095,7 @@ + @@ -11134,7 +11134,7 @@ - + @@ -11162,9 +11162,9 @@ - + @@ -11175,6 +11175,7 @@ + @@ -11188,6 +11189,7 @@ + @@ -11196,12 +11198,11 @@ - - + @@ -11211,7 +11212,6 @@ - @@ -11225,15 +11225,13 @@ - - - + - + @@ -11250,6 +11248,10 @@ + + + + @@ -11308,8 +11310,8 @@ - + @@ -11388,6 +11390,7 @@ + @@ -11395,7 +11398,6 @@ - @@ -11437,7 +11439,6 @@ - @@ -11445,8 +11446,8 @@ + - @@ -11454,6 +11455,7 @@ + @@ -11474,8 +11476,8 @@ - + @@ -11507,21 +11509,21 @@ + - + - @@ -11559,21 +11561,18 @@ - + - + - - - @@ -11621,17 +11620,20 @@ + + + - + @@ -11663,6 +11665,7 @@ + @@ -11683,11 +11686,11 @@ - + @@ -11706,7 +11709,6 @@ - @@ -11736,13 +11738,13 @@ + - @@ -11828,7 +11830,7 @@ - + @@ -11874,12 +11876,12 @@ - + @@ -11898,10 +11900,10 @@ - + - + @@ -11955,6 +11957,8 @@ + + @@ -12015,7 +12019,7 @@ - + @@ -12151,10 +12155,10 @@ - + @@ -12177,7 +12181,7 @@ - + @@ -12242,8 +12246,6 @@ - - @@ -12377,8 +12379,8 @@ - + @@ -12414,7 +12416,7 @@ - + @@ -12433,7 +12435,7 @@ - + @@ -12502,11 +12504,11 @@ + - @@ -12553,6 +12555,7 @@ + @@ -12586,13 +12589,14 @@ + - + @@ -12616,7 +12620,6 @@ - @@ -12636,7 +12639,6 @@ - @@ -12645,7 +12647,6 @@ - @@ -12655,14 +12656,14 @@ - + - + @@ -12673,8 +12674,9 @@ - + + @@ -12684,7 +12686,7 @@ - + @@ -12702,7 +12704,7 @@ - + @@ -12720,13 +12722,14 @@ - + + - + @@ -12738,12 +12741,12 @@ + - @@ -12757,7 +12760,6 @@ - @@ -12780,8 +12782,8 @@ - + @@ -12797,13 +12799,13 @@ + - @@ -12837,10 +12839,10 @@ + - @@ -13248,7 +13250,7 @@ - + @@ -13297,14 +13299,14 @@ - + - + @@ -13312,19 +13314,19 @@ - + - + - + @@ -13627,15 +13629,15 @@ - + + - - + @@ -13645,7 +13647,7 @@ - + @@ -13659,7 +13661,7 @@ - + @@ -13668,7 +13670,7 @@ - + @@ -14307,7 +14309,7 @@ - + @@ -14343,12 +14345,12 @@ - + - + - + @@ -14373,10 +14375,10 @@ - - + - + + @@ -14392,15 +14394,15 @@ - + - + + - @@ -14408,7 +14410,7 @@ - + @@ -14428,28 +14430,28 @@ - - + + - - + - + + @@ -14461,16 +14463,16 @@ - + - - + + @@ -14495,10 +14497,10 @@ - - + - + + @@ -14529,12 +14531,12 @@ - + - + @@ -14957,7 +14959,7 @@ - + @@ -14965,14 +14967,14 @@ - + - + + - @@ -14985,7 +14987,7 @@ - + @@ -15005,7 +15007,7 @@ - + @@ -15014,10 +15016,10 @@ - + + - @@ -15031,7 +15033,7 @@ - + @@ -15062,7 +15064,7 @@ - + @@ -15091,7 +15093,7 @@ - + @@ -15125,7 +15127,7 @@ - + @@ -15154,11 +15156,11 @@ - + - + @@ -15172,10 +15174,10 @@ - + - + @@ -15218,7 +15220,7 @@ - + @@ -15232,7 +15234,7 @@ - + @@ -15268,7 +15270,7 @@ - + @@ -15324,22 +15326,22 @@ - + - + - + - + @@ -15379,11 +15381,11 @@ - + - + @@ -15437,7 +15439,7 @@ - + @@ -15520,7 +15522,6 @@ - @@ -15558,6 +15559,7 @@ + @@ -15603,7 +15605,7 @@ - + @@ -15644,7 +15646,7 @@ - + @@ -15659,12 +15661,12 @@ - + - + @@ -15683,7 +15685,7 @@ - + @@ -15730,22 +15732,22 @@ - + - + - + + - @@ -15783,13 +15785,13 @@ - + - + - + @@ -15838,7 +15840,7 @@ - + @@ -15897,7 +15899,7 @@ - + @@ -15915,10 +15917,10 @@ - + - + @@ -15934,10 +15936,10 @@ - + - + @@ -15961,14 +15963,14 @@ - + - + - + @@ -15982,7 +15984,7 @@ - + @@ -16014,14 +16016,14 @@ - + - + - + @@ -16032,7 +16034,7 @@ - + @@ -16070,7 +16072,7 @@ - + @@ -16091,7 +16093,7 @@ - + @@ -16128,7 +16130,6 @@ - @@ -16176,7 +16177,6 @@ - @@ -16184,6 +16184,7 @@ + @@ -16216,10 +16217,11 @@ + + - @@ -16229,27 +16231,27 @@ + - + - - + - + @@ -16273,7 +16275,7 @@ - + @@ -16284,11 +16286,11 @@ - + - + @@ -16299,7 +16301,7 @@ - + @@ -16324,17 +16326,17 @@ - + - + - + - + @@ -16378,17 +16380,17 @@ - + - + - + @@ -16434,7 +16436,7 @@ - + @@ -16461,7 +16463,7 @@ - + @@ -16486,10 +16488,10 @@ - + - + @@ -16504,10 +16506,10 @@ - + - + @@ -16523,10 +16525,10 @@ - + - + @@ -16550,14 +16552,14 @@ - + - + @@ -16571,7 +16573,7 @@ - + @@ -16603,11 +16605,11 @@ - + - + @@ -16659,7 +16661,7 @@ - + @@ -16961,9 +16963,9 @@ - - + + @@ -17120,6 +17122,7 @@ + @@ -17172,7 +17175,6 @@ - @@ -17200,7 +17202,7 @@ - + @@ -17468,7 +17470,7 @@ - + @@ -17547,16 +17549,16 @@ - + - + - + @@ -17587,19 +17589,19 @@ - + + - - + - + @@ -17607,13 +17609,13 @@ - - + + - + @@ -17661,7 +17663,7 @@ - + @@ -17670,8 +17672,8 @@ - + @@ -17724,12 +17726,12 @@ - + - + @@ -17751,10 +17753,10 @@ - + - + @@ -17775,7 +17777,7 @@ - + @@ -17802,7 +17804,7 @@ - + @@ -17815,7 +17817,7 @@ - + @@ -17839,11 +17841,11 @@ - + - + @@ -17879,13 +17881,13 @@ - + - + - + @@ -17937,13 +17939,13 @@ - + - + - + @@ -17994,13 +17996,13 @@ - + - + - + @@ -18050,7 +18052,7 @@ - + @@ -18082,7 +18084,7 @@ - + @@ -18256,7 +18258,7 @@ - + @@ -18265,7 +18267,7 @@ - + @@ -18277,10 +18279,10 @@ - + - + @@ -18292,7 +18294,7 @@ - + @@ -18311,12 +18313,12 @@ - + - + @@ -18337,7 +18339,7 @@ - + @@ -18351,14 +18353,14 @@ - + - + - + @@ -18386,10 +18388,10 @@ - - + + @@ -18413,7 +18415,7 @@ - + @@ -18441,7 +18443,7 @@ - + @@ -18460,10 +18462,10 @@ - + - + @@ -18511,7 +18513,7 @@ - + @@ -18543,11 +18545,11 @@ - + - + @@ -18586,7 +18588,7 @@ - + @@ -18716,7 +18718,6 @@ - @@ -18724,6 +18725,7 @@ + @@ -18806,7 +18808,7 @@ - + @@ -18895,7 +18897,7 @@ - + @@ -18906,7 +18908,7 @@ - + @@ -18932,7 +18934,7 @@ - + @@ -18941,14 +18943,14 @@ - + - + - + @@ -18984,16 +18986,16 @@ - + - + - + - + @@ -19015,7 +19017,7 @@ - + @@ -19043,13 +19045,13 @@ - + + - @@ -19073,7 +19075,7 @@ - + @@ -19141,7 +19143,7 @@ - + @@ -19176,14 +19178,14 @@ - + - + - + @@ -19239,7 +19241,7 @@ - + @@ -19275,10 +19277,10 @@ - + - + @@ -19337,7 +19339,7 @@ - + @@ -19506,7 +19508,7 @@ - + @@ -19679,7 +19681,7 @@ - + @@ -19837,29 +19839,29 @@ - + - + - + - + @@ -19891,10 +19893,10 @@ - + @@ -20064,7 +20066,6 @@ - @@ -20079,7 +20080,7 @@ - + @@ -20088,7 +20089,7 @@ - + @@ -20102,6 +20103,7 @@ + @@ -20137,7 +20139,6 @@ - @@ -20178,6 +20179,7 @@ + @@ -20193,7 +20195,6 @@ - @@ -20201,16 +20202,17 @@ - + + @@ -20219,7 +20221,6 @@ - @@ -20234,6 +20235,7 @@ + @@ -20277,12 +20279,12 @@ - + - + @@ -20297,19 +20299,19 @@ + - - + @@ -20337,7 +20339,7 @@ - + @@ -20346,8 +20348,8 @@ - + @@ -20357,8 +20359,8 @@ - - + + @@ -20390,17 +20392,17 @@ - + - + - + - + @@ -20731,7 +20733,7 @@ - + @@ -20740,11 +20742,11 @@ - + - + @@ -20757,12 +20759,12 @@ - + - + @@ -20787,10 +20789,10 @@ + - @@ -20848,8 +20850,8 @@ - + @@ -20954,7 +20956,7 @@ - + @@ -20962,13 +20964,13 @@ - + - + @@ -20976,7 +20978,7 @@ - + @@ -20990,16 +20992,16 @@ - + - + @@ -21024,7 +21026,7 @@ - + @@ -21043,7 +21045,7 @@ - + @@ -21059,20 +21061,20 @@ - - + + @@ -21088,12 +21090,12 @@ - + - + @@ -21103,13 +21105,13 @@ - + - + @@ -21128,17 +21130,17 @@ - + + - - + @@ -21163,25 +21165,24 @@ - + - - + - + @@ -21189,7 +21190,8 @@ - + + @@ -21338,7 +21340,6 @@ - @@ -21371,6 +21372,7 @@ + @@ -21401,6 +21403,7 @@ + @@ -21420,7 +21423,6 @@ - @@ -21479,7 +21481,7 @@ - + @@ -21493,7 +21495,7 @@ - + @@ -21501,21 +21503,21 @@ + - + - @@ -21765,7 +21767,6 @@ - @@ -21774,6 +21775,7 @@ + @@ -21803,11 +21805,11 @@ - + @@ -21846,8 +21848,8 @@ - + @@ -21860,11 +21862,11 @@ - + @@ -21877,8 +21879,8 @@ - + @@ -21900,7 +21902,6 @@ - @@ -21908,17 +21909,17 @@ - + - + @@ -21926,11 +21927,12 @@ - + + @@ -21972,7 +21974,7 @@ - + @@ -21982,17 +21984,17 @@ - + - - + + - + @@ -22003,7 +22005,7 @@ - + @@ -22015,7 +22017,7 @@ - + @@ -22039,7 +22041,7 @@ - + @@ -22048,16 +22050,16 @@ - + - + - + @@ -22228,7 +22230,6 @@ - @@ -22545,6 +22546,7 @@ + @@ -23077,7 +23079,7 @@ - + @@ -23121,7 +23123,7 @@ - + @@ -23271,17 +23273,17 @@ - + + - - + - + @@ -23291,31 +23293,31 @@ - + + - - + - + - + - + @@ -23415,11 +23417,11 @@ - + - + @@ -23442,11 +23444,11 @@ - + - + @@ -23464,7 +23466,7 @@ - + @@ -23477,7 +23479,7 @@ - + @@ -23507,9 +23509,9 @@ + - @@ -23862,7 +23864,7 @@ - + @@ -23889,7 +23891,7 @@ - + @@ -23909,7 +23911,7 @@ - + @@ -24026,7 +24028,7 @@ - + @@ -24079,9 +24081,9 @@ - + - + @@ -24092,9 +24094,9 @@ - + - + @@ -24110,9 +24112,9 @@ - + - + @@ -24123,39 +24125,39 @@ - + - + - + - - - + + - + + - + - + - + - + - + - + @@ -24737,7 +24739,7 @@ - + @@ -24770,7 +24772,6 @@ - @@ -24780,6 +24781,7 @@ + @@ -25706,6 +25708,7 @@ + @@ -25719,7 +25722,6 @@ - @@ -26446,7 +26448,7 @@ - + @@ -26465,9 +26467,9 @@ + - @@ -27852,7 +27854,7 @@ - + @@ -27867,7 +27869,7 @@ - + @@ -27878,7 +27880,7 @@ - + @@ -27894,7 +27896,7 @@ - + @@ -27906,11 +27908,11 @@ + - @@ -27964,7 +27966,6 @@ - @@ -28002,7 +28003,7 @@ - + @@ -28022,6 +28023,7 @@ + @@ -28051,7 +28053,6 @@ - @@ -28070,7 +28071,7 @@ - + @@ -28172,6 +28173,7 @@ + @@ -28188,7 +28190,6 @@ - @@ -28260,6 +28261,7 @@ + @@ -28285,7 +28287,7 @@ - + @@ -28324,7 +28326,7 @@ - + @@ -28350,7 +28352,7 @@ - + @@ -28561,7 +28563,7 @@ - + @@ -28583,7 +28585,7 @@ - + @@ -28597,7 +28599,7 @@ - + @@ -28615,12 +28617,12 @@ - + @@ -28847,7 +28849,6 @@ - @@ -28918,10 +28919,10 @@ + - @@ -28929,7 +28930,6 @@ - @@ -28957,21 +28957,21 @@ - + - + - + @@ -28980,11 +28980,12 @@ + - + @@ -28994,13 +28995,13 @@ - - + + @@ -29019,6 +29020,7 @@ + @@ -29050,8 +29052,8 @@ - + @@ -29076,11 +29078,10 @@ - - + @@ -29101,9 +29102,9 @@ - + @@ -29145,15 +29146,16 @@ - + + @@ -29198,6 +29200,7 @@ + @@ -29219,7 +29222,6 @@ - @@ -29306,6 +29308,7 @@ + @@ -29347,7 +29350,6 @@ - @@ -29479,10 +29481,10 @@ + - @@ -29493,6 +29495,7 @@ + @@ -29514,20 +29517,20 @@ + - - - + + @@ -29536,15 +29539,15 @@ + - - + - + @@ -29801,7 +29804,6 @@ - @@ -29875,11 +29877,11 @@ + - @@ -29953,8 +29955,8 @@ - + @@ -30036,7 +30038,7 @@ - + @@ -30086,14 +30088,14 @@ - - + + @@ -30199,9 +30201,9 @@ - - + + @@ -30210,7 +30212,7 @@ - + @@ -30232,7 +30234,7 @@ - + @@ -30244,9 +30246,9 @@ + - - + @@ -30262,14 +30264,14 @@ - + - + @@ -30617,7 +30619,7 @@ - + @@ -30640,7 +30642,7 @@ - + @@ -30648,7 +30650,7 @@ - + @@ -30665,7 +30667,7 @@ - + @@ -30680,7 +30682,7 @@ - + @@ -30701,9 +30703,9 @@ + - @@ -30714,9 +30716,9 @@ - - + + @@ -30745,7 +30747,7 @@ - + @@ -30773,7 +30775,7 @@ - + @@ -30799,9 +30801,9 @@ + - @@ -30821,7 +30823,7 @@ - + @@ -30870,7 +30872,7 @@ - + @@ -30878,7 +30880,7 @@ - + @@ -30925,7 +30927,7 @@ - + @@ -31045,6 +31047,7 @@ + @@ -31062,7 +31065,6 @@ - @@ -31071,6 +31073,7 @@ + @@ -31095,7 +31098,6 @@ - @@ -31163,7 +31165,7 @@ - + @@ -31172,6 +31174,7 @@ + @@ -31197,11 +31200,10 @@ - + - @@ -31245,7 +31247,6 @@ - @@ -31255,6 +31256,7 @@ + @@ -31293,9 +31295,9 @@ + - @@ -31307,7 +31309,7 @@ - + @@ -31356,7 +31358,7 @@ - + @@ -31372,7 +31374,7 @@ - + @@ -31414,7 +31416,7 @@ - + @@ -31430,7 +31432,7 @@ - + @@ -31501,7 +31503,7 @@ - + @@ -31510,7 +31512,7 @@ - + @@ -31549,7 +31551,7 @@ - + @@ -31617,7 +31619,7 @@ - + @@ -31672,7 +31674,7 @@ - + @@ -31696,7 +31698,7 @@ - + @@ -31711,7 +31713,7 @@ - + @@ -31751,7 +31753,7 @@ - + @@ -31774,7 +31776,7 @@ - + @@ -31799,7 +31801,7 @@ - + @@ -31828,9 +31830,9 @@ - - + + @@ -31888,7 +31890,7 @@ - + @@ -31949,7 +31951,7 @@ - + @@ -31974,7 +31976,7 @@ - + @@ -31992,7 +31994,7 @@ - + @@ -32000,7 +32002,7 @@ - + @@ -32008,7 +32010,7 @@ - + @@ -32018,7 +32020,6 @@ - @@ -32028,6 +32029,7 @@ + @@ -32080,8 +32082,8 @@ - + @@ -32132,20 +32134,20 @@ - + - + + - @@ -32165,13 +32167,13 @@ - + - + @@ -32185,18 +32187,18 @@ + - - + @@ -32222,8 +32224,8 @@ - + @@ -32265,16 +32267,16 @@ - - + + @@ -32348,7 +32350,7 @@ - + @@ -32360,15 +32362,15 @@ - + - + - + @@ -32377,7 +32379,7 @@ - + @@ -32409,14 +32411,14 @@ - + - - + + @@ -32460,7 +32462,6 @@ - @@ -32469,6 +32470,7 @@ + @@ -32572,7 +32574,6 @@ - @@ -32623,6 +32624,7 @@ + @@ -32645,13 +32647,12 @@ + - - @@ -32681,8 +32682,8 @@ - + @@ -32695,8 +32696,8 @@ - + @@ -32714,9 +32715,9 @@ + - @@ -32735,10 +32736,10 @@ - + @@ -32768,47 +32769,46 @@ - + - + - + - + - + - - + + - + - @@ -32822,6 +32822,7 @@ + @@ -32863,6 +32864,7 @@ + @@ -32907,11 +32909,11 @@ - + @@ -32921,7 +32923,6 @@ - @@ -32942,6 +32943,7 @@ + @@ -33005,11 +33007,11 @@ - + - + @@ -33215,14 +33217,14 @@ - + - + @@ -33419,7 +33421,7 @@ - + @@ -33439,34 +33441,34 @@ - + - + - + - + - + - + - + - + - + @@ -33479,7 +33481,7 @@ - + @@ -33595,7 +33597,7 @@ - + @@ -33619,7 +33621,6 @@ - @@ -33641,17 +33642,18 @@ + - + - + @@ -33723,21 +33725,21 @@ - + - + - + @@ -33750,7 +33752,7 @@ - + @@ -33770,6 +33772,7 @@ + @@ -33780,10 +33783,10 @@ + - @@ -33798,7 +33801,6 @@ - @@ -33829,19 +33831,19 @@ - + - + - + @@ -33890,7 +33892,6 @@ - @@ -33907,18 +33908,19 @@ - + + - + @@ -33934,8 +33936,8 @@ - + @@ -34554,7 +34556,6 @@ - @@ -34564,10 +34565,10 @@ + - @@ -34589,6 +34590,7 @@ + @@ -34601,12 +34603,12 @@ - - + + @@ -34614,7 +34616,7 @@ - + @@ -34631,11 +34633,11 @@ + - @@ -34946,15 +34948,15 @@ - + + - - + @@ -34962,7 +34964,7 @@ - + @@ -35109,14 +35111,14 @@ + - - + @@ -35129,14 +35131,13 @@ - + - @@ -35151,17 +35152,17 @@ - + + - @@ -35171,6 +35172,7 @@ + @@ -35180,21 +35182,21 @@ - + - + - + @@ -35207,7 +35209,7 @@ - + @@ -35328,14 +35330,15 @@ + - + @@ -35346,18 +35349,17 @@ - + + - - @@ -35459,8 +35461,8 @@ - + @@ -35528,7 +35530,7 @@ - + @@ -35539,22 +35541,22 @@ - + - + - + @@ -35569,7 +35571,7 @@ - + @@ -35584,14 +35586,14 @@ - + - + @@ -35627,7 +35629,7 @@ - + @@ -35649,7 +35651,7 @@ - + @@ -35722,7 +35724,7 @@ - + @@ -35730,7 +35732,7 @@ - + @@ -35741,9 +35743,9 @@ - - + + @@ -35752,7 +35754,7 @@ - + @@ -35778,7 +35780,7 @@ - + @@ -35794,7 +35796,7 @@ - + @@ -36050,7 +36052,7 @@ - + @@ -36059,31 +36061,31 @@ - + + - - + - - - + + + - +