diff --git a/dist/components/MaskSegmentCanvas.d.ts.map b/dist/components/MaskSegmentCanvas.d.ts.map index d9f5479..5a69a5d 100644 --- a/dist/components/MaskSegmentCanvas.d.ts.map +++ b/dist/components/MaskSegmentCanvas.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaskSegmentCanvas.d.ts","sourceRoot":"","sources":["../../src/components/MaskSegmentCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AA8Cf,OAAO,KAAK,EAEV,sBAAsB,EACtB,oBAAoB,EAMrB,MAAM,2BAA2B,CAAC;AAcnC,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AA0cnC,QAAA,MAAM,iBAAiB,qGAo/DrB,CAAC;AAmBH,eAAe,iBAAiB,CAAC"} \ No newline at end of file +{"version":3,"file":"MaskSegmentCanvas.d.ts","sourceRoot":"","sources":["../../src/components/MaskSegmentCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AA6Cf,OAAO,KAAK,EAEV,sBAAsB,EACtB,oBAAoB,EAMrB,MAAM,2BAA2B,CAAC;AAcnC,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AA+BnC,QAAA,MAAM,iBAAiB,qGAo/DrB,CAAC;AAmBH,eAAe,iBAAiB,CAAC"} \ No newline at end of file diff --git a/dist/components/MaskSegmentCanvas.js b/dist/components/MaskSegmentCanvas.js index dc0665b..623f47b 100644 --- a/dist/components/MaskSegmentCanvas.js +++ b/dist/components/MaskSegmentCanvas.js @@ -4,7 +4,7 @@ import { View, StyleSheet, } from 'react-native'; import { Gesture, GestureDetector } from 'react-native-gesture-handler'; import { runOnJS } from 'react-native-reanimated'; import cv from '../utils/opencvAdapter'; -import { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion, downsampleMaskDataForPaths, extractRegionsFromMaskBufferSync, isBaseboardMaskPixel, upscaleBinaryMask, } from '../utils/maskSegmentation'; +import { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion, downsampleMaskDataForPaths, extractRegionsFromMaskBufferSync, upscaleBinaryMask, } from '../utils/maskSegmentation'; import { splitWallRegionsByTexture } from '../utils/wallTextureSplit'; import { clearDerivedImageCache, readPngBgrBuffer, prewarmPngBgrCache, resizeBgrBuffer, } from '../utils/pngImage'; import { hashUrl, resolveImageUrl } from '../utils/resolveImageUrl'; @@ -14,292 +14,7 @@ import { preparePaintResourcesFromWorkBuffer, releaseFreqLayerImages, } from '.. import { PaintShaderLayer, createPaintColorMapForPaint, } from '../utils/paintShaderRuntime'; import { createRuntimeConfig, getMaskRuntimeRevision, getMaskSegmentRuntimeConfig, resolvePipelineConfig, setMaskSegmentRuntimeConfig, } from '../utils/maskSegmentRuntime'; import { Canvas, Image as SkiaImage, Path, Group, DashPathEffect, Rect, useCanvasRef, Skia, } from '@shopify/react-native-skia'; -function bgrColorEquals(a, b) { - return a.b === b.b && a.g === b.g && a.r === b.r; -} -/* ========================================================================== - * 几何工具 - * ========================================================================== */ -function rectsEqual(a, b) { - return a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h; -} -function getContainRect(canvasW, canvasH, imgW, imgH) { - const imgAspect = imgW / imgH; - const canvasAspect = canvasW / canvasH; - if (imgAspect > canvasAspect) { - const w = canvasW; - const h = canvasW / imgAspect; - return { x: 0, y: (canvasH - h) / 2, w, h }; - } - const h = canvasH; - const w = canvasH * imgAspect; - return { x: (canvasW - w) / 2, y: 0, w, h }; -} -function canvasToNormalized(cx, cy, canvasW, canvasH, imgW, imgH) { - const rect = getContainRect(canvasW, canvasH, imgW, imgH); - if (cx < rect.x || - cx > rect.x + rect.w || - cy < rect.y || - cy > rect.y + rect.h) { - return null; - } - return { - x: (cx - rect.x) / rect.w, - y: (cy - rect.y) / rect.h, - }; -} -/** Skia matrix: pan → scale around viewport center. Matches screenToCanvasCoords. */ -function buildZoomPanMatrix(panX, panY, scale, canvasW, canvasH) { - const cx = canvasW / 2; - const cy = canvasH / 2; - const m = Skia.Matrix(); - m.translate(panX, panY); - m.translate(cx, cy); - m.scale(scale, scale); - m.translate(-cx, -cy); - return m; -} -/** Clamp pan so scaled containRect does not expose empty margins beyond the viewport. */ -function clampPanOffset(pan, scale, canvasW, canvasH, containRect) { - if (!containRect || scale <= 1 || canvasW <= 0 || canvasH <= 0) { - return { x: 0, y: 0 }; - } - const cx = canvasW / 2; - const cy = canvasH / 2; - const r = containRect; - const scaledMinX = cx + scale * (r.x - cx); - const scaledMaxX = cx + scale * (r.x + r.w - cx); - const scaledMinY = cy + scale * (r.y - cy); - const scaledMaxY = cy + scale * (r.y + r.h - cy); - let x = pan.x; - let y = pan.y; - if (scaledMaxX - scaledMinX > canvasW) { - x = Math.max(canvasW - scaledMaxX, Math.min(-scaledMinX, x)); - } - else { - x = 0; - } - if (scaledMaxY - scaledMinY > canvasH) { - y = Math.max(canvasH - scaledMaxY, Math.min(-scaledMinY, y)); - } - else { - y = 0; - } - return { x, y }; -} -/** - * Inverse of the Skia Group transform applied during pinch-zoom. - * Converts a raw touch point (screen pixels) back to the canvas coordinate - * space where the image and regions are positioned before any scale/pan. - * When zoomScale ≤ 1 (no zoom), returns the input unchanged. - */ -function screenToCanvasCoords(screenX, screenY, canvasW, canvasH, zoomScale, panOffset) { - if (zoomScale <= 1) - return { x: screenX, y: screenY }; - return { - x: (screenX - panOffset.x - canvasW / 2) / zoomScale + canvasW / 2, - y: (screenY - panOffset.y - canvasH / 2) / zoomScale + canvasH / 2, - }; -} -function pointInPolygon(x, y, points) { - let inside = false; - for (let i = 0, j = points.length - 1; i < points.length; j = i++) { - const xi = points[i].x; - const yi = points[i].y; - const xj = points[j].x; - const yj = points[j].y; - const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi; - if (intersect) - inside = !inside; - } - return inside; -} -function pointInPolygonWithPadding(x, y, points, padding) { - if (points.length < 3) { - return false; - } - let minX = points[0].x; - let maxX = points[0].x; - let minY = points[0].y; - let maxY = points[0].y; - for (const point of points) { - minX = Math.min(minX, point.x); - maxX = Math.max(maxX, point.x); - minY = Math.min(minY, point.y); - maxY = Math.max(maxY, point.y); - } - if (x >= minX - padding && - x <= maxX + padding && - y >= minY - padding && - y <= maxY + padding) { - if (maxY - minY < padding * 2.5 || maxX - minX < padding * 2.5) { - return true; - } - } - return pointInPolygon(x, y, points); -} -function getRegionHitPolygons(reg) { - return reg.hitPolygons && reg.hitPolygons.length > 0 - ? reg.hitPolygons - : reg.polygons; -} -function pointHitsRegion(x, y, reg, options) { - const interaction = getMaskSegmentRuntimeConfig().interaction; - const thinPadding = options?.thinPadding ?? interaction.thinStripPadding; - const padding = reg.thinStrip ? thinPadding : interaction.regionPadding; - return getRegionHitPolygons(reg).some(poly => poly.length >= 3 && pointInPolygonWithPadding(x, y, poly, padding)); -} -function pointStrictlyHitsRegion(x, y, reg) { - return getRegionHitPolygons(reg).some(poly => poly.length >= 3 && pointInPolygon(x, y, poly)); -} -function resolveRegionHit(regions, x, y) { - const hits = []; - for (const reg of regions) { - const bboxPad = reg.thinStrip ? 0.005 : 0; - const b = reg.bbox; - if (x < b.x - bboxPad || - x > b.x + b.w + bboxPad || - y < b.y - bboxPad || - y > b.y + b.h + bboxPad) { - continue; - } - if (pointHitsRegion(x, y, reg)) { - hits.push(reg); - } - } - if (hits.length === 0) { - return null; - } - if (hits.length === 1) { - return hits[0].id; - } - const strictNonThin = hits.filter(reg => !reg.thinStrip && pointStrictlyHitsRegion(x, y, reg)); - if (strictNonThin.length > 0) { - strictNonThin.sort((a, b) => a.area - b.area); - return strictNonThin[0].id; - } - const strictThin = hits.filter(reg => reg.thinStrip && pointStrictlyHitsRegion(x, y, reg)); - if (strictThin.length > 0) { - strictThin.sort((a, b) => a.area - b.area); - return strictThin[0].id; - } - const nonThin = hits.filter(reg => !reg.thinStrip); - if (nonThin.length > 0) { - nonThin.sort((a, b) => a.area - b.area); - return nonThin[0].id; - } - hits.sort((a, b) => a.area - b.area); - return hits[0].id; -} -function pickKickRegionFromMask(normX, normY, pick, kickRegionId, baseboardPickMask, strict = false) { - const cx = Math.floor(normX * pick.cols); - const cy = Math.floor(normY * pick.rows); - if (cx < 0 || cy < 0 || cx >= pick.cols || cy >= pick.rows) { - return null; - } - if (strict) { - if (baseboardPickMask) { - return baseboardPickMask[cy * pick.cols + cx] ? kickRegionId : null; - } - return isBaseboardMaskPixel(pick.buffer, pick.cols, pick.rows, cx, cy) - ? kickRegionId - : null; - } - const interaction = getMaskSegmentRuntimeConfig().interaction; - const radius = Math.max(interaction.kickMaskPickRadiusPx, Math.floor(pick.cols * 0.022)); - const radiusSq = radius * radius; - for (let dy = -radius; dy <= radius; dy++) { - for (let dx = -radius; dx <= radius; dx++) { - if (dx * dx + dy * dy > radiusSq) { - continue; - } - const x = cx + dx; - const y = cy + dy; - if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { - continue; - } - if (baseboardPickMask) { - if (baseboardPickMask[y * pick.cols + x]) { - return kickRegionId; - } - continue; - } - if (isBaseboardMaskPixel(pick.buffer, pick.cols, pick.rows, x, y)) { - return kickRegionId; - } - } - } - return null; -} -function pickKickNearStrip(normX, normY, kickReg) { - const polys = kickReg.hitPolygons ?? kickReg.polygons; - const pad = getMaskSegmentRuntimeConfig().interaction.thinStripPadding + 0.004; - return polys.some(poly => poly.length >= 3 && pointInPolygonWithPadding(normX, normY, poly, pad)); -} -function lookupRegionFromPickMap(normX, normY, pick, radiusPx = getMaskSegmentRuntimeConfig().interaction.pickMapSearchRadiusPx) { - const cx = Math.min(pick.cols - 1, Math.max(0, Math.floor(normX * pick.cols))); - const cy = Math.min(pick.rows - 1, Math.max(0, Math.floor(normY * pick.rows))); - const readCode = (x, y) => pick.buffer[y * pick.cols + x]; - const center = readCode(cx, cy); - if (center > 0) { - return center - 1; - } - if (radiusPx <= 0) { - return null; - } - const r = Math.max(4, radiusPx); - const rSq = r * r; - for (let dy = -r; dy <= r; dy++) { - for (let dx = -r; dx <= r; dx++) { - if (dx * dx + dy * dy > rSq) { - continue; - } - const x = cx + dx; - const y = cy + dy; - if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { - continue; - } - const code = readCode(x, y); - if (code > 0) { - return code - 1; - } - } - } - return null; -} -function releasePaintResourceLayers(layers) { - if (!layers) { - return; - } - layers.lowFreqImage.dispose(); - layers.highFreqImage.dispose(); -} -function releaseOriginSkImage(image) { - if (image) { - image.dispose(); - } -} -async function prepareWorkScaledBgrBuffer(bgrBuffer, cols, rows, workScale) { - if (workScale >= 1) { - return { buffer: bgrBuffer, cols, rows }; - } - const workCols = Math.floor(cols * workScale); - const workRows = Math.floor(rows * workScale); - const buffer = resizeBgrBuffer(bgrBuffer, cols, rows, workCols, workRows); - return { buffer, cols: workCols, rows: workRows }; -} -/* ========================================================================== - * 分段计时工具(仅开发环境生效) - * ========================================================================== */ -let _timeLogTs = 0; -function timeLog(tag) { - if (!__DEV__) - return; - const now = performance.now(); - const dt = _timeLogTs ? now - _timeLogTs : 0; - console.log(`[⏱ ${tag}] ${dt.toFixed(2)} ms`); - _timeLogTs = now; -} +import { bgrColorEquals, rectsEqual, getContainRect, canvasToNormalized, buildZoomPanMatrix, clampPanOffset, screenToCanvasCoords, resolveRegionHit, pickKickRegionFromMask, pickKickNearStrip, lookupRegionFromPickMap, releasePaintResourceLayers, releaseOriginSkImage, prepareWorkScaledBgrBuffer, timeLog, } from '../utils/canvasGeometry'; /* ========================================================================== * 组件主体 * ========================================================================== */ diff --git a/dist/components/MaskSegmentCanvas.js.map b/dist/components/MaskSegmentCanvas.js.map index 557a71c..a082515 100644 --- a/dist/components/MaskSegmentCanvas.js.map +++ b/dist/components/MaskSegmentCanvas.js.map @@ -1 +1 @@ -{"version":3,"file":"MaskSegmentCanvas.js","sourceRoot":"","sources":["../../src/components/MaskSegmentCanvas.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"MaskSegmentCanvas.js","sourceRoot":"","sources":["../../src/components/MaskSegmentCanvas.tsx"],"names":[],"mappings":";AAAA,OAAc,EACZ,MAAM,EACN,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,EACV,mBAAmB,GACpB,MAAM,OAAO,CAAC;AACf,OAAO,EACL,IAAI,EACJ,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACxC,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,0BAA0B,EAC1B,gCAAgC,EAChC,iBAAiB,GAGlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EACL,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mCAAmC,EACnC,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AAWrC,OAAO,EACL,MAAM,EACN,KAAK,IAAI,SAAS,EAClB,IAAI,EACJ,KAAK,EACL,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,IAAI,GAGL,MAAM,4BAA4B,CAAC;AAYpC,OAAO,EAIL,cAAc,EACd,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EAMpB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,OAAO,GACR,MAAM,yBAAyB,CAAC;AAEjC;;gFAEgF;AAChF,MAAM,iBAAiB,GAAG,UAAU,CAClC,SAAS,iBAAiB,CAAC,KAAK,EAAE,GAAG;IACrC,MAAM,EACJ,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,mBAAmB,EAClC,WAAW,EAAE,iBAAiB,EAC9B,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,OAAO,EACP,eAAe,EACf,OAAO,EACP,iBAAiB,EACjB,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,MAAM,YAAY,GAAG,aAAa,IAAI,mBAAmB,IAAI,EAAE,CAAC;IAChE,MAAM,UAAU,GAAG,WAAW,IAAI,iBAAiB,IAAI,EAAE,CAAC;IAE1D,MAAM,kBAAkB,GAAG,OAAO,CAChC,GAAG,EAAE,CACH,cAAc;QACZ,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,EAAE;QACnC,CAAC,CAAC,UAAU,EAChB,CAAC,UAAU,EAAE,cAAc,CAAC,CAC7B,CAAC;IAEF,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CACH,kBAAkB;QAChB,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE;QAC3D,CAAC,CAAC,WAAW,EACjB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAClC,CAAC;IAEF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACvE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAEjE,6EAA6E;IAC7E,8FAA8F;IAC9F,0FAA0F;IAC1F,iGAAiG;IACjG,MAAM,mBAAmB,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;IAE7C,MAAM,sBAAsB,GAAG,OAAO,CACpC,GAAG,EAAE,CAAC,qBAAqB,CAAC,cAAc,EAAE,cAAc,CAAC,EAC3D,CAAC,cAAc,EAAE,cAAc,CAAC,CACjC,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAC5C,UAAU,EAAE,kBAAkB;QAC9B,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,mBAAmB;QAChC,iBAAiB;KAClB,CAAC,CAAC,CAAC;IAEJ,qGAAqG;IACrG,8FAA8F;IAC9F,gFAAgF;IAChF,2BAA2B;IAC3B,4FAA4F;IAC5F,oGAAoG;IACpG,0EAA0E;IAC1E,MAAM,yBAAyB,GAAG,MAAM,CAAiC,IAAI,CAAC,CAAC;IAC/E,MAAM,+BAA+B,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAEpE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC;QACpD,MAAM,SAAS,GAAG,mBAAmB,IAAI,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG;YAChB,kBAAkB;YAClB,eAAe;YACf,gBAAgB;YAChB,gBAAgB;YAChB,cAAc;YACd,gBAAgB;YAChB,WAAW;YACX,kBAAkB;YAClB,oBAAoB;YACpB,mBAAmB;SACX,CAAC;QACX,MAAM,YAAY,GAChB,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,SAAiB,CAAC,CAAC,CAAC,KAAM,SAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvF,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACjE,MAAM,eAAe,GACnB,+BAA+B,CAAC,OAAO,KAAK,iBAAiB,CAAC;QAEhE,IAAI,YAAY,IAAI,eAAe,EAAE;YACnC,IAAI,YAAY,EAAE;gBAChB,yBAAyB,CAAC,OAAO,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;aACtD;YACD,IAAI,eAAe,EAAE;gBACnB,+BAA+B,CAAC,OAAO,GAAG,iBAAiB,CAAC;aAC7D;YACD,UAAU,CAAC,OAAO,GAAG,2BAA2B,CAAC;gBAC/C,UAAU,EAAE,kBAAkB;gBAC9B,cAAc,EAAE,sBAAsB;gBACtC,WAAW,EAAE,mBAAmB;gBAChC,iBAAiB;aAClB,CAAC,CAAC;SACJ;IACH,CAAC,EAAE;QACD,kBAAkB;QAClB,sBAAsB;QACtB,mBAAmB;QACnB,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IACtD,MAAM,YAAY,GAAG,2BAA2B,EAAE,CAAC,KAAK,CAAC;IACzD,MAAM,kBAAkB,GAAG,2BAA2B,EAAE,CAAC,WAAW,CAAC;IAErE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;QAC7C,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;IACrC,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAEpD,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,iBAAiB,GAAG,MAAM,CAA+B,IAAI,CAAC,CAAC;IACrE,MAAM,qBAAqB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,KAA4B,EAAE,MAA+B,EAAE,EAAE;QAChE,MAAM,SAAS,GAAG;YAChB,KAAK;YACL,MAAM,EAAE,WAAW,IAAI,EAAE;YACzB,MAAM,EAAE,cAAc,IAAI,EAAE;YAC5B,MAAM,EAAE,eAAe,IAAI,EAAE;YAC7B,MAAM,EAAE,YAAY,IAAI,EAAE;SAC3B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,IAAI,qBAAqB,CAAC,OAAO,KAAK,SAAS,EAAE;YAC/C,OAAO;SACR;QACD,qBAAqB,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1C,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;QAClC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO;YACtC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,OAAO;YAC3C,CAAC,CAAC,CAAC,CAAC;QACN,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,KAAe,EAAE,EAAE;QACnE,SAAS,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,OAAO,EAAE;YACtB,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACpC;aAAM,IAAI,OAAO,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;SAChD;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,iBAAiB,IAAI,IAAI,CAC1B,CAAC;IACF,MAAM,wBAAwB,GAAG,MAAM,CACrC,sBAAsB,CACvB,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC;QACpC,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;IAClC,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;YAChC,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAC1B,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACxB,OAAO;SACR;QAED,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI;gBACF,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC/C,eAAe,CAAC,YAAY,EAAE,UAAU,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;oBACpE,eAAe,CAAC,UAAU,EAAE,QAAQ,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;iBAC/D,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,EAAE;oBACd,qBAAqB,CAAC,UAAU,CAAC,CAAC;oBAClC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;iBAC/B;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACvD,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBACrB;aACF;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QACrC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACjC,IAAI,kBAAkB,IAAI,gBAAgB,EAAE;YAC1C,kBAAkB,CAAC,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SAC5D;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE3C,+FAA+F;IAC/F,SAAS,CAAC,GAAG,EAAE;QACb,mBAAmB,CAAC,OAAO,GAAG,aAAa,IAAI,EAAE,CAAC;QAClD,iBAAiB,CAAC,OAAO,GAAG,WAAW,IAAI,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GACjD,QAAQ,CAA6B,IAAI,CAAC,CAAC;IAC7C,MAAM,sBAAsB,GAAG,MAAM,CAA6B,IAAI,CAAC,CAAC;IACxE,MAAM,qBAAqB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE3D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAChB,CAAC;IACF,MAAM,iBAAiB,GAAG,MAAM,CAAwB,IAAI,GAAG,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAE/D,mFAAmF;IACnF,kBAAkB;IAClB,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAC3C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAG9C,IAAI,CAAC,CAAC;IAChB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChF,MAAM,iBAAiB,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAC7E,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,oFAAoF;IACpF,mFAAmF;IACnF,oFAAoF;IACpF,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,MAAM,CAAkB,EAAE,CAAC,CAAC;IACrD,yFAAyF;IACzF,4FAA4F;IAC5F,oFAAoF;IACpF,sFAAsF;IACtF,4CAA4C;IAC5C,MAAM,2BAA2B,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAElD,6EAA6E;IAC7E,yEAAyE;IACzE,yEAAyE;IACzE,oEAAoE;IACpE,wEAAwE;IACxE,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAC7C,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,2FAA2F;IAC3F,MAAM,kBAAkB,GAAG,MAAM,CAA0D,IAAI,CAAC,CAAC;IACjG,MAAM,qBAAqB,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,UAAU,GAAG,MAAM,CAAkB,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,MAAM,CAIhB,IAAI,CAAC,CAAC;IAChB,MAAM,aAAa,GAAG,MAAM,CAIlB,IAAI,CAAC,CAAC;IAChB,MAAM,iBAAiB,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAC;IACzD,MAAM,qBAAqB,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,MAAM,CAAsB,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,oBAAoB,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAkB,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CACxC,IAAI,CACL,CAAC;IAEF,uFAAuF;IACvF,qFAAqF;IACrF,sFAAsF;IACtF,+EAA+E;IAC/E,0BAA0B;IAC1B,MAAM,sBAAsB,GAAG,YAAY,EAAE,CAAC;IAC9C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAkC,IAAI,CAAC,CAAC;IAChG,kFAAkF;IAClF,sFAAsF;IACtF,4CAA4C;IAC5C,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5E,gFAAgF;IAChF,6EAA6E;IAC7E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAkC,IAAI,CAAC,CAAC;IAExF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,mBAAmB,EAAE,YAAY,IAAI,IAAI,CAAC;IAC/D,MAAM,aAAa,GAAG,mBAAmB,EAAE,aAAa,IAAI,IAAI,CAAC;IAEjE,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,iBAAiB,GACrB,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnE,sFAAsF;IACtF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnC,4EAA4E;IAC5E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAE3D,8EAA8E;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,oFAAoF;IACpF,MAAM,cAAc,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpE,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,MAAc,EAAE,EAAE;QAC3E,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;YAC7B,OAAO;SACR;QACD,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC;QAC5B,eAAe,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,MAAM,EAAE;gBAC3C,OAAO,IAAI,CAAC;aACb;YACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChB,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7B,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;QACzB,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACxC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAElC,6DAA6D;IAC7D,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,WAAW,CAAC;IACvC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,qBAAqB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,uBAAuB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,sBAAsB,CAAC,OAAO,GAAG,mBAAmB,CAAC;IACvD,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IAC3C,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAC7C,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;YAChE,OAAO;SACR;QACD,SAAS,CAAC,cAAc,EAAE;YACxB,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YACtC,cAAc,EAAE,iBAAiB,CAAC,OAAO;YACzC,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,yBAAyB,GAAG,WAAW,CAAC,GAAG,EAAE;QACjD,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;YAC3D,OAAO;SACR;QACD,SAAS,CAAC,kBAAkB,EAAE;YAC5B,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YACtC,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;YAChE,OAAO;SACR;QACD,sBAAsB,EAAE,CAAC;QACzB,SAAS,CAAC,aAAa,EAAE;YACvB,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YACtC,cAAc,EAAE,iBAAiB,CAAC,OAAO;YACzC,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QACH,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAExC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC;QACnC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACzC,kGAAkG;QAClG,qGAAqG;QACrG,mGAAmG;QACnG,oFAAoF;QACpF,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YACtC,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;YACrC,OAAO,IAAI,CAAC;SACb;QACD,MAAM,GAAG,GAAG,2BAA2B,CACrC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,cAAc,CACf,CAAC;QACF,qBAAqB,CAAC,OAAO,GAAG,GAAG,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;IAEnF,MAAM,sBAAsB,GAAG,MAAM,CACnC,IAAI,GAAG,EAAmC,CAC3C,CAAC;IAEF,MAAM,uBAAuB,GAAG,WAAW,CACzC,KAAK,EAAE,UAAkB,EAAE,QAAgB,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC;QACxC,oGAAoG;QACpG,+FAA+F;QAC/F,kFAAkF;QAClF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YACpD,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,IAAI,UAAU,CAAC;YAChE,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,IAAI,QAAQ,CAAC;YAC1D,MAAM,WAAW,GAAG,aAAa,KAAK,UAAU,IAAI,WAAW,KAAK,QAAQ,CAAC;YAC7E,OAAO,CAAC,WAAW,CAAC;QACtB,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC,QAAQ,CAAC;QAGxD,aAAa,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC1C,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;QACjC,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;QACrC,SAAS,CAAC,MAAM,CAAC,CAAC;QAElB,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAChC,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC;QACjC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;QACnD,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;QAC3C,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,eAAe,CAAC,EAAE,CAAC,CAAC;QACpB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;QACnC,iBAAiB,CAAC,OAAO,GAAG,CAAC,CAAC;QAC9B,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAC;QAC9B,IAAI,iBAAiB,CAAC,OAAO,EAAE;YAC7B,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACxC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;SAClC;QACD,2BAA2B,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5C,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QAClC,IAAI,qBAAqB,CAAC,OAAO,EAAE;YACjC,YAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC5C,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;SACtC;QACD,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;QAClC,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;QACxB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;QACjC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;QACrC,qBAAqB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACjC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9B,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC;QACvC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,cAAc,CAAC,CAAC,CAAC,CAAC;QAClB,0FAA0F;QAC1F,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC;QAClD,IAAI,UAAU,EAAE;YACd,0BAA0B,CAAC,UAAU,CAAC,CAAC;YACvC,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAC;YACtC,sBAAsB,CAAC,IAAI,CAAC,CAAC;SAC9B;QACD,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,cAAc,CAAC,IAAI,CAAC,CAAC;QAErB,IAAI;YACF,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAChC,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACnD,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAC9B,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAE/C,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC;YAC1C,MAAM,oBAAoB,GAAG,WAAW,EAAE,CAAC;YAC3C,IAAI,oBAAoB,EAAE;gBACxB,OAAO;aACR;YAED,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;YAChC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;YAChC,YAAY,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,gBAAgB,EAAE;gBACpD,KAAK,GAAG,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC1D;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;YAExD,MAAM,cAAc,GAAG,0BAA0B,CAC/C,aAAa,CAAC,MAAM,EACpB,IAAI,EACJ,IAAI,EACJ,KAAK,CACN,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAClB,IAAI,WAAW,EAAE,EAAE;oBACjB,OAAO,UAAU,CAAC;iBACnB;gBACD,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;gBACnC,mBAAmB,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChE,sFAAsF;gBACtF,mFAAmF;gBACnF,sFAAsF;gBACtF,iFAAiF;gBACjF,iFAAiF;gBACjF,8CAA8C;gBAC9C,yBAAyB,CAAC,IAAI,CAAC,CAAC;gBAChC,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,UAAU,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;gBACvD,IAAI,WAAW,EAAE,EAAE;oBACjB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;iBAC9B;gBACD,OAAO,CAAC,sBAAsB,CAAC,CAAC;gBAChC,SAAS,CAAC,eAAe,CAAC,CAAC;gBAC3B,OAAO,CAAC,iBAAiB,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;gBAEzC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC;gBACrE,MAAM,aAAa,GAAG,eAAe,CACnC,UAAU,EACV,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,CACL,CAAC;gBACF,OAAO,CAAC,iBAAiB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7C,SAAS,CAAC,cAAc,CAAC,CAAC;gBAC1B,OAAO,gCAAgC,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;oBACjE,OAAO;oBACP,aAAa,EAAE,QAAQ,CAAC,oBAAoB;iBAC7C,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,KAAK,WAAW,CAAC,IAAI,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;gBACxC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC;gBACrE,IAAI,UAAsB,CAAC;gBAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;oBACpC,UAAU,GAAG,MAAM,EAAE,CAAC,eAAe,CACnC,UAAU,EACV,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,CACL,CAAC;iBACH;qBAAM;oBACL,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;iBACzC;gBACD,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;oBACrC,OAAO;iBACR;gBACD,WAAW,CAAC,OAAO,GAAG;oBACpB,MAAM,EAAE,UAAU;oBAClB,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,IAAI;iBACX,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvD,WAAW;gBACX,cAAc;aACf,CAAC,CAAC;YACH,IAAI,WAAW,EAAE,EAAE;gBACjB,OAAO;aACR;YAED,IAAI,aAAa,GAAG,gBAAgB,CAAC;YACrC,IAAI,2BAA2B,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;gBACjD,aAAa,GAAG,yBAAyB,CACvC,aAAa,EACb,UAAU,CAAC,MAAM,EACjB,IAAI,EACJ,IAAI,EACJ,OAAO,CACR,CAAC;aACH;YACD,MAAM,YAAY,GAChB,qBAAqB,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrD,SAAS,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,4CAA4C,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACpF,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC;YAC3C,IAAI,OAAO,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxC,OAAO,CAAC,IAAI,CACV,uGAAuG,CACxG,CAAC;aACH;YAED,IAAI,YAAY,GAAG,YAAY,CAAC;YAChC,IAAI,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE;gBAC7C,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aAC3D;YAED,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;YAClC,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;YAC9C,iBAAiB,CAAC,OAAO,GAAG;gBAC1B,MAAM,EAAE,aAAa,CAAC,MAAM;gBAC5B,eAAe,EAAE,aAAa,CAAC,eAAe;gBAC9C,IAAI,EAAE,aAAa,CAAC,OAAO;gBAC3B,IAAI,EAAE,aAAa,CAAC,OAAO;gBAC3B,aAAa,EAAE,aAAa,CAAC,aAAa;aAC3C,CAAC;YACF,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;YACpC,eAAe,CAAC,OAAO;gBACrB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;YAEtD,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACvF,uBAAuB,CAAC,OAAO,GAAG,WAAW,CAAC;YAC9C,qBAAqB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YACjC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC/B,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAEpC,iBAAiB,CAAC,OAAO,GAAG,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;YACxD,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;YAChC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,SAAS,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,sBAAsB,EAAE,CAAC;YAEzB,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;oBACrC,OAAO;iBACR;gBACD,MAAM,YAAY,GAAG,0BAA0B,CAC7C,iBAAiB,CAAC,OAAQ,EAC1B,QAAQ,CAAC,mBAAmB,CAC7B,CAAC;gBACF,MAAM,QAAQ,GAAG,0BAA0B,CACzC,YAAY,EACZ,YAAY,EACZ,WAAW,CACZ,CAAC;gBACF,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;oBACrC,OAAO;iBACR;gBACD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;gBAChC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;gBACjC,yBAAyB,EAAE,CAAC;YAC9B,CAAC,CAAC,EAAE,CAAC;YAEL,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;oBACrC,OAAO;iBACR;gBACD,MAAM,YAAY,CAAC;gBACnB,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;oBACrC,OAAO;iBACR;gBACD,oBAAoB,CAAC,OAAO,GAAG,iBAAiB,CAC9C,aAAa,CAAC,eAAe,EAC7B,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;SACN;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,EAAE,EAAE;gBAClB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC;gBACtD,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACrB;SACF;IACH,CAAC,EACD,CAAC,SAAS,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,WAAW,CAAC,CAC5E,CAAC;IAEF,MAAM,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/C,sEAAsE;QACtE,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,sBAAsB,CAAC,OAAO,EAAE;YAClC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1B;QACD,IAAI,qBAAqB,CAAC,OAAO,EAAE;YACjC,OAAO,qBAAqB,CAAC,OAAO,CAAC;SACtC;QAED,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1B;QAED,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC;QACtC,IAAI,OAAuB,CAAC;QAC5B,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YACpB,OAAO,CAAC,uCAAuC,CAAC,CAAC;YACjD,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,mCAAmC,CACtD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,MAAM,CAAC,EAAE;oBACP,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;wBACrC,sBAAsB,CAAC,MAAM,CAAC,CAAC;wBAC/B,OAAO;qBACR;oBACD,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBAC/B,sBAAsB,CAAC,OAAO,GAAG,MAAM,CAAC;oBACxC,sBAAsB,CAAC,IAAI,CAAC,CAAC;oBAC7B,OAAO,CAAC,+BAA+B,CAAC,CAAC;oBACzC,sBAAsB,EAAE,CAAC;gBAC3B,CAAC,CACF,CAAC;gBACF,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;oBACrC,IAAI,MAAM,EAAE;wBACV,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;wBAC7B,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;qBAC3C;oBACD,OAAO;iBACR;gBACD,IAAI,CAAC,MAAM,EAAE;oBACX,OAAO;iBACR;gBACD,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC7C,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;gBAC5C,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACnC,OAAO,CAAC,+BAA+B,CAAC,CAAC;gBACzC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;oBACnC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACtC,sBAAsB,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC/C,sBAAsB,CAAC,IAAI,CAAC,CAAC;iBAC9B;gBACD,sBAAsB,EAAE,CAAC;aAC1B;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE,KAAK,CAAC,CAAC;iBAC9E;aACF;oBAAS;gBACR,IAAI,qBAAqB,CAAC,OAAO,KAAK,OAAO,EAAE;oBAC7C,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;iBACtC;aACF;QACH,CAAC,CAAC,EAAE,CAAC;QACL,qBAAqB,CAAC,OAAO,GAAG,OAAO,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE7B,kBAAkB,CAAC,OAAO,GAAG,uBAAuB,CAAC;IAErD,MAAM,sBAAsB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACpD,IAAI,oBAAoB,CAAC,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE;YAClE,OAAO;SACR;QAED,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,IAAI;YACF,SAAS,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC;YAC9C,IAAI,MAAM,EAAE;gBACV,0BAA0B,CAAC,MAAM,CAAC,CAAC;gBACnC,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtC,sBAAsB,CAAC,IAAI,CAAC,CAAC;aAC9B;YAED,MAAM,sBAAsB,EAAE,CAAC;YAC/B,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;YAC/B,MAAM,uBAAuB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;SAC3D;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACrB;gBAAS;YACR,oBAAoB,CAAC,OAAO,GAAG,KAAK,CAAC;SACtC;IACH,CAAC,EAAE;QACD,aAAa;QACb,WAAW;QACX,uBAAuB;QACvB,WAAW;QACX,SAAS;KACV,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE;YAClC,OAAO;SACR;QAED,MAAM,UAAU,GAAG,GAAG,aAAa,IAAI,WAAW,EAAE,CAAC;QACrD,IACE,iBAAiB,CAAC,OAAO,KAAK,UAAU;YACxC,qBAAqB,CAAC,OAAO,KAAK,UAAU,EAC5C;YACA,OAAO;SACR;QAED,SAAS,EAAE,CAAC;QACZ,qBAAqB,CAAC,OAAO,GAAG,UAAU,CAAC;QAC3C,KAAK,uBAAuB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACpE,IAAI,qBAAqB,CAAC,OAAO,KAAK,UAAU,EAAE;gBAChD,qBAAqB,CAAC,OAAO,GAAG,EAAE,CAAC;aACpC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,eAAe,CAAC,OAAO,IAAI,CAAC,CAAC;YAC7B,IAAI,qBAAqB,CAAC,OAAO,KAAK,UAAU,EAAE;gBAChD,qBAAqB,CAAC,OAAO,GAAG,EAAE,CAAC;aACpC;YACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC;YAC9C,IAAI,MAAM,EAAE;gBACV,0BAA0B,CAAC,MAAM,CAAC,CAAC;gBACnC,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAC;aACvC;YACD,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACzC,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;YACrC,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;YACxB,oFAAoF;YACpF,8EAA8E;YAC9E,kEAAkE;YAClE,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAC;YAC9B,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACnC,iBAAiB,CAAC,OAAO,GAAG,CAAC,CAAC;YAC9B,IAAI,iBAAiB,CAAC,OAAO,EAAE;gBAC7B,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACxC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;aAClC;YACD,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE5C,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAA0B,EAAE;QAClE,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,0EAA0E;QAC1E,6EAA6E;QAC7E,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;YACzE,CAAC,CAAC,iBAAiB,CAAC,OAAO;YAC3B,CAAC,CAAC,cAAc,CAAC;QACnB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE;YACnC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ;gBACR,UAAU,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAC5C,KAAK;gBACL,UAAU,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;aACzD,CAAC,CAAC;SACJ;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,OAA2B,EAAE,EAAE;QACjE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;QAChD,sBAAsB,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3C,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;QAChD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;gBACf,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAChD,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACjC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC7B;aACF;SACF;QAED,iFAAiF;QACjF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE;YACxC,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;gBAChE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aACzD;SACF;QAED,gFAAgF;QAChF,gFAAgF;QAChF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE;YACxC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE7B,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACzD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBAC9B,QAAQ,GAAG,MAAM,CAAC;iBACnB;aACF;YAED,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aAC/D;SACF;QAED,gCAAgC;QAChC,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE;YAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS;YACxC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,EAAE,EAAE;gBACN,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC5B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC3B,SAAS;iBACV;aACF;YACD,0EAA0E;YAC1E,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;gBACnD,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC7B;SACF;QAED,iBAAiB,CAAC,OAAO,GAAG,WAAW,CAAC;QACxC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC/B,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9F,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1C,wBAAwB,CAAC,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;YAClE,mBAAmB,CAAC,IAAI,CAAC,CAAC;SAC3B;IAEH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE;YACrC,OAAO;SACR;QACD,IAAI,2BAA2B,CAAC,OAAO,EAAE;YACvC,kFAAkF;YAClF,iFAAiF;YACjF,iFAAiF;YACjF,uDAAuD;YACvD,OAAO;SACR;QACD,2BAA2B,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3C,cAAc,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,iBAAiB,CAAC,OAAO,EAAE;gBAC7B,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;aACzC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3C,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;QACnC,IAAI,iBAAiB,CAAC,OAAO,EAAE;YAC7B,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACxC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;SAClC;QACD,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,wBAAwB,GAAG,WAAW,CAAC,GAAG,EAAE;QAChD,MAAM,EAAE,GAAG,2BAA2B,EAAE,CAAC,WAAW,CAAC;QACrD,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;YAC7B,OAAO;SACR;QACD,IAAI,kBAAkB,CAAC,OAAO,EAAE;YAC9B,OAAO;SACR;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC;QACtC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,OAAO;SACR;QAED,mEAAmE;QACnE,0EAA0E;QAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;QACtC,MAAM,YAAY,GAAG,OAAO;YAC1B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC;YAC9C,CAAC,CAAC,GAAG,CAAC;QACR,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,YAAY,CACjE,CAAC;QACF,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QAClC,iBAAiB,CAAC,OAAO,GAAG,CAAC,CAAC;QAE9B,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,kBAAkB,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxE,OAAO;aACR;YACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;YACtC,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC;YACtC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;gBACtB,kFAAkF;gBAClF,wDAAwD;gBACxD,mBAAmB,EAAE,CAAC;gBACtB,OAAO;aACR;YACD,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACnC,iBAAiB,CAAC,OAAO,IAAI,CAAC,CAAC;YAC/B,iBAAiB,CAAC,OAAO,GAAG,UAAU,CACpC,QAAQ,EACR,EAAE,CAAC,iBAAiB,CACrB,CAAC;QACJ,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,mBAAmB,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,iFAAiF;IACjF,gFAAgF;IAChF,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,CAAC,OAAO;YAAE,OAAO;QACxC,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE;YACtC,mBAAmB,EAAE,CAAC;SACvB;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,IAAI,cAAc,IAAI,WAAW,IAAI,WAAW,GAAG,CAAC,IAAI,iBAAiB,EAAE;YAC1F,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;gBAC/B,wBAAwB,EAAE,CAAC;aAC5B;YACD,OAAO;SACR;QACD,IAAI,CAAC,aAAa,EAAE;YAClB,mBAAmB,EAAE,CAAC;YACtB,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAC7B;IACH,CAAC,EAAE;QACD,aAAa;QACb,cAAc;QACd,WAAW;QACX,WAAW;QACX,iBAAiB;QACjB,wBAAwB;QACxB,mBAAmB;KACpB,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAoB,EAAE;QAC5D,IAAI,gBAAgB,EAAE;YACpB,OAAO,gBAAgB,CAAC;SACzB;QACD,IAAI,gBAAgB,IAAI,IAAI,EAAE;YAC5B,OAAO,IAAI,CAAC;SACb;QACD,OAAO,YAAY,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEvD,MAAM,cAAc,GAAG,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,IAAI,IAAI,CAAC;IAE5E,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,cAAsB,EAAE,KAAe,EAAE,EAAE;QAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,QAAQ,IAAI,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;gBAC/C,OAAO,IAAI,CAAC;aACb;YACD,OAAO,GAAG,IAAI,CAAC;YACf,eAAe,CAAC,OAAO,CAAC,EAAE;gBACxB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,IAAI,KAAK,cAAc,EAAE;oBAC3B,OAAO,OAAO,CAAC;iBAChB;gBACD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAChC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE;YACX,MAAM,UAAU,GACd,wBAAwB,CAAC,OAAO;gBAChC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,wBAAwB,CAAC,OAAO,EAAE;gBACpC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAChC,cAAc,EACd,wBAAwB,CAAC,OAAO,CACjC,CAAC;aACH;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;YACzE,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,cAAc;gBACxB,UAAU,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC;gBAClD,KAAK;gBACL,UAAU;aACX,CAAC,CAAC;SACJ;IACH,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,CAAS,EAAE,CAAS,EAAE,MAAM,GAAG,KAAK,EAAiB,EAAE;QACtD,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACnE,OAAO,IAAI,CAAC;SACb;QAED,MAAM,IAAI,GAAG,kBAAkB,CAC7B,CAAC,EACD,CAAC,EACD,OAAO,EACP,OAAO,EACP,SAAS,CAAC,CAAC,EACX,SAAS,CAAC,CAAC,CACZ,CAAC;QACF,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;QACzC,IAAI,UAAU,EAAE;YACd,MAAM,OAAO,GAAG,uBAAuB,CACrC,IAAI,CAAC,CAAC,EACN,IAAI,CAAC,CAAC,EACN,UAAU,EACV,MAAM;gBACJ,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,2BAA2B,EAAE,CAAC,WAAW,CAAC,qBAAqB,CACpE,CAAC;YACF,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,OAAO,OAAO,CAAC;aAChB;YACD,IAAI,MAAM,EAAE;gBACV,OAAO,IAAI,CAAC;aACb;SACF;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC;QACjC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,UAAU,IAAI,IAAI,EAAE;gBACtB,OAAO,UAAU,CAAC;aACnB;SACF;QAED,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;YAC1B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC;YAC9C,MAAM,OAAO,GAAG,sBAAsB,CACpC,IAAI,CAAC,CAAC,EACN,IAAI,CAAC,CAAC,EACN,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,CACP,CAAC;YACF,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,OAAO,OAAO,CAAC;aAChB;YAED,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;gBAClE,IAAI,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;oBACzD,OAAO,MAAM,CAAC;iBACf;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EACD,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAC7C,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QACvB,iBAAiB,EAAE,CAAC;QACpB,IACE,CAAC,aAAa;YACd,CAAC,SAAS;YACV,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC/B,CAAC,cAAc;YACf,CAAC,mBAAmB;YACpB,QAAQ,EACR;YACA,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,OAAO;SACR;QAED,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QAED,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAmB,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE;YAC1D,KAAK,uBAAuB,EAAE,CAAC;SAChC;IACH,CAAC,EACD;QACE,aAAa;QACb,SAAS;QACT,cAAc;QACd,mBAAmB;QACnB,QAAQ;QACR,iBAAiB;QACjB,mBAAmB;QACnB,kBAAkB;QAClB,iBAAiB;QACjB,uBAAuB;KACxB,CACF,CAAC;IAEF,0EAA0E;IAC1E,qEAAqE;IACrE,gFAAgF;IAChF,oFAAoF;IACpF,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,SAAS,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,SAAS,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,SAAS,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IACnF,SAAS,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,SAAS,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACjF,SAAS,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAErE,2DAA2D;IAC3D,MAAM,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,SAAS,CAAC,GAAG,EAAE,GAAG,oBAAoB,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5F,SAAS,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,SAAS,CAAC,GAAG,EAAE,GAAG,oBAAoB,CAAC,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5F,SAAS,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,iBAAiB,EAAE,CAAC;QACpB,eAAe,CAAC,OAAO,CAAC,EAAE;YACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,OAAO,OAAO,CAAC;aAChB;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACpB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,CAAE,8BAA8B;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,iBAAiB,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC5C,iBAAiB,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3B,eAAe,CAAC,EAAE,CAAC,CAAC;QACpB,sBAAsB,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3C,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QAClC,SAAS,EAAE,CAAC;IACd,CAAC,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC;IAEnC,MAAM,6BAA6B,GAAG,WAAW,CAAC,KAAK,IAAiC,EAAE;QACxF,IAAI;YACF,MAAM,CAAC,GAAG,sBAAsB,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;gBAAC,OAAO,SAAS,CAAC;aAAC;YAClC,IAAI,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE;gBACT,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAChC;YACD,IAAI,CAAC,IAAI,EAAE;gBAAC,OAAO,SAAS,CAAC;aAAC;YAC9B,MAAM,GAAG,GAAI,IAA0C,CAAC,cAAc,CAAC;YACvE,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAAC,OAAO,SAAS,CAAC;aAAC;YAClD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;SACzC;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,CAAC,CAAC,CAAC;YAC5E,OAAO,SAAS,CAAC;SAClB;IACH,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EACzC,WAAkC,EAClC,OAAgB,EACU,EAAE;QAC5B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC;QACnC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SACjD;QAED,IAAI,iBAAqC,CAAC;QAC1C,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE;YACxB,iBAAiB,GAAG,MAAM,6BAA6B,EAAE,CAAC;SAC3D;QACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC;QAC9C,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC;QAC1C,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,IAAI,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;QAC/E,MAAM,cAAc,GAAG,CAAC,iBAAiB,IAAI,eAAe,IAAI,MAAM,IAAI,GAAG,IAAI,mBAAmB;YAClG,CAAC,CAAC;gBACE,WAAW,EAAE,eAAe;gBAC5B,aAAa,EAAE,GAAG;gBAClB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;YACzC,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,cAAc,EAAE,WAAW;YAC3B,OAAO;YACP,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,cAAc;YACd,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,YAAY,EAAE,IAAI,CAAC,IAAI;SACxB,CAAC,CAAC;QAEH,kBAAkB,CAAC,OAAO,GAAG;YAC3B,WAAW,EAAE,yBAAyB,CAAC,WAAW,CAAC;YACnD,MAAM;SACP,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEzD,oFAAoF;IACpF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB,EAAE;YAAC,OAAO;SAAC;QACjC,IAAI,CAAC,aAAa,IAAI,CAAC,mBAAmB,EAAE;YAAC,OAAO;SAAC;QACrD,IAAI,cAAc,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE;YAAC,OAAO;SAAC;QACrE,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YAAC,OAAO;SAAC;QAExC,IAAI,qBAAqB,CAAC,OAAO,EAAE;YACjC,YAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;SAC7C;QACD,qBAAqB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9C,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;YACrC,IAAI,iBAAiB,CAAC,OAAO,EAAE;gBAAC,OAAO;aAAC;YACxC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAC9C,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE;gBAAC,OAAO;aAAC;YAErD,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;YACjC,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI;oBACF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;oBACpD,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;iBACjC;gBAAC,OAAO,CAAC,EAAE;oBACV,OAAO,CAAC,GAAG,CAAC,oDAAoD,EAAE,CAAC,CAAC,CAAC;iBACtE;wBAAS;oBACR,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;iBACnC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE;YACV,IAAI,qBAAqB,CAAC,OAAO,EAAE;gBACjC,YAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC5C,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;aACtC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,iBAAiB;QACjB,aAAa;QACb,mBAAmB;QACnB,cAAc;QACd,cAAc;QACd,iBAAiB;KAClB,CAAC,CAAC;IAEH,mBAAmB,CACjB,GAAG,EACH,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,CAAC,UAAoB,EAAE,EAAE;YAC7B,iBAAiB,EAAE,CAAC;YACpB,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5B,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACzB;iBAAM;gBACL,cAAc,CAAC,UAAU,CAAC,CAAC;aAC5B;QACH,CAAC;QACD,IAAI,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YACpB,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;gBACjF,CAAC,CAAC,iBAAiB,CAAC,OAAO;gBAC3B,CAAC,CAAC,cAAc,CAAC;YAEnB,MAAM,EAAE,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC;YAC1C,IAAI,MAAM,EAAE,WAAW,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE;gBAC/C,OAAO,6BAA6B,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;aACvE;YAED,IAAI;gBACF,OAAO,MAAM,iBAAiB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;aAC/D;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC;gBAC3D,MAAM,CAAC,CAAC;aACT;QACH,CAAC;QACD,aAAa,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI;QAC/D,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACd,OAAO,EAAE,CAAU;YACnB,SAAS,EAAE,YAAY,CAAC,OAAO;YAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,OAAO,EAAE,mBAAmB,EAAE;YAC9B,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;YAC/B,YAAY,EAAE,gBAAgB,IAAI,SAAS;YAC3C,sBAAsB,EAAE,wBAAwB,CAAC,OAAO;YACxD,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;SACpB,CAAC;QACF,WAAW,EAAE,cAAc;QAC3B,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACnC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,wBAAwB,CAAC,OAAO,GAAG,UAAU,CAAC;YAC9C,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,aAAa,EAAE,MAAM,CAAC,EAAE;YACtB,2BAA2B,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;YACpD,UAAU,CAAC,OAAO,GAAG,2BAA2B,EAAE,CAAC;YACnD,IAAI,aAAa,IAAI,WAAW,EAAE;gBAChC,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC/B,KAAK,uBAAuB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;aAC1D;QACH,CAAC;QACD,aAAa;QACb,aAAa;QACb,SAAS,EAAE,sBAAsB;QACjC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;QACzC,iBAAiB,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE;KAC/C,CAAC,EACF;QACE,aAAa;QACb,iBAAiB;QACjB,cAAc;QACd,YAAY;QACZ,gBAAgB;QAChB,mBAAmB;QACnB,cAAc;QACd,aAAa;QACb,sBAAsB;QACtB,iBAAiB;KAClB,CACF,CAAC;IAEF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAE1D,IAAI,GAAG,EAAE,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAChE,IAAI,CAAC,aAAa,EAAE;gBAClB,qBAAqB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBACjC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC;aACxC;YACD,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE;YACb,qBAAqB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YACjC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO;SACR;QAED,IACE,uBAAuB,CAAC,OAAO;YAC/B,UAAU,CAAC,uBAAuB,CAAC,OAAO,EAAE,WAAW,CAAC,EACxD;YACA,OAAO;SACR;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,0BAA0B,CAC7C,QAAQ,EACR,2BAA2B,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAC3D,CAAC;QACF,MAAM,QAAQ,GAAG,0BAA0B,CACzC,aAAa,EACb,YAAY,EACZ,WAAW,CACZ,CAAC;QAEF,uBAAuB,CAAC,OAAO,GAAG,WAAW,CAAC;QAC9C,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAChC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;QACjC,yBAAyB,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAE3E,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACnC,IACE,YAAY,IAAI,IAAI;YACpB,gBAAgB,IAAI,IAAI;YACxB,CAAC,WAAW;YACZ,aAAa,CAAC,MAAM,KAAK,CAAC,EAC1B;YACA,OAAO,IAAI,CAAC;SACb;QACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,IAAI,CAAC;SACb;QACD,MAAM,YAAY,GAAG,0BAA0B,CAC7C,QAAQ,EACR,2BAA2B,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAC3D,CAAC;QACF,OAAO,+BAA+B,CACpC,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,CACjB,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjE,MAAM,gBAAgB,GAAG,CAAC,KAAqB,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE;QAC9D,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,CAAC,EAAE,WAAW,CAAC,CAAC,EAChB,CAAC,EAAE,WAAW,CAAC,CAAC,EAChB,KAAK,EAAE,WAAW,CAAC,CAAC,EACpB,MAAM,EAAE,WAAW,CAAC,CAAC,EACrB,OAAO,EAAE,OAAO,GAChB,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,EAAE;QACtE,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACvC,OAAO,CACL,8BACE,KAAC,IAAI,IAEH,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,YAAY,CAAC,iBAAiB,EACrC,KAAK,EAAC,MAAM,EACZ,OAAO,EAAE,IAAI,IAJR,GAAG,SAAS,SAAS,QAAQ,EAAE,CAKpC,EACF,KAAC,IAAI,IAEH,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,YAAY,CAAC,iBAAiB,EACrC,KAAK,EAAC,QAAQ,EACd,WAAW,EAAE,CAAC,EACd,UAAU,EAAC,OAAO,EAClB,SAAS,kBAET,KAAC,cAAc,IAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAI,IARhC,GAAG,SAAS,WAAW,QAAQ,EAAE,CASjC,IACN,CACJ,CAAC;IACJ,CAAC,CAAC;IAEF,2EAA2E;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9B,IAAI,SAAS,IAAI,CAAC,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,kBAAkB,CACvB,SAAS,CAAC,CAAC,EACX,SAAS,CAAC,CAAC,EACX,SAAS,EACT,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,UAAU,GAAG,WAAW,IAAI,YAAY,CAAC;QAC/C,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,WAAW,GAAG,CAAC,WAAW,IAAI,aAAa,CAAC;QAClD,MAAM,WAAW,GACf,kBAAkB;YAClB,YAAY;YACZ,aAAa;YACb,mBAAmB,CAAC;QACtB,MAAM,SAAS,GACb,CAAC,WAAW,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC;QACzD,MAAM,YAAY,GAAG,WAAW,IAAI,YAAY,CAAC;QAEjD,4EAA4E;QAC5E,0EAA0E;QAC1E,sEAAsE;QACtE,yEAAyE;QACzE,4CAA4C;QAC5C,MAAM,SAAS,GAAG,SAAS,CAAC;QAE5B,OAAO,CACL,8BAIE,KAAC,IAAI,IAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAI,EAMvE,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,YAChD,MAAC,KAAK,IAAC,MAAM,EAAE,UAAU,aACtB,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,CAC3B,KAAC,gBAAgB,IACf,WAAW,EAAE,YAAY,EACzB,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,CAAC,EAAE,WAAW,CAAC,CAAC,EAChB,CAAC,EAAE,WAAW,CAAC,CAAC,EAChB,KAAK,EAAE,WAAW,CAAC,CAAC,EACpB,MAAM,EAAE,WAAW,CAAC,CAAC,EACrB,UAAU,EAAE,KAAK,GACjB,CACH,CAAC,CAAC,CAAC,CACF,gBAAgB,CAAC,UAAU,CAAC,CAC7B,EAEA,WAAW;gCACV,iBAAiB,IAAI,IAAI;gCACzB,uBAAuB,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAE3D,WAAW;gCACV,YAAY,IAAI,IAAI;gCACpB,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;gCACjC,uBAAuB,CAAC,YAAY,EAAE,cAAc,CAAC,IACjD,GACF,IACP,CACJ,CAAC;IACJ,CAAC,CAAC;IAEF,qFAAqF;IACrF,qFAAqF;IACrF,kFAAkF;IAClF,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,MAAM,EAAE,GAAG,gBAAgB,CAAC;QAC5B,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEhB,MAAM,WAAW,GACf,kBAAkB;YAClB,YAAY;YACZ,aAAa;YACb,mBAAmB,CAAC;QACtB,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC;QACzD,MAAM,YAAY,GAAG,WAAW,IAAI,YAAY,CAAC;QAEjD,IAAI,SAAS,IAAI,YAAY,EAAE;YAC7B,OAAO,CACL,KAAC,gBAAgB,IACf,WAAW,EAAE,YAAY,EACzB,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,UAAU,EAAE,KAAK,GACjB,CACH,CAAC;SACH;QAED,wEAAwE;QACxE,MAAM,UAAU,GAAG,WAAW,IAAI,YAAY,CAAC;QAC/C,IAAI,UAAU,EAAE;YACd,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,UAAU,EACjB,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,GACV,CACH,CAAC;SACH;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,0EAA0E;IAC1E,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE;QACH,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACzC,4EAA4E;YAC5E,0EAA0E;YAC1E,8CAA8C;YAC9C,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,oBAAoB,CACjC,CAAC,EAAE,CAAC,EACJ,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EACtC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAC3C,CAAC;YACF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACxE,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;gBAC9C,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtB,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO;aACR;YACD,IAAI,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACxE,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtB,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO;aACR;YACD,MAAM,IAAI,GAAG,kBAAkB,CAC7B,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAClB,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EACtC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CACjD,CAAC;YACF,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC1B,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,OAAgB,EAAE,EAAE;YACzD,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,MAAM,GAAG,oBAAoB,CACjC,CAAC,EAAE,CAAC,EACJ,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EACtC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAC3C,CAAC;YACF,IAAI,iBAAiB,CAAC,OAAO,EAAE;gBAC7B,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAC5C;iBAAM;gBACL,iBAAiB;gBACjB,iBAAiB,EAAE,CAAC;gBACpB,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO;oBAAE,OAAO;gBACxF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,QAAQ,IAAI,IAAI;oBAAE,OAAO;gBAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;gBAC/D,kBAAkB,CAAC,OAAO,EAAE,CAAC;oBAC3B,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,UAAU;oBAChB,QAAQ;oBACR,UAAU,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC;iBAC7C,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YAC5C,qDAAqD;YACrD,IAAI,iBAAiB,CAAC,OAAO,EAAE;gBAC7B,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtB,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO;aACR;YACD,MAAM,MAAM,GAAG,oBAAoB,CACjC,CAAC,EAAE,CAAC,EACJ,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EACtC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAC3C,CAAC;YACF,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3C,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,EAAE;aACjB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACb,SAAS,CAAC;YACV,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YACpB,SAAS,CAAC;YACV,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC;aACD,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;YAChB,SAAS,CAAC;YACV,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC,EACD,EAAE,CACH,CAAC;IAEF,2EAA2E;IAC3E,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE;QACH,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;YACnD,iBAAiB,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YACjD,eAAe,CAAC,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;YACtD,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;QACvD,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;YACnE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;YAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;gBACtB,OAAO;aACR;YACD,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAElB,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;YACxC,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAE5C,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAE3D,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC;YAEhE,IAAI,MAAM,GAAG;gBACX,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC1C,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;aAC3C,CAAC;YAEF,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aACzB;iBAAM;gBACL,MAAM,GAAG,cAAc,CACrB,MAAM,EACN,QAAQ,EACR,EAAE,EACF,EAAE,EACF,cAAc,CAAC,OAAO,CACvB,CAAC;aACH;YAED,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvB,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,YAAY,CAAC,OAAO,GAAG,QAAQ,CAAC;YAChC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC;QAChC,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,YAAY,CAAC,OAAO,IAAI,IAAI,EAAE;gBAChC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;aAC1B;QACH,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,KAAK,EAAE;aACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACb,SAAS,CAAC;YACV,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC;aACD,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,SAAS,CAAC;YACV,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,SAAS,CAAC;YACV,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC,EACD,EAAE,CACH,CAAC;IAEF,0EAA0E;IAC1E,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE;QACH,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,UAAU,CAAC,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;QACnD,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,YAAoB,EAAE,YAAoB,EAAE,EAAE;YAChE,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC,EAAE;gBAC7B,OAAO;aACR;YACD,MAAM,MAAM,GAAG,cAAc,CAC3B;gBACE,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY;gBACtC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY;aACvC,EACD,YAAY,CAAC,OAAO,EACpB,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,OAAO,EAClB,cAAc,CAAC,OAAO,CACvB,CAAC;YACF,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC;QAChC,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,YAAY,CAAC,OAAO,IAAI,IAAI,EAAE;gBAChC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;aAC1B;QACH,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,EAAE;aACjB,WAAW,CAAC,CAAC,CAAC;aACd,WAAW,CAAC,CAAC,CAAC;aACd,WAAW,CAAC,EAAE,CAAC;aACf,OAAO,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC;YACV,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvB,CAAC,CAAC;aACD,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,SAAS,CAAC;YACV,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,SAAS,CAAC;YACV,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC,EACD,EAAE,CACH,CAAC;IAEF,0EAA0E;IAC1E,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CACH,OAAO,CAAC,SAAS,CACf,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,EAC9C,UAAU,CACX,EACH,EAAE,CACH,CAAC;IAGF,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,aACpC,KAAC,IAAI,IACH,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC/C,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC,YAEA,iBAAiB,CAAC,CAAC,CAAC,CACnB,KAAC,eAAe,IAAC,OAAO,EAAE,eAAe,YACvC,KAAC,IAAI,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAC9C,KAAC,MAAM,IACL,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAC1C,aAAa,EAAC,MAAM,YAEnB,UAAU,EAAE,GACN,GACJ,GACS,CACnB,CAAC,CAAC,CAAC,IAAI,GACH,EAEN,sBAAsB,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAC5C,KAAC,IAAI,IACH,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,GAAG,GAAG;oBAC/B,GAAG,EAAE,CAAC;oBACN,KAAK,EAAE,gBAAgB,CAAC,CAAC;oBACzB,MAAM,EAAE,gBAAgB,CAAC,CAAC;oBAC1B,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,QAAQ;iBACnB,EACD,aAAa,EAAC,MAAM,YAEpB,KAAC,MAAM,IACL,GAAG,EAAE,sBAAsB,EAC3B,KAAK,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,EAChE,aAAa,EAAC,MAAM,YAEpB,KAAC,KAAK,cACH,oBAAoB,EAAE,GACjB,GACD,GACJ,CACR,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;QACP,eAAe,EAAE,MAAM;KACxB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,UAAU;QACpB,eAAe,EAAE,SAAS;QAC1B,WAAW,EAAE,UAAU,CAAC,aAAa;QACrC,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC,CAAC;AAEH,eAAe,iBAAiB,CAAC"} \ No newline at end of file diff --git a/dist/utils/canvasGeometry.d.ts b/dist/utils/canvasGeometry.d.ts new file mode 100644 index 0000000..7e36e80 --- /dev/null +++ b/dist/utils/canvasGeometry.d.ts @@ -0,0 +1,81 @@ +import { type SkImage } from '@shopify/react-native-skia'; +import type { SegmentRegion } from './maskSegmentation'; +import type { BgrColor } from '../components/MaskSegmentCanvas.types'; +export type PaintResourceLayers = { + lowFreqImage: SkImage; + highFreqImage: SkImage; +}; +export type ContainRect = { + x: number; + y: number; + w: number; + h: number; +}; +export type WorkScaledBgr = { + buffer: Uint8Array; + cols: number; + rows: number; +}; +export declare function bgrColorEquals(a: BgrColor, b: BgrColor): boolean; +export declare function rectsEqual(a: ContainRect, b: ContainRect): boolean; +export declare function getContainRect(canvasW: number, canvasH: number, imgW: number, imgH: number): ContainRect; +export declare function canvasToNormalized(cx: number, cy: number, canvasW: number, canvasH: number, imgW: number, imgH: number): { + x: number; + y: number; +} | null; +/** Skia matrix: pan → scale around viewport center. Matches screenToCanvasCoords. */ +export declare function buildZoomPanMatrix(panX: number, panY: number, scale: number, canvasW: number, canvasH: number): import("@shopify/react-native-skia").SkMatrix; +/** Clamp pan so scaled containRect does not expose empty margins beyond the viewport. */ +export declare function clampPanOffset(pan: { + x: number; + y: number; +}, scale: number, canvasW: number, canvasH: number, containRect: ContainRect | null): { + x: number; + y: number; +}; +/** + * Inverse of the Skia Group transform applied during pinch-zoom. + * Converts a raw touch point (screen pixels) back to the canvas coordinate + * space where the image and regions are positioned before any scale/pan. + * When zoomScale ≤ 1 (no zoom), returns the input unchanged. + */ +export declare function screenToCanvasCoords(screenX: number, screenY: number, canvasW: number, canvasH: number, zoomScale: number, panOffset: { + x: number; + y: number; +}): { + x: number; + y: number; +}; +export declare function pointInPolygon(x: number, y: number, points: { + x: number; + y: number; +}[]): boolean; +export declare function pointInPolygonWithPadding(x: number, y: number, points: { + x: number; + y: number; +}[], padding: number): boolean; +export declare function getRegionHitPolygons(reg: SegmentRegion): { + x: number; + y: number; +}[][]; +export declare function pointHitsRegion(x: number, y: number, reg: SegmentRegion, options?: { + thinPadding?: number; +}): boolean; +export declare function pointStrictlyHitsRegion(x: number, y: number, reg: SegmentRegion): boolean; +export declare function resolveRegionHit(regions: SegmentRegion[], x: number, y: number): number | null; +export declare function pickKickRegionFromMask(normX: number, normY: number, pick: { + buffer: Uint8Array; + cols: number; + rows: number; +}, kickRegionId: number, baseboardPickMask?: Uint8Array | null, strict?: boolean): number | null; +export declare function pickKickNearStrip(normX: number, normY: number, kickReg: SegmentRegion): boolean; +export declare function lookupRegionFromPickMap(normX: number, normY: number, pick: { + buffer: Uint8Array; + cols: number; + rows: number; +}, radiusPx?: number): number | null; +export declare function releasePaintResourceLayers(layers: PaintResourceLayers | null): void; +export declare function releaseOriginSkImage(image: SkImage | null): void; +export declare function prepareWorkScaledBgrBuffer(bgrBuffer: Uint8Array, cols: number, rows: number, workScale: number): Promise; +export declare function timeLog(tag: string): void; +//# sourceMappingURL=canvasGeometry.d.ts.map \ No newline at end of file diff --git a/dist/utils/canvasGeometry.d.ts.map b/dist/utils/canvasGeometry.d.ts.map new file mode 100644 index 0000000..4c53244 --- /dev/null +++ b/dist/utils/canvasGeometry.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"canvasGeometry.d.ts","sourceRoot":"","sources":["../../src/utils/canvasGeometry.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/canvasGeometry.js b/dist/utils/canvasGeometry.js new file mode 100644 index 0000000..8a962ed --- /dev/null +++ b/dist/utils/canvasGeometry.js @@ -0,0 +1,306 @@ +import { Skia } from '@shopify/react-native-skia'; +import { isBaseboardMaskPixel } from './maskSegmentation'; +import { getMaskSegmentRuntimeConfig } from './maskSegmentRuntime'; +import { resizeBgrBuffer } from './pngImage'; +/* ========================================================================== + * 颜色工具 + * ========================================================================== */ +export function bgrColorEquals(a, b) { + return a.b === b.b && a.g === b.g && a.r === b.r; +} +/* ========================================================================== + * 几何工具 + * ========================================================================== */ +export function rectsEqual(a, b) { + return a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h; +} +export function getContainRect(canvasW, canvasH, imgW, imgH) { + const imgAspect = imgW / imgH; + const canvasAspect = canvasW / canvasH; + if (imgAspect > canvasAspect) { + const w = canvasW; + const h = canvasW / imgAspect; + return { x: 0, y: (canvasH - h) / 2, w, h }; + } + const h = canvasH; + const w = canvasH * imgAspect; + return { x: (canvasW - w) / 2, y: 0, w, h }; +} +export function canvasToNormalized(cx, cy, canvasW, canvasH, imgW, imgH) { + const rect = getContainRect(canvasW, canvasH, imgW, imgH); + if (cx < rect.x || + cx > rect.x + rect.w || + cy < rect.y || + cy > rect.y + rect.h) { + return null; + } + return { + x: (cx - rect.x) / rect.w, + y: (cy - rect.y) / rect.h, + }; +} +/** Skia matrix: pan → scale around viewport center. Matches screenToCanvasCoords. */ +export function buildZoomPanMatrix(panX, panY, scale, canvasW, canvasH) { + const cx = canvasW / 2; + const cy = canvasH / 2; + const m = Skia.Matrix(); + m.translate(panX, panY); + m.translate(cx, cy); + m.scale(scale, scale); + m.translate(-cx, -cy); + return m; +} +/** Clamp pan so scaled containRect does not expose empty margins beyond the viewport. */ +export function clampPanOffset(pan, scale, canvasW, canvasH, containRect) { + if (!containRect || scale <= 1 || canvasW <= 0 || canvasH <= 0) { + return { x: 0, y: 0 }; + } + const cx = canvasW / 2; + const cy = canvasH / 2; + const r = containRect; + const scaledMinX = cx + scale * (r.x - cx); + const scaledMaxX = cx + scale * (r.x + r.w - cx); + const scaledMinY = cy + scale * (r.y - cy); + const scaledMaxY = cy + scale * (r.y + r.h - cy); + let x = pan.x; + let y = pan.y; + if (scaledMaxX - scaledMinX > canvasW) { + x = Math.max(canvasW - scaledMaxX, Math.min(-scaledMinX, x)); + } + else { + x = 0; + } + if (scaledMaxY - scaledMinY > canvasH) { + y = Math.max(canvasH - scaledMaxY, Math.min(-scaledMinY, y)); + } + else { + y = 0; + } + return { x, y }; +} +/** + * Inverse of the Skia Group transform applied during pinch-zoom. + * Converts a raw touch point (screen pixels) back to the canvas coordinate + * space where the image and regions are positioned before any scale/pan. + * When zoomScale ≤ 1 (no zoom), returns the input unchanged. + */ +export function screenToCanvasCoords(screenX, screenY, canvasW, canvasH, zoomScale, panOffset) { + if (zoomScale <= 1) + return { x: screenX, y: screenY }; + return { + x: (screenX - panOffset.x - canvasW / 2) / zoomScale + canvasW / 2, + y: (screenY - panOffset.y - canvasH / 2) / zoomScale + canvasH / 2, + }; +} +/* ========================================================================== + * 点击检测 + * ========================================================================== */ +export function pointInPolygon(x, y, points) { + let inside = false; + for (let i = 0, j = points.length - 1; i < points.length; j = i++) { + const xi = points[i].x; + const yi = points[i].y; + const xj = points[j].x; + const yj = points[j].y; + const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi; + if (intersect) + inside = !inside; + } + return inside; +} +export function pointInPolygonWithPadding(x, y, points, padding) { + if (points.length < 3) { + return false; + } + let minX = points[0].x; + let maxX = points[0].x; + let minY = points[0].y; + let maxY = points[0].y; + for (const point of points) { + minX = Math.min(minX, point.x); + maxX = Math.max(maxX, point.x); + minY = Math.min(minY, point.y); + maxY = Math.max(maxY, point.y); + } + if (x >= minX - padding && + x <= maxX + padding && + y >= minY - padding && + y <= maxY + padding) { + if (maxY - minY < padding * 2.5 || maxX - minX < padding * 2.5) { + return true; + } + } + return pointInPolygon(x, y, points); +} +export function getRegionHitPolygons(reg) { + return reg.hitPolygons && reg.hitPolygons.length > 0 + ? reg.hitPolygons + : reg.polygons; +} +export function pointHitsRegion(x, y, reg, options) { + const interaction = getMaskSegmentRuntimeConfig().interaction; + const thinPadding = options?.thinPadding ?? interaction.thinStripPadding; + const padding = reg.thinStrip ? thinPadding : interaction.regionPadding; + return getRegionHitPolygons(reg).some(poly => poly.length >= 3 && pointInPolygonWithPadding(x, y, poly, padding)); +} +export function pointStrictlyHitsRegion(x, y, reg) { + return getRegionHitPolygons(reg).some(poly => poly.length >= 3 && pointInPolygon(x, y, poly)); +} +export function resolveRegionHit(regions, x, y) { + const hits = []; + for (const reg of regions) { + const bboxPad = reg.thinStrip ? 0.005 : 0; + const b = reg.bbox; + if (x < b.x - bboxPad || + x > b.x + b.w + bboxPad || + y < b.y - bboxPad || + y > b.y + b.h + bboxPad) { + continue; + } + if (pointHitsRegion(x, y, reg)) { + hits.push(reg); + } + } + if (hits.length === 0) { + return null; + } + if (hits.length === 1) { + return hits[0].id; + } + const strictNonThin = hits.filter(reg => !reg.thinStrip && pointStrictlyHitsRegion(x, y, reg)); + if (strictNonThin.length > 0) { + strictNonThin.sort((a, b) => a.area - b.area); + return strictNonThin[0].id; + } + const strictThin = hits.filter(reg => reg.thinStrip && pointStrictlyHitsRegion(x, y, reg)); + if (strictThin.length > 0) { + strictThin.sort((a, b) => a.area - b.area); + return strictThin[0].id; + } + const nonThin = hits.filter(reg => !reg.thinStrip); + if (nonThin.length > 0) { + nonThin.sort((a, b) => a.area - b.area); + return nonThin[0].id; + } + hits.sort((a, b) => a.area - b.area); + return hits[0].id; +} +/* ========================================================================== + * 踢脚线/掩码拾取 + * ========================================================================== */ +export function pickKickRegionFromMask(normX, normY, pick, kickRegionId, baseboardPickMask, strict = false) { + const cx = Math.floor(normX * pick.cols); + const cy = Math.floor(normY * pick.rows); + if (cx < 0 || cy < 0 || cx >= pick.cols || cy >= pick.rows) { + return null; + } + if (strict) { + if (baseboardPickMask) { + return baseboardPickMask[cy * pick.cols + cx] ? kickRegionId : null; + } + return isBaseboardMaskPixel(pick.buffer, pick.cols, pick.rows, cx, cy) + ? kickRegionId + : null; + } + const interaction = getMaskSegmentRuntimeConfig().interaction; + const radius = Math.max(interaction.kickMaskPickRadiusPx, Math.floor(pick.cols * 0.022)); + const radiusSq = radius * radius; + for (let dy = -radius; dy <= radius; dy++) { + for (let dx = -radius; dx <= radius; dx++) { + if (dx * dx + dy * dy > radiusSq) { + continue; + } + const x = cx + dx; + const y = cy + dy; + if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { + continue; + } + if (baseboardPickMask) { + if (baseboardPickMask[y * pick.cols + x]) { + return kickRegionId; + } + continue; + } + if (isBaseboardMaskPixel(pick.buffer, pick.cols, pick.rows, x, y)) { + return kickRegionId; + } + } + } + return null; +} +export function pickKickNearStrip(normX, normY, kickReg) { + const polys = kickReg.hitPolygons ?? kickReg.polygons; + const pad = getMaskSegmentRuntimeConfig().interaction.thinStripPadding + 0.004; + return polys.some(poly => poly.length >= 3 && pointInPolygonWithPadding(normX, normY, poly, pad)); +} +export function lookupRegionFromPickMap(normX, normY, pick, radiusPx = getMaskSegmentRuntimeConfig().interaction.pickMapSearchRadiusPx) { + const cx = Math.min(pick.cols - 1, Math.max(0, Math.floor(normX * pick.cols))); + const cy = Math.min(pick.rows - 1, Math.max(0, Math.floor(normY * pick.rows))); + const readCode = (x, y) => pick.buffer[y * pick.cols + x]; + const center = readCode(cx, cy); + if (center > 0) { + return center - 1; + } + if (radiusPx <= 0) { + return null; + } + const r = Math.max(4, radiusPx); + const rSq = r * r; + for (let dy = -r; dy <= r; dy++) { + for (let dx = -r; dx <= r; dx++) { + if (dx * dx + dy * dy > rSq) { + continue; + } + const x = cx + dx; + const y = cy + dy; + if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { + continue; + } + const code = readCode(x, y); + if (code > 0) { + return code - 1; + } + } + } + return null; +} +/* ========================================================================== + * 资源释放 + * ========================================================================== */ +export function releasePaintResourceLayers(layers) { + if (!layers) { + return; + } + layers.lowFreqImage.dispose(); + layers.highFreqImage.dispose(); +} +export function releaseOriginSkImage(image) { + if (image) { + image.dispose(); + } +} +/* ========================================================================== + * 工作缓冲区缩放 + * ========================================================================== */ +export async function prepareWorkScaledBgrBuffer(bgrBuffer, cols, rows, workScale) { + if (workScale >= 1) { + return { buffer: bgrBuffer, cols, rows }; + } + const workCols = Math.floor(cols * workScale); + const workRows = Math.floor(rows * workScale); + const buffer = resizeBgrBuffer(bgrBuffer, cols, rows, workCols, workRows); + return { buffer, cols: workCols, rows: workRows }; +} +/* ========================================================================== + * 分段计时工具(仅开发环境生效) + * ========================================================================== */ +let _timeLogTs = 0; +export function timeLog(tag) { + if (!__DEV__) + return; + const now = performance.now(); + const dt = _timeLogTs ? now - _timeLogTs : 0; + console.log(`[⏱ ${tag}] ${dt.toFixed(2)} ms`); + _timeLogTs = now; +} +//# sourceMappingURL=canvasGeometry.js.map \ No newline at end of file diff --git a/dist/utils/canvasGeometry.js.map b/dist/utils/canvasGeometry.js.map new file mode 100644 index 0000000..a9cd695 --- /dev/null +++ b/dist/utils/canvasGeometry.js.map @@ -0,0 +1 @@ +{"version":3,"file":"canvasGeometry.js","sourceRoot":"","sources":["../../src/utils/canvasGeometry.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/maskOutlinePaths.d.ts b/dist/utils/maskOutlinePaths.d.ts new file mode 100644 index 0000000..29163dd --- /dev/null +++ b/dist/utils/maskOutlinePaths.d.ts @@ -0,0 +1,18 @@ +import { type SkPath } from '@shopify/react-native-skia'; +import type { SegmentRegion, RegionMaskData } from './maskSegmentation'; +export declare function buildRegionOutlinePathForRegion(regionId: number, regions: SegmentRegion[], maskData: RegionMaskData, rect: { + x: number; + y: number; + w: number; + h: number; +}, normSeed?: { + x: number; + y: number; +}): SkPath; +export declare function buildAllRegionOutlinePaths(regions: SegmentRegion[], maskData: RegionMaskData, rect: { + x: number; + y: number; + w: number; + h: number; +}): Map; +//# sourceMappingURL=maskOutlinePaths.d.ts.map \ No newline at end of file diff --git a/dist/utils/maskOutlinePaths.d.ts.map b/dist/utils/maskOutlinePaths.d.ts.map new file mode 100644 index 0000000..28baaaa --- /dev/null +++ b/dist/utils/maskOutlinePaths.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"maskOutlinePaths.d.ts","sourceRoot":"","sources":["../../src/utils/maskOutlinePaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqcxE,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,QAAQ,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC,MAAM,CAUR;AA4DD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBrB"} \ No newline at end of file diff --git a/dist/utils/maskOutlinePaths.js b/dist/utils/maskOutlinePaths.js new file mode 100644 index 0000000..91a3c73 --- /dev/null +++ b/dist/utils/maskOutlinePaths.js @@ -0,0 +1,419 @@ +import { Skia } from '@shopify/react-native-skia'; +import { getMaskSegmentRuntimeConfig } from './maskSegmentRuntime'; +function isMaskPixelOn(binary, cols, rows, x, y) { + return (x >= 0 && x < cols && y >= 0 && y < rows && binary[y * cols + x] > 0); +} +function collectBoundaryEdges(binary, cols, rows) { + const edges = []; + for (let y = 0; y < rows; y++) { + const row = y * cols; + for (let x = 0; x < cols; x++) { + if (!binary[row + x]) { + continue; + } + if (!isMaskPixelOn(binary, cols, rows, x, y - 1)) { + edges.push({ x0: x, y0: y, x1: x + 1, y1: y }); + } + if (!isMaskPixelOn(binary, cols, rows, x, y + 1)) { + edges.push({ x0: x + 1, y0: y + 1, x1: x, y1: y + 1 }); + } + if (!isMaskPixelOn(binary, cols, rows, x - 1, y)) { + edges.push({ x0: x, y0: y + 1, x1: x, y1: y }); + } + if (!isMaskPixelOn(binary, cols, rows, x + 1, y)) { + edges.push({ x0: x + 1, y0: y, x1: x + 1, y1: y + 1 }); + } + } + } + return edges; +} +function chainBoundaryLoops(edges) { + const outgoing = new Map(); + const edgeKey = (edge) => `${edge.x0},${edge.y0}->${edge.x1},${edge.y1}`; + for (const edge of edges) { + const key = `${edge.x0},${edge.y0}`; + const list = outgoing.get(key); + if (list) { + list.push(edge); + } + else { + outgoing.set(key, [edge]); + } + } + const used = new Set(); + const loops = []; + for (const edge of edges) { + const startEdgeKey = edgeKey(edge); + if (used.has(startEdgeKey)) { + continue; + } + const loop = [{ x: edge.x0, y: edge.y0 }]; + let current = edge; + used.add(startEdgeKey); + loop.push({ x: current.x1, y: current.y1 }); + while (true) { + const endKey = `${current.x1},${current.y1}`; + const startKey = `${loop[0].x},${loop[0].y}`; + if (endKey === startKey && loop.length > 2) { + break; + } + const candidates = outgoing.get(endKey); + const next = candidates?.find(candidate => !used.has(edgeKey(candidate))); + if (!next) { + break; + } + current = next; + used.add(edgeKey(current)); + loop.push({ x: current.x1, y: current.y1 }); + if (loop.length > edges.length + 1) { + break; + } + } + if (loop.length >= 4) { + loops.push(loop); + } + } + return loops; +} +function simplifyOrthogonalLoop(points) { + if (points.length <= 3) { + return points; + } + const out = [points[0]]; + for (let i = 1; i < points.length - 1; i++) { + const prev = out[out.length - 1]; + const curr = points[i]; + const next = points[i + 1]; + const collinearX = prev.x === curr.x && curr.x === next.x; + const collinearY = prev.y === curr.y && curr.y === next.y; + if (!collinearX && !collinearY) { + out.push(curr); + } + } + out.push(points[points.length - 1]); + return out; +} +function perpendicularDistance2(point, lineStart, lineEnd) { + const dx = lineEnd.x - lineStart.x; + const dy = lineEnd.y - lineStart.y; + if (dx === 0 && dy === 0) { + return Math.hypot(point.x - lineStart.x, point.y - lineStart.y); + } + const t = ((point.x - lineStart.x) * dx + (point.y - lineStart.y) * dy) / + (dx * dx + dy * dy); + const projX = lineStart.x + t * dx; + const projY = lineStart.y + t * dy; + return Math.hypot(point.x - projX, point.y - projY); +} +/** + * Ramer-Douglas-Peucker simplification for outline loops. + * Reduces stair-step jagginess from grid boundary tracing so that dashed + * outlines render smoothly instead of zigzagging across every pixel edge. + * Epsilon is in grid-pixel units (1.0 = one mask pixel). + */ +function simplifyLoopRdp(points, epsilon) { + if (points.length <= 2) { + return points; + } + let maxDist = 0; + let index = 0; + const end = points.length - 1; + const lineStart = points[0]; + const lineEnd = points[end]; + for (let i = 1; i < end; i++) { + const p = points[i]; + const dist = perpendicularDistance2(p, lineStart, lineEnd); + if (dist > maxDist) { + maxDist = dist; + index = i; + } + } + if (maxDist > epsilon) { + const left = simplifyLoopRdp(points.slice(0, index + 1), epsilon); + const right = simplifyLoopRdp(points.slice(index), epsilon); + return [...left.slice(0, -1), ...right]; + } + return [lineStart, lineEnd]; +} +function loopsToSkPath(loops, cols, rows, rect) { + const path = Skia.Path.Make(); + for (const rawLoop of loops) { + // Two-pass simplification: first remove collinear points, then RDP to + // smooth stair-step artifacts from grid boundary tracing. + const orthogonal = simplifyOrthogonalLoop(rawLoop); + const loop = simplifyLoopRdp(orthogonal, 1.0); + if (loop.length < 2) { + continue; + } + const [first, ...rest] = loop; + path.moveTo(rect.x + (first.x / cols) * rect.w, rect.y + (first.y / rows) * rect.h); + for (const point of rest) { + path.lineTo(rect.x + (point.x / cols) * rect.w, rect.y + (point.y / rows) * rect.h); + } + path.close(); + } + return path; +} +function pointInIntegerLoop(px, py, loop) { + let inside = false; + for (let i = 0, j = loop.length - 1; i < loop.length; j = i++) { + const xi = loop[i].x; + const yi = loop[i].y; + const xj = loop[j].x; + const yj = loop[j].y; + const intersect = yi > py !== yj > py && + px < ((xj - xi) * (py - yi)) / (yj - yi + Number.EPSILON) + xi; + if (intersect) { + inside = !inside; + } + } + return inside; +} +function loopBoundingArea(loop) { + if (loop.length === 0) { + return 0; + } + let minX = loop[0].x; + let maxX = loop[0].x; + let minY = loop[0].y; + let maxY = loop[0].y; + for (const point of loop) { + minX = Math.min(minX, point.x); + maxX = Math.max(maxX, point.x); + minY = Math.min(minY, point.y); + maxY = Math.max(maxY, point.y); + } + return (maxX - minX) * (maxY - minY); +} +function filterOutlineLoops(loops, cols, rows, seedPx) { + if (loops.length === 0) { + return loops; + } + const minLoopArea = Math.max(16, Math.floor(cols * rows * 0.00005)); + const significant = loops.filter(loop => loopBoundingArea(loop) >= minLoopArea); + const candidates = significant.length > 0 ? significant : loops; + if (seedPx) { + const sampleX = seedPx.x + 0.5; + const sampleY = seedPx.y + 0.5; + const containing = candidates.filter(loop => pointInIntegerLoop(sampleX, sampleY, loop)); + if (containing.length > 0) { + containing.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); + return containing; + } + } + candidates.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); + // Keep loops ≥ 5% of the largest area to filter isolated noise speckles + // while retaining genuine disconnected fragments of the same region. + const minKeepArea = loopBoundingArea(candidates[0]) * 0.05; + return candidates.filter(loop => loopBoundingArea(loop) >= minKeepArea); +} +function floodFillComponent(binary, cols, rows, seedX, seedY) { + if (seedX < 0 || + seedY < 0 || + seedX >= cols || + seedY >= rows || + !binary[seedY * cols + seedX]) { + return null; + } + const out = new Uint8Array(cols * rows); + const stack = [seedY * cols + seedX]; + out[stack[0]] = 255; + while (stack.length > 0) { + const index = stack.pop(); + const x = index % cols; + const y = (index - x) / cols; + if (x > 0) { + const left = index - 1; + if (binary[left] && !out[left]) { + out[left] = 255; + stack.push(left); + } + } + if (x + 1 < cols) { + const right = index + 1; + if (binary[right] && !out[right]) { + out[right] = 255; + stack.push(right); + } + } + if (y > 0) { + const up = index - cols; + if (binary[up] && !out[up]) { + out[up] = 255; + stack.push(up); + } + } + if (y + 1 < rows) { + const down = index + cols; + if (binary[down] && !out[down]) { + out[down] = 255; + stack.push(down); + } + } + } + return out; +} +function findLargestComponentSeed(binary, cols, rows) { + const visited = new Uint8Array(cols * rows); + let bestArea = 0; + let bestSeed = null; + for (let y = 0; y < rows; y++) { + const row = y * cols; + for (let x = 0; x < cols; x++) { + const start = row + x; + if (!binary[start] || visited[start]) { + continue; + } + let area = 0; + let sumX = 0; + let sumY = 0; + const stack = [start]; + visited[start] = 1; + while (stack.length > 0) { + const index = stack.pop(); + area += 1; + const px = index % cols; + const py = (index - px) / cols; + sumX += px; + sumY += py; + if (px > 0) { + const left = index - 1; + if (binary[left] && !visited[left]) { + visited[left] = 1; + stack.push(left); + } + } + if (px + 1 < cols) { + const right = index + 1; + if (binary[right] && !visited[right]) { + visited[right] = 1; + stack.push(right); + } + } + if (py > 0) { + const up = index - cols; + if (binary[up] && !visited[up]) { + visited[up] = 1; + stack.push(up); + } + } + if (py + 1 < rows) { + const down = index + cols; + if (binary[down] && !visited[down]) { + visited[down] = 1; + stack.push(down); + } + } + } + if (area > bestArea) { + bestArea = area; + bestSeed = { + x: Math.floor(sumX / area), + y: Math.floor(sumY / area), + }; + } + } + } + return bestSeed; +} +function buildRegionOutlinePathFromBinary(binary, cols, rows, rect, seedPx) { + let working = binary; + if (seedPx) { + const component = floodFillComponent(binary, cols, rows, seedPx.x, seedPx.y); + if (!component) { + return Skia.Path.Make(); + } + working = component; + } + const edges = collectBoundaryEdges(working, cols, rows); + const loops = chainBoundaryLoops(edges); + const filtered = filterOutlineLoops(loops, cols, rows, seedPx); + return loopsToSkPath(filtered, cols, rows, rect); +} +function resolveRegionOutlineSeedPx(binary, cols, rows, normSeed) { + if (normSeed) { + return { + x: Math.min(cols - 1, Math.max(0, Math.floor(normSeed.x * cols))), + y: Math.min(rows - 1, Math.max(0, Math.floor(normSeed.y * rows))), + }; + } + return findLargestComponentSeed(binary, cols, rows) ?? undefined; +} +export function buildRegionOutlinePathForRegion(regionId, regions, maskData, rect, normSeed) { + const binaries = extractRegionBinaries(regions, maskData); + const binary = binaries.get(regionId); + if (!binary) { + return Skia.Path.Make(); + } + const { cols, rows } = maskData; + const seedPx = resolveRegionOutlineSeedPx(binary, cols, rows, normSeed); + return buildRegionOutlinePathFromBinary(binary, cols, rows, rect, seedPx); +} +function extractRegionBinaries(regions, maskData) { + const { labels, baseboardBinary, cols, rows, wallSubLabels } = maskData; + const size = cols * rows; + const binaries = new Map(); + const semanticColors = getMaskSegmentRuntimeConfig().mask.semanticColors; + const regionIdBySemantic = new Int32Array(semanticColors.length); + regionIdBySemantic.fill(-1); + const wallSubRegionIds = new Map(); + let baseboardRegionId = null; + for (const reg of regions) { + binaries.set(reg.id, new Uint8Array(size)); + if (reg.thinStrip) { + baseboardRegionId = reg.id; + continue; + } + const wallMatch = /^wall-(\d+)$/.exec(reg.name); + if (wallMatch && wallSubLabels) { + wallSubRegionIds.set(Number(wallMatch[1]) - 1, reg.id); + continue; + } + const semanticIndex = semanticColors.findIndex(entry => entry.name === reg.name); + if (semanticIndex >= 0) { + regionIdBySemantic[semanticIndex] = reg.id; + } + } + const semanticCount = semanticColors.length; + const wallIdx = semanticColors.findIndex(entry => entry.name === 'wall'); + for (let i = 0; i < size; i++) { + if (baseboardRegionId != null && baseboardBinary[i] > 0) { + binaries.get(baseboardRegionId)[i] = 255; + continue; + } + if (wallSubLabels && wallIdx >= 0 && labels[i] === wallIdx) { + const subIdx = wallSubLabels[i]; + if (subIdx !== 255) { + const regionId = wallSubRegionIds.get(subIdx); + if (regionId !== undefined) { + binaries.get(regionId)[i] = 255; + } + } + continue; + } + const semanticIndex = labels[i]; + if (semanticIndex < semanticCount && regionIdBySemantic[semanticIndex] >= 0) { + binaries.get(regionIdBySemantic[semanticIndex])[i] = 255; + } + } + return binaries; +} +export function buildAllRegionOutlinePaths(regions, maskData, rect) { + const { cols, rows } = maskData; + const binaries = extractRegionBinaries(regions, maskData); + const map = new Map(); + for (const reg of regions) { + const binary = binaries.get(reg.id); + if (!binary) { + map.set(reg.id, Skia.Path.Make()); + continue; + } + // No seed — build outlines from the full binary so all disconnected + // fragments (common after mask downsampling) get dashed outlines during + // the init flash loop. Per-region hold highlights still use a touch-seed + // via buildRegionOutlinePathForRegion for precise fragment isolation. + map.set(reg.id, buildRegionOutlinePathFromBinary(binary, cols, rows, rect)); + } + return map; +} +//# sourceMappingURL=maskOutlinePaths.js.map \ No newline at end of file diff --git a/dist/utils/maskOutlinePaths.js.map b/dist/utils/maskOutlinePaths.js.map new file mode 100644 index 0000000..522c7f1 --- /dev/null +++ b/dist/utils/maskOutlinePaths.js.map @@ -0,0 +1 @@ +{"version":3,"file":"maskOutlinePaths.js","sourceRoot":"","sources":["../../src/utils/maskOutlinePaths.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/maskSegmentRuntime.d.ts.map b/dist/utils/maskSegmentRuntime.d.ts.map index 594e718..6e3726a 100644 --- a/dist/utils/maskSegmentRuntime.d.ts.map +++ b/dist/utils/maskSegmentRuntime.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"maskSegmentRuntime.d.ts","sourceRoot":"","sources":["../../src/utils/maskSegmentRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,cAAc,EAEf,MAAM,uCAAuC,CAAC;AAC/C,WAAW;AACX,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,cAAc,CAQlD,CAAC;AAEF,aAAa;AACb,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,cAAc,CAQpD,CAAC;AAEF,UAAU;AACV,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,cAAc,CAQjD,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAI7E,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CAAiB,CAAC;AAE/E,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,cAAc,EACvB,SAAS,CAAC,EAAE,cAAc,GACzB,QAAQ,CAAC,cAAc,CAAC,CAI1B;AAWD,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAkBtD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,iBAAiB,CAOlE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CACxC,IAAI,CACF,iBAAiB,EACf,yBAAyB,GACzB,eAAe,GACf,kBAAkB,GAClB,wBAAwB,CAC3B,CACF,GAAG;IACF,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CAwBrC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnC,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7B,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;CAC1C,CAAC;AAMF,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,mBAAmB,CA0D5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE;IAC1C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,0BAA0B,CAiB7B;AAKD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE;IAClD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,0BAA0B,CAiB7B;AAED,wBAAgB,2BAA2B,IAAI,0BAA0B,CAExE;AAED,wBAAgB,6BAA6B,IAAI,0BAA0B,CAI1E"} \ No newline at end of file +{"version":3,"file":"maskSegmentRuntime.d.ts","sourceRoot":"","sources":["../../src/utils/maskSegmentRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,cAAc,EAEf,MAAM,uCAAuC,CAAC;AAC/C,WAAW;AACX,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,cAAc,CAQlD,CAAC;AAEF,aAAa;AACb,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,cAAc,CAQpD,CAAC;AAEF,UAAU;AACV,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,cAAc,CAQjD,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAI7E,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CAAmB,CAAC;AAEjF,wBAAgB,qBAAqB,CACnC,MAAM,CAAC,EAAE,cAAc,EACvB,SAAS,CAAC,EAAE,cAAc,GACzB,QAAQ,CAAC,cAAc,CAAC,CAI1B;AAWD,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAkBtD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,iBAAiB,CAOlE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CACxC,IAAI,CACF,iBAAiB,EACf,yBAAyB,GACzB,eAAe,GACf,kBAAkB,GAClB,wBAAwB,CAC3B,CACF,GAAG;IACF,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CAwBrC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnC,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7B,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;CAC1C,CAAC;AAMF,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,mBAAmB,CA0D5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE;IAC1C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,0BAA0B,CAiB7B;AAKD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE;IAClD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,0BAA0B,CAiB7B;AAED,wBAAgB,2BAA2B,IAAI,0BAA0B,CAExE;AAED,wBAAgB,6BAA6B,IAAI,0BAA0B,CAI1E"} \ No newline at end of file diff --git a/dist/utils/maskSegmentRuntime.js b/dist/utils/maskSegmentRuntime.js index 94a205a..f9e926f 100644 --- a/dist/utils/maskSegmentRuntime.js +++ b/dist/utils/maskSegmentRuntime.js @@ -34,7 +34,7 @@ export const PIPELINE_PRESETS = { medium: PIPELINE_MEDIUM, low: PIPELINE_LOW, }; -export const DEFAULT_PIPELINE_CONFIG = PIPELINE_HIGH; +export const DEFAULT_PIPELINE_CONFIG = PIPELINE_MEDIUM; export function resolvePipelineConfig(preset, overrides) { const base = preset != null ? PIPELINE_PRESETS[preset] : DEFAULT_PIPELINE_CONFIG; return { ...base, ...overrides }; diff --git a/dist/utils/maskSegmentRuntime.js.map b/dist/utils/maskSegmentRuntime.js.map index 9820548..83f395d 100644 --- a/dist/utils/maskSegmentRuntime.js.map +++ b/dist/utils/maskSegmentRuntime.js.map @@ -1 +1 @@ -{"version":3,"file":"maskSegmentRuntime.js","sourceRoot":"","sources":["../../src/utils/maskSegmentRuntime.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"maskSegmentRuntime.js","sourceRoot":"","sources":["../../src/utils/maskSegmentRuntime.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/maskSegmentation.d.ts b/dist/utils/maskSegmentation.d.ts index dd1a16f..b6be212 100644 --- a/dist/utils/maskSegmentation.d.ts +++ b/dist/utils/maskSegmentation.d.ts @@ -55,21 +55,8 @@ export type SegmentRegion = { thinStrip?: boolean; }; export declare function buildRegionOutlinePolygons(reg: SegmentRegion): NormPoint[][]; -export declare function buildRegionOutlinePathForRegion(regionId: number, regions: SegmentRegion[], maskData: RegionMaskData, rect: { - x: number; - y: number; - w: number; - h: number; -}, normSeed?: { - x: number; - y: number; -}): SkPath; -export declare function buildAllRegionOutlinePaths(regions: SegmentRegion[], maskData: RegionMaskData, rect: { - x: number; - y: number; - w: number; - h: number; -}): Map; +import { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion } from './maskOutlinePaths'; +export { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion }; /** 从二值图逐行条带构建蒙版(供 Skia PathBuilder 使用) */ export declare function appendMaskBinaryToPathBuilder(binary: Uint8Array, cols: number, rows: number, rect: { x: number; diff --git a/dist/utils/maskSegmentation.d.ts.map b/dist/utils/maskSegmentation.d.ts.map index c0362d2..9054859 100644 --- a/dist/utils/maskSegmentation.d.ts.map +++ b/dist/utils/maskSegmentation.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"maskSegmentation.d.ts","sourceRoot":"","sources":["../../src/utils/maskSegmentation.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"maskSegmentation.d.ts","sourceRoot":"","sources":["../../src/utils/maskSegmentation.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/maskSegmentation.js b/dist/utils/maskSegmentation.js index 60adead..b4954f6 100644 --- a/dist/utils/maskSegmentation.js +++ b/dist/utils/maskSegmentation.js @@ -24,422 +24,9 @@ export function buildRegionOutlinePolygons(reg) { } return [bboxToPolygon(reg.bbox)]; } -function isMaskPixelOn(binary, cols, rows, x, y) { - return (x >= 0 && x < cols && y >= 0 && y < rows && binary[y * cols + x] > 0); -} -function collectBoundaryEdges(binary, cols, rows) { - const edges = []; - for (let y = 0; y < rows; y++) { - const row = y * cols; - for (let x = 0; x < cols; x++) { - if (!binary[row + x]) { - continue; - } - if (!isMaskPixelOn(binary, cols, rows, x, y - 1)) { - edges.push({ x0: x, y0: y, x1: x + 1, y1: y }); - } - if (!isMaskPixelOn(binary, cols, rows, x, y + 1)) { - edges.push({ x0: x + 1, y0: y + 1, x1: x, y1: y + 1 }); - } - if (!isMaskPixelOn(binary, cols, rows, x - 1, y)) { - edges.push({ x0: x, y0: y + 1, x1: x, y1: y }); - } - if (!isMaskPixelOn(binary, cols, rows, x + 1, y)) { - edges.push({ x0: x + 1, y0: y, x1: x + 1, y1: y + 1 }); - } - } - } - return edges; -} -function chainBoundaryLoops(edges) { - const outgoing = new Map(); - const edgeKey = (edge) => `${edge.x0},${edge.y0}->${edge.x1},${edge.y1}`; - for (const edge of edges) { - const key = `${edge.x0},${edge.y0}`; - const list = outgoing.get(key); - if (list) { - list.push(edge); - } - else { - outgoing.set(key, [edge]); - } - } - const used = new Set(); - const loops = []; - for (const edge of edges) { - const startEdgeKey = edgeKey(edge); - if (used.has(startEdgeKey)) { - continue; - } - const loop = [{ x: edge.x0, y: edge.y0 }]; - let current = edge; - used.add(startEdgeKey); - loop.push({ x: current.x1, y: current.y1 }); - while (true) { - const endKey = `${current.x1},${current.y1}`; - const startKey = `${loop[0].x},${loop[0].y}`; - if (endKey === startKey && loop.length > 2) { - break; - } - const candidates = outgoing.get(endKey); - const next = candidates?.find(candidate => !used.has(edgeKey(candidate))); - if (!next) { - break; - } - current = next; - used.add(edgeKey(current)); - loop.push({ x: current.x1, y: current.y1 }); - if (loop.length > edges.length + 1) { - break; - } - } - if (loop.length >= 4) { - loops.push(loop); - } - } - return loops; -} -function simplifyOrthogonalLoop(points) { - if (points.length <= 3) { - return points; - } - const out = [points[0]]; - for (let i = 1; i < points.length - 1; i++) { - const prev = out[out.length - 1]; - const curr = points[i]; - const next = points[i + 1]; - const collinearX = prev.x === curr.x && curr.x === next.x; - const collinearY = prev.y === curr.y && curr.y === next.y; - if (!collinearX && !collinearY) { - out.push(curr); - } - } - out.push(points[points.length - 1]); - return out; -} -function perpendicularDistance2(point, lineStart, lineEnd) { - const dx = lineEnd.x - lineStart.x; - const dy = lineEnd.y - lineStart.y; - if (dx === 0 && dy === 0) { - return Math.hypot(point.x - lineStart.x, point.y - lineStart.y); - } - const t = ((point.x - lineStart.x) * dx + (point.y - lineStart.y) * dy) / - (dx * dx + dy * dy); - const projX = lineStart.x + t * dx; - const projY = lineStart.y + t * dy; - return Math.hypot(point.x - projX, point.y - projY); -} -/** - * Ramer-Douglas-Peucker simplification for outline loops. - * Reduces stair-step jagginess from grid boundary tracing so that dashed - * outlines render smoothly instead of zigzagging across every pixel edge. - * Epsilon is in grid-pixel units (1.0 = one mask pixel). - */ -function simplifyLoopRdp(points, epsilon) { - if (points.length <= 2) { - return points; - } - let maxDist = 0; - let index = 0; - const end = points.length - 1; - const lineStart = points[0]; - const lineEnd = points[end]; - for (let i = 1; i < end; i++) { - const p = points[i]; - const dist = perpendicularDistance2(p, lineStart, lineEnd); - if (dist > maxDist) { - maxDist = dist; - index = i; - } - } - if (maxDist > epsilon) { - const left = simplifyLoopRdp(points.slice(0, index + 1), epsilon); - const right = simplifyLoopRdp(points.slice(index), epsilon); - return [...left.slice(0, -1), ...right]; - } - return [lineStart, lineEnd]; -} -function loopsToSkPath(loops, cols, rows, rect) { - const path = Skia.Path.Make(); - for (const rawLoop of loops) { - // Two-pass simplification: first remove collinear points, then RDP to - // smooth stair-step artifacts from grid boundary tracing. - const orthogonal = simplifyOrthogonalLoop(rawLoop); - const loop = simplifyLoopRdp(orthogonal, 1.0); - if (loop.length < 2) { - continue; - } - const [first, ...rest] = loop; - path.moveTo(rect.x + (first.x / cols) * rect.w, rect.y + (first.y / rows) * rect.h); - for (const point of rest) { - path.lineTo(rect.x + (point.x / cols) * rect.w, rect.y + (point.y / rows) * rect.h); - } - path.close(); - } - return path; -} -function pointInIntegerLoop(px, py, loop) { - let inside = false; - for (let i = 0, j = loop.length - 1; i < loop.length; j = i++) { - const xi = loop[i].x; - const yi = loop[i].y; - const xj = loop[j].x; - const yj = loop[j].y; - const intersect = yi > py !== yj > py && - px < ((xj - xi) * (py - yi)) / (yj - yi + Number.EPSILON) + xi; - if (intersect) { - inside = !inside; - } - } - return inside; -} -function loopBoundingArea(loop) { - if (loop.length === 0) { - return 0; - } - let minX = loop[0].x; - let maxX = loop[0].x; - let minY = loop[0].y; - let maxY = loop[0].y; - for (const point of loop) { - minX = Math.min(minX, point.x); - maxX = Math.max(maxX, point.x); - minY = Math.min(minY, point.y); - maxY = Math.max(maxY, point.y); - } - return (maxX - minX) * (maxY - minY); -} -function filterOutlineLoops(loops, cols, rows, seedPx) { - if (loops.length === 0) { - return loops; - } - const minLoopArea = Math.max(16, Math.floor(cols * rows * 0.00005)); - const significant = loops.filter(loop => loopBoundingArea(loop) >= minLoopArea); - const candidates = significant.length > 0 ? significant : loops; - if (seedPx) { - const sampleX = seedPx.x + 0.5; - const sampleY = seedPx.y + 0.5; - const containing = candidates.filter(loop => pointInIntegerLoop(sampleX, sampleY, loop)); - if (containing.length > 0) { - containing.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); - return containing; - } - } - candidates.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); - // Keep loops ≥ 5% of the largest area to filter isolated noise speckles - // while retaining genuine disconnected fragments of the same region. - const minKeepArea = loopBoundingArea(candidates[0]) * 0.05; - return candidates.filter(loop => loopBoundingArea(loop) >= minKeepArea); -} -function floodFillComponent(binary, cols, rows, seedX, seedY) { - if (seedX < 0 || - seedY < 0 || - seedX >= cols || - seedY >= rows || - !binary[seedY * cols + seedX]) { - return null; - } - const out = new Uint8Array(cols * rows); - const stack = [seedY * cols + seedX]; - out[stack[0]] = 255; - while (stack.length > 0) { - const index = stack.pop(); - const x = index % cols; - const y = (index - x) / cols; - if (x > 0) { - const left = index - 1; - if (binary[left] && !out[left]) { - out[left] = 255; - stack.push(left); - } - } - if (x + 1 < cols) { - const right = index + 1; - if (binary[right] && !out[right]) { - out[right] = 255; - stack.push(right); - } - } - if (y > 0) { - const up = index - cols; - if (binary[up] && !out[up]) { - out[up] = 255; - stack.push(up); - } - } - if (y + 1 < rows) { - const down = index + cols; - if (binary[down] && !out[down]) { - out[down] = 255; - stack.push(down); - } - } - } - return out; -} -function findLargestComponentSeed(binary, cols, rows) { - const visited = new Uint8Array(cols * rows); - let bestArea = 0; - let bestSeed = null; - for (let y = 0; y < rows; y++) { - const row = y * cols; - for (let x = 0; x < cols; x++) { - const start = row + x; - if (!binary[start] || visited[start]) { - continue; - } - let area = 0; - let sumX = 0; - let sumY = 0; - const stack = [start]; - visited[start] = 1; - while (stack.length > 0) { - const index = stack.pop(); - area += 1; - const px = index % cols; - const py = (index - px) / cols; - sumX += px; - sumY += py; - if (px > 0) { - const left = index - 1; - if (binary[left] && !visited[left]) { - visited[left] = 1; - stack.push(left); - } - } - if (px + 1 < cols) { - const right = index + 1; - if (binary[right] && !visited[right]) { - visited[right] = 1; - stack.push(right); - } - } - if (py > 0) { - const up = index - cols; - if (binary[up] && !visited[up]) { - visited[up] = 1; - stack.push(up); - } - } - if (py + 1 < rows) { - const down = index + cols; - if (binary[down] && !visited[down]) { - visited[down] = 1; - stack.push(down); - } - } - } - if (area > bestArea) { - bestArea = area; - bestSeed = { - x: Math.floor(sumX / area), - y: Math.floor(sumY / area), - }; - } - } - } - return bestSeed; -} -function buildRegionOutlinePathFromBinary(binary, cols, rows, rect, seedPx) { - let working = binary; - if (seedPx) { - const component = floodFillComponent(binary, cols, rows, seedPx.x, seedPx.y); - if (!component) { - return Skia.Path.Make(); - } - working = component; - } - const edges = collectBoundaryEdges(working, cols, rows); - const loops = chainBoundaryLoops(edges); - const filtered = filterOutlineLoops(loops, cols, rows, seedPx); - return loopsToSkPath(filtered, cols, rows, rect); -} -function resolveRegionOutlineSeedPx(binary, cols, rows, normSeed) { - if (normSeed) { - return { - x: Math.min(cols - 1, Math.max(0, Math.floor(normSeed.x * cols))), - y: Math.min(rows - 1, Math.max(0, Math.floor(normSeed.y * rows))), - }; - } - return findLargestComponentSeed(binary, cols, rows) ?? undefined; -} -export function buildRegionOutlinePathForRegion(regionId, regions, maskData, rect, normSeed) { - const binaries = extractRegionBinaries(regions, maskData); - const binary = binaries.get(regionId); - if (!binary) { - return Skia.Path.Make(); - } - const { cols, rows } = maskData; - const seedPx = resolveRegionOutlineSeedPx(binary, cols, rows, normSeed); - return buildRegionOutlinePathFromBinary(binary, cols, rows, rect, seedPx); -} -function extractRegionBinaries(regions, maskData) { - const { labels, baseboardBinary, cols, rows, wallSubLabels } = maskData; - const size = cols * rows; - const binaries = new Map(); - const semanticColors = getMaskSegmentRuntimeConfig().mask.semanticColors; - const regionIdBySemantic = new Int32Array(semanticColors.length); - regionIdBySemantic.fill(-1); - const wallSubRegionIds = new Map(); - let baseboardRegionId = null; - for (const reg of regions) { - binaries.set(reg.id, new Uint8Array(size)); - if (reg.thinStrip) { - baseboardRegionId = reg.id; - continue; - } - const wallMatch = /^wall-(\d+)$/.exec(reg.name); - if (wallMatch && wallSubLabels) { - wallSubRegionIds.set(Number(wallMatch[1]) - 1, reg.id); - continue; - } - const semanticIndex = semanticColors.findIndex(entry => entry.name === reg.name); - if (semanticIndex >= 0) { - regionIdBySemantic[semanticIndex] = reg.id; - } - } - const semanticCount = semanticColors.length; - const wallIdx = semanticColors.findIndex(entry => entry.name === 'wall'); - for (let i = 0; i < size; i++) { - if (baseboardRegionId != null && baseboardBinary[i] > 0) { - binaries.get(baseboardRegionId)[i] = 255; - continue; - } - if (wallSubLabels && wallIdx >= 0 && labels[i] === wallIdx) { - const subIdx = wallSubLabels[i]; - if (subIdx !== 255) { - const regionId = wallSubRegionIds.get(subIdx); - if (regionId !== undefined) { - binaries.get(regionId)[i] = 255; - } - } - continue; - } - const semanticIndex = labels[i]; - if (semanticIndex < semanticCount && regionIdBySemantic[semanticIndex] >= 0) { - binaries.get(regionIdBySemantic[semanticIndex])[i] = 255; - } - } - return binaries; -} -export function buildAllRegionOutlinePaths(regions, maskData, rect) { - const { cols, rows } = maskData; - const binaries = extractRegionBinaries(regions, maskData); - const map = new Map(); - for (const reg of regions) { - const binary = binaries.get(reg.id); - if (!binary) { - map.set(reg.id, Skia.Path.Make()); - continue; - } - // No seed — build outlines from the full binary so all disconnected - // fragments (common after mask downsampling) get dashed outlines during - // the init flash loop. Per-region hold highlights still use a touch-seed - // via buildRegionOutlinePathForRegion for precise fragment isolation. - map.set(reg.id, buildRegionOutlinePathFromBinary(binary, cols, rows, rect)); - } - return map; -} +import { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion } from './maskOutlinePaths'; +// Re-export for backward compatibility +export { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion }; function isBaseboardEntry(entry) { return entry.name === BASEBOARD_SEMANTIC_NAME; } diff --git a/dist/utils/maskSegmentation.js.map b/dist/utils/maskSegmentation.js.map index 57f998d..4f8a3f8 100644 --- a/dist/utils/maskSegmentation.js.map +++ b/dist/utils/maskSegmentation.js.map @@ -1 +1 @@ -{"version":3,"file":"maskSegmentation.js","sourceRoot":"","sources":["../../src/utils/maskSegmentation.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"maskSegmentation.js","sourceRoot":"","sources":["../../src/utils/maskSegmentation.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/components/MaskSegmentCanvas.tsx b/src/components/MaskSegmentCanvas.tsx index aeb69cc..be03011 100644 --- a/src/components/MaskSegmentCanvas.tsx +++ b/src/components/MaskSegmentCanvas.tsx @@ -19,7 +19,6 @@ import { buildRegionOutlinePathForRegion, downsampleMaskDataForPaths, extractRegionsFromMaskBufferSync, - isBaseboardMaskPixel, upscaleBinaryMask, type RegionMaskData, type SegmentRegion, @@ -85,458 +84,31 @@ export type { MaskSemanticColor, } from './MaskSegmentCanvas.types'; -/* ========================================================================== - * 类型 - * ========================================================================== */ -type PaintResourceLayers = { - lowFreqImage: SkImage; - highFreqImage: SkImage; -}; - -type ContainRect = { - x: number; - y: number; - w: number; - h: number; -}; - -function bgrColorEquals(a: BgrColor, b: BgrColor): boolean { - return a.b === b.b && a.g === b.g && a.r === b.r; -} - -/* ========================================================================== - * 几何工具 - * ========================================================================== */ -function rectsEqual(a: ContainRect, b: ContainRect): boolean { - return a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h; -} - -function getContainRect( - canvasW: number, - canvasH: number, - imgW: number, - imgH: number, -): ContainRect { - const imgAspect = imgW / imgH; - const canvasAspect = canvasW / canvasH; - - if (imgAspect > canvasAspect) { - const w = canvasW; - const h = canvasW / imgAspect; - return { x: 0, y: (canvasH - h) / 2, w, h }; - } - - const h = canvasH; - const w = canvasH * imgAspect; - return { x: (canvasW - w) / 2, y: 0, w, h }; -} - -function canvasToNormalized( - cx: number, - cy: number, - canvasW: number, - canvasH: number, - imgW: number, - imgH: number, -): { x: number; y: number } | null { - const rect = getContainRect(canvasW, canvasH, imgW, imgH); - if ( - cx < rect.x || - cx > rect.x + rect.w || - cy < rect.y || - cy > rect.y + rect.h - ) { - return null; - } - return { - x: (cx - rect.x) / rect.w, - y: (cy - rect.y) / rect.h, - }; -} - -/** Skia matrix: pan → scale around viewport center. Matches screenToCanvasCoords. */ -function buildZoomPanMatrix( - panX: number, - panY: number, - scale: number, - canvasW: number, - canvasH: number, -) { - const cx = canvasW / 2; - const cy = canvasH / 2; - const m = Skia.Matrix(); - m.translate(panX, panY); - m.translate(cx, cy); - m.scale(scale, scale); - m.translate(-cx, -cy); - return m; -} - -/** Clamp pan so scaled containRect does not expose empty margins beyond the viewport. */ -function clampPanOffset( - pan: { x: number; y: number }, - scale: number, - canvasW: number, - canvasH: number, - containRect: ContainRect | null, -): { x: number; y: number } { - if (!containRect || scale <= 1 || canvasW <= 0 || canvasH <= 0) { - return { x: 0, y: 0 }; - } - - const cx = canvasW / 2; - const cy = canvasH / 2; - const r = containRect; - - const scaledMinX = cx + scale * (r.x - cx); - const scaledMaxX = cx + scale * (r.x + r.w - cx); - const scaledMinY = cy + scale * (r.y - cy); - const scaledMaxY = cy + scale * (r.y + r.h - cy); - - let x = pan.x; - let y = pan.y; - - if (scaledMaxX - scaledMinX > canvasW) { - x = Math.max(canvasW - scaledMaxX, Math.min(-scaledMinX, x)); - } else { - x = 0; - } - - if (scaledMaxY - scaledMinY > canvasH) { - y = Math.max(canvasH - scaledMaxY, Math.min(-scaledMinY, y)); - } else { - y = 0; - } - - return { x, y }; -} - -/** - * Inverse of the Skia Group transform applied during pinch-zoom. - * Converts a raw touch point (screen pixels) back to the canvas coordinate - * space where the image and regions are positioned before any scale/pan. - * When zoomScale ≤ 1 (no zoom), returns the input unchanged. - */ -function screenToCanvasCoords( - screenX: number, - screenY: number, - canvasW: number, - canvasH: number, - zoomScale: number, - panOffset: { x: number; y: number }, -): { x: number; y: number } { - if (zoomScale <= 1) return { x: screenX, y: screenY }; - return { - x: (screenX - panOffset.x - canvasW / 2) / zoomScale + canvasW / 2, - y: (screenY - panOffset.y - canvasH / 2) / zoomScale + canvasH / 2, - }; -} - -function pointInPolygon( - x: number, - y: number, - points: { x: number; y: number }[], -): boolean { - let inside = false; - for (let i = 0, j = points.length - 1; i < points.length; j = i++) { - const xi = points[i].x; - const yi = points[i].y; - const xj = points[j].x; - const yj = points[j].y; - const intersect = - yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi; - if (intersect) inside = !inside; - } - return inside; -} - -function pointInPolygonWithPadding( - x: number, - y: number, - points: { x: number; y: number }[], - padding: number, -): boolean { - if (points.length < 3) { - return false; - } - - let minX = points[0].x; - let maxX = points[0].x; - let minY = points[0].y; - let maxY = points[0].y; - for (const point of points) { - minX = Math.min(minX, point.x); - maxX = Math.max(maxX, point.x); - minY = Math.min(minY, point.y); - maxY = Math.max(maxY, point.y); - } - - if ( - x >= minX - padding && - x <= maxX + padding && - y >= minY - padding && - y <= maxY + padding - ) { - if (maxY - minY < padding * 2.5 || maxX - minX < padding * 2.5) { - return true; - } - } - - return pointInPolygon(x, y, points); -} - -function getRegionHitPolygons(reg: SegmentRegion): { x: number; y: number }[][] { - return reg.hitPolygons && reg.hitPolygons.length > 0 - ? reg.hitPolygons - : reg.polygons; -} - -function pointHitsRegion( - x: number, - y: number, - reg: SegmentRegion, - options?: { thinPadding?: number }, -): boolean { - const interaction = getMaskSegmentRuntimeConfig().interaction; - const thinPadding = options?.thinPadding ?? interaction.thinStripPadding; - const padding = reg.thinStrip ? thinPadding : interaction.regionPadding; - return getRegionHitPolygons(reg).some( - poly => poly.length >= 3 && pointInPolygonWithPadding(x, y, poly, padding), - ); -} - -function pointStrictlyHitsRegion(x: number, y: number, reg: SegmentRegion): boolean { - return getRegionHitPolygons(reg).some( - poly => poly.length >= 3 && pointInPolygon(x, y, poly), - ); -} - -function resolveRegionHit( - regions: SegmentRegion[], - x: number, - y: number, -): number | null { - const hits: SegmentRegion[] = []; - - for (const reg of regions) { - const bboxPad = reg.thinStrip ? 0.005 : 0; - const b = reg.bbox; - if ( - x < b.x - bboxPad || - x > b.x + b.w + bboxPad || - y < b.y - bboxPad || - y > b.y + b.h + bboxPad - ) { - continue; - } - if (pointHitsRegion(x, y, reg)) { - hits.push(reg); - } - } - - if (hits.length === 0) { - return null; - } - if (hits.length === 1) { - return hits[0].id; - } - - const strictNonThin = hits.filter( - reg => !reg.thinStrip && pointStrictlyHitsRegion(x, y, reg), - ); - if (strictNonThin.length > 0) { - strictNonThin.sort((a, b) => a.area - b.area); - return strictNonThin[0].id; - } - - const strictThin = hits.filter( - reg => reg.thinStrip && pointStrictlyHitsRegion(x, y, reg), - ); - if (strictThin.length > 0) { - strictThin.sort((a, b) => a.area - b.area); - return strictThin[0].id; - } - - const nonThin = hits.filter(reg => !reg.thinStrip); - if (nonThin.length > 0) { - nonThin.sort((a, b) => a.area - b.area); - return nonThin[0].id; - } - - hits.sort((a, b) => a.area - b.area); - return hits[0].id; -} - -function pickKickRegionFromMask( - normX: number, - normY: number, - pick: { buffer: Uint8Array; cols: number; rows: number }, - kickRegionId: number, - baseboardPickMask?: Uint8Array | null, - strict = false, -): number | null { - const cx = Math.floor(normX * pick.cols); - const cy = Math.floor(normY * pick.rows); - if (cx < 0 || cy < 0 || cx >= pick.cols || cy >= pick.rows) { - return null; - } - - if (strict) { - if (baseboardPickMask) { - return baseboardPickMask[cy * pick.cols + cx] ? kickRegionId : null; - } - return isBaseboardMaskPixel(pick.buffer, pick.cols, pick.rows, cx, cy) - ? kickRegionId - : null; - } - - const interaction = getMaskSegmentRuntimeConfig().interaction; - const radius = Math.max( - interaction.kickMaskPickRadiusPx, - Math.floor(pick.cols * 0.022), - ); - const radiusSq = radius * radius; - - for (let dy = -radius; dy <= radius; dy++) { - for (let dx = -radius; dx <= radius; dx++) { - if (dx * dx + dy * dy > radiusSq) { - continue; - } - const x = cx + dx; - const y = cy + dy; - if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { - continue; - } - if (baseboardPickMask) { - if (baseboardPickMask[y * pick.cols + x]) { - return kickRegionId; - } - continue; - } - if ( - isBaseboardMaskPixel( - pick.buffer, - pick.cols, - pick.rows, - x, - y, - ) - ) { - return kickRegionId; - } - } - } - - return null; -} - -function pickKickNearStrip( - normX: number, - normY: number, - kickReg: SegmentRegion, -): boolean { - const polys = kickReg.hitPolygons ?? kickReg.polygons; - const pad = getMaskSegmentRuntimeConfig().interaction.thinStripPadding + 0.004; - return polys.some( - poly => - poly.length >= 3 && pointInPolygonWithPadding(normX, normY, poly, pad), - ); -} - -function lookupRegionFromPickMap( - normX: number, - normY: number, - pick: { buffer: Uint8Array; cols: number; rows: number }, - radiusPx = getMaskSegmentRuntimeConfig().interaction.pickMapSearchRadiusPx, -): number | null { - const cx = Math.min( - pick.cols - 1, - Math.max(0, Math.floor(normX * pick.cols)), - ); - const cy = Math.min( - pick.rows - 1, - Math.max(0, Math.floor(normY * pick.rows)), - ); - - const readCode = (x: number, y: number) => pick.buffer[y * pick.cols + x]; - - const center = readCode(cx, cy); - if (center > 0) { - return center - 1; - } - - if (radiusPx <= 0) { - return null; - } - - const r = Math.max(4, radiusPx); - const rSq = r * r; - for (let dy = -r; dy <= r; dy++) { - for (let dx = -r; dx <= r; dx++) { - if (dx * dx + dy * dy > rSq) { - continue; - } - const x = cx + dx; - const y = cy + dy; - if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { - continue; - } - const code = readCode(x, y); - if (code > 0) { - return code - 1; - } - } - } - - return null; -} - -function releasePaintResourceLayers(layers: PaintResourceLayers | null) { - if (!layers) { - return; - } - layers.lowFreqImage.dispose(); - layers.highFreqImage.dispose(); -} - -function releaseOriginSkImage(image: SkImage | null) { - if (image) { - image.dispose(); - } -} - -type WorkScaledBgr = { - buffer: Uint8Array; - cols: number; - rows: number; -}; - -async function prepareWorkScaledBgrBuffer( - bgrBuffer: Uint8Array, - cols: number, - rows: number, - workScale: number, -): Promise { - if (workScale >= 1) { - return { buffer: bgrBuffer, cols, rows }; - } - const workCols = Math.floor(cols * workScale); - const workRows = Math.floor(rows * workScale); - const buffer = resizeBgrBuffer(bgrBuffer, cols, rows, workCols, workRows); - return { buffer, cols: workCols, rows: workRows }; -} - -/* ========================================================================== - * 分段计时工具(仅开发环境生效) - * ========================================================================== */ -let _timeLogTs = 0; -function timeLog(tag: string) { - if (!__DEV__) return; - const now = performance.now(); - const dt = _timeLogTs ? now - _timeLogTs : 0; - console.log(`[⏱ ${tag}] ${dt.toFixed(2)} ms`); - _timeLogTs = now; -} +import { + type PaintResourceLayers, + type ContainRect, + type WorkScaledBgr, + bgrColorEquals, + rectsEqual, + getContainRect, + canvasToNormalized, + buildZoomPanMatrix, + clampPanOffset, + screenToCanvasCoords, + pointInPolygon, + pointInPolygonWithPadding, + getRegionHitPolygons, + pointHitsRegion, + pointStrictlyHitsRegion, + resolveRegionHit, + pickKickRegionFromMask, + pickKickNearStrip, + lookupRegionFromPickMap, + releasePaintResourceLayers, + releaseOriginSkImage, + prepareWorkScaledBgrBuffer, + timeLog, +} from '../utils/canvasGeometry'; /* ========================================================================== * 组件主体 diff --git a/src/utils/canvasGeometry.ts b/src/utils/canvasGeometry.ts new file mode 100644 index 0000000..8f24054 --- /dev/null +++ b/src/utils/canvasGeometry.ts @@ -0,0 +1,474 @@ +import { Skia, type SkImage } from '@shopify/react-native-skia'; +import type { SegmentRegion } from './maskSegmentation'; +import { isBaseboardMaskPixel } from './maskSegmentation'; +import { getMaskSegmentRuntimeConfig } from './maskSegmentRuntime'; +import { resizeBgrBuffer } from './pngImage'; +import type { BgrColor } from '../components/MaskSegmentCanvas.types'; + +/* ========================================================================== + * 类型 + * ========================================================================== */ +export type PaintResourceLayers = { + lowFreqImage: SkImage; + highFreqImage: SkImage; +}; + +export type ContainRect = { + x: number; + y: number; + w: number; + h: number; +}; + +export type WorkScaledBgr = { + buffer: Uint8Array; + cols: number; + rows: number; +}; + +/* ========================================================================== + * 颜色工具 + * ========================================================================== */ +export function bgrColorEquals(a: BgrColor, b: BgrColor): boolean { + return a.b === b.b && a.g === b.g && a.r === b.r; +} + +/* ========================================================================== + * 几何工具 + * ========================================================================== */ +export function rectsEqual(a: ContainRect, b: ContainRect): boolean { + return a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h; +} + +export function getContainRect( + canvasW: number, + canvasH: number, + imgW: number, + imgH: number, +): ContainRect { + const imgAspect = imgW / imgH; + const canvasAspect = canvasW / canvasH; + + if (imgAspect > canvasAspect) { + const w = canvasW; + const h = canvasW / imgAspect; + return { x: 0, y: (canvasH - h) / 2, w, h }; + } + + const h = canvasH; + const w = canvasH * imgAspect; + return { x: (canvasW - w) / 2, y: 0, w, h }; +} + +export function canvasToNormalized( + cx: number, + cy: number, + canvasW: number, + canvasH: number, + imgW: number, + imgH: number, +): { x: number; y: number } | null { + const rect = getContainRect(canvasW, canvasH, imgW, imgH); + if ( + cx < rect.x || + cx > rect.x + rect.w || + cy < rect.y || + cy > rect.y + rect.h + ) { + return null; + } + return { + x: (cx - rect.x) / rect.w, + y: (cy - rect.y) / rect.h, + }; +} + +/** Skia matrix: pan → scale around viewport center. Matches screenToCanvasCoords. */ +export function buildZoomPanMatrix( + panX: number, + panY: number, + scale: number, + canvasW: number, + canvasH: number, +) { + const cx = canvasW / 2; + const cy = canvasH / 2; + const m = Skia.Matrix(); + m.translate(panX, panY); + m.translate(cx, cy); + m.scale(scale, scale); + m.translate(-cx, -cy); + return m; +} + +/** Clamp pan so scaled containRect does not expose empty margins beyond the viewport. */ +export function clampPanOffset( + pan: { x: number; y: number }, + scale: number, + canvasW: number, + canvasH: number, + containRect: ContainRect | null, +): { x: number; y: number } { + if (!containRect || scale <= 1 || canvasW <= 0 || canvasH <= 0) { + return { x: 0, y: 0 }; + } + + const cx = canvasW / 2; + const cy = canvasH / 2; + const r = containRect; + + const scaledMinX = cx + scale * (r.x - cx); + const scaledMaxX = cx + scale * (r.x + r.w - cx); + const scaledMinY = cy + scale * (r.y - cy); + const scaledMaxY = cy + scale * (r.y + r.h - cy); + + let x = pan.x; + let y = pan.y; + + if (scaledMaxX - scaledMinX > canvasW) { + x = Math.max(canvasW - scaledMaxX, Math.min(-scaledMinX, x)); + } else { + x = 0; + } + + if (scaledMaxY - scaledMinY > canvasH) { + y = Math.max(canvasH - scaledMaxY, Math.min(-scaledMinY, y)); + } else { + y = 0; + } + + return { x, y }; +} + +/** + * Inverse of the Skia Group transform applied during pinch-zoom. + * Converts a raw touch point (screen pixels) back to the canvas coordinate + * space where the image and regions are positioned before any scale/pan. + * When zoomScale ≤ 1 (no zoom), returns the input unchanged. + */ +export function screenToCanvasCoords( + screenX: number, + screenY: number, + canvasW: number, + canvasH: number, + zoomScale: number, + panOffset: { x: number; y: number }, +): { x: number; y: number } { + if (zoomScale <= 1) return { x: screenX, y: screenY }; + return { + x: (screenX - panOffset.x - canvasW / 2) / zoomScale + canvasW / 2, + y: (screenY - panOffset.y - canvasH / 2) / zoomScale + canvasH / 2, + }; +} + +/* ========================================================================== + * 点击检测 + * ========================================================================== */ +export function pointInPolygon( + x: number, + y: number, + points: { x: number; y: number }[], +): boolean { + let inside = false; + for (let i = 0, j = points.length - 1; i < points.length; j = i++) { + const xi = points[i].x; + const yi = points[i].y; + const xj = points[j].x; + const yj = points[j].y; + const intersect = + yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi; + if (intersect) inside = !inside; + } + return inside; +} + +export function pointInPolygonWithPadding( + x: number, + y: number, + points: { x: number; y: number }[], + padding: number, +): boolean { + if (points.length < 3) { + return false; + } + + let minX = points[0].x; + let maxX = points[0].x; + let minY = points[0].y; + let maxY = points[0].y; + for (const point of points) { + minX = Math.min(minX, point.x); + maxX = Math.max(maxX, point.x); + minY = Math.min(minY, point.y); + maxY = Math.max(maxY, point.y); + } + + if ( + x >= minX - padding && + x <= maxX + padding && + y >= minY - padding && + y <= maxY + padding + ) { + if (maxY - minY < padding * 2.5 || maxX - minX < padding * 2.5) { + return true; + } + } + + return pointInPolygon(x, y, points); +} + +export function getRegionHitPolygons(reg: SegmentRegion): { x: number; y: number }[][] { + return reg.hitPolygons && reg.hitPolygons.length > 0 + ? reg.hitPolygons + : reg.polygons; +} + +export function pointHitsRegion( + x: number, + y: number, + reg: SegmentRegion, + options?: { thinPadding?: number }, +): boolean { + const interaction = getMaskSegmentRuntimeConfig().interaction; + const thinPadding = options?.thinPadding ?? interaction.thinStripPadding; + const padding = reg.thinStrip ? thinPadding : interaction.regionPadding; + return getRegionHitPolygons(reg).some( + poly => poly.length >= 3 && pointInPolygonWithPadding(x, y, poly, padding), + ); +} + +export function pointStrictlyHitsRegion(x: number, y: number, reg: SegmentRegion): boolean { + return getRegionHitPolygons(reg).some( + poly => poly.length >= 3 && pointInPolygon(x, y, poly), + ); +} + +export function resolveRegionHit( + regions: SegmentRegion[], + x: number, + y: number, +): number | null { + const hits: SegmentRegion[] = []; + + for (const reg of regions) { + const bboxPad = reg.thinStrip ? 0.005 : 0; + const b = reg.bbox; + if ( + x < b.x - bboxPad || + x > b.x + b.w + bboxPad || + y < b.y - bboxPad || + y > b.y + b.h + bboxPad + ) { + continue; + } + if (pointHitsRegion(x, y, reg)) { + hits.push(reg); + } + } + + if (hits.length === 0) { + return null; + } + if (hits.length === 1) { + return hits[0].id; + } + + const strictNonThin = hits.filter( + reg => !reg.thinStrip && pointStrictlyHitsRegion(x, y, reg), + ); + if (strictNonThin.length > 0) { + strictNonThin.sort((a, b) => a.area - b.area); + return strictNonThin[0].id; + } + + const strictThin = hits.filter( + reg => reg.thinStrip && pointStrictlyHitsRegion(x, y, reg), + ); + if (strictThin.length > 0) { + strictThin.sort((a, b) => a.area - b.area); + return strictThin[0].id; + } + + const nonThin = hits.filter(reg => !reg.thinStrip); + if (nonThin.length > 0) { + nonThin.sort((a, b) => a.area - b.area); + return nonThin[0].id; + } + + hits.sort((a, b) => a.area - b.area); + return hits[0].id; +} + +/* ========================================================================== + * 踢脚线/掩码拾取 + * ========================================================================== */ +export function pickKickRegionFromMask( + normX: number, + normY: number, + pick: { buffer: Uint8Array; cols: number; rows: number }, + kickRegionId: number, + baseboardPickMask?: Uint8Array | null, + strict = false, +): number | null { + const cx = Math.floor(normX * pick.cols); + const cy = Math.floor(normY * pick.rows); + if (cx < 0 || cy < 0 || cx >= pick.cols || cy >= pick.rows) { + return null; + } + + if (strict) { + if (baseboardPickMask) { + return baseboardPickMask[cy * pick.cols + cx] ? kickRegionId : null; + } + return isBaseboardMaskPixel(pick.buffer, pick.cols, pick.rows, cx, cy) + ? kickRegionId + : null; + } + + const interaction = getMaskSegmentRuntimeConfig().interaction; + const radius = Math.max( + interaction.kickMaskPickRadiusPx, + Math.floor(pick.cols * 0.022), + ); + const radiusSq = radius * radius; + + for (let dy = -radius; dy <= radius; dy++) { + for (let dx = -radius; dx <= radius; dx++) { + if (dx * dx + dy * dy > radiusSq) { + continue; + } + const x = cx + dx; + const y = cy + dy; + if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { + continue; + } + if (baseboardPickMask) { + if (baseboardPickMask[y * pick.cols + x]) { + return kickRegionId; + } + continue; + } + if ( + isBaseboardMaskPixel( + pick.buffer, + pick.cols, + pick.rows, + x, + y, + ) + ) { + return kickRegionId; + } + } + } + + return null; +} + +export function pickKickNearStrip( + normX: number, + normY: number, + kickReg: SegmentRegion, +): boolean { + const polys = kickReg.hitPolygons ?? kickReg.polygons; + const pad = getMaskSegmentRuntimeConfig().interaction.thinStripPadding + 0.004; + return polys.some( + poly => + poly.length >= 3 && pointInPolygonWithPadding(normX, normY, poly, pad), + ); +} + +export function lookupRegionFromPickMap( + normX: number, + normY: number, + pick: { buffer: Uint8Array; cols: number; rows: number }, + radiusPx = getMaskSegmentRuntimeConfig().interaction.pickMapSearchRadiusPx, +): number | null { + const cx = Math.min( + pick.cols - 1, + Math.max(0, Math.floor(normX * pick.cols)), + ); + const cy = Math.min( + pick.rows - 1, + Math.max(0, Math.floor(normY * pick.rows)), + ); + + const readCode = (x: number, y: number) => pick.buffer[y * pick.cols + x]; + + const center = readCode(cx, cy); + if (center > 0) { + return center - 1; + } + + if (radiusPx <= 0) { + return null; + } + + const r = Math.max(4, radiusPx); + const rSq = r * r; + for (let dy = -r; dy <= r; dy++) { + for (let dx = -r; dx <= r; dx++) { + if (dx * dx + dy * dy > rSq) { + continue; + } + const x = cx + dx; + const y = cy + dy; + if (x < 0 || y < 0 || x >= pick.cols || y >= pick.rows) { + continue; + } + const code = readCode(x, y); + if (code > 0) { + return code - 1; + } + } + } + + return null; +} + +/* ========================================================================== + * 资源释放 + * ========================================================================== */ +export function releasePaintResourceLayers(layers: PaintResourceLayers | null) { + if (!layers) { + return; + } + layers.lowFreqImage.dispose(); + layers.highFreqImage.dispose(); +} + +export function releaseOriginSkImage(image: SkImage | null) { + if (image) { + image.dispose(); + } +} + +/* ========================================================================== + * 工作缓冲区缩放 + * ========================================================================== */ +export async function prepareWorkScaledBgrBuffer( + bgrBuffer: Uint8Array, + cols: number, + rows: number, + workScale: number, +): Promise { + if (workScale >= 1) { + return { buffer: bgrBuffer, cols, rows }; + } + const workCols = Math.floor(cols * workScale); + const workRows = Math.floor(rows * workScale); + const buffer = resizeBgrBuffer(bgrBuffer, cols, rows, workCols, workRows); + return { buffer, cols: workCols, rows: workRows }; +} + +/* ========================================================================== + * 分段计时工具(仅开发环境生效) + * ========================================================================== */ +let _timeLogTs = 0; +export function timeLog(tag: string) { + if (!__DEV__) return; + const now = performance.now(); + const dt = _timeLogTs ? now - _timeLogTs : 0; + console.log(`[⏱ ${tag}] ${dt.toFixed(2)} ms`); + _timeLogTs = now; +} diff --git a/src/utils/maskOutlinePaths.ts b/src/utils/maskOutlinePaths.ts new file mode 100644 index 0000000..bb0c793 --- /dev/null +++ b/src/utils/maskOutlinePaths.ts @@ -0,0 +1,556 @@ +import { Skia, type SkPath } from '@shopify/react-native-skia'; +import { getMaskSegmentRuntimeConfig } from './maskSegmentRuntime'; +import type { SegmentRegion, RegionMaskData } from './maskSegmentation'; + +/** 分区虚线高亮:从与填充蒙版相同的像素网格提取外轮廓 */ +type GridPoint = { x: number; y: number }; + +type GridEdge = { + x0: number; + y0: number; + x1: number; + y1: number; +}; + +function isMaskPixelOn( + binary: Uint8Array, + cols: number, + rows: number, + x: number, + y: number, +): boolean { + return ( + x >= 0 && x < cols && y >= 0 && y < rows && binary[y * cols + x] > 0 + ); +} + +function collectBoundaryEdges( + binary: Uint8Array, + cols: number, + rows: number, +): GridEdge[] { + const edges: GridEdge[] = []; + for (let y = 0; y < rows; y++) { + const row = y * cols; + for (let x = 0; x < cols; x++) { + if (!binary[row + x]) { + continue; + } + if (!isMaskPixelOn(binary, cols, rows, x, y - 1)) { + edges.push({ x0: x, y0: y, x1: x + 1, y1: y }); + } + if (!isMaskPixelOn(binary, cols, rows, x, y + 1)) { + edges.push({ x0: x + 1, y0: y + 1, x1: x, y1: y + 1 }); + } + if (!isMaskPixelOn(binary, cols, rows, x - 1, y)) { + edges.push({ x0: x, y0: y + 1, x1: x, y1: y }); + } + if (!isMaskPixelOn(binary, cols, rows, x + 1, y)) { + edges.push({ x0: x + 1, y0: y, x1: x + 1, y1: y + 1 }); + } + } + } + return edges; +} + +function chainBoundaryLoops(edges: GridEdge[]): GridPoint[][] { + const outgoing = new Map(); + const edgeKey = (edge: GridEdge) => + `${edge.x0},${edge.y0}->${edge.x1},${edge.y1}`; + + for (const edge of edges) { + const key = `${edge.x0},${edge.y0}`; + const list = outgoing.get(key); + if (list) { + list.push(edge); + } else { + outgoing.set(key, [edge]); + } + } + + const used = new Set(); + const loops: GridPoint[][] = []; + + for (const edge of edges) { + const startEdgeKey = edgeKey(edge); + if (used.has(startEdgeKey)) { + continue; + } + + const loop: GridPoint[] = [{ x: edge.x0, y: edge.y0 }]; + let current = edge; + used.add(startEdgeKey); + loop.push({ x: current.x1, y: current.y1 }); + + while (true) { + const endKey = `${current.x1},${current.y1}`; + const startKey = `${loop[0].x},${loop[0].y}`; + if (endKey === startKey && loop.length > 2) { + break; + } + const candidates = outgoing.get(endKey); + const next = candidates?.find(candidate => !used.has(edgeKey(candidate))); + if (!next) { + break; + } + current = next; + used.add(edgeKey(current)); + loop.push({ x: current.x1, y: current.y1 }); + if (loop.length > edges.length + 1) { + break; + } + } + + if (loop.length >= 4) { + loops.push(loop); + } + } + + return loops; +} + +function simplifyOrthogonalLoop(points: GridPoint[]): GridPoint[] { + if (points.length <= 3) { + return points; + } + const out: GridPoint[] = [points[0]]; + for (let i = 1; i < points.length - 1; i++) { + const prev = out[out.length - 1]; + const curr = points[i]; + const next = points[i + 1]; + const collinearX = prev.x === curr.x && curr.x === next.x; + const collinearY = prev.y === curr.y && curr.y === next.y; + if (!collinearX && !collinearY) { + out.push(curr); + } + } + out.push(points[points.length - 1]); + return out; +} + +function perpendicularDistance2( + point: GridPoint, + lineStart: GridPoint, + lineEnd: GridPoint, +): number { + const dx = lineEnd.x - lineStart.x; + const dy = lineEnd.y - lineStart.y; + if (dx === 0 && dy === 0) { + return Math.hypot(point.x - lineStart.x, point.y - lineStart.y); + } + const t = + ((point.x - lineStart.x) * dx + (point.y - lineStart.y) * dy) / + (dx * dx + dy * dy); + const projX = lineStart.x + t * dx; + const projY = lineStart.y + t * dy; + return Math.hypot(point.x - projX, point.y - projY); +} + +/** + * Ramer-Douglas-Peucker simplification for outline loops. + * Reduces stair-step jagginess from grid boundary tracing so that dashed + * outlines render smoothly instead of zigzagging across every pixel edge. + * Epsilon is in grid-pixel units (1.0 = one mask pixel). + */ +function simplifyLoopRdp(points: GridPoint[], epsilon: number): GridPoint[] { + if (points.length <= 2) { + return points; + } + let maxDist = 0; + let index = 0; + const end = points.length - 1; + const lineStart = points[0]!; + const lineEnd = points[end]!; + for (let i = 1; i < end; i++) { + const p = points[i]!; + const dist = perpendicularDistance2(p, lineStart, lineEnd); + if (dist > maxDist) { + maxDist = dist; + index = i; + } + } + if (maxDist > epsilon) { + const left = simplifyLoopRdp(points.slice(0, index + 1), epsilon); + const right = simplifyLoopRdp(points.slice(index), epsilon); + return [...left.slice(0, -1), ...right]; + } + return [lineStart, lineEnd]; +} + +function loopsToSkPath( + loops: GridPoint[][], + cols: number, + rows: number, + rect: { x: number; y: number; w: number; h: number }, +): SkPath { + const path = Skia.Path.Make(); + for (const rawLoop of loops) { + // Two-pass simplification: first remove collinear points, then RDP to + // smooth stair-step artifacts from grid boundary tracing. + const orthogonal = simplifyOrthogonalLoop(rawLoop); + const loop = simplifyLoopRdp(orthogonal, 1.0); + if (loop.length < 2) { + continue; + } + const [first, ...rest] = loop; + path.moveTo( + rect.x + (first.x / cols) * rect.w, + rect.y + (first.y / rows) * rect.h, + ); + for (const point of rest) { + path.lineTo( + rect.x + (point.x / cols) * rect.w, + rect.y + (point.y / rows) * rect.h, + ); + } + path.close(); + } + return path; +} + +function pointInIntegerLoop(px: number, py: number, loop: GridPoint[]): boolean { + let inside = false; + for (let i = 0, j = loop.length - 1; i < loop.length; j = i++) { + const xi = loop[i].x; + const yi = loop[i].y; + const xj = loop[j].x; + const yj = loop[j].y; + const intersect = + yi > py !== yj > py && + px < ((xj - xi) * (py - yi)) / (yj - yi + Number.EPSILON) + xi; + if (intersect) { + inside = !inside; + } + } + return inside; +} + +function loopBoundingArea(loop: GridPoint[]): number { + if (loop.length === 0) { + return 0; + } + let minX = loop[0].x; + let maxX = loop[0].x; + let minY = loop[0].y; + let maxY = loop[0].y; + for (const point of loop) { + minX = Math.min(minX, point.x); + maxX = Math.max(maxX, point.x); + minY = Math.min(minY, point.y); + maxY = Math.max(maxY, point.y); + } + return (maxX - minX) * (maxY - minY); +} + +function filterOutlineLoops( + loops: GridPoint[][], + cols: number, + rows: number, + seedPx?: { x: number; y: number }, +): GridPoint[][] { + if (loops.length === 0) { + return loops; + } + + const minLoopArea = Math.max(16, Math.floor(cols * rows * 0.00005)); + const significant = loops.filter( + loop => loopBoundingArea(loop) >= minLoopArea, + ); + const candidates = significant.length > 0 ? significant : loops; + + if (seedPx) { + const sampleX = seedPx.x + 0.5; + const sampleY = seedPx.y + 0.5; + const containing = candidates.filter(loop => + pointInIntegerLoop(sampleX, sampleY, loop), + ); + if (containing.length > 0) { + containing.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); + return containing; + } + } + + candidates.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); + // Keep loops ≥ 5% of the largest area to filter isolated noise speckles + // while retaining genuine disconnected fragments of the same region. + const minKeepArea = loopBoundingArea(candidates[0]!) * 0.05; + return candidates.filter(loop => loopBoundingArea(loop) >= minKeepArea); +} + +function floodFillComponent( + binary: Uint8Array, + cols: number, + rows: number, + seedX: number, + seedY: number, +): Uint8Array | null { + if ( + seedX < 0 || + seedY < 0 || + seedX >= cols || + seedY >= rows || + !binary[seedY * cols + seedX] + ) { + return null; + } + + const out = new Uint8Array(cols * rows); + const stack = [seedY * cols + seedX]; + out[stack[0]] = 255; + + while (stack.length > 0) { + const index = stack.pop()!; + const x = index % cols; + const y = (index - x) / cols; + + if (x > 0) { + const left = index - 1; + if (binary[left] && !out[left]) { + out[left] = 255; + stack.push(left); + } + } + if (x + 1 < cols) { + const right = index + 1; + if (binary[right] && !out[right]) { + out[right] = 255; + stack.push(right); + } + } + if (y > 0) { + const up = index - cols; + if (binary[up] && !out[up]) { + out[up] = 255; + stack.push(up); + } + } + if (y + 1 < rows) { + const down = index + cols; + if (binary[down] && !out[down]) { + out[down] = 255; + stack.push(down); + } + } + } + + return out; +} + +function findLargestComponentSeed( + binary: Uint8Array, + cols: number, + rows: number, +): { x: number; y: number } | null { + const visited = new Uint8Array(cols * rows); + let bestArea = 0; + let bestSeed: { x: number; y: number } | null = null; + + for (let y = 0; y < rows; y++) { + const row = y * cols; + for (let x = 0; x < cols; x++) { + const start = row + x; + if (!binary[start] || visited[start]) { + continue; + } + + let area = 0; + let sumX = 0; + let sumY = 0; + const stack = [start]; + visited[start] = 1; + + while (stack.length > 0) { + const index = stack.pop()!; + area += 1; + const px = index % cols; + const py = (index - px) / cols; + sumX += px; + sumY += py; + + if (px > 0) { + const left = index - 1; + if (binary[left] && !visited[left]) { + visited[left] = 1; + stack.push(left); + } + } + if (px + 1 < cols) { + const right = index + 1; + if (binary[right] && !visited[right]) { + visited[right] = 1; + stack.push(right); + } + } + if (py > 0) { + const up = index - cols; + if (binary[up] && !visited[up]) { + visited[up] = 1; + stack.push(up); + } + } + if (py + 1 < rows) { + const down = index + cols; + if (binary[down] && !visited[down]) { + visited[down] = 1; + stack.push(down); + } + } + } + + if (area > bestArea) { + bestArea = area; + bestSeed = { + x: Math.floor(sumX / area), + y: Math.floor(sumY / area), + }; + } + } + } + + return bestSeed; +} + +function buildRegionOutlinePathFromBinary( + binary: Uint8Array, + cols: number, + rows: number, + rect: { x: number; y: number; w: number; h: number }, + seedPx?: { x: number; y: number }, +): SkPath { + let working = binary; + if (seedPx) { + const component = floodFillComponent( + binary, + cols, + rows, + seedPx.x, + seedPx.y, + ); + if (!component) { + return Skia.Path.Make(); + } + working = component; + } + + const edges = collectBoundaryEdges(working, cols, rows); + const loops = chainBoundaryLoops(edges); + const filtered = filterOutlineLoops(loops, cols, rows, seedPx); + return loopsToSkPath(filtered, cols, rows, rect); +} + +function resolveRegionOutlineSeedPx( + binary: Uint8Array, + cols: number, + rows: number, + normSeed?: { x: number; y: number }, +): { x: number; y: number } | undefined { + if (normSeed) { + return { + x: Math.min(cols - 1, Math.max(0, Math.floor(normSeed.x * cols))), + y: Math.min(rows - 1, Math.max(0, Math.floor(normSeed.y * rows))), + }; + } + return findLargestComponentSeed(binary, cols, rows) ?? undefined; +} + +export function buildRegionOutlinePathForRegion( + regionId: number, + regions: SegmentRegion[], + maskData: RegionMaskData, + rect: { x: number; y: number; w: number; h: number }, + normSeed?: { x: number; y: number }, +): SkPath { + const binaries = extractRegionBinaries(regions, maskData); + const binary = binaries.get(regionId); + if (!binary) { + return Skia.Path.Make(); + } + + const { cols, rows } = maskData; + const seedPx = resolveRegionOutlineSeedPx(binary, cols, rows, normSeed); + return buildRegionOutlinePathFromBinary(binary, cols, rows, rect, seedPx); +} + +function extractRegionBinaries( + regions: SegmentRegion[], + maskData: RegionMaskData, +): Map { + const { labels, baseboardBinary, cols, rows, wallSubLabels } = maskData; + const size = cols * rows; + const binaries = new Map(); + const semanticColors = getMaskSegmentRuntimeConfig().mask.semanticColors; + const regionIdBySemantic = new Int32Array(semanticColors.length); + regionIdBySemantic.fill(-1); + const wallSubRegionIds = new Map(); + let baseboardRegionId: number | null = null; + + for (const reg of regions) { + binaries.set(reg.id, new Uint8Array(size)); + if (reg.thinStrip) { + baseboardRegionId = reg.id; + continue; + } + const wallMatch = /^wall-(\d+)$/.exec(reg.name); + if (wallMatch && wallSubLabels) { + wallSubRegionIds.set(Number(wallMatch[1]) - 1, reg.id); + continue; + } + const semanticIndex = semanticColors.findIndex( + entry => entry.name === reg.name, + ); + if (semanticIndex >= 0) { + regionIdBySemantic[semanticIndex] = reg.id; + } + } + + const semanticCount = semanticColors.length; + const wallIdx = semanticColors.findIndex(entry => entry.name === 'wall'); + for (let i = 0; i < size; i++) { + if (baseboardRegionId != null && baseboardBinary[i] > 0) { + binaries.get(baseboardRegionId)![i] = 255; + continue; + } + if (wallSubLabels && wallIdx >= 0 && labels[i] === wallIdx) { + const subIdx = wallSubLabels[i]; + if (subIdx !== 255) { + const regionId = wallSubRegionIds.get(subIdx); + if (regionId !== undefined) { + binaries.get(regionId)![i] = 255; + } + } + continue; + } + const semanticIndex = labels[i]; + if (semanticIndex < semanticCount && regionIdBySemantic[semanticIndex] >= 0) { + binaries.get(regionIdBySemantic[semanticIndex])![i] = 255; + } + } + + return binaries; +} + +export function buildAllRegionOutlinePaths( + regions: SegmentRegion[], + maskData: RegionMaskData, + rect: { x: number; y: number; w: number; h: number }, +): Map { + const { cols, rows } = maskData; + const binaries = extractRegionBinaries(regions, maskData); + const map = new Map(); + for (const reg of regions) { + const binary = binaries.get(reg.id); + if (!binary) { + map.set(reg.id, Skia.Path.Make()); + continue; + } + // No seed — build outlines from the full binary so all disconnected + // fragments (common after mask downsampling) get dashed outlines during + // the init flash loop. Per-region hold highlights still use a touch-seed + // via buildRegionOutlinePathForRegion for precise fragment isolation. + map.set( + reg.id, + buildRegionOutlinePathFromBinary(binary, cols, rows, rect), + ); + } + return map; +} diff --git a/src/utils/maskSegmentRuntime.ts b/src/utils/maskSegmentRuntime.ts index d8f7678..301fb4e 100644 --- a/src/utils/maskSegmentRuntime.ts +++ b/src/utils/maskSegmentRuntime.ts @@ -51,7 +51,7 @@ export const PIPELINE_PRESETS: Record> low: PIPELINE_LOW, }; -export const DEFAULT_PIPELINE_CONFIG: Required = PIPELINE_HIGH; +export const DEFAULT_PIPELINE_CONFIG: Required = PIPELINE_MEDIUM; export function resolvePipelineConfig( preset?: PipelinePreset, diff --git a/src/utils/maskSegmentation.ts b/src/utils/maskSegmentation.ts index d875549..4a9a945 100644 --- a/src/utils/maskSegmentation.ts +++ b/src/utils/maskSegmentation.ts @@ -77,558 +77,10 @@ export function buildRegionOutlinePolygons(reg: SegmentRegion): NormPoint[][] { return [bboxToPolygon(reg.bbox)]; } -/** 分区虚线高亮:从与填充蒙版相同的像素网格提取外轮廓 */ -type GridPoint = { x: number; y: number }; +import { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion } from './maskOutlinePaths'; -type GridEdge = { - x0: number; - y0: number; - x1: number; - y1: number; -}; - -function isMaskPixelOn( - binary: Uint8Array, - cols: number, - rows: number, - x: number, - y: number, -): boolean { - return ( - x >= 0 && x < cols && y >= 0 && y < rows && binary[y * cols + x] > 0 - ); -} - -function collectBoundaryEdges( - binary: Uint8Array, - cols: number, - rows: number, -): GridEdge[] { - const edges: GridEdge[] = []; - for (let y = 0; y < rows; y++) { - const row = y * cols; - for (let x = 0; x < cols; x++) { - if (!binary[row + x]) { - continue; - } - if (!isMaskPixelOn(binary, cols, rows, x, y - 1)) { - edges.push({ x0: x, y0: y, x1: x + 1, y1: y }); - } - if (!isMaskPixelOn(binary, cols, rows, x, y + 1)) { - edges.push({ x0: x + 1, y0: y + 1, x1: x, y1: y + 1 }); - } - if (!isMaskPixelOn(binary, cols, rows, x - 1, y)) { - edges.push({ x0: x, y0: y + 1, x1: x, y1: y }); - } - if (!isMaskPixelOn(binary, cols, rows, x + 1, y)) { - edges.push({ x0: x + 1, y0: y, x1: x + 1, y1: y + 1 }); - } - } - } - return edges; -} - -function chainBoundaryLoops(edges: GridEdge[]): GridPoint[][] { - const outgoing = new Map(); - const edgeKey = (edge: GridEdge) => - `${edge.x0},${edge.y0}->${edge.x1},${edge.y1}`; - - for (const edge of edges) { - const key = `${edge.x0},${edge.y0}`; - const list = outgoing.get(key); - if (list) { - list.push(edge); - } else { - outgoing.set(key, [edge]); - } - } - - const used = new Set(); - const loops: GridPoint[][] = []; - - for (const edge of edges) { - const startEdgeKey = edgeKey(edge); - if (used.has(startEdgeKey)) { - continue; - } - - const loop: GridPoint[] = [{ x: edge.x0, y: edge.y0 }]; - let current = edge; - used.add(startEdgeKey); - loop.push({ x: current.x1, y: current.y1 }); - - while (true) { - const endKey = `${current.x1},${current.y1}`; - const startKey = `${loop[0].x},${loop[0].y}`; - if (endKey === startKey && loop.length > 2) { - break; - } - const candidates = outgoing.get(endKey); - const next = candidates?.find(candidate => !used.has(edgeKey(candidate))); - if (!next) { - break; - } - current = next; - used.add(edgeKey(current)); - loop.push({ x: current.x1, y: current.y1 }); - if (loop.length > edges.length + 1) { - break; - } - } - - if (loop.length >= 4) { - loops.push(loop); - } - } - - return loops; -} - -function simplifyOrthogonalLoop(points: GridPoint[]): GridPoint[] { - if (points.length <= 3) { - return points; - } - const out: GridPoint[] = [points[0]]; - for (let i = 1; i < points.length - 1; i++) { - const prev = out[out.length - 1]; - const curr = points[i]; - const next = points[i + 1]; - const collinearX = prev.x === curr.x && curr.x === next.x; - const collinearY = prev.y === curr.y && curr.y === next.y; - if (!collinearX && !collinearY) { - out.push(curr); - } - } - out.push(points[points.length - 1]); - return out; -} - -function perpendicularDistance2( - point: GridPoint, - lineStart: GridPoint, - lineEnd: GridPoint, -): number { - const dx = lineEnd.x - lineStart.x; - const dy = lineEnd.y - lineStart.y; - if (dx === 0 && dy === 0) { - return Math.hypot(point.x - lineStart.x, point.y - lineStart.y); - } - const t = - ((point.x - lineStart.x) * dx + (point.y - lineStart.y) * dy) / - (dx * dx + dy * dy); - const projX = lineStart.x + t * dx; - const projY = lineStart.y + t * dy; - return Math.hypot(point.x - projX, point.y - projY); -} - -/** - * Ramer-Douglas-Peucker simplification for outline loops. - * Reduces stair-step jagginess from grid boundary tracing so that dashed - * outlines render smoothly instead of zigzagging across every pixel edge. - * Epsilon is in grid-pixel units (1.0 = one mask pixel). - */ -function simplifyLoopRdp(points: GridPoint[], epsilon: number): GridPoint[] { - if (points.length <= 2) { - return points; - } - let maxDist = 0; - let index = 0; - const end = points.length - 1; - const lineStart = points[0]!; - const lineEnd = points[end]!; - for (let i = 1; i < end; i++) { - const p = points[i]!; - const dist = perpendicularDistance2(p, lineStart, lineEnd); - if (dist > maxDist) { - maxDist = dist; - index = i; - } - } - if (maxDist > epsilon) { - const left = simplifyLoopRdp(points.slice(0, index + 1), epsilon); - const right = simplifyLoopRdp(points.slice(index), epsilon); - return [...left.slice(0, -1), ...right]; - } - return [lineStart, lineEnd]; -} - -function loopsToSkPath( - loops: GridPoint[][], - cols: number, - rows: number, - rect: { x: number; y: number; w: number; h: number }, -): SkPath { - const path = Skia.Path.Make(); - for (const rawLoop of loops) { - // Two-pass simplification: first remove collinear points, then RDP to - // smooth stair-step artifacts from grid boundary tracing. - const orthogonal = simplifyOrthogonalLoop(rawLoop); - const loop = simplifyLoopRdp(orthogonal, 1.0); - if (loop.length < 2) { - continue; - } - const [first, ...rest] = loop; - path.moveTo( - rect.x + (first.x / cols) * rect.w, - rect.y + (first.y / rows) * rect.h, - ); - for (const point of rest) { - path.lineTo( - rect.x + (point.x / cols) * rect.w, - rect.y + (point.y / rows) * rect.h, - ); - } - path.close(); - } - return path; -} - -function pointInIntegerLoop(px: number, py: number, loop: GridPoint[]): boolean { - let inside = false; - for (let i = 0, j = loop.length - 1; i < loop.length; j = i++) { - const xi = loop[i].x; - const yi = loop[i].y; - const xj = loop[j].x; - const yj = loop[j].y; - const intersect = - yi > py !== yj > py && - px < ((xj - xi) * (py - yi)) / (yj - yi + Number.EPSILON) + xi; - if (intersect) { - inside = !inside; - } - } - return inside; -} - -function loopBoundingArea(loop: GridPoint[]): number { - if (loop.length === 0) { - return 0; - } - let minX = loop[0].x; - let maxX = loop[0].x; - let minY = loop[0].y; - let maxY = loop[0].y; - for (const point of loop) { - minX = Math.min(minX, point.x); - maxX = Math.max(maxX, point.x); - minY = Math.min(minY, point.y); - maxY = Math.max(maxY, point.y); - } - return (maxX - minX) * (maxY - minY); -} - -function filterOutlineLoops( - loops: GridPoint[][], - cols: number, - rows: number, - seedPx?: { x: number; y: number }, -): GridPoint[][] { - if (loops.length === 0) { - return loops; - } - - const minLoopArea = Math.max(16, Math.floor(cols * rows * 0.00005)); - const significant = loops.filter( - loop => loopBoundingArea(loop) >= minLoopArea, - ); - const candidates = significant.length > 0 ? significant : loops; - - if (seedPx) { - const sampleX = seedPx.x + 0.5; - const sampleY = seedPx.y + 0.5; - const containing = candidates.filter(loop => - pointInIntegerLoop(sampleX, sampleY, loop), - ); - if (containing.length > 0) { - containing.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); - return containing; - } - } - - candidates.sort((a, b) => loopBoundingArea(b) - loopBoundingArea(a)); - // Keep loops ≥ 5% of the largest area to filter isolated noise speckles - // while retaining genuine disconnected fragments of the same region. - const minKeepArea = loopBoundingArea(candidates[0]!) * 0.05; - return candidates.filter(loop => loopBoundingArea(loop) >= minKeepArea); -} - -function floodFillComponent( - binary: Uint8Array, - cols: number, - rows: number, - seedX: number, - seedY: number, -): Uint8Array | null { - if ( - seedX < 0 || - seedY < 0 || - seedX >= cols || - seedY >= rows || - !binary[seedY * cols + seedX] - ) { - return null; - } - - const out = new Uint8Array(cols * rows); - const stack = [seedY * cols + seedX]; - out[stack[0]] = 255; - - while (stack.length > 0) { - const index = stack.pop()!; - const x = index % cols; - const y = (index - x) / cols; - - if (x > 0) { - const left = index - 1; - if (binary[left] && !out[left]) { - out[left] = 255; - stack.push(left); - } - } - if (x + 1 < cols) { - const right = index + 1; - if (binary[right] && !out[right]) { - out[right] = 255; - stack.push(right); - } - } - if (y > 0) { - const up = index - cols; - if (binary[up] && !out[up]) { - out[up] = 255; - stack.push(up); - } - } - if (y + 1 < rows) { - const down = index + cols; - if (binary[down] && !out[down]) { - out[down] = 255; - stack.push(down); - } - } - } - - return out; -} - -function findLargestComponentSeed( - binary: Uint8Array, - cols: number, - rows: number, -): { x: number; y: number } | null { - const visited = new Uint8Array(cols * rows); - let bestArea = 0; - let bestSeed: { x: number; y: number } | null = null; - - for (let y = 0; y < rows; y++) { - const row = y * cols; - for (let x = 0; x < cols; x++) { - const start = row + x; - if (!binary[start] || visited[start]) { - continue; - } - - let area = 0; - let sumX = 0; - let sumY = 0; - const stack = [start]; - visited[start] = 1; - - while (stack.length > 0) { - const index = stack.pop()!; - area += 1; - const px = index % cols; - const py = (index - px) / cols; - sumX += px; - sumY += py; - - if (px > 0) { - const left = index - 1; - if (binary[left] && !visited[left]) { - visited[left] = 1; - stack.push(left); - } - } - if (px + 1 < cols) { - const right = index + 1; - if (binary[right] && !visited[right]) { - visited[right] = 1; - stack.push(right); - } - } - if (py > 0) { - const up = index - cols; - if (binary[up] && !visited[up]) { - visited[up] = 1; - stack.push(up); - } - } - if (py + 1 < rows) { - const down = index + cols; - if (binary[down] && !visited[down]) { - visited[down] = 1; - stack.push(down); - } - } - } - - if (area > bestArea) { - bestArea = area; - bestSeed = { - x: Math.floor(sumX / area), - y: Math.floor(sumY / area), - }; - } - } - } - - return bestSeed; -} - -function buildRegionOutlinePathFromBinary( - binary: Uint8Array, - cols: number, - rows: number, - rect: { x: number; y: number; w: number; h: number }, - seedPx?: { x: number; y: number }, -): SkPath { - let working = binary; - if (seedPx) { - const component = floodFillComponent( - binary, - cols, - rows, - seedPx.x, - seedPx.y, - ); - if (!component) { - return Skia.Path.Make(); - } - working = component; - } - - const edges = collectBoundaryEdges(working, cols, rows); - const loops = chainBoundaryLoops(edges); - const filtered = filterOutlineLoops(loops, cols, rows, seedPx); - return loopsToSkPath(filtered, cols, rows, rect); -} - -function resolveRegionOutlineSeedPx( - binary: Uint8Array, - cols: number, - rows: number, - normSeed?: { x: number; y: number }, -): { x: number; y: number } | undefined { - if (normSeed) { - return { - x: Math.min(cols - 1, Math.max(0, Math.floor(normSeed.x * cols))), - y: Math.min(rows - 1, Math.max(0, Math.floor(normSeed.y * rows))), - }; - } - return findLargestComponentSeed(binary, cols, rows) ?? undefined; -} - -export function buildRegionOutlinePathForRegion( - regionId: number, - regions: SegmentRegion[], - maskData: RegionMaskData, - rect: { x: number; y: number; w: number; h: number }, - normSeed?: { x: number; y: number }, -): SkPath { - const binaries = extractRegionBinaries(regions, maskData); - const binary = binaries.get(regionId); - if (!binary) { - return Skia.Path.Make(); - } - - const { cols, rows } = maskData; - const seedPx = resolveRegionOutlineSeedPx(binary, cols, rows, normSeed); - return buildRegionOutlinePathFromBinary(binary, cols, rows, rect, seedPx); -} - -function extractRegionBinaries( - regions: SegmentRegion[], - maskData: RegionMaskData, -): Map { - const { labels, baseboardBinary, cols, rows, wallSubLabels } = maskData; - const size = cols * rows; - const binaries = new Map(); - const semanticColors = getMaskSegmentRuntimeConfig().mask.semanticColors; - const regionIdBySemantic = new Int32Array(semanticColors.length); - regionIdBySemantic.fill(-1); - const wallSubRegionIds = new Map(); - let baseboardRegionId: number | null = null; - - for (const reg of regions) { - binaries.set(reg.id, new Uint8Array(size)); - if (reg.thinStrip) { - baseboardRegionId = reg.id; - continue; - } - const wallMatch = /^wall-(\d+)$/.exec(reg.name); - if (wallMatch && wallSubLabels) { - wallSubRegionIds.set(Number(wallMatch[1]) - 1, reg.id); - continue; - } - const semanticIndex = semanticColors.findIndex( - entry => entry.name === reg.name, - ); - if (semanticIndex >= 0) { - regionIdBySemantic[semanticIndex] = reg.id; - } - } - - const semanticCount = semanticColors.length; - const wallIdx = semanticColors.findIndex(entry => entry.name === 'wall'); - for (let i = 0; i < size; i++) { - if (baseboardRegionId != null && baseboardBinary[i] > 0) { - binaries.get(baseboardRegionId)![i] = 255; - continue; - } - if (wallSubLabels && wallIdx >= 0 && labels[i] === wallIdx) { - const subIdx = wallSubLabels[i]; - if (subIdx !== 255) { - const regionId = wallSubRegionIds.get(subIdx); - if (regionId !== undefined) { - binaries.get(regionId)![i] = 255; - } - } - continue; - } - const semanticIndex = labels[i]; - if (semanticIndex < semanticCount && regionIdBySemantic[semanticIndex] >= 0) { - binaries.get(regionIdBySemantic[semanticIndex])![i] = 255; - } - } - - return binaries; -} - -export function buildAllRegionOutlinePaths( - regions: SegmentRegion[], - maskData: RegionMaskData, - rect: { x: number; y: number; w: number; h: number }, -): Map { - const { cols, rows } = maskData; - const binaries = extractRegionBinaries(regions, maskData); - const map = new Map(); - for (const reg of regions) { - const binary = binaries.get(reg.id); - if (!binary) { - map.set(reg.id, Skia.Path.Make()); - continue; - } - // No seed — build outlines from the full binary so all disconnected - // fragments (common after mask downsampling) get dashed outlines during - // the init flash loop. Per-region hold highlights still use a touch-seed - // via buildRegionOutlinePathForRegion for precise fragment isolation. - map.set( - reg.id, - buildRegionOutlinePathFromBinary(binary, cols, rows, rect), - ); - } - return map; -} +// Re-export for backward compatibility +export { buildAllRegionOutlinePaths, buildRegionOutlinePathForRegion }; function isBaseboardEntry(entry: PaletteEntry): boolean { return entry.name === BASEBOARD_SEMANTIC_NAME;