From e6aca3ef587d42506f63e5cd76195f4c853fca30 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Tue, 10 Feb 2026 14:30:08 -0500 Subject: [PATCH 01/90] fix: Use the image loader for dicom-seg to allow compressed images --- .../Segmentation/generateToolState.ts | 126 +- .../Cornerstone3D/Segmentation/index.ts | 20 +- .../Segmentation/labelmapImagesFromBuffer.ts | 1505 ++++++++--------- 3 files changed, 841 insertions(+), 810 deletions(-) diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index e436652445..79310fca77 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -1,5 +1,69 @@ -import { generateToolState as generateToolStateCornerstoneLegacy } from "../../Cornerstone/Segmentation"; -import { createLabelmapsFromBufferInternal } from "./labelmapImagesFromBuffer"; +import { data as dcmjsData, utilities as dcmjsUtilities } from 'dcmjs'; +import { generateToolState as generateToolStateCornerstoneLegacy } from '../../Cornerstone/Segmentation'; +import { unpackPixelData } from '../../Cornerstone/Segmentation_4X'; +import { createLabelmapsFromBufferInternal } from './labelmapImagesFromBuffer'; + +const { DicomMessage, DicomMetaDictionary } = dcmjsData; +const { decode: dcmjsDecode } = dcmjsUtilities.compression; +const maxBytesPerChunk = 199000000; + +/** + * Decodes a SEG DICOM array buffer into a naturalized dataset and a getPixelData() function. + * Used when the caller has the buffer (e.g. OHIF) and needs to populate metadata and pass + * uncompressed pixel data as options.segImage until a SEG-capable image loader is available. + * + * @param arrayBuffer - Raw SEG DICOM array buffer + * @returns { dataset, getPixelData } - dataset is naturalized; getPixelData() returns unpacked pixel data (array or single TypedArray) + */ +export function decodeSEGBufferToNaturalizedAndPixelData( + arrayBuffer: ArrayBuffer +): { + dataset: Record; + getPixelData: () => Uint8Array | Uint16Array | (Uint8Array | Uint16Array)[]; +} { + const dicomData = DicomMessage.readFile(arrayBuffer); + const dataset = DicomMetaDictionary.naturalizeDataset( + dicomData.dict + ) as Record; + (dataset as Record)._meta = + DicomMetaDictionary.namifyDataset(dicomData.meta); + + const transferSyntax = ( + dataset._meta as { TransferSyntaxUID?: { Value?: string[] } } + )?.TransferSyntaxUID?.Value?.[0]; + let pixelDataChunks: + | Uint8Array[] + | Uint16Array[] + | (Uint8Array | Uint16Array)[]; + + if (transferSyntax === '1.2.840.10008.1.2.5') { + const rleEncodedFrames = Array.isArray(dataset.PixelData) + ? dataset.PixelData + : [dataset.PixelData]; + const decoded = dcmjsDecode( + rleEncodedFrames, + dataset.Rows as number, + dataset.Columns as number + ); + pixelDataChunks = [decoded]; + } else { + const chunks = unpackPixelData( + dataset as Parameters[0], + { maxBytesPerChunk } + ); + if (!chunks) { + throw new Error('Fractional segmentations are not yet supported'); + } + pixelDataChunks = Array.isArray(chunks) ? chunks : [chunks]; + } + + return { + dataset, + getPixelData: () => + pixelDataChunks.length === 1 ? pixelDataChunks[0] : pixelDataChunks, + }; +} + /** * generateToolState - Given a set of cornerstoneTools imageIds and a Segmentation buffer, * derive cornerstoneTools toolState and brush metadata. @@ -15,54 +79,54 @@ import { createLabelmapsFromBufferInternal } from "./labelmapImagesFromBuffer"; * list containing the track of segments per frame for each labelMap (available only for the overlapping case). */ function generateToolState( + imageIds, + arrayBuffer, + metadataProvider, + skipOverlapping = false, + tolerance = 1e-3, + cs3dVersion = 4 +) { + return generateToolStateCornerstoneLegacy( imageIds, arrayBuffer, metadataProvider, - skipOverlapping = false, - tolerance = 1e-3, - cs3dVersion = 4 -) { - return generateToolStateCornerstoneLegacy( - imageIds, - arrayBuffer, - metadataProvider, - skipOverlapping, - tolerance, - cs3dVersion - ); + skipOverlapping, + tolerance, + cs3dVersion + ); } /** - * Creates a segmentation tool state from a set of image IDs and a segmentation buffer. + * Creates a segmentation tool state from a set of image IDs and a SEG instance loaded via its imageId. + * The naturalized SEG dataset must be available from metadataProvider.get('instance', segImageId) + * (e.g. dataset or instanceMeta.dataset). Uncompressed pixel data is obtained via imageLoader.loadImage(segImageId). * * @param referencedImageIds - An array of referenced image IDs e.g., CT, MR etc. - * @param arrayBuffer - The DICOM SEG array buffer containing segmentation data. - * @param metadataProvider - The metadata provider to retrieve necessary metadata. - * @param options - Optional parameters to customize the segmentation processing. + * @param segImageId - Image ID for the SEG instance (loadable via imageLoader; instance metadata must be registered). + * @param options - { metadataProvider, tolerance } * * @returns An object containing: * - `labelMapImages`: Array of label map images for each label map. * - `segMetadata`: Metadata related to the segmentation segments. * - `segmentsOnFrame`: 2D array tracking segments per frame. - * - `segmentsOnFrameArray`: 3D array tracking segments per frame for each label map. * - `centroids`: Map of centroid coordinates for each segment. * - `overlappingSegments`: Boolean indicating if segments are overlapping. * - * @throws Will throw an error if unsupported transfer syntax is encountered or if segmentation frames are out of plane. + * @throws Will throw an error if instance metadata is missing or if the loaded image has no getPixelData(). */ function createFromDICOMSegBuffer( - referencedImageIds, - arrayBuffer, - { metadataProvider, tolerance = 1e-3 } + referencedImageIds, + segImageId, + { metadataProvider, tolerance = 1e-3 } ) { - return createLabelmapsFromBufferInternal( - referencedImageIds, - arrayBuffer, - metadataProvider, - { - tolerance - } - ); + return createLabelmapsFromBufferInternal( + referencedImageIds, + segImageId, + metadataProvider, + { + tolerance, + } + ); } export { generateToolState, createFromDICOMSegBuffer }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts index b13dac0c85..c2d44344dd 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts @@ -1,13 +1,15 @@ -import { generateSegmentation } from "./generateSegmentation"; -import { generateLabelMaps2DFrom3D } from "./generateLabelMaps2DFrom3D"; +import { generateSegmentation } from './generateSegmentation'; +import { generateLabelMaps2DFrom3D } from './generateLabelMaps2DFrom3D'; import { - generateToolState, - createFromDICOMSegBuffer -} from "./generateToolState"; + generateToolState, + createFromDICOMSegBuffer, + decodeSEGBufferToNaturalizedAndPixelData, +} from './generateToolState'; export { - generateLabelMaps2DFrom3D, - generateSegmentation, - generateToolState, - createFromDICOMSegBuffer + generateLabelMaps2DFrom3D, + generateSegmentation, + generateToolState, + createFromDICOMSegBuffer, + decodeSEGBufferToNaturalizedAndPixelData, }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index dc58959408..d5ed42afa2 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -1,724 +1,660 @@ -import { eventTarget, imageLoader, triggerEvent } from "@cornerstonejs/core"; -import { utilities as cstUtils } from "@cornerstonejs/tools"; -import { data as dcmjsData, normalizers, utilities } from "dcmjs"; -import ndarray from "ndarray"; -import checkOrientation from "../../helpers/checkOrientation"; +import { eventTarget, imageLoader, triggerEvent } from '@cornerstonejs/core'; +import { utilities as cstUtils } from '@cornerstonejs/tools'; +import ndarray from 'ndarray'; +import checkOrientation from '../../helpers/checkOrientation'; import { - alignPixelDataWithSourceData, - calculateCentroid, - findReferenceSourceImageId, - getSegmentIndex, - getSegmentMetadata, - getValidOrientations, - readFromUnpackedChunks, - unpackPixelData -} from "../../Cornerstone/Segmentation_4X"; -import { compactMergeSegmentDataWithoutInformationLoss } from "./compactMergeSegData"; -import { Events } from "../../enums"; - -const { DicomMessage, DicomMetaDictionary } = dcmjsData; -const { Normalizer } = normalizers; -const { decode } = utilities.compression; + alignPixelDataWithSourceData, + calculateCentroid, + findReferenceSourceImageId, + getSegmentIndex, + getSegmentMetadata, + getValidOrientations, + readFromUnpackedChunks, +} from '../../Cornerstone/Segmentation_4X'; +import { compactMergeSegmentDataWithoutInformationLoss } from './compactMergeSegData'; +import { Events } from '../../enums'; const updateSegmentsOnFrame = ({ - segmentsOnFrame, - imageIdIndex, - segmentIndex + segmentsOnFrame, + imageIdIndex, + segmentIndex, }) => { - if (!segmentsOnFrame[imageIdIndex]) { - segmentsOnFrame[imageIdIndex] = []; - } + if (!segmentsOnFrame[imageIdIndex]) { + segmentsOnFrame[imageIdIndex] = []; + } - segmentsOnFrame[imageIdIndex].push(segmentIndex); + segmentsOnFrame[imageIdIndex].push(segmentIndex); }; const updateSegmentsPixelIndices = ({ - segmentsPixelIndices, - segmentIndex, - imageIdIndex, - indexCache + segmentsPixelIndices, + segmentIndex, + imageIdIndex, + indexCache, }) => { - if (!segmentsPixelIndices.has(segmentIndex)) { - segmentsPixelIndices.set(segmentIndex, {}); - } - const segmentIndexObject = segmentsPixelIndices.get(segmentIndex); - segmentIndexObject[imageIdIndex] = indexCache; - segmentsPixelIndices.set(segmentIndex, segmentIndexObject); + if (!segmentsPixelIndices.has(segmentIndex)) { + segmentsPixelIndices.set(segmentIndex, {}); + } + const segmentIndexObject = segmentsPixelIndices.get(segmentIndex); + segmentIndexObject[imageIdIndex] = indexCache; + segmentsPixelIndices.set(segmentIndex, segmentIndexObject); }; const extractInfoFromPerFrameFunctionalGroups = ({ - PerFrameFunctionalGroups, - sequenceIndex, - sopUIDImageIdIndexMap, - multiframe + PerFrameFunctionalGroups, + sequenceIndex, + sopUIDImageIdIndexMap, + multiframe, }) => { - const referencedSOPInstanceUid = - PerFrameFunctionalGroups.DerivationImageSequence[0] - .SourceImageSequence[0].ReferencedSOPInstanceUID; - const referencedImageId = sopUIDImageIdIndexMap[referencedSOPInstanceUid]; - const segmentIndex = getSegmentIndex(multiframe, sequenceIndex); + const referencedSOPInstanceUid = + PerFrameFunctionalGroups.DerivationImageSequence[0].SourceImageSequence[0] + .ReferencedSOPInstanceUID; + const referencedImageId = sopUIDImageIdIndexMap[referencedSOPInstanceUid]; + const segmentIndex = getSegmentIndex(multiframe, sequenceIndex); - return { referencedSOPInstanceUid, referencedImageId, segmentIndex }; + return { referencedSOPInstanceUid, referencedImageId, segmentIndex }; }; +/** + * Creates labelmap images from a SEG instance identified by segImageId. + * Uses metadataProvider.get('instance', segImageId) for the naturalized SEG dataset + * and imageLoader.loadImage(segImageId) for uncompressed pixel data. + * + * @param referencedImageIds - Referenced image IDs (e.g. CT/MR series) + * @param segImageId - Image ID for the SEG instance (loadable via imageLoader) + * @param metadataProvider - Provider for instance metadata (must return naturalized dataset for segImageId) + * @param options - { tolerance, TypedArrayConstructor, maxBytesPerChunk } + */ async function createLabelmapsFromBufferInternal( - referencedImageIds, - arrayBuffer, - metadataProvider, - options + referencedImageIds, + segImageId, + metadataProvider, + options ) { - const { - tolerance = 1e-3, - TypedArrayConstructor = Uint8Array, - maxBytesPerChunk = 199000000 - } = options; - const dicomData = DicomMessage.readFile(arrayBuffer); - const dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict); - dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta); - const multiframe = Normalizer.normalizeToDataset([dataset]); - - const imagePlaneModule = metadataProvider.get( - "imagePlaneModule", - referencedImageIds[0] - ); + const { tolerance = 1e-3, TypedArrayConstructor = Uint8Array } = + options ?? {}; - const generalSeriesModule = metadataProvider.get( - "generalSeriesModule", - referencedImageIds[0] + const instanceMeta = metadataProvider.get('instance', segImageId); + if (!instanceMeta) { + throw new Error( + `No instance metadata found for SEG imageId: ${segImageId}. Ensure the SEG instance is registered in the metadata provider (e.g. after loading the image).` ); + } + const multiframe = instanceMeta.dataset ?? instanceMeta; + + const imagePlaneModule = metadataProvider.get( + 'imagePlaneModule', + referencedImageIds[0] + ); + + const generalSeriesModule = metadataProvider.get( + 'generalSeriesModule', + referencedImageIds[0] + ); + + const SeriesInstanceUID = generalSeriesModule.seriesInstanceUID; + + if (!imagePlaneModule) { + console.warn('Insufficient metadata, imagePlaneModule missing.'); + } + + const ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) + ? [...imagePlaneModule.rowCosines, ...imagePlaneModule.columnCosines] + : [ + imagePlaneModule.rowCosines.x, + imagePlaneModule.rowCosines.y, + imagePlaneModule.rowCosines.z, + imagePlaneModule.columnCosines.x, + imagePlaneModule.columnCosines.y, + imagePlaneModule.columnCosines.z, + ]; + + const validOrientations = getValidOrientations(ImageOrientationPatient); + const segMetadata = getSegmentMetadata(multiframe, SeriesInstanceUID); + + const image = await imageLoader.loadImage(segImageId); + if (!image || typeof image.getPixelData !== 'function') { + throw new Error( + 'SEG image load did not return an image with getPixelData(). Ensure a SEG-capable image loader is registered for this imageId.' + ); + } + const pixelData = image.getPixelData(); + const pixelDataChunks = Array.isArray(pixelData) ? pixelData : [pixelData]; - const SeriesInstanceUID = generalSeriesModule.seriesInstanceUID; - - if (!imagePlaneModule) { - console.warn("Insufficient metadata, imagePlaneModule missing."); - } - - const ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) - ? [...imagePlaneModule.rowCosines, ...imagePlaneModule.columnCosines] - : [ - imagePlaneModule.rowCosines.x, - imagePlaneModule.rowCosines.y, - imagePlaneModule.rowCosines.z, - imagePlaneModule.columnCosines.x, - imagePlaneModule.columnCosines.y, - imagePlaneModule.columnCosines.z - ]; - - // Get IOP from ref series, compute supported orientations: - const validOrientations = getValidOrientations(ImageOrientationPatient); - const segMetadata = getSegmentMetadata(multiframe, SeriesInstanceUID); - - const TransferSyntaxUID = multiframe._meta.TransferSyntaxUID.Value[0]; - - let pixelData; - let pixelDataChunks; - - if (TransferSyntaxUID === "1.2.840.10008.1.2.5") { - const rleEncodedFrames = Array.isArray(multiframe.PixelData) - ? multiframe.PixelData - : [multiframe.PixelData]; - - pixelData = decode( - rleEncodedFrames, - multiframe.Rows, - multiframe.Columns - ); + const orientation = checkOrientation( + multiframe, + validOrientations, + [ + imagePlaneModule.rows, + imagePlaneModule.columns, + referencedImageIds.length, + ], + tolerance + ); + + // Pre-compute the sop UID to imageId index map so that in the for loop + // we don't have to call metadataProvider.get() for each imageId over + // and over again. + const sopUIDImageIdIndexMap = referencedImageIds.reduce((acc, imageId) => { + const { sopInstanceUID } = metadataProvider.get( + 'generalImageModule', + imageId + ); + acc[sopInstanceUID] = imageId; + return acc; + }, {}); + + let insertFunction; + + switch (orientation) { + case 'Planar': + insertFunction = insertPixelDataPlanar; + break; + case 'Perpendicular': + throw new Error( + 'Segmentations orthogonal to the acquisition plane of the source data are not yet supported.' + ); + case 'Oblique': + throw new Error( + 'Segmentations oblique to the acquisition plane of the source data are not yet supported.' + ); + } + + /* if SEGs are overlapping: + 1) the labelmapBuffer will contain M volumes which have non-overlapping segments; + 2) segmentsOnFrame will have M * numberOfFrames values to track in which labelMap are the segments; + 3) insertFunction will return the number of LabelMaps + 4) generateToolState return is an array*/ - if (multiframe.BitsStored === 1) { - console.warn("No implementation for rle + bit packing."); + const segmentsOnFrame = []; - return; - } + const imageIdMaps = { indices: {}, metadata: {} }; + const labelMapImages = []; - // Todo: need to test this with rle data - pixelDataChunks = [pixelData]; - } else { - pixelDataChunks = unpackPixelData(multiframe, { maxBytesPerChunk }); + for (let i = 0; i < referencedImageIds.length; i++) { + const referenceImageId = referencedImageIds[i]; + imageIdMaps.indices[referenceImageId] = i; + imageIdMaps.metadata[referenceImageId] = metadataProvider.get( + 'instance', + referenceImageId + ); + const labelMapImage = + imageLoader.createAndCacheDerivedLabelmapImage(referenceImageId); + labelMapImages.push(labelMapImage); + } + + // This is the centroid calculation for each segment Index, the data structure + // is a Map with key = segmentIndex and value = {imageIdIndex: centroid, ...} + // later on we will use this data structure to calculate the centroid of the + // segment in the labelmapBuffer + const segmentsPixelIndices = new Map(); + + const { hasOverlappingSegments, arrayOfLabelMapImages } = + await insertFunction({ + segmentsOnFrame, + labelMapImages, + pixelDataChunks, + multiframe, + referencedImageIds, + validOrientations, + metadataProvider, + tolerance, + segmentsPixelIndices, + sopUIDImageIdIndexMap, + imageIdMaps, + TypedArrayConstructor, + }); - if (!pixelDataChunks) { - throw new Error("Fractional segmentations are not yet supported"); - } - } + // calculate the centroid of each segment + const centroidXYZ = new Map(); - const orientation = checkOrientation( - multiframe, - validOrientations, - [ - imagePlaneModule.rows, - imagePlaneModule.columns, - referencedImageIds.length - ], - tolerance + segmentsPixelIndices.forEach((imageIdIndexBufferIndex, segmentIndex) => { + const centroids = calculateCentroid( + imageIdIndexBufferIndex, + multiframe, + metadataProvider, + referencedImageIds ); - // Pre-compute the sop UID to imageId index map so that in the for loop - // we don't have to call metadataProvider.get() for each imageId over - // and over again. - const sopUIDImageIdIndexMap = referencedImageIds.reduce((acc, imageId) => { - const { sopInstanceUID } = metadataProvider.get( - "generalImageModule", - imageId - ); - acc[sopInstanceUID] = imageId; - return acc; - }, {}); + centroidXYZ.set(segmentIndex, centroids); + }); - let insertFunction; + return { + labelMapImages: arrayOfLabelMapImages, + segMetadata, + segmentsOnFrame, + centroids: centroidXYZ, + overlappingSegments: hasOverlappingSegments, + }; +} - switch (orientation) { - case "Planar": - insertFunction = insertPixelDataPlanar; - break; - case "Perpendicular": - throw new Error( - "Segmentations orthogonal to the acquisition plane of the source data are not yet supported." - ); - case "Oblique": - throw new Error( - "Segmentations oblique to the acquisition plane of the source data are not yet supported." - ); - } +const throttledTriggerLoadProgressEvent = cstUtils.throttle( + (percentComplete) => { + triggerEvent(eventTarget, Events.SEGMENTATION_LOAD_PROGRESS, { + percentComplete, + }); + }, + 200 +); - /* if SEGs are overlapping: - 1) the labelmapBuffer will contain M volumes which have non-overlapping segments; - 2) segmentsOnFrame will have M * numberOfFrames values to track in which labelMap are the segments; - 3) insertFunction will return the number of LabelMaps - 4) generateToolState return is an array*/ +export function insertPixelDataPlanar({ + segmentsOnFrame, + labelMapImages, + pixelDataChunks, + multiframe, + referencedImageIds, + validOrientations, + metadataProvider, + tolerance, + segmentsPixelIndices, + sopUIDImageIdIndexMap, + imageIdMaps, +}) { + const { + SharedFunctionalGroupsSequence, + PerFrameFunctionalGroupsSequence, + Rows, + Columns, + } = multiframe; + + const sharedImageOrientationPatient = + SharedFunctionalGroupsSequence.PlaneOrientationSequence + ? SharedFunctionalGroupsSequence.PlaneOrientationSequence + .ImageOrientationPatient + : undefined; + const sliceLength = Columns * Rows; + + const groupsLen = PerFrameFunctionalGroupsSequence.length; + + let overlapping = false; + // Below, we chunk the processing of the frames to avoid blocking the main thread + // if the segmentation is large. We also use a promise to allow the caller to + // wait for the processing to finish. + return new Promise((resolve) => { + const percentImagesPerChunk = 0.1; + const imagesPerChunk = Math.ceil(groupsLen * percentImagesPerChunk); + const processChunk = (firstIndex) => { + for ( + let i = firstIndex; + i < firstIndex + imagesPerChunk && i < groupsLen; + i++ + ) { + const PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[i]; + + const ImageOrientationPatientI = + sharedImageOrientationPatient || + PerFrameFunctionalGroups.PlaneOrientationSequence + .ImageOrientationPatient; - const segmentsOnFrame = []; + const view = readFromUnpackedChunks( + pixelDataChunks, + i * sliceLength, + sliceLength + ); - const imageIdMaps = { indices: {}, metadata: {} }; - const labelMapImages = []; + const pixelDataI2D = ndarray(view, [Rows, Columns]); - for (let i = 0; i < referencedImageIds.length; i++) { - const referenceImageId = referencedImageIds[i]; - imageIdMaps.indices[referenceImageId] = i; - imageIdMaps.metadata[referenceImageId] = metadataProvider.get( - "instance", - referenceImageId + const alignedPixelDataI = alignPixelDataWithSourceData( + pixelDataI2D, + ImageOrientationPatientI, + validOrientations, + tolerance ); - const labelMapImage = - imageLoader.createAndCacheDerivedLabelmapImage(referenceImageId); - labelMapImages.push(labelMapImage); - } - // This is the centroid calculation for each segment Index, the data structure - // is a Map with key = segmentIndex and value = {imageIdIndex: centroid, ...} - // later on we will use this data structure to calculate the centroid of the - // segment in the labelmapBuffer - const segmentsPixelIndices = new Map(); - - const { hasOverlappingSegments, arrayOfLabelMapImages } = - await insertFunction({ - segmentsOnFrame, - labelMapImages, - pixelDataChunks, - multiframe, - referencedImageIds, - validOrientations, - metadataProvider, - tolerance, - segmentsPixelIndices, - sopUIDImageIdIndexMap, - imageIdMaps, - TypedArrayConstructor - }); + if (!alignedPixelDataI) { + throw new Error( + 'Individual SEG frames are out of plane with respect to the first SEG frame. ' + + 'This is not yet supported. Aborting segmentation loading.' + ); + } - // calculate the centroid of each segment - const centroidXYZ = new Map(); + const segmentIndex = getSegmentIndex(multiframe, i); - segmentsPixelIndices.forEach((imageIdIndexBufferIndex, segmentIndex) => { - const centroids = calculateCentroid( - imageIdIndexBufferIndex, - multiframe, - metadataProvider, - referencedImageIds - ); + if (segmentIndex === undefined) { + throw new Error( + 'Could not retrieve the segment index. Aborting segmentation loading.' + ); + } - centroidXYZ.set(segmentIndex, centroids); - }); + if (!segmentsPixelIndices.has(segmentIndex)) { + segmentsPixelIndices.set(segmentIndex, {}); + } - return { - labelMapImages: arrayOfLabelMapImages, - segMetadata, - segmentsOnFrame, - centroids: centroidXYZ, - overlappingSegments: hasOverlappingSegments - }; -} + const imageId = findReferenceSourceImageId( + multiframe, + i, + referencedImageIds, + metadataProvider, + tolerance, + sopUIDImageIdIndexMap + ); -const throttledTriggerLoadProgressEvent = cstUtils.throttle(percentComplete => { - triggerEvent(eventTarget, Events.SEGMENTATION_LOAD_PROGRESS, { - percentComplete - }); -}, 200); + if (!imageId) { + console.warn( + "Image not present in stack, can't import frame : " + i + '.' + ); + return; + } -export function insertPixelDataPlanar({ - segmentsOnFrame, - labelMapImages, - pixelDataChunks, - multiframe, - referencedImageIds, - validOrientations, - metadataProvider, - tolerance, - segmentsPixelIndices, - sopUIDImageIdIndexMap, - imageIdMaps -}) { - const { - SharedFunctionalGroupsSequence, - PerFrameFunctionalGroupsSequence, - Rows, - Columns - } = multiframe; - - const sharedImageOrientationPatient = - SharedFunctionalGroupsSequence.PlaneOrientationSequence - ? SharedFunctionalGroupsSequence.PlaneOrientationSequence - .ImageOrientationPatient - : undefined; - const sliceLength = Columns * Rows; - - const groupsLen = PerFrameFunctionalGroupsSequence.length; - - let overlapping = false; - // Below, we chunk the processing of the frames to avoid blocking the main thread - // if the segmentation is large. We also use a promise to allow the caller to - // wait for the processing to finish. - return new Promise(resolve => { - const percentImagesPerChunk = 0.1; - const imagesPerChunk = Math.ceil(groupsLen * percentImagesPerChunk); - const processChunk = firstIndex => { - for ( - let i = firstIndex; - i < firstIndex + imagesPerChunk && i < groupsLen; - i++ - ) { - const PerFrameFunctionalGroups = - PerFrameFunctionalGroupsSequence[i]; - - const ImageOrientationPatientI = - sharedImageOrientationPatient || - PerFrameFunctionalGroups.PlaneOrientationSequence - .ImageOrientationPatient; - - const view = readFromUnpackedChunks( - pixelDataChunks, - i * sliceLength, - sliceLength - ); - - const pixelDataI2D = ndarray(view, [Rows, Columns]); - - const alignedPixelDataI = alignPixelDataWithSourceData( - pixelDataI2D, - ImageOrientationPatientI, - validOrientations, - tolerance - ); - - if (!alignedPixelDataI) { - throw new Error( - "Individual SEG frames are out of plane with respect to the first SEG frame. " + - "This is not yet supported. Aborting segmentation loading." - ); - } + const sourceImageMetadata = imageIdMaps.metadata[imageId]; + if ( + Rows !== sourceImageMetadata.Rows || + Columns !== sourceImageMetadata.Columns + ) { + throw new Error( + 'Individual SEG frames have different geometry dimensions (Rows and Columns) ' + + 'respect to the source image reference frame. This is not yet supported. ' + + 'Aborting segmentation loading. ' + ); + } - const segmentIndex = getSegmentIndex(multiframe, i); + const imageIdIndex = imageIdMaps.indices[imageId]; + const labelmapImage = labelMapImages[imageIdIndex]; + const labelmap2DView = labelmapImage.getPixelData(); + const imageVoxelManager = labelmapImage.voxelManager; - if (segmentIndex === undefined) { - throw new Error( - "Could not retrieve the segment index. Aborting segmentation loading." - ); - } + const data = alignedPixelDataI.data; - if (!segmentsPixelIndices.has(segmentIndex)) { - segmentsPixelIndices.set(segmentIndex, {}); + const indexCache = []; + for (let k = 0, len = alignedPixelDataI.data.length; k < len; ++k) { + if (data[k]) { + for (let x = k; x < len; ++x) { + if (data[x]) { + if (!overlapping && labelmap2DView[x] !== 0) { + overlapping = true; + return resolve( + insertOverlappingPixelDataPlanar({ + segmentsOnFrame, + labelMapImages, + pixelDataChunks, + multiframe, + referencedImageIds, + validOrientations, + metadataProvider, + tolerance, + segmentsPixelIndices, + sopUIDImageIdIndexMap, + imageIdMaps, + }) + ); } - - const imageId = findReferenceSourceImageId( - multiframe, - i, - referencedImageIds, - metadataProvider, - tolerance, - sopUIDImageIdIndexMap - ); - - if (!imageId) { - console.warn( - "Image not present in stack, can't import frame : " + - i + - "." - ); - return; + if (imageVoxelManager) { + // Ensure voxelManager updates boundaries + imageVoxelManager.setAtIndex(x, segmentIndex); + } else { + // Directly assign pixel data when volume is not managed via voxelManager. + labelmap2DView[x] = segmentIndex; } + indexCache.push(x); + } + } - const sourceImageMetadata = imageIdMaps.metadata[imageId]; - if ( - Rows !== sourceImageMetadata.Rows || - Columns !== sourceImageMetadata.Columns - ) { - throw new Error( - "Individual SEG frames have different geometry dimensions (Rows and Columns) " + - "respect to the source image reference frame. This is not yet supported. " + - "Aborting segmentation loading. " - ); - } + if (!segmentsOnFrame[imageIdIndex]) { + segmentsOnFrame[imageIdIndex] = []; + } - const imageIdIndex = imageIdMaps.indices[imageId]; - const labelmapImage = labelMapImages[imageIdIndex]; - const labelmap2DView = labelmapImage.getPixelData(); - const imageVoxelManager = labelmapImage.voxelManager; - - const data = alignedPixelDataI.data; - - const indexCache = []; - for ( - let k = 0, len = alignedPixelDataI.data.length; - k < len; - ++k - ) { - if (data[k]) { - for (let x = k; x < len; ++x) { - if (data[x]) { - if (!overlapping && labelmap2DView[x] !== 0) { - overlapping = true; - return resolve( - insertOverlappingPixelDataPlanar({ - segmentsOnFrame, - labelMapImages, - pixelDataChunks, - multiframe, - referencedImageIds, - validOrientations, - metadataProvider, - tolerance, - segmentsPixelIndices, - sopUIDImageIdIndexMap, - imageIdMaps - }) - ); - } - if (imageVoxelManager) { - // Ensure voxelManager updates boundaries - imageVoxelManager.setAtIndex( - x, - segmentIndex - ); - } else { - // Directly assign pixel data when volume is not managed via voxelManager. - labelmap2DView[x] = segmentIndex; - } - indexCache.push(x); - } - } - - if (!segmentsOnFrame[imageIdIndex]) { - segmentsOnFrame[imageIdIndex] = []; - } - - segmentsOnFrame[imageIdIndex].push(segmentIndex); - - break; - } - } + segmentsOnFrame[imageIdIndex].push(segmentIndex); - const segmentIndexObject = - segmentsPixelIndices.get(segmentIndex); - segmentIndexObject[imageIdIndex] = indexCache; - segmentsPixelIndices.set(segmentIndex, segmentIndexObject); - } + break; + } + } - const percentComplete = Math.round((firstIndex / groupsLen) * 100); - throttledTriggerLoadProgressEvent(percentComplete); - - if (firstIndex < groupsLen) { - setTimeout(() => processChunk(firstIndex + imagesPerChunk), 0); - } else { - // resolve the Promise when all images have been processed - resolve({ - hasOverlappingSegments: false, - arrayOfLabelMapImages: [labelMapImages] - }); + const segmentIndexObject = segmentsPixelIndices.get(segmentIndex); + segmentIndexObject[imageIdIndex] = indexCache; + segmentsPixelIndices.set(segmentIndex, segmentIndexObject); + } + + const percentComplete = Math.round((firstIndex / groupsLen) * 100); + throttledTriggerLoadProgressEvent(percentComplete); + + if (firstIndex < groupsLen) { + setTimeout(() => processChunk(firstIndex + imagesPerChunk), 0); + } else { + // resolve the Promise when all images have been processed + resolve({ + hasOverlappingSegments: false, + arrayOfLabelMapImages: [labelMapImages], + }); + } + }; + const processLabelmapChunk = (firstIndex) => { + // Cache properties and lengths outside loops for performance + const pfSeq = multiframe.PerFrameFunctionalGroupsSequence; + const sharedPlaneOrientation = + multiframe.SharedFunctionalGroupsSequence.PlaneOrientationSequence + ?.ImageOrientationPatient; + + for ( + let i = firstIndex; + i < firstIndex + imagesPerChunk && i < groupsLen; + i++ + ) { + const PerFrameFunctionalGroups = pfSeq[i]; + const ImageOrientationPatientI = + sharedPlaneOrientation || + PerFrameFunctionalGroups.PlaneOrientationSequence + .ImageOrientationPatient; + // Use slice to get the correct frame (TypedArray) + const view = pixelDataChunks.subarray( + i * sliceLength, + (i + 1) * sliceLength + ); + const pixelDataI2D = ndarray(view, [Rows, Columns]); + const alignedPixelDataI = alignPixelDataWithSourceData( + pixelDataI2D, + ImageOrientationPatientI, + validOrientations, + tolerance + ); + if (!alignedPixelDataI) { + throw new Error( + 'Individual Labelmap SEG frames are out of plane with respect to the first SEG frame. ' + + 'This is not yet supported. Aborting segmentation loading.' + ); + } + const imageId = findReferenceSourceImageId( + multiframe, + i, + referencedImageIds, + metadataProvider, + tolerance, + sopUIDImageIdIndexMap + ); + if (!imageId) { + console.warn( + `Image not present in stack, can't import frame : ${i}.` + ); + continue; + } + const sourceImageMetadata = imageIdMaps.metadata[imageId]; + if ( + Rows !== sourceImageMetadata.Rows || + Columns !== sourceImageMetadata.Columns + ) { + throw new Error( + 'Individual Labelmap SEG frames have different geometry dimensions (Rows and Columns) ' + + 'respect to the source image reference frame. This is not yet supported. ' + + 'Aborting segmentation loading. ' + ); + } + const imageIdIndex = imageIdMaps.indices[imageId]; + const labelmapImage = labelMapImages[imageIdIndex]; + const labelmap2DView = labelmapImage.getPixelData(); // TypedArray + const data = alignedPixelDataI.data; + let segmentsOnFrameArr = segmentsOnFrame[imageIdIndex]; + if (!segmentsOnFrameArr) { + segmentsOnFrameArr = []; + segmentsOnFrame[imageIdIndex] = segmentsOnFrameArr; + } + // Use a local Set to avoid .includes() in tight loop + const segSet = new Set(segmentsOnFrameArr); + for (let k = 0, len = data.length; k < len; ++k) { + const segIdx = data[k]; + if (segIdx !== 0) { + labelmap2DView[k] = segIdx; + if (!segSet.has(segIdx)) { + segmentsOnFrameArr.push(segIdx); + segSet.add(segIdx); } - }; - const processLabelmapChunk = firstIndex => { - // Cache properties and lengths outside loops for performance - const pfSeq = multiframe.PerFrameFunctionalGroupsSequence; - const sharedPlaneOrientation = - multiframe.SharedFunctionalGroupsSequence - .PlaneOrientationSequence?.ImageOrientationPatient; - - for ( - let i = firstIndex; - i < firstIndex + imagesPerChunk && i < groupsLen; - i++ - ) { - const PerFrameFunctionalGroups = pfSeq[i]; - const ImageOrientationPatientI = - sharedPlaneOrientation || - PerFrameFunctionalGroups.PlaneOrientationSequence - .ImageOrientationPatient; - // Use slice to get the correct frame (TypedArray) - const view = pixelDataChunks.subarray( - i * sliceLength, - (i + 1) * sliceLength - ); - const pixelDataI2D = ndarray(view, [Rows, Columns]); - const alignedPixelDataI = alignPixelDataWithSourceData( - pixelDataI2D, - ImageOrientationPatientI, - validOrientations, - tolerance - ); - if (!alignedPixelDataI) { - throw new Error( - "Individual Labelmap SEG frames are out of plane with respect to the first SEG frame. " + - "This is not yet supported. Aborting segmentation loading." - ); - } - const imageId = findReferenceSourceImageId( - multiframe, - i, - referencedImageIds, - metadataProvider, - tolerance, - sopUIDImageIdIndexMap - ); - if (!imageId) { - console.warn( - `Image not present in stack, can't import frame : ${i}.` - ); - continue; - } - const sourceImageMetadata = imageIdMaps.metadata[imageId]; - if ( - Rows !== sourceImageMetadata.Rows || - Columns !== sourceImageMetadata.Columns - ) { - throw new Error( - "Individual Labelmap SEG frames have different geometry dimensions (Rows and Columns) " + - "respect to the source image reference frame. This is not yet supported. " + - "Aborting segmentation loading. " - ); - } - const imageIdIndex = imageIdMaps.indices[imageId]; - const labelmapImage = labelMapImages[imageIdIndex]; - const labelmap2DView = labelmapImage.getPixelData(); // TypedArray - const data = alignedPixelDataI.data; - let segmentsOnFrameArr = segmentsOnFrame[imageIdIndex]; - if (!segmentsOnFrameArr) { - segmentsOnFrameArr = []; - segmentsOnFrame[imageIdIndex] = segmentsOnFrameArr; - } - // Use a local Set to avoid .includes() in tight loop - const segSet = new Set(segmentsOnFrameArr); - for (let k = 0, len = data.length; k < len; ++k) { - const segIdx = data[k]; - if (segIdx !== 0) { - labelmap2DView[k] = segIdx; - if (!segSet.has(segIdx)) { - segmentsOnFrameArr.push(segIdx); - segSet.add(segIdx); - } - if (!segmentsPixelIndices.has(segIdx)) { - segmentsPixelIndices.set(segIdx, {}); - } - const segmentPixelInfo = - segmentsPixelIndices.get(segIdx); - if (!segmentPixelInfo[imageIdIndex]) { - segmentPixelInfo[imageIdIndex] = []; - } - segmentPixelInfo[imageIdIndex].push(k); - } - } + if (!segmentsPixelIndices.has(segIdx)) { + segmentsPixelIndices.set(segIdx, {}); } - const percentComplete = Math.round((firstIndex / groupsLen) * 100); - throttledTriggerLoadProgressEvent(percentComplete); - if (firstIndex < groupsLen) { - setTimeout( - () => processLabelmapChunk(firstIndex + imagesPerChunk), - 0 - ); - } else { - resolve({ - hasOverlappingSegments: false, - arrayOfLabelMapImages: [labelMapImages] - }); + const segmentPixelInfo = segmentsPixelIndices.get(segIdx); + if (!segmentPixelInfo[imageIdIndex]) { + segmentPixelInfo[imageIdIndex] = []; } - }; - - if (multiframe.SegmentationType === "LABELMAP") { - // If the segmentation is a labelmap, we can process it in chunks - processLabelmapChunk(0); - } else { - processChunk(0); + segmentPixelInfo[imageIdIndex].push(k); + } } - }); + } + const percentComplete = Math.round((firstIndex / groupsLen) * 100); + throttledTriggerLoadProgressEvent(percentComplete); + if (firstIndex < groupsLen) { + setTimeout(() => processLabelmapChunk(firstIndex + imagesPerChunk), 0); + } else { + resolve({ + hasOverlappingSegments: false, + arrayOfLabelMapImages: [labelMapImages], + }); + } + }; + + if (multiframe.SegmentationType === 'LABELMAP') { + // If the segmentation is a labelmap, we can process it in chunks + processLabelmapChunk(0); + } else { + processChunk(0); + } + }); } const getAlignedPixelData = ({ - sharedImageOrientationPatient, - PerFrameFunctionalGroups, - pixelDataChunks, - sequenceIndex, - sliceLength, - Rows, - Columns, - validOrientations, - tolerance + sharedImageOrientationPatient, + PerFrameFunctionalGroups, + pixelDataChunks, + sequenceIndex, + sliceLength, + Rows, + Columns, + validOrientations, + tolerance, }) => { - const ImageOrientationPatientI = - sharedImageOrientationPatient || - PerFrameFunctionalGroups.PlaneOrientationSequence - .ImageOrientationPatient; + const ImageOrientationPatientI = + sharedImageOrientationPatient || + PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient; - const view = readFromUnpackedChunks( - pixelDataChunks, - sequenceIndex * sliceLength, - sliceLength - ); + const view = readFromUnpackedChunks( + pixelDataChunks, + sequenceIndex * sliceLength, + sliceLength + ); - const pixelDataI2D = ndarray(view, [Rows, Columns]); + const pixelDataI2D = ndarray(view, [Rows, Columns]); - const alignedPixelDataI = alignPixelDataWithSourceData( - pixelDataI2D, - ImageOrientationPatientI, - validOrientations, - tolerance - ); + const alignedPixelDataI = alignPixelDataWithSourceData( + pixelDataI2D, + ImageOrientationPatientI, + validOrientations, + tolerance + ); - if (!alignedPixelDataI) { - throw new Error( - "Individual SEG frames are out of plane with respect to the first SEG frame. " + - "This is not yet supported. Aborting segmentation loading." - ); - } - return alignedPixelDataI; + if (!alignedPixelDataI) { + throw new Error( + 'Individual SEG frames are out of plane with respect to the first SEG frame. ' + + 'This is not yet supported. Aborting segmentation loading.' + ); + } + return alignedPixelDataI; }; const checkImageDimensions = ({ metadataProvider, imageId, Rows, Columns }) => { - const sourceImageMetadata = metadataProvider.get("instance", imageId); - if ( - Rows !== sourceImageMetadata.Rows || - Columns !== sourceImageMetadata.Columns - ) { - throw new Error( - "Individual SEG frames have different geometry dimensions (Rows and Columns) " + - "respect to the source image reference frame. This is not yet supported. " + - "Aborting segmentation loading. " - ); - } + const sourceImageMetadata = metadataProvider.get('instance', imageId); + if ( + Rows !== sourceImageMetadata.Rows || + Columns !== sourceImageMetadata.Columns + ) { + throw new Error( + 'Individual SEG frames have different geometry dimensions (Rows and Columns) ' + + 'respect to the source image reference frame. This is not yet supported. ' + + 'Aborting segmentation loading. ' + ); + } }; const getArrayOfLabelMapImagesWithSegmentData = ({ - arrayOfSegmentData, - referencedImageIds + arrayOfSegmentData, + referencedImageIds, }) => { - let largestArray = []; - let largestArrayIndex; - - for (let i = 0; i < arrayOfSegmentData.length; i++) { - const segmentData = arrayOfSegmentData[i]; - if (segmentData.length > largestArray.length) { - largestArray = segmentData; - largestArrayIndex = i; - } + let largestArray = []; + let largestArrayIndex; + + for (let i = 0; i < arrayOfSegmentData.length; i++) { + const segmentData = arrayOfSegmentData[i]; + if (segmentData.length > largestArray.length) { + largestArray = segmentData; + largestArrayIndex = i; } + } - return arrayOfSegmentData.map(arr => { - const labelMapImages = referencedImageIds - .map((referencedImageId, i) => { - const hasEmptySegmentData = !arr[i]; - - // @TODO: right now cornerstone loses reference of the images when you don't have the complete set of images for each - // grouping of segments, but in order to save memory we would ideally only duplicate images where the there is overlapping - // so when this losing of reference is fixed, we can implement some filter like the one below in order to get rid of empty - // segment images that only take up memory space - // if (hasEmptySegmentData && i !== largestArrayIndex) { - // return; - // } - - const labelMapImage = - imageLoader.createAndCacheDerivedLabelmapImage( - referencedImageId - ); - - const pixelData = labelMapImage.getPixelData(); - - if (!hasEmptySegmentData) { - for (let j = 0; j < pixelData.length; j++) { - pixelData[j] = arr[i][j]; - } - } + return arrayOfSegmentData.map((arr) => { + const labelMapImages = referencedImageIds + .map((referencedImageId, i) => { + const hasEmptySegmentData = !arr[i]; - return labelMapImage; - }) - .filter(Boolean); - return labelMapImages; - }); + // @TODO: right now cornerstone loses reference of the images when you don't have the complete set of images for each + // grouping of segments, but in order to save memory we would ideally only duplicate images where the there is overlapping + // so when this losing of reference is fixed, we can implement some filter like the one below in order to get rid of empty + // segment images that only take up memory space + // if (hasEmptySegmentData && i !== largestArrayIndex) { + // return; + // } + + const labelMapImage = + imageLoader.createAndCacheDerivedLabelmapImage(referencedImageId); + + const pixelData = labelMapImage.getPixelData(); + + if (!hasEmptySegmentData) { + for (let j = 0; j < pixelData.length; j++) { + pixelData[j] = arr[i][j]; + } + } + + return labelMapImage; + }) + .filter(Boolean); + return labelMapImages; + }); }; export function insertOverlappingPixelDataPlanar({ - segmentsOnFrame, - labelMapImages, - pixelDataChunks, - multiframe, - referencedImageIds, - validOrientations, - metadataProvider, - tolerance, - segmentsPixelIndices, - sopUIDImageIdIndexMap, - imageIdMaps + segmentsOnFrame, + labelMapImages, + pixelDataChunks, + multiframe, + referencedImageIds, + validOrientations, + metadataProvider, + tolerance, + segmentsPixelIndices, + sopUIDImageIdIndexMap, + imageIdMaps, }) { - const { - SharedFunctionalGroupsSequence, - PerFrameFunctionalGroupsSequence, - Rows, - Columns - } = multiframe; - - const sharedImageOrientationPatient = - SharedFunctionalGroupsSequence.PlaneOrientationSequence - ? SharedFunctionalGroupsSequence.PlaneOrientationSequence - .ImageOrientationPatient - : undefined; - const sliceLength = Columns * Rows; - - const arrayOfSegmentData = getArrayOfSegmentData({ - sliceLength, - Rows, - Columns, - validOrientations, - metadataProvider, - imageIdMaps, - segmentsOnFrame, - tolerance, - pixelDataChunks, - PerFrameFunctionalGroupsSequence, - labelMapImages, - sopUIDImageIdIndexMap, - multiframe, - sharedImageOrientationPatient, - segmentsPixelIndices - }); - - const arrayOfLabelMapImagesWithSegmentData = - getArrayOfLabelMapImagesWithSegmentData({ - arrayOfSegmentData, - referencedImageIds - }); + const { + SharedFunctionalGroupsSequence, + PerFrameFunctionalGroupsSequence, + Rows, + Columns, + } = multiframe; - return { - arrayOfLabelMapImages: arrayOfLabelMapImagesWithSegmentData, - hasOverlappingSegments: true - }; -} + const sharedImageOrientationPatient = + SharedFunctionalGroupsSequence.PlaneOrientationSequence + ? SharedFunctionalGroupsSequence.PlaneOrientationSequence + .ImageOrientationPatient + : undefined; + const sliceLength = Columns * Rows; -const getArrayOfSegmentData = ({ + const arrayOfSegmentData = getArrayOfSegmentData({ sliceLength, Rows, Columns, @@ -733,151 +669,180 @@ const getArrayOfSegmentData = ({ sopUIDImageIdIndexMap, multiframe, sharedImageOrientationPatient, - segmentsPixelIndices + segmentsPixelIndices, + }); + + const arrayOfLabelMapImagesWithSegmentData = + getArrayOfLabelMapImagesWithSegmentData({ + arrayOfSegmentData, + referencedImageIds, + }); + + return { + arrayOfLabelMapImages: arrayOfLabelMapImagesWithSegmentData, + hasOverlappingSegments: true, + }; +} + +const getArrayOfSegmentData = ({ + sliceLength, + Rows, + Columns, + validOrientations, + metadataProvider, + imageIdMaps, + segmentsOnFrame, + tolerance, + pixelDataChunks, + PerFrameFunctionalGroupsSequence, + labelMapImages, + sopUIDImageIdIndexMap, + multiframe, + sharedImageOrientationPatient, + segmentsPixelIndices, }) => { - const arrayOfSegmentData = []; - const numberOfSegments = multiframe.SegmentSequence.length; - for ( - let currentSegmentIndex = 1; - currentSegmentIndex <= numberOfSegments; - ++currentSegmentIndex - ) { - const segmentData = getSegmentData({ - PerFrameFunctionalGroupsSequence, - labelMapImages, - sopUIDImageIdIndexMap, - multiframe, - segmentIndex: currentSegmentIndex, - sliceLength, - Rows, - Columns, - validOrientations, - tolerance, - pixelDataChunks, - sharedImageOrientationPatient, - metadataProvider, - imageIdMaps, - segmentsOnFrame, - segmentsPixelIndices - }); + const arrayOfSegmentData = []; + const numberOfSegments = multiframe.SegmentSequence.length; + for ( + let currentSegmentIndex = 1; + currentSegmentIndex <= numberOfSegments; + ++currentSegmentIndex + ) { + const segmentData = getSegmentData({ + PerFrameFunctionalGroupsSequence, + labelMapImages, + sopUIDImageIdIndexMap, + multiframe, + segmentIndex: currentSegmentIndex, + sliceLength, + Rows, + Columns, + validOrientations, + tolerance, + pixelDataChunks, + sharedImageOrientationPatient, + metadataProvider, + imageIdMaps, + segmentsOnFrame, + segmentsPixelIndices, + }); - compactMergeSegmentDataWithoutInformationLoss({ - arrayOfSegmentData, - newSegmentData: segmentData - }); - } + compactMergeSegmentDataWithoutInformationLoss({ + arrayOfSegmentData, + newSegmentData: segmentData, + }); + } - return arrayOfSegmentData; + return arrayOfSegmentData; }; const getSegmentData = ({ - PerFrameFunctionalGroupsSequence, - labelMapImages, - sopUIDImageIdIndexMap, - multiframe, - segmentIndex, - sliceLength, - Rows, - Columns, - validOrientations, - tolerance, - pixelDataChunks, - sharedImageOrientationPatient, - metadataProvider, - imageIdMaps, - segmentsOnFrame, - segmentsPixelIndices + PerFrameFunctionalGroupsSequence, + labelMapImages, + sopUIDImageIdIndexMap, + multiframe, + segmentIndex, + sliceLength, + Rows, + Columns, + validOrientations, + tolerance, + pixelDataChunks, + sharedImageOrientationPatient, + metadataProvider, + imageIdMaps, + segmentsOnFrame, + segmentsPixelIndices, }) => { - const segmentData = []; - - for ( - let currentLabelMapImageIndex = 0; - currentLabelMapImageIndex < labelMapImages.length; - currentLabelMapImageIndex++ - ) { - const currentLabelMapImage = labelMapImages[currentLabelMapImageIndex]; - const referencedImageId = currentLabelMapImage.referencedImageId; - - const PerFrameFunctionalGroupsIndex = - PerFrameFunctionalGroupsSequence.findIndex( - (PerFrameFunctionalGroups, currentSequenceIndex) => { - const { - segmentIndex: groupsSegmentIndex, - referencedImageId: groupsReferenceImageId - } = extractInfoFromPerFrameFunctionalGroups({ - PerFrameFunctionalGroups, - sequenceIndex: currentSequenceIndex, - sopUIDImageIdIndexMap, - multiframe - }); - - const isCorrectPerFrameFunctionalGroup = - groupsSegmentIndex === segmentIndex && - groupsReferenceImageId === - currentLabelMapImage.referencedImageId; - - return isCorrectPerFrameFunctionalGroup; - } - ); - - if (PerFrameFunctionalGroupsIndex === -1) { - continue; - } + const segmentData = []; + + for ( + let currentLabelMapImageIndex = 0; + currentLabelMapImageIndex < labelMapImages.length; + currentLabelMapImageIndex++ + ) { + const currentLabelMapImage = labelMapImages[currentLabelMapImageIndex]; + const referencedImageId = currentLabelMapImage.referencedImageId; + + const PerFrameFunctionalGroupsIndex = + PerFrameFunctionalGroupsSequence.findIndex( + (PerFrameFunctionalGroups, currentSequenceIndex) => { + const { + segmentIndex: groupsSegmentIndex, + referencedImageId: groupsReferenceImageId, + } = extractInfoFromPerFrameFunctionalGroups({ + PerFrameFunctionalGroups, + sequenceIndex: currentSequenceIndex, + sopUIDImageIdIndexMap, + multiframe, + }); - const PerFrameFunctionalGroups = - PerFrameFunctionalGroupsSequence[PerFrameFunctionalGroupsIndex]; + const isCorrectPerFrameFunctionalGroup = + groupsSegmentIndex === segmentIndex && + groupsReferenceImageId === currentLabelMapImage.referencedImageId; - const alignedPixelDataI = getAlignedPixelData({ - sharedImageOrientationPatient, - PerFrameFunctionalGroups, - pixelDataChunks, - sequenceIndex: PerFrameFunctionalGroupsIndex, - sliceLength, - Rows, - Columns, - validOrientations, - tolerance - }); + return isCorrectPerFrameFunctionalGroup; + } + ); - checkImageDimensions({ - metadataProvider, - Rows, - Columns, - imageId: referencedImageId - }); + if (PerFrameFunctionalGroupsIndex === -1) { + continue; + } - const indexCache = []; - const segmentationDataForImageId = alignedPixelDataI.data.map( - (pixel, pixelIndex) => { - const pixelValue = pixel ? segmentIndex : 0; - if (pixelValue) { - indexCache.push(pixelIndex); - } - return pixel ? segmentIndex : 0; - } - ); + const PerFrameFunctionalGroups = + PerFrameFunctionalGroupsSequence[PerFrameFunctionalGroupsIndex]; + + const alignedPixelDataI = getAlignedPixelData({ + sharedImageOrientationPatient, + PerFrameFunctionalGroups, + pixelDataChunks, + sequenceIndex: PerFrameFunctionalGroupsIndex, + sliceLength, + Rows, + Columns, + validOrientations, + tolerance, + }); - const hasWrittenSegmentationData = indexCache.length > 0; + checkImageDimensions({ + metadataProvider, + Rows, + Columns, + imageId: referencedImageId, + }); - if (hasWrittenSegmentationData) { - segmentData[currentLabelMapImageIndex] = segmentationDataForImageId; + const indexCache = []; + const segmentationDataForImageId = alignedPixelDataI.data.map( + (pixel, pixelIndex) => { + const pixelValue = pixel ? segmentIndex : 0; + if (pixelValue) { + indexCache.push(pixelIndex); } + return pixel ? segmentIndex : 0; + } + ); - const imageIdIndex = imageIdMaps.indices[referencedImageId]; + const hasWrittenSegmentationData = indexCache.length > 0; - updateSegmentsOnFrame({ - imageIdIndex, - segmentIndex, - segmentsOnFrame - }); - updateSegmentsPixelIndices({ - imageIdIndex, - segmentIndex, - segmentsPixelIndices, - indexCache - }); + if (hasWrittenSegmentationData) { + segmentData[currentLabelMapImageIndex] = segmentationDataForImageId; } - return segmentData; + + const imageIdIndex = imageIdMaps.indices[referencedImageId]; + + updateSegmentsOnFrame({ + imageIdIndex, + segmentIndex, + segmentsOnFrame, + }); + updateSegmentsPixelIndices({ + imageIdIndex, + segmentIndex, + segmentsPixelIndices, + indexCache, + }); + } + return segmentData; }; export { createLabelmapsFromBufferInternal }; From 64922bb3ab153bed22c79e08cbbc0f62f1df3bd6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:42:11 -0500 Subject: [PATCH 02/90] chore(deps-dev): bump lodash from 4.17.21 to 4.17.23 (#2572) * fix(security): Update lodash to 4.17.23 using a resolution to address CVE-2025-13465. * Removed lodash from the dev dependencies since it is in the resolutions now. * Update lodash to 4.17.23 in the docs package. --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Boccanfuso --- bun.lock | 4 ++-- package.json | 4 ++-- packages/docs/package.json | 3 ++- packages/docs/yarn.lock | 8 ++++---- yarn.lock | 8 ++++---- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/bun.lock b/bun.lock index de5007dc71..94d68ba4c4 100644 --- a/bun.lock +++ b/bun.lock @@ -78,7 +78,6 @@ "karma-webpack": "5.0.1", "lerna": "8.2.1", "lint-staged": "13.3.0", - "lodash": "4.17.21", "mocha": "10.8.2", "nyc": "17.1.0", "open-cli": "7.2.0", @@ -250,6 +249,7 @@ "caniuse-lite": "1.0.30001767", "canvas": "3.2.0", "dcmjs": "0.49.4", + "lodash": "4.17.23", "node-forge": "1.3.2", "qs": "6.14.1", "tar-fs": "2.1.4", @@ -2308,7 +2308,7 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], "lodash.clonedeep": ["lodash.clonedeep@4.5.0", "", {}, "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="], diff --git a/package.json b/package.json index 1ba9facffc..bb7238ba45 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,6 @@ "karma-webpack": "5.0.1", "lerna": "8.2.1", "lint-staged": "13.3.0", - "lodash": "4.17.21", "mocha": "10.8.2", "nyc": "17.1.0", "open-cli": "7.2.0", @@ -201,6 +200,7 @@ "tar-fs": "2.1.4", "body-parser": "1.20.3", "ws": "8.18.3", - "qs": "6.14.1" + "qs": "6.14.1", + "lodash": "4.17.23" } } diff --git a/packages/docs/package.json b/packages/docs/package.json index e70f9f9db2..7d12ac3dfc 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -86,6 +86,7 @@ "resolutions": { "node-forge": "1.3.2", "qs": "6.14.1", - "mdast-util-to-hast": "13.2.1" + "mdast-util-to-hast": "13.2.1", + "lodash": "4.17.23" } } diff --git a/packages/docs/yarn.lock b/packages/docs/yarn.lock index a07ae66cb3..43abcc0b3e 100644 --- a/packages/docs/yarn.lock +++ b/packages/docs/yarn.lock @@ -6787,10 +6787,10 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash@4.17.23, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== longest-streak@^3.0.0: version "3.1.0" diff --git a/yarn.lock b/yarn.lock index 2f2d38cdb2..8f7c1c5e83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9595,10 +9595,10 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.15: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash@4.17.23, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.15: + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" From 5e12f027c54226e8755fc0abd759e6d3280e00d5 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 10 Feb 2026 14:46:00 +0000 Subject: [PATCH 03/90] chore(version): version.json [skip ci] --- commit.txt | 2 +- packages/adapters/package.json | 4 ++-- packages/ai/package.json | 4 ++-- packages/dicomImageLoader/package.json | 2 +- packages/labelmap-interpolation/package.json | 4 ++-- packages/nifti-volume-loader/package.json | 2 +- packages/polymorphic-segmentation/package.json | 4 ++-- packages/tools/package.json | 2 +- version.json | 4 ++-- version.txt | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/commit.txt b/commit.txt index d9f8fb92b3..a868ceed24 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -d0e0e37510e27a2f7070475fedf7a1fc7cff204a \ No newline at end of file +6a47a441e0032a1e26d676d3605362f27d89032e \ No newline at end of file diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 7400f253fb..c49a6e82d6 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.32", - "@cornerstonejs/tools": "4.15.32" + "@cornerstonejs/core": "4.15.33", + "@cornerstonejs/tools": "4.15.33" } } diff --git a/packages/ai/package.json b/packages/ai/package.json index d5874a5270..82d8ef9488 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.32", - "@cornerstonejs/tools": "4.15.32" + "@cornerstonejs/core": "4.15.33", + "@cornerstonejs/tools": "4.15.33" } } diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index d69f28b1a3..eeed1e3dbc 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.32", + "@cornerstonejs/core": "4.15.33", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index f9968aa611..4df1d94ba7 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.32", - "@cornerstonejs/tools": "4.15.32", + "@cornerstonejs/core": "4.15.33", + "@cornerstonejs/tools": "4.15.33", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index ac038793fa..f0c95dd9e1 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.32" + "@cornerstonejs/core": "4.15.33" }, "contributors": [ { diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index e5305274f7..407867f9ba 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.32", - "@cornerstonejs/tools": "4.15.32", + "@cornerstonejs/core": "4.15.33", + "@cornerstonejs/tools": "4.15.33", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/tools/package.json b/packages/tools/package.json index 7cb32181ee..983039d57c 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.32", + "@cornerstonejs/core": "4.15.33", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/version.json b/version.json index d025cd8a36..a86fcb52c2 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.15.32", - "commit": "d0e0e37510e27a2f7070475fedf7a1fc7cff204a" + "version": "4.15.33", + "commit": "6a47a441e0032a1e26d676d3605362f27d89032e" } \ No newline at end of file diff --git a/version.txt b/version.txt index c551d0e51a..e897729ad1 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.15.32 \ No newline at end of file +4.15.33 \ No newline at end of file From bcf71aee53c7820fbb68f00aee7d0137d455f026 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 10 Feb 2026 14:46:16 +0000 Subject: [PATCH 04/90] chore(version): Update package versions [skip ci] --- CHANGELOG.md | 4 ++++ lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 2 +- 18 files changed, 45 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 064c6c4a91..675e0ac258 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package root + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 1358a9550c..1235029270 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.15.32", + "version": "4.15.33", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index f28b259588..7e2a0118c2 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index c49a6e82d6..6a668eb2b9 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.15.32", + "version": "4.15.33", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index fa844b03ea..9cb204cd05 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 82d8ef9488..cbcde75902 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.15.32", + "version": "4.15.33", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 9d3208dabc..39bde2d009 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 582375b253..eb107c6ad7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.15.32", + "version": "4.15.33", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 83897023eb..b7ec189803 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index eeed1e3dbc..5615f24eed 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.15.32", + "version": "4.15.33", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index b25b142b7f..e58202ff09 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 4df1d94ba7..0cd67ee6a7 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.15.32", + "version": "4.15.33", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 5fe34e72c1..82eb9c22a8 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index f0c95dd9e1..10e286bf71 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.15.32", + "version": "4.15.33", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index bb917d2164..7184f355f7 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 407867f9ba..8ced98f9b9 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.15.32", + "version": "4.15.33", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 234b50e33f..85d295f1fd 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.15.32](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.31...v4.15.32) (2026-02-09) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 983039d57c..19a6b402c2 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.15.32", + "version": "4.15.33", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", From aa5e21328c0f56c87abb5cdd54988e67a85fcffa Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 10 Feb 2026 14:46:27 +0000 Subject: [PATCH 05/90] chore: update generated version file [skip ci] --- packages/adapters/src/version.ts | 2 +- packages/ai/src/version.ts | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/src/version.ts | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 970c790096..61bcbd557f 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.32'; +export const version = '4.15.33'; From 496d6bac7fd612c3822c544d6567130c1bddf406 Mon Sep 17 00:00:00 2001 From: "Martin Bellehumeur, M. Eng." <23396581+mbellehumeur@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:07:09 +0100 Subject: [PATCH 06/90] feat(MPR): add reformat orientation (#2540) * refactor: replace string literals with OrientationAxis enums for better type safety and clarity in BaseVolumeViewport and getCameraVectors * feat(rendering): Add function to calculate acquisition plane reformat orientation based on image orientation patient values * feat: enhance reformat orientation handling in VolumeViewport and BaseVolumeViewport, allowing for specific axial, sagittal, and coronal reformats while maintaining base orientation references * feat: add buttons for setting viewport orientations to non-reformat, reformat, and acquisition types, enhancing user control over viewport display * fix: suppress events during camera reset in VolumeViewport to prevent premature rendering * fix(getCameraVectors): import OrientationVectors type * fix(tests): update button text in MPR Reformat visual tests * fix(tests): update MPR Reformat screenshots for Chromium and WebKit --------- Co-authored-by: Bill Wallace --- .../src/RenderingEngine/BaseVolumeViewport.ts | 31 ++- .../src/RenderingEngine/VolumeViewport.ts | 25 ++- .../helpers/getCameraVectors.ts | 205 +++++++++++++++++- packages/tools/examples/mprReformat/index.ts | 47 +++- .../volumeViewportOrientation/index.ts | 10 +- tests/MPRReformat.spec.ts | 4 +- .../mpr-reformat-after-interaction.png | Bin 357625 -> 356903 bytes .../mpr-reformat-after-interaction.png | Bin 320372 -> 319345 bytes 8 files changed, 306 insertions(+), 16 deletions(-) diff --git a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts index 7bdf767dd0..39e7de7164 100644 --- a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts +++ b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts @@ -11,10 +11,11 @@ import { RENDERING_DEFAULTS, VIEWPORT_PRESETS, } from '../constants'; -import type { BlendModes, InterpolationType, OrientationAxis } from '../enums'; +import type { BlendModes, InterpolationType } from '../enums'; import { Events, MetadataModules, + OrientationAxis, ViewportStatus, VOILUTFunctionType, } from '../enums'; @@ -2209,14 +2210,32 @@ abstract class BaseVolumeViewport extends Viewport { ); } } else if (typeof orientation === 'string') { - if (orientation === 'acquisition') { + if (orientation === OrientationAxis.ACQUISITION) { return this._getAcquisitionPlaneOrientation(); + } else if (orientation === OrientationAxis.REFORMAT) { + // Generic reformat - auto-detect closest orientation + return getCameraVectors(this, { + useViewportNormal: true, + }); } else if ( - orientation === 'reformat' || - (orientation as string).includes('_reformat') + orientation === OrientationAxis.AXIAL_REFORMAT || + orientation === OrientationAxis.SAGITTAL_REFORMAT || + orientation === OrientationAxis.CORONAL_REFORMAT ) { + // Extract base orientation from reformat type + let baseOrientation: OrientationAxis; + if (orientation === OrientationAxis.AXIAL_REFORMAT) { + baseOrientation = OrientationAxis.AXIAL; + } else if (orientation === OrientationAxis.SAGITTAL_REFORMAT) { + baseOrientation = OrientationAxis.SAGITTAL; + } else { + baseOrientation = OrientationAxis.CORONAL; + } + + // Use viewport normal (for reformat) but specify base orientation (for reference) return getCameraVectors(this, { useViewportNormal: true, + orientation: baseOrientation, }); } else if (MPR_CAMERA_VALUES[orientation]) { this.viewportProperties.orientation = orientation; @@ -2227,7 +2246,9 @@ abstract class BaseVolumeViewport extends Viewport { throw new Error( `Invalid orientation: ${orientation}. Valid orientations are: ${Object.keys( MPR_CAMERA_VALUES - ).join(', ')}` + ).join( + ', ' + )}, ${OrientationAxis.ACQUISITION}, ${OrientationAxis.REFORMAT}, ${OrientationAxis.AXIAL_REFORMAT}, ${OrientationAxis.SAGITTAL_REFORMAT}, ${OrientationAxis.CORONAL_REFORMAT}` ); } diff --git a/packages/core/src/RenderingEngine/VolumeViewport.ts b/packages/core/src/RenderingEngine/VolumeViewport.ts index b6b5a48ab2..a2514e64ea 100644 --- a/packages/core/src/RenderingEngine/VolumeViewport.ts +++ b/packages/core/src/RenderingEngine/VolumeViewport.ts @@ -213,12 +213,30 @@ class VolumeViewport extends BaseVolumeViewport { if (orientation === OrientationAxis.ACQUISITION) { // Acquisition orientation is determined from the volume data ({ viewPlaneNormal, viewUp } = super._getAcquisitionPlaneOrientation()); + } else if (orientation === OrientationAxis.REFORMAT) { + // Generic reformat - auto-detect closest orientation + ({ viewPlaneNormal, viewUp } = getCameraVectors(this, { + useViewportNormal: true, + })); } else if ( - orientation === OrientationAxis.REFORMAT || - (orientation as string).includes('_reformat') + orientation === OrientationAxis.AXIAL_REFORMAT || + orientation === OrientationAxis.SAGITTAL_REFORMAT || + orientation === OrientationAxis.CORONAL_REFORMAT ) { + // Extract base orientation from reformat type + let baseOrientation: OrientationAxis; + if (orientation === OrientationAxis.AXIAL_REFORMAT) { + baseOrientation = OrientationAxis.AXIAL; + } else if (orientation === OrientationAxis.SAGITTAL_REFORMAT) { + baseOrientation = OrientationAxis.SAGITTAL; + } else { + baseOrientation = OrientationAxis.CORONAL; + } + + // Use viewport normal (for reformat) but specify base orientation (for reference) ({ viewPlaneNormal, viewUp } = getCameraVectors(this, { useViewportNormal: true, + orientation: baseOrientation, })); } else if (MPR_CAMERA_VALUES[orientation]) { ({ viewPlaneNormal, viewUp } = MPR_CAMERA_VALUES[orientation]); @@ -234,7 +252,8 @@ class VolumeViewport extends BaseVolumeViewport { }); this.viewportProperties.orientation = orientation; - this.resetCamera(); + // Suppress events to prevent CAMERA_RESET from triggering render before camera is ready + this.resetCamera({ suppressEvents: true }); } else { ({ viewPlaneNormal, viewUp } = orientation); this.applyViewOrientation(orientation, true, suppressEvents); diff --git a/packages/core/src/RenderingEngine/helpers/getCameraVectors.ts b/packages/core/src/RenderingEngine/helpers/getCameraVectors.ts index a1c576bf1a..166c49d351 100644 --- a/packages/core/src/RenderingEngine/helpers/getCameraVectors.ts +++ b/packages/core/src/RenderingEngine/helpers/getCameraVectors.ts @@ -2,6 +2,7 @@ import * as metaData from '../../metaData'; import * as CONSTANTS from '../../constants'; import * as Enums from '../../enums'; import type * as Types from '../../types'; +import type OrientationVectors from '../../types/OrientationVectors'; import { vec3 } from 'gl-matrix'; @@ -87,6 +88,24 @@ export function calculateCameraPosition( case OrientationAxis.CORONAL_REFORMAT: referenceCameraValues = MPR_CAMERA_VALUES.coronal; break; + case OrientationAxis.REFORMAT: + // For generic REFORMAT, auto-detect the best matching orientation + // This is a fallback case - normally orientation is auto-detected before calling this + const autoDetected = getOrientationFromScanAxisNormal(scanAxisNormal); + switch (autoDetected) { + case OrientationAxis.AXIAL: + referenceCameraValues = MPR_CAMERA_VALUES.axial; + break; + case OrientationAxis.SAGITTAL: + referenceCameraValues = MPR_CAMERA_VALUES.sagittal; + break; + case OrientationAxis.CORONAL: + referenceCameraValues = MPR_CAMERA_VALUES.coronal; + break; + default: + referenceCameraValues = MPR_CAMERA_VALUES.axial; + } + break; default: // Default to axial if orientation is not recognized referenceCameraValues = MPR_CAMERA_VALUES.axial; @@ -262,7 +281,8 @@ export function getCameraVectors( normalPlaneForOrientation = viewport.getCamera().viewPlaneNormal; } - if (!orientation) { + // Auto-detect orientation if not provided or if REFORMAT is specified + if (!orientation || orientation === OrientationAxis.REFORMAT) { orientation = getOrientationFromScanAxisNormal(normalPlaneForOrientation); } @@ -355,3 +375,186 @@ export function getOrientationFromScanAxisNormal( return OrientationAxis.CORONAL; } } + +/** + * Calculate the best reformat orientation based on acquisition plane vectors. + * This function finds the best alignment with standard views (axial, sagittal, coronal) + * by matching acquisition plane vectors with standard MPR camera values. + * + * Algorithm: + * 1. Extract 6 possible vectors from acquisition: row, column, scanAxisNormal, and their negatives + * 2. For each standard view (axial, sagittal, coronal), find the best orthogonal pair + * (viewPlaneNormal, viewUp) from the 6 vectors that maximizes dot product alignment + * 3. Choose the reformat view with the best overall alignment + * + * @param imageOrientationPatient - Array of 6 numbers representing the image orientation patient values. + * [rowX, rowY, rowZ, colX, colY, colZ] + * @returns Object containing the best-matched viewPlaneNormal and viewUp vectors, or null if no valid match + */ +export function getAcquisitionPlaneReformatOrientation( + imageOrientationPatient: number[] +): OrientationVectors | null { + if (!imageOrientationPatient || imageOrientationPatient.length !== 6) { + return null; + } + + // Extract row and column direction cosines + const rowVec = vec3.fromValues( + imageOrientationPatient[0], + imageOrientationPatient[1], + imageOrientationPatient[2] + ); + const colVec = vec3.fromValues( + imageOrientationPatient[3], + imageOrientationPatient[4], + imageOrientationPatient[5] + ); + + // Calculate scan axis normal (perpendicular to the acquisition plane) + const scanAxisNormal = vec3.create(); + vec3.cross(scanAxisNormal, rowVec, colVec); + + // Normalize all vectors + vec3.normalize(rowVec, rowVec); + vec3.normalize(colVec, colVec); + vec3.normalize(scanAxisNormal, scanAxisNormal); + + // Create the 6 possible vectors: row, col, scanAxisNormal, and their negatives + const negRowVec = vec3.create(); + vec3.negate(negRowVec, rowVec); + const negColVec = vec3.create(); + vec3.negate(negColVec, colVec); + const negScanAxisNormal = vec3.create(); + vec3.negate(negScanAxisNormal, scanAxisNormal); + + const acquisitionVectors = [ + { vec: rowVec, name: 'row' }, + { vec: colVec, name: 'col' }, + { vec: scanAxisNormal, name: 'scanAxis' }, + { vec: negRowVec, name: '-row' }, + { vec: negColVec, name: '-col' }, + { vec: negScanAxisNormal, name: '-scanAxis' }, + ]; + + // Standard anatomical views + const standardViews = [ + { + name: 'axial', + viewPlaneNormal: vec3.fromValues( + MPR_CAMERA_VALUES.axial.viewPlaneNormal[0], + MPR_CAMERA_VALUES.axial.viewPlaneNormal[1], + MPR_CAMERA_VALUES.axial.viewPlaneNormal[2] + ), + viewUp: vec3.fromValues( + MPR_CAMERA_VALUES.axial.viewUp[0], + MPR_CAMERA_VALUES.axial.viewUp[1], + MPR_CAMERA_VALUES.axial.viewUp[2] + ), + }, + { + name: 'sagittal', + viewPlaneNormal: vec3.fromValues( + MPR_CAMERA_VALUES.sagittal.viewPlaneNormal[0], + MPR_CAMERA_VALUES.sagittal.viewPlaneNormal[1], + MPR_CAMERA_VALUES.sagittal.viewPlaneNormal[2] + ), + viewUp: vec3.fromValues( + MPR_CAMERA_VALUES.sagittal.viewUp[0], + MPR_CAMERA_VALUES.sagittal.viewUp[1], + MPR_CAMERA_VALUES.sagittal.viewUp[2] + ), + }, + { + name: 'coronal', + viewPlaneNormal: vec3.fromValues( + MPR_CAMERA_VALUES.coronal.viewPlaneNormal[0], + MPR_CAMERA_VALUES.coronal.viewPlaneNormal[1], + MPR_CAMERA_VALUES.coronal.viewPlaneNormal[2] + ), + viewUp: vec3.fromValues( + MPR_CAMERA_VALUES.coronal.viewUp[0], + MPR_CAMERA_VALUES.coronal.viewUp[1], + MPR_CAMERA_VALUES.coronal.viewUp[2] + ), + }, + ]; + + // Find best orthogonal pair for each standard view + let bestAlignment = -Infinity; + let bestViewPlaneNormal: vec3 | null = null; + let bestViewUp: vec3 | null = null; + + for (const standardView of standardViews) { + // Find the best orthogonal pair from acquisition vectors + let bestPairScore = -Infinity; + let bestPairViewPlaneNormal: vec3 | null = null; + let bestPairViewUp: vec3 | null = null; + + // Try all pairs of acquisition vectors that are orthogonal + for (let i = 0; i < acquisitionVectors.length; i++) { + for (let j = 0; j < acquisitionVectors.length; j++) { + if (i === j) continue; + + const v1 = acquisitionVectors[i].vec; + const v2 = acquisitionVectors[j].vec; + + // Check if vectors are orthogonal (dot product should be close to 0) + const dotProduct = Math.abs(vec3.dot(v1, v2)); + if (dotProduct > 0.1) continue; // Not orthogonal enough + + // Calculate alignment score: dot product of v1 with viewPlaneNormal + dot product of v2 with viewUp + const score1 = Math.abs(vec3.dot(v1, standardView.viewPlaneNormal)); + const score2 = Math.abs(vec3.dot(v2, standardView.viewUp)); + const totalScore = score1 + score2; + + // Also try swapping v1 and v2 + const score1Swapped = Math.abs( + vec3.dot(v2, standardView.viewPlaneNormal) + ); + const score2Swapped = Math.abs(vec3.dot(v1, standardView.viewUp)); + const totalScoreSwapped = score1Swapped + score2Swapped; + + if ( + totalScoreSwapped > totalScore && + totalScoreSwapped > bestPairScore + ) { + bestPairScore = totalScoreSwapped; + bestPairViewPlaneNormal = v2; + bestPairViewUp = v1; + } else if (totalScore > bestPairScore) { + bestPairScore = totalScore; + bestPairViewPlaneNormal = v1; + bestPairViewUp = v2; + } + } + } + + if ( + bestPairScore > bestAlignment && + bestPairViewPlaneNormal && + bestPairViewUp + ) { + bestAlignment = bestPairScore; + bestViewPlaneNormal = bestPairViewPlaneNormal; + bestViewUp = bestPairViewUp; + } + } + + if (!bestViewPlaneNormal || !bestViewUp) { + return null; + } + + // Return the orientation vectors + return { + viewPlaneNormal: [ + bestViewPlaneNormal[0], + bestViewPlaneNormal[1], + bestViewPlaneNormal[2], + ] as [number, number, number], + viewUp: [bestViewUp[0], bestViewUp[1], bestViewUp[2]] as [ + number, + number, + number, + ], + }; +} diff --git a/packages/tools/examples/mprReformat/index.ts b/packages/tools/examples/mprReformat/index.ts index 0f837b36df..1a9f9a4437 100644 --- a/packages/tools/examples/mprReformat/index.ts +++ b/packages/tools/examples/mprReformat/index.ts @@ -51,7 +51,7 @@ const synchronizerId = 'SLAB_THICKNESS_SYNCHRONIZER_ID'; // ======== Set up page ======== // setTitleAndDescription( 'MPR reformat', - 'Here we demonstrate howe to set up the mpr so it aligns with acquisition directions' + 'Here we demonstrate how to set up the MPR with reformat orientations. Each viewport (axial, sagittal, coronal) can be reformatted while maintaining its relationship to its base orientation using REFORMAT_AXIAL, REFORMAT_SAGITTAL, and REFORMAT_CORONAL.' ); const size = '500px'; @@ -97,13 +97,54 @@ instructions.innerText = ` content.append(instructions); addButtonToToolbar({ - title: 'Reformat viewports', + title: 'Set orientation non-reformat', onClick: () => { + // Map each viewport to its corresponding non-reformat type + const viewportOrientationMap = { + [viewportId1]: Enums.OrientationAxis.AXIAL, + [viewportId2]: Enums.OrientationAxis.SAGITTAL, + [viewportId3]: Enums.OrientationAxis.CORONAL, + }; + + viewportIds.forEach((viewportId) => { + const viewport = getRenderingEngine(renderingEngineId).getViewport( + viewportId + ) as Types.IVolumeViewport; + viewport.setOrientation(viewportOrientationMap[viewportId]); + }); + getRenderingEngine(renderingEngineId).render(); + }, +}); + +addButtonToToolbar({ + title: 'Set orientation reformat', + onClick: () => { + // Map each viewport to its corresponding reformat type + const viewportReformatMap = { + [viewportId1]: Enums.OrientationAxis.AXIAL_REFORMAT, + [viewportId2]: Enums.OrientationAxis.SAGITTAL_REFORMAT, + [viewportId3]: Enums.OrientationAxis.CORONAL_REFORMAT, + }; + + viewportIds.forEach((viewportId) => { + const viewport = getRenderingEngine(renderingEngineId).getViewport( + viewportId + ) as Types.IVolumeViewport; + viewport.setOrientation(viewportReformatMap[viewportId]); + }); + getRenderingEngine(renderingEngineId).render(); + }, +}); + +addButtonToToolbar({ + title: 'Set all orientation acquisition', + onClick: () => { + // Set all viewports to acquisition orientation viewportIds.forEach((viewportId) => { const viewport = getRenderingEngine(renderingEngineId).getViewport( viewportId ) as Types.IVolumeViewport; - viewport.setOrientation(Enums.OrientationAxis.REFORMAT); + viewport.setOrientation(Enums.OrientationAxis.ACQUISITION); }); getRenderingEngine(renderingEngineId).render(); }, diff --git a/packages/tools/examples/volumeViewportOrientation/index.ts b/packages/tools/examples/volumeViewportOrientation/index.ts index cded17ceff..576ec1dbdb 100644 --- a/packages/tools/examples/volumeViewportOrientation/index.ts +++ b/packages/tools/examples/volumeViewportOrientation/index.ts @@ -52,8 +52,14 @@ content.appendChild(element); addDropdownToToolbar({ options: { - values: ['axial', 'sagittal', 'coronal', 'acquisition'], - defaultValue: 'sagittal', + values: [ + Enums.OrientationAxis.AXIAL, + Enums.OrientationAxis.SAGITTAL, + Enums.OrientationAxis.CORONAL, + Enums.OrientationAxis.ACQUISITION, + Enums.OrientationAxis.REFORMAT, + ], + defaultValue: Enums.OrientationAxis.SAGITTAL, }, onSelectedValueChange: (selectedValue) => { // Get the rendering engine diff --git a/tests/MPRReformat.spec.ts b/tests/MPRReformat.spec.ts index bda268f0e2..88b40a5242 100644 --- a/tests/MPRReformat.spec.ts +++ b/tests/MPRReformat.spec.ts @@ -22,7 +22,7 @@ test.describe('MPR Reformat Visual Tests', () => { ); // Click the reformat button - await page.click('button:has-text("Reformat viewports")'); + await page.click('button:has-text("Set orientation reformat")'); // Wait for reformat to complete await page.waitForTimeout(2000); @@ -40,7 +40,7 @@ test.describe('MPR Reformat Visual Tests', () => { const firstCanvas = page.locator('.cornerstone-canvas').nth(0); // Click the reformat button - await page.click('button:has-text("Reformat viewports")'); + await page.click('button:has-text("Set orientation reformat")'); // Wait for reformat to complete await page.waitForTimeout(2000); diff --git a/tests/screenshots/chromium/MPRReformat.spec.ts/mpr-reformat-after-interaction.png b/tests/screenshots/chromium/MPRReformat.spec.ts/mpr-reformat-after-interaction.png index 061c763c265d9057251df33c7303180f30dfb44d..90ee6e7ae6003e517f8b8e0a89a920b27e1f5872 100644 GIT binary patch literal 356903 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%0A)oJ<8tb%(t8sdCN8TN-nMB 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 RdXK(?p{fK1RVus=`ag)$)Yt$3 diff --git a/tests/screenshots/webkit/MPRReformat.spec.ts/mpr-reformat-after-interaction.png b/tests/screenshots/webkit/MPRReformat.spec.ts/mpr-reformat-after-interaction.png index 61715601a2a97291098b8e107905eeef639ff6ef..e2f0573bbb26971fe5d85f4d8a6715ec766aae75 100644 GIT binary patch literal 319345 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 z zH@13^IRZ+esO>}A3a9BOl5(fBd+`GtVR!-Tk?xvp$17dWBF#<}V=Z+sw!7vlUE8A#PZqG2cO~M+wk;)$ zfgi*I?dUW9jXf=Hj+p@&)61&b9(ZE2??qdZ@=>M|VTe1wlTW>xca>a6rg`p9Uf?C& zWc61sS(?c}0r_`TMnTmMTz>(R zD)5iY+<_Kva@~E%?kce2$J-bFib<}dkZ^`th&&X}k}El|#M%)Q>O@g$^PtDm)-A*DEZEXM^`@+iXHeNP{$MfG@yF#G&jU9-WG zdHb12Ureh!5hmHQ<5Mxwm`(PsWS-viXUkrpjF#r|58S#-u=+~!SaGVQJnH@EyoJeV z6vk^Br7qY)rpmAK+kJSe(wr8@OY{|ufo{%bsF&TH{4SIh{pi;v9a#ZBfB=AA3 z(3x;sRyqs2nUv9}=}f-!ViY`o4FU8_WV$-HjJDg8K5}N# zt-Tvw3oA$%GIr#~W9d);?uc}e75Q8_|M`g~rT8W52z_-gOpD5hfr}s%5RenK7i_pL z(TWtGTljlGK7;WX1}vN+*%?ulVRbmF!PS=bhQHqwZi3AHgQX;l(EnWX!Rt_`RA_IYAJV9yk z;PNkugeyA0b+$|EJ1Oarogd{|%$EC99Xed+JJkV1Vp*Cr@1wwP-u$Q80yfIMHl94; z(xol##T4c^EYI-1spTpw5L3kHzQ2`BuA4Dt1y?sIC8_Br2%%ktb$L?fL zfJs*fTaz&N_ z8@}W^SPe$hh+(?@7dgJaZb|~nDnWhUG;dyZ0?B_dzJtJ)~|n1 z?#07~qVcyDGFIHf^t z_i+&;){(q_Z_a!g-bz2pEV-jo6l_*OLv1(9q-^aS*pe>$BtpAYAc!W)v`;fBWiGeW zK|VvTbM*|l&2KA0uy`%;#fn7n-dIcAwjYErnqPezv+5Hp%_KBMFj&aRqZ3-+)Q$Ye z4GN?1Twlx0%GRGxSA6j8m_ZcUbr>LC<$dnnZZXrGgx#?tN_g?W>I~|BcDiehVXBP( z?5)S~PWh(m{A*+_-PacDu>%{Wer5A^()Q*f(r4n1j1MXp)%Ym9XsVNa#dHZdAcrxG zp$){_EUU7bqXFNb+F-(5?vCh_w?!_KRUXx=q@hx#(ktmB)xm(qM9-HAdKa2R(#y&K z?-a~KucddW^3`(Xy!!2Dsvl;|$JhV;BA-A@p0qpHGdcS+-5>M9CuJ1TPt)z@59-B; zZ?ao{FLirF1k5+>dZ(37fSW@efx@`;E)Op7+W991)}cCZrel0YFM>@UZiax>Y5Ur` z(zA1NnnKjUGbyT-kq5mr$rr)(wpc^-|$~7qcqG zG_WVoJQ)s_0aPsSWyuL?){39XKA%dox*Wn#~Rd3dfqc3fK$8M7p;Da6ve1xahL8Hxt((1kb0v;`F=U#zs2VeW= z_Gxe}qWZ7aB9GS5on(?Q;&9@ibHl0LmEj!OW>gGy0V#+Ff5kjctRy2-RxO5##j2Nx z=dbw$Tlp1lNfM-|evz_7hdG-kBOm!C@tAzwJ=z4j>^`A_ROl35d zox5H=N+C}$TT7xI!7T^5?!9xB{1bMXN6KP7xzEjx3K)rM(=Ired@P<%&2QamU^E;| z5950$+zv>zDQ~{`&_h*QdrXj9qZ-H`Sl>6|~+#f6Krgmqu3R-P!nscq}R8=)m z(fe`AR@?0P-t7}wrA~f?&M$|g5#bh0Y|7T+cTjy6DAoE3dDQLV!MdM_K^gte71`OT z8bRvxPuyqDpiBSV4Q8-tyx8Um#W&b7_?wCe-tQK-<*s7twIDj91e%}mp^L~9cj5tt zR-==#t}6G&hHdIO?jwY@o9w}xG%tRbk)P8^I?AIiv04uTyP*6X;qnRTJ;H~__&rhY ztBytoQ?n2Funyo|Q9rU=)X|EMaj$Xj6&xegUvnu2Q;<~nIBr6?;y{S|;5$~xO1iqy z4@u+CfykD|g7Rx8RQr!HI+zX6xZujn$*D07$$O!a8OofpJe-ziZb)%k$n)9`?tM=W zER-e~jH)WYztQF}o_f}h@I8%XAEIkX!l~&G?`Kn+yNyn}Os{~1?r5BaE=qUePoFN3 z$o}{N8s1tPIO(yBMYClCYW!c#+qLMo2(rd!6`}A1R{Q9Ly#n6K)I?gvuO4X6_KOw0 zt{(roq9NgF%s7!*)sEOydS~6csdxb7++>S$ukF)#lOq^=>F|1eJD*q&?q?_8oAlbH zZdh3re<#*pOt|cDOgN7ZWNLah$+raftlT%nzjyp@-}L}J+I7Ez<|SpT+gO!FPJGaP(UqF~*}50j z(DGaUyM1~>;^Z(X_8UbJXQgSgjO$0hUwi<09(okk-R=XbKi^o*!fW z<%vY2vAGigF9&18=0^aj7~{GCnwPxQ87m424m=4+ElK|Z|0H&@ z1q**hJXN_mnh`>{zH6^f`cRf=BsOBFK6&^$tt(Q)1u%hx1ytR05VKF+_GMM}f0{rf9C8$J=}& zcOJ{0#J50nnBRXIMf)BW`jho4S%hs}nBo*0YU=reTT-5wrOSP70{?4ml<{BL(fm=f zWs9w@YwmQa)h1vu(|9_~&hCY!l(tU2hfd|pP3}ZaeGzRb_7%kqI^Iz?37V8X zh#Pg>uq)U<*-wfk>9{c~KPoc0ZzIEl14`xvhv~e;saki4aR*eX}*1D({ z$d(6ojPu17XCAs9kKn2dF1gikOr?x!iRM1m{V?Q|X2~6a)je~qI+2tZ`>OSxC(q;^ z^dis_p{~<&67zvb!fHAWGL<)|vbu}+q|8H&C#}Z>d{P@q+HO|R9x1&A{v1^u`+qc@ zhg*{W|F%I?DrZ?LnxibO+#?r?nxzd#Idy z@k4W%J>%C&bU=#TT@2{FN&7i?y03VGmHhcMmzJ(wQj@0?`f|fHv;mAwWS#@OM=!|7 z*Ylp$gvW5}E&LpTcV0(8HvLlWBL^5+(+40?)7f@`zYr9su=k}!*QF%_?qv<2Ub7b9 z$VceNlUV7hQ~_MDs=z&qtD~^(esXKEs{5=oHue1 zP$oU@djMm?`I~zyS)XgvEw|-mM@2vO15O5SNEm%wjZt=fCE(ujD{vgN#fl48C?A#aTRm!G|=G7iW4BG}?awNOsW zfpeDy4-n8W8u3&{4&^Lh4hiy`a0DT6xr?fb^0D-Lp+{Ti7bmmsAR+d^kebk4!_@b^ zY0(K5uVFRv%GeGzhX@d3SOrn%tveRbHzX%h14mD)X~?A4KUZg^F8@L08{k#}q@j$I z#DSF=cIQG^7EN#aq+VuGFkE1Ui^Ui|d|GGbIZm(Z)6p|d6%#{|t<~*_h)EHXEaqT6 zVR1O1Z6|~`plNXiaFKs(6m8Z_8Rftu4^oB#&vU1N#A3U;q-$E@s4XCa_n2z@OGx-_2xa?j=at&zbX|>V+>V1xf-&H#}$L+$*-g}b`05%jx z{@mz(Tuw%k*u zVwTPco0K17K(VgO^i+$_z1YA-r-{2HQ5*xwYKqD-mUoCdO*7i*_&vZz#VvU?=UzX~ zi>Gjtxf*EBU7wl3i07%@JeK2t86CwWF)%~d37wLKyEvc76DFz*Ueux14aKr!5rdVE z4=M(n4LK)uR}r^$chIF`ci`h%07LWOa9P*elZ}_7|G|{4L|VMUZ#2o~zg)i|1NHs$ zw+#|fW5;Sc8f$}EtJZQmanmbQdSG31&EG$&TK~jj7aIe<*^jQLpa1dN@eu7FSRcPQ z5OoLq#zL=w5AVu*R0oDUju61c96a=vVo3ruNa4A^&BDpqU3)X>N8^m2n@YZIwMi1B zwriaW|8fS^1FpHn&48SR%IunO6O9?OtpNqN$&+zwsx_YmHBw>%{OdFM(8c@y2}H3? zlSXt_#eh{IM$b&tH1QlyaA1bupSR|etCYmE5gJ48XdmdDIuu*~-+XZWqTf=PS+03; z19SC}9xJgwA3C-myf6?{#DrFBY!y(mJ!iZYIyen2QEWNc$~jQhW|28wa#%SZJ=fW2 z<36>eI*z10+9`CcBX%g~yRKrMY&19SYPZeK%dlDs+PthA%BLD1f{G?LS2btGB4Fytr+2&xA#1I;rUe;2qS=b|QBjG5OQ|hppXtU|UvkH)$OD~^$}@>QgNq`33;-?a$~1b(wZ;AupZshm z;{eA}4e2H*)9vRxl9_(Q&OKdRS%+V5 z^=eUM#&B;fv5yqGZ3k`RqG2ld->3xfWmM=)X4BG zU2>C>bAB(K84kL`D}9i;cki$h13^Wg+lh5ob8l+un#*7dK{2mWlR?yV zwaA_y6J{@w$*YbxakK87|^E=Ju7AayRtS2l=ZQ(NMo4fNh zx<{}xsd+weUk&(PUciFFN)yOXei>;i8(1@8Q46!*3)JD^T0l)eS)Vy$foqmTIq~S zVki~r@QZOr!?wMEDu@Lqi+PV4EWJjwnRbLp_Q<{YpdZ`_(mr8auZ9I|?Lz>U*gR{1 zj;o@B5H+{O%@8PV5XeJ!x#TO3;>CHsS|bGfTE$NZ@~Za1ck2=k2JO~VCQc|&IyFTV z^^JJ}80KPrBDLa{GQ`vpD|nyTo$fL%rlQ1c>X(I)MX~0bTa&Ipf|~DNhM(+;Mtn zUcvf!aMAgqA8}ID!MPpp${stU>UNbtpCTDtOF{xSadGKX>J!-!H~#|yK; zlkm|C0&#CEukpOML55`}wzdqm*#{qDi>_k3u1QiJjI@VK$0k2^$R{p}-W@pWH!lCQLhUTtPkU+zm9E>4gNN z=NmfQ9K3a1oKNjNC7Son&h}-JdFL(BD^oqr4x zDGm-ktMA|v1U(D>Kh1WQ;sngfkKpeq*2o$?7)L~k0A=ppv(E8VYP<5^N&ngnT}65f zJxLY+P-OGj%h2}nGt6IM)vZLw|2!Rrr$T6!q^6m;gn&FO!F_n9b(N4cqCOgI(~p{y z$P(>PBaBV_90&;T6KT$_>|tn9oGK$mj70dKM*cmiy0Dc={E5JJY}Zjg&@(%Jv*0@U zVx`OA{`Q|gKCGfn9;37AzN{B;Su51z3MqQ9t$Fo$V79l!>yxkGC~`Gsb2v|VYuB!3 zl+Uiec=2DP>CX0#62U14LUgI&84I}V$C-!Anf0)Lk0=64lBDIIJM&vl<7D>&^_WZ^ zKq+Jh2*w$epK0_*`yWY4#xtk3&LZ0aTU=tsf3ZdP4BmL3aL)6nW-3ojcs6Gkahjis zOr%Pts9Xia_+x#zot8Xf&a^5?s%yOve6lk{-Bcd@AgM1@^Exc^;vql@D0gc3E#v2g z3!o)lhh!s_yjJa!H(|fyRh;``Ad~L>mM3QBZ_I(lD3A3lLG^}RmH^aOQ`XJki*JHG z%=>~mpN>}6X*fi^rOCpK{yt4`UIu$n<)%YtM(D~N-o6ifYOkMNlzOX7I8APT;IgN& zNgY$JIAcMus_ts3>_KUGXumL*0l*G)&#_>4g-eiSdpn1#|6IKXIU41)ag|{J(Np6%#73QB;H3s0vEN~J(VObMoWiwaU4-_jX^b z-%~Ay%~AvS0CqV6-8|)@dH?;KBLZ53wEm@PaW%QSsD%D&bN?E@hc0EO)GcJmj&%5K zIr$RH{^-rUXD86t|>hr==f<2milKw3%&3}9+#98pkb?VW9T0D7XY-E1> zk(G1p*2?FdedZs%oq`T$@haY>_1c~ft1O@9p61p#QL=pNeYr-LIqAWEhIq{CB2I9n z!)<5bnEk|dZHCZzc46CL)sN71Obno2p^b}kAYx15V?vO0V_|8rTj(`eU9~;X3?xM9 zr$Dn+_5BH9GjQ`tqu346OML#et?QD-_JAnM#f__*u_)%3vse*8lzf_{WzqcZ$e(i{ zU?{#sW^*P&NVZi4b=b(FCJ$nfjJ zo^vkle7FF<#RAwX3jE!$4K`SFEQN1(np3W|El6*He#@MpD%;I(g5`Eo(EAV3>W%B$0DTF0w$eVwwB2o0QE*$h{Wo zd++?7N>8Yw;vKyWWV^r%T%v(dNYlR$IEjUf)rkZyzG6K&<3Wgm&JdG?{r>r9{~g}Z zV$nkvNMMMfrLZ?a;7KUsz=e18K@Cyb+DIaJ{<0li%Dk~Lk7^-w%!vccil!~WrKLP& zPC48hEaNlq0Y5%>yAFxpPp+IJyfhE{5=&Eh^|zT4u*^ony`e zPzdqKQCcMDD7PC_wZ`4^<7+BxJK$GKCfgT>C_$b5T1ZGgqVuBcEX?F9<;r^(g_ zP`ZCI-tJ``v4Yk!d2UtlZ$Qc_ezg#@`lh4ml(=?Z-KAHxpAW}{rI{uHA%EL%nn(B@ z_>$%KLwyE@&T|JpAtgkzPI6{=(G}9?doq+NS$V4k?v7J`=GxRiA-gLJ?-M+Anzai@ zw0%U9x9-qvXojQdg4f56^RAQqEY*UvRw~UA5}8!HiQqs&Y2ViJtaAko-NUGL2WvN! zaz5hD8BxgL)AeDlTspn4H?imD@HaL}myqY}*WNcoUYzL?$1%DxhN!!>zgZ&Lju~Pm zSRme()3Ujm$7%5@DRxUlWtEXFqck|P)^WJ9=fZS34$FVJcO94t9a*dXaMWNs%+huK zyu5DMqE#F76S6XA zahUATMH6`pB$0@l!)dR)Uw_u~&i!omjHW}fQ~;#vWLB;M{Bs^1Z9fMl-HJ-yJK?~S z_ggyMj?+PY_llrsWP8u-w4c=}gZFErLDl@<`SvqyXWq79JAi{ZFKAMdQc%?$V@puqmkDg_hzb`L-t?iK zZLMkJm+a7nH)i;by;f4Onr<-e!RUsw!;FTo`KgfudoAhY->c^ovixg6cE|tX9!Df` zky2H4ioLShUZ1Z+N2~Fs$x-@^ffk{aTeI&+f$7h*hI$5>y%W)90>|F=)5dP^5RI}k zUA5=42+`vQYT4SL(!C~G`D_KTE5jod$rCo0Y7FMD`XidOSt#K9${hGH%7OmSL&Zr5 zh)X#|d7h8XV*DM=xed*mW7$< zq%Sm!4%{uV!u;GEOPFMtFW1j(dNw4Q`ensug+$e66A*rOd@v1!Qh>)7FQ#K+b4P6k zmu&iQzt>0lP10g|K^5N=ExE`4zI@*UtO*aG|j8S=}&4)YOq(o%&kZYL-n( zc;|{C24JMC6?Q`jr4Pdg5Aq!ZCM|lO78T#Um-pT?^9CwCTB5W!bBNcvn59LwOq#bE z_{A|&{pouUNncjqt&P%e5Abb7obF?H7SX?)ejoV#VdCU%nm4Ns6EDmf4+)Ls#G|HbWgDALg zQ)FRn&*Q3QShpYJLy^$HWW>#5Ery>E_s(_Ni!NoQB$Ccep*0nO*`E~WWk9Ax=e1U- zj=+eBM&y_l? zJdmOhp!Y$(5U?D=BE9F%;!{3sD@%9O2^osC(6}2p9~S(eUx4R5U{nDcjwUwM;wg~e zl;<7plV9COkUxFGqs{xbCtR&LjFP#-VX$67Tlmz2tZLf&1*)kG{P~P%QB9i(ldxz$ zel#=`&TFR9w^c<}?qAdUn8kI%atL+!R2wf!`=(~vlYDPK`3$~Xb5XLJ*%Pr;!xJ(r zQRZ#`P~l{)N5DJzfkFRab#jjkjbZ;o4;z^x zu$rQRg*W#BRz7K^kUwd?hzOjd45lBk-q^DQoTMjqno8jCPl~yWZ{`j~R<<=dMB)ll z#&!gz;bd2;1#4+9-OOw@M-?AlTT#WbHiV4W8;l7;p66`ZM`=EvtGR4R_I~OdLnn(}fhTMJw#b zqCODwl533o>8r5!+2-vVt$dg@rp|T39Klv)QFG_nck8t7;$0oBro$ef6(}H#AvDNV>hz#&jnVh|1QcFTa68=(`XjuCpQ-j<_XIg zY!C3UT@EyweN}lDn8d=lS*BLX{w{T+emNS;tfc2y;HQhbin4B+X}T)xu)Iekjb2rK z-hfhSV0)}R2xcge2nu6c6L#ME^})asnz{DVED`t)Pa0HZnGTfkZBxQn!%{7eHsQDE zC3zz2zT2FpH%O?O#su`#p9wXBg^H@xch>h+jPNGVUk8Q3rwl0PutU5eJ9bp#Ri#yg zU7r5;t@>dgEqqEIfDh_)vs!-63dWtFVoak75aO;i#2Vtqg!yn#NT(z8)flpY=pWdh z$}`m;sW@sqC@;e+J-XeXKr?Bl5;OBS38lEIeVXBrd@@Q?Mk{M!YL9x(ncRVT)ng83 z>EQMUbZX?*$5ABSz~+`t|H@N7mR}AN@2Re>8J3+!Wg$6ZHClCs<}|7^j|H4iu+Nc5 z%x*Ag{tahppVwRw0blpodT531*`s62&H5_(Be7yoc-*1=K-dy_^9%4jxBQ6Glu2fI_tFLS* zH^)qz6s!s!P$cT++ir(P{gfb~6U##<1HCY{5(2nPi6it*w;Ehtb)1OEJUl#?R{buv zq!dx>-WTMTt-4mPmn<>9ljf8ny6-xl8XUj^U=g;X5uzE!17o!!@6Lz8`r&K5fnwUv zcF#w0H@60+ANVqFn=HEF+s(qp2AWyb3NxAdv0p9s)~{8AA3rhq^&WxR^Kn%+J@slr zR!0{gm9_cf?!?_(j*hFJp4^PS^e4Uyq{;s?^QuxED1t3~Xt797wNj?2W4W6xpBVmK zNrCx2)ScY`XWCZhvZ+O8e2j|VyYfBswBxk#SDsVvrc?CCM;`Ab9a4*=@#J6$_3pu6 z06*n#!uAqGGUGFmn(m!>&<%$Lux@}A&XTgeYuU<>2$Zk0QeUG# z_Jyi*y1L|am`q*uNA?^Q{x%G&K1EXZ{R#N)TjCp-6?L+iEx~_63}WkMw0F>cz=~Lo z-;N9=RgiD3A23EjJ-OCm>0?*I=Ph81#w|ntYdcIKm}is}kY%^(=8rb7OE}g8L*jp5 zw)jLP{m&Z4BRz-j1RmaL%6c7>>~bIED6-s9(AA6zlm~Tcset&0A`!5ia z3zCB;<=90`c$4{>i`twe$tr|{hOHz|bcv)@VscdQ3bzheeDG1R-WuWS(1uy0Hh*Aq ze%%V(_DEWHm>gWUNeplg^U;u|WiL)R=nkwVD@0_K>o=S`F+exb#w!=AtaXd-+pk2= z{aXL7B}Ugap_Bghj7^{iHkA6CwiuiHW(oOl%L*M9SIV=(G{uI(u^i(nyyC|_x-p6Q zNLOOer1j5f!#2=5iBnvRrbD5D^2L5wdx8wHa(VNI7l9J<|dFNeM{gvpb@YUg*lKDpiACv9k@=Z1uv{w`XN^Wm&UOuo< z;yyAW^Gns(o2I3CVkaNNa15X=vcx-Rr)_79ZO!uKvxEm}ucSXuDtQ6@_!ntPJ!0E; z6M*Ny?@pZFX&?$R4|qDAZ~eIoP~y;kLG|Tc1V@$c7*Y(p!2@P_@z>Z!+j}=#ZNM#0 zja7D_yXzz9KW&wq!I(I}nO^B6EBa8_f;}Qw&$0vGJX{t1%QNNrOxognL zZUOk5ZE4_siYxS*y3!u58#14<2nT;hzI*A2l4eYE-24+Sza~06`l>FA${y+f7b13^aiVvG6|N3)rM!K#==_~!i3+DZ0S%%LfRGTMA;83c zIxy18XD8{H(WstpK9Q@Fhe!(Uo+qrD#;l)sbd1_TWm^J`CRf9yCmZS1I_>&l^R31W zw%;$u4@`@0ySIDDry23L%UgoJsDztP|K?Mm}ALh!;B49xO+%v;B4BlG%S6 z-XANwz(R_!j1HA~Cowpo&sw8xtziRyf~r|5RLzki&)$-dnlQ|}*B{QSmHpZ1-g0DT zFt%gQdr@M1Q4c7Q@To7~@aCJXTyA~!2vlOf1ZC?(T)KK^XkuuFDs&VVa)i<#t3dnmIxWumU4k*=RrX!OLYeWyPW zv$?rPj>Mdt2)ZL^sV~}cxqZkieeNqxA^M7}%`_zB#$jh?V4f>uw1Tn`cVpIuB?V~V z>U_~U*HgaPq5ry4EeQy35I#?y%ykHPUJ;EkRRzykc6X~HNqjlNj`N5rUXd>C?&i0z z{|M>tv#*r{9kM#z_nLjd;%nSfxM)8-!4T<7su+qS2q4$q7uiT$nh5Bg z0=cd?dPw$Ha3D|i_Fr(2j_EZL9Wiza(?KM9G8wtzkx^dY!fI2PpQ2l zje{1rptkE2Yw-P=T!fWyNi;BMzOF3sP1}-T$Pa zMLj!0+c%-rka{mI*CEAGlWA6YO>=J|^QVgGkN3G`!DB)Dt77A*Ak&?d6{p3L4$n{b z62l)2%_Ja$^tc9irq)ep+~B@#&ty8=&@G`?C7j#mDQz(wBi4k!unNj{+zg~Bb) zdkcfy2km4>2)zs1Itk(yw4ngjnRV&rkHNV;@o{XToAZw^s&Hwj-c~Eq6+W;>{LPhY zUS40i=&koB>}%;df&Q6(3RZ{k=or&EUI-hly((n((?e`|pL@fku}UG`EpL^8$j7|~ zTR=DI519eYo{M$k&b@ASwu)QUV=qI?-#E}ITNfSng;%2Yl($BLcA8R@X^&|L?I(p@y`KHK}JSPp!`mHK?z zUs_Ky7>c`kDUBL-eo+ERe(|JFHwa=QElN_$bHH)~KrKATw-Yb?%Hfm=CX}!82s)?)?K!+_xdA zRt)5v{bFz*A04^*Lhkyks^swhO0rcwvErRD*ZrKy(O8v#jauzf1o@p|peIAL=igq6d#1$JQqkm0BlXbhVuapy8N6bYV z#r`5aSGw=cCjhTR^PtWYfomshP~GNaAY;(r!0jyEyMbpu)5*R(zR zN1)2}qy&xL==J5-Rb19Fi#_kyBb8hmU8w$CVMVWfl1m(#U&6EQ_8$Ts!Q&t}&VkIO z{;F+|X!~84_b;hxZD9 zcO6{Hp5fC`ALBCBUjOaTrbDV&mIB6m3^0dg%H)@7yVMCCh|Flc+v_9kd4`Eii0?k@ zE^t|CyaAzWDCB&4dW0ZJ#kHI#YZpsY4H?H|M@cgE#}nsGmWL7dc_IGcvY7~emR#$6 z({iH8&hGxrj@M2pQI5}p8hB8q2Wgw+1VXZ29ow4iaf5uve9z3INJ`{0qyVNLU3ToT z)*G=v)s-1lus*h4EtRdc?PB{dKT>(+AMA4)OitvtPjunfvDsn4Bdvob zVwzlg;{)oa|XYYR)WL*?&}$V zqrQRspSQ3FL3#P@YR`Y3@usZjnClF%arNXhJNMKNpK@R<4HY{S2ycEwuMODTr=gWs1 zb~h}3$GFYR*<$#TI?_42`F1m!3u1~pJGEFRFpdp>t|e!=3GFw;8{4?1SC8|vyKlKY z3!ST!DUSA6RC#*8hj;Tc)g!ZRu?Xrm5_RIhRe{-dj>oqj*-koK0I7&s*SR!Q(w_(2 zk^uHGl@LD|nErb-JqnQVJ;6zIl9M~Va3aCXx$@LcnZ6$9yUmZz0Y+j4HWQuSgj1BK zL+77@PSrr@2PWF@o5M{uU!yu*Jo$w~J*dCb+Y#mo9>?<-yQ8cNytV9!V*lOmINMpw zb`5+{2WeA>N9I!$ywmV z_UokghV-lsC*FHQn0)&Py@J8sqCJe>UmJ^U+jUPdZC{jgrtyMdVu7ZuDWNJOei+(@ z#9WTK`v%Y6O7nhtL3Ts9cAvusho)mk?d6b}DKeMgN^rDdo&zl=*cPR>BU~H&l+YSE zgucpiC>Q9@Wiub;HPfUSRL-`2O z!^U=JwI*_yQRu0>-ZRv|+EvRx!@r>-I5Mna+_ z!n1CCe<1){&bQ_C?0`KPkZgl88auI*%=RBU@>PkGDjM;{LObWJF39xZCvQJo@Czw# zQBL1C$+XCp-me+h7pKSr66vx0!*RnWfkrLQNOssF4@P7Bi)rD( zEXezPqVS%eI@kF)eI@xuF_V5c`;YD#|3ZYY3Dm`Km9ls7 zf&j%gSi|}B^Ie0drjo-CZ*a7`M6qkGrQA^gFbMyfF=MFb%MMKQBwTMP1G4J)fIh#Q zOVM;MWBs-AMD%h7YQ(Zm)|>Xi3h;vW`L0h4_3g)_uEmvc%@{tsmocaIew;@1)hh1?&Cx9T(q%l9REN}wh^x9I1jR)Hc?pt-+Xg^HokmsHhoRpc5k8&pZdufrku4# zyMKw#fS>n0uPFe`c=iSmic!9^v~|j8Rto((A_Y-B~zI z!zrzF5ZUWq3$x!vT{n>QuQb6N95|m?2M@E={mfUOz25qucA{snjFK@z6 z-A1FYiFF4#`>xa#6h*KNP14P_N{;6D6|9M$6)~tVqNiU;3BGWkwn()Iq|==A7Qf0; zMb@Inl+Dr2&tayru&PcX8enY8U2bpQ>HMGyREejJeBo)dQ0FNZnNNVw72xd?_2^r_!fS!wvXsb zl;G55BaDBq_K%+|?$eQ80Cg~6#L|*x%U`Lu`RmFn$ukf1*VAr)e66wcLgUE0Ny_iC z@O6a`$qQ^eR+pezZuvb(-ACrtPto0b=eR1v-Jf8t&kG-}ZSM>-Df_#(aqG@uN#%2? z7w)H$A*un^SHwc9{OrwMg6z$|g3Jd7Mg-LVTs{9eL7-Rj#MnmUL|^(o0MG*xR00R| zy(7eL9J8NxLq`3g?szB18D_KE0dozL;`7~~$L_rxjAZfuns+x+nf9KkVN!!Dv{HvfR~yso-;y`>q1D^{Xqh8%b)neDK2@cY|>@n zui9)GVRZDu^ZY9iRW3+@EF(HMCh{w#C6Z>iTNO+Z{7abQF!`I(|&Xbx=5pON$ce2ZqKf4v0=lh%Fe^#JQFhNmvZn z9z()?N3SmJ-7=?Osu2t1E@h||wR81kOJ%Q$vyrE7SD4@8J*a&|u;hyR6dx$W(cad~ zjuc02lYGD!z8Ax2qfs6`%qoA=6MU?_UxM?7PlZmHLdmZU22f|pfAo<@q^7k1jc4H* zX{8(S#YiTk#g!LFk0{l2eQ{)ej;6#20)_mEZ@M`jPNZk2Pv*Ye`VZ_zVckGDq zWDLeQSo+q@9&L_&3aDFZIQ6U)uUj4Z5x4J!e(Yen{;cMZ#yelHmw(h?ZdK(!zEaxJ zca%*b3fTqemCpN&$nG!73*}WGJ{Kr1vZLVbkXj|4=rQ$gK~roJMGUl}vCr5iWAf!3 z>|uoBrPD&2{jg!jr9~I9-&N}|G@=X##f4c)4YQ}gh8plrJDEoL)QH2+G874|e%j`8 zllEccK#@Bsz;7cqtkG-CYa)fmpdH}1+W`D}9phGNpws?paz!4mD@`HiQSac*5B(^e zKy`@I5Im~V>#em!@CkKvwRx__-v%dnIHz^{7eyUfDR!)@A8*wee(Apl! z=sa+m@lTc?D&!%bJeQa`d z!sVZQ+(<^}c02DVcZhb*h0Here|7SYcYq+pUgS1d{iJslIRDEm{#<(W4eYfNo7d?byJD^^Z65|6owV4Q zo3*Fca$EmTpBmYn%TvEHOIe7Y)SBboXmxv`VLwhs#gYZ&0|_!BXJH3`)vE4)MRRkP zwZO_VCzQCHw4AHOe<4F-5i5Mdq7z47oS0uI6eQz`i=!Km-ze__{KDFLgl4Cg^El_p z`j#Kqi~F=^Eye+Mea<(Ah+uF!rb zQ}_^lCVY#KS<8k_ipvA(erfz7>p{(RGUmLGYYAR#5 zSJtlMAlyr_@h-t`m>IpwxT8Jc|JeHcj~1pZ-0?o7YcLWxx^Vlj&eCHZLK zok=ETbJ-<)eqTOPmt`AbAv8~wNbG4$4Q@W2q}0T5+}ju7Tswbk4K7wUX>M~pij3T` z7Lusqfy0Kj!Xtj~XgH5n_?jQ3W?9Eec--MUrtP4Js4|ZB4Q8sUpo>9xnOH4 zi5~v%;t-(>z2*^KRU<|JQu(TsV$QSSCiCU)Lrf8(%+{IkixRuBaw|}q7^XHpK(uB& zZu}02W%|ia{xY$b)9Z-UTeKMX$r@-OM^%qDf5bND&9L59X#tIJr;&}?fB3=;5o{{h zZ-V=b@O#Gb$>$5goX>cZUVQkM!(&|B3S9D*X*yYR_Wq|q-B6>u0g3y+K4(7mW{2K? zd_#nXaB=;*=&2n7N4`wos}j{m5isGF8?vVQvP^0~yMIps(XRsJ!@h94<_v`&w02)& zMDi+Z@?>s+evdHV9rrhWw=&ar0UQqmd&BOEv5&Cix7^wvkP$PY1Vm;*Y;k(1wB%i` zvysr28`Ixu5Y#|V1Sb#owzaj@+f)CS1!&buPT*twNYl+O9Yu4%lDa-1Tfm|`3qs6~ z9>CMx$90MFm7(f6+%_oemn-sEk)_VcD;~0vNAvVjx0>~jCq`AUCb|XC#+HyiF3gN9 zGSKvRHy);M3{3%CnlAqT`{G}QUGtV50mGUEw%i3!|9Ba)D^9-uRHG_or~XcCfnZo3 z_|obRYgM}kFSj<=>B+(}%r-fPhv9zOvokO za`~-e?aE|o{WzYFxuoH~@3;U5QGjOn$6PMa;a2b|$g=YAXo7G{Mr*SAu2t`d|I2Z{ zBXumb(xBLj$I-&76hnv}jj~AW51bRd-(E4N8fZ#G4VJ)GDuGS|i|?c0upgmM9DATW z#@k#v>IBdF5VI-Ofnfv9<9yxO5<)$*aX9Z&^VPBhU8y*kL_ z&Q?{k@~wkk-fQ1aZz+L$jOF$48i8kKXwE~f$nn5i5~Ja>ghx|*$q{-FJC2{!Eyd0y zt$rCAofzG@=>v_v`UUuz_orUmZ|%?2R!pmBcm5QSmfuU9&>mvOZp)`CY;y_H9U`OW z#q{q=`7VuWPezVSw8TX1AP`KTc@w2QnEY$kcZHGCzFxf8TnAvAcM({Ffh zwrwT3*tr+_X)IzlM8Bi+%J!7oD+UVjWe+C@)v5~G2(Q5_U^x*cV7^| zHmy~z&kd?Ss`}2T-G`s|IKrm_53?`rL>(=TkTut z11G34xj~~B2p0cxB>38e!tKN1z zwKMcIfRyI`Jg|b6R=OD_Usn|7SCVW+<;e>ZSI+5vv_h)%JRT38Y;qs@vKlAbn3<~1 zlHTcoc4xzuPTc=1$*!ha)}5tkHxTul$`fX{u9hu4x60(6$hj%(1-?~mzuSkJKhg3o zymR~GWVb|)HsD%-fXJ7!;`E~O?hA_1O1p5GD+lNBUFbT&iO}Q29j7PVU(5?+cKQ_c zLD)yxxFqKN2_Tz=@w|3(Wm~EiiQq|&aJgNHQ%93)9urk9RY<>KQ(r6f5T6n3Ne{rw zXmx?j>J??cRP^*)q2qXy;VTf$YThsOFRt9LloBSky=SUgp3LW|Ch^?X7UhNbJ+X~` zGAzW6rzssaSZ^0e$l3V}_|G}>9DllX7dt+&bAqX*JwM{Z8=jBQ^*CpYzDf z4IiEgU4Imwr4ka<#>R*jJ*PCQiJ7_%jBHR^z4l}9(T}t>YlF#@_X7-BeLuZ}{U*tt zAQ*L`P;$6_>FsYOvf6zde*cAfqv}V{kHRT*_2F$_3OW3saP?r4S&n`~t!iNQyRrb> z`3okuD5n__;PD!8e%%&>XQ~*(L@HW0pcOH-+1q<&m>Yz6Q?Q$F;~UmYfm*wK%596q zg!7;@6N==N5Iu&Jfk$w?Ar@Jx+e-0e)@D{vV5(!IZCF8QWc=2*W-+*3$4=TVqTjQJ zq#L#slvoYa*?(kex08!#JcKLmDza2pBN+T{4#mr1JYae}a8GY!zms!aph56XdpQeB z`WG?k@=1!??&C#*2LrgCqACP~8!uC&`U2q=H~(skSz5!lh&VyE+mn7u#HNZkFf z!HG3?2K9@~E)_q>3iyuBLbU5%G3YJ&HOUSuelBQX8!D2sF?IgR!&2~yiI6l&!2Q{< zb6=$D!;?RyMz&7=T}5sA3wb42FJR@yYwV>4USIXYQzueV zdD)!}_(vS60P!+_BeqL#tH8Wz_q!0$m$H;re@ve|qH~^6@u``ZgC3jf{kCL2;TK{- z?h?HL;EDoO#HHk4TXV-iuMHgRp$3xpg^!cs;pJ}O6373~K3ZX|$RbR4HA~e9SN!Vy zD~+$+jX82Btv$Fh2p^vr^)`O;iB_!RtWB>6J>l@?x}TCrejd#Uoc9p;!LFy;;Z2Ue z!IzX#2hemM>)m!Hj(mq4w!~^ARlYyKSJH;J=PIw@rf;MB{!)s5r$$ia8sA66SPhuh z*e3VPr6MGqQUXdK9x)2N?(;DKDRdrWhvHzdD#kbsxPBjKdu;0DJ#PE-8#gQ%bIslDi#S?qWHJgNltJEMD* zb1j1x7qnQ%qALMzk@vf`!T#QK z*i_{?-x8|aMk(*k&uePcoQ;7OkPqC`)xJ))rO%FA?XZrBkgN?q&OhjDYo06XqCG-n z5xKUPySuN~PR2^~?+ia!&2wIn0Iqo_hm}98Q_}3b$cJ$RFLM219E_F(JHugi1}#l3 zIjeR%r4??BZ-IxT^2n-Vq+N;Is$*vHQ0c-DV?e)pZUE-@t3n20Y*vLl()z#~W_4`7 zr63kmzjHUSf%tyVbWn_B=|}zu4a!V8j7XGekz6i6UF)o<0g z7wcv8w$L~(D_*Sep%OTAOMmrj7sv9h_-aEz3Oj8O6KC?JneMmKGYLtT**~EK#onZM zU99~Vs#^I$u^AHK`91KO+Kb8mN7H%!v;DqpJQ0GLEj4R&YHN>Lv9)|#E#3BNXehC% zEvPQDRhxurX=|@2g4h&^RV%hiLWB@|-uXSa|AD;n;QCzWb)M&OypPA(k${UCy!Ozn zOE`>qMrupBzTx1W@P(w8?awDMajlVZ_up2y>a}=g(a{D-XS?hcsL{1?m?wn(@^Thz zp*w=8j0)Od>}5}OUNBd-e7=~*NOKVpA)NyGCuSzgatnkk@@)|h;uQ2Ul!MjnKhn3A z1oSR3dVtSdv?1K-zOGr+AxAT9WlFs{y#s3vF$+^~PD!$#d?8%^cx86cnYw@QPf9lk@NkW!V!M@0uU%mXz6)zE zB1joyPIJ!g6DwR|PXhNpI!A82@KRvbIF#E?{w@T_Sbd;pG=vQaNnIM;WKB<;vNV<1 z1qA+-2;Qf5^!)@qN2)addgab#tQ(bGJ06cCtU%o;iBE8v#V?sYI=sxi-!HoW? z*XPx~u4>CfI1XGh{Wbi8=x{YW7aj-C-7XNj;gq5}fGW)WkwZ!zUfZxj3rru^3gXI( z%mLyObW;K|dAuo#RP0J_9)#YYb@+Ic{b9$NEOY7*+W>Z3=6+Gz+|~EIA0AC{Y8{?u zrlUQ{BCxp}0H&aD*(1bF_*HIG?~Na}Ed#+j$R{4ipl=DKc%Ok?zeW?|>h;hS{NuG6#jqi?&Ygp`kbWW$drPd2=;{NO7 zgwuol^SilanQ6gCaOL}kgn9mdd^uAM>{e@omyhC4+9j$UY)+s;^FvGleP11Soi}{w z!H2s=Cnv=e6I_U?HEAND!QMo$zHFd^&^j7a+K?cvxjE$;x7B|ljaR`plrqdADW&Ae z<_v+IA|M)2J1Q`_R)tzGmJJm^MUHvHdhg=zfF<}Lj<34900W(7E2KXja81>& zyH9+}MRnV3sZQ=l>>oyS#=7hs{t;9`0;Wp=TA}-PGUPhLvH9lRwf~~mOiT%Bq2FwR z!<-fe^SE7nzCZ@q$qaXwH7$!@a>vFm*a9{<%l0c9>+7K~JxOIPLyT@y#JTH57K0s2;3 zx_%GC0OvV_R_K^Z>NtmgpfHUP+1=z02Yr8|*~eQ%Z>AP-2mAX}AOE+Xm5b6tzL*`P zXmsxxauljq_au3Pez?{*Fmi33Jo1{AVd_;0!2rHTFTnRPzoIH(9>t;5H=i4OezS`# zL$tUW^F+55iHJw!f{{<~I$+Mkb0BS^#j#g`{@}Tc1VE2iTYH%)ogQ@-cIbEQdaf;G zkNR{zR5Q?jnrMhG;*##{;$}E^sU2G#!PBOV{t96T9d-YK{uZIiRk~bi+h3?^W9W47 zZ1tN23PaHOYZ;x*>sLw8%87(Q-7_lS)pQ2+Dz%5@_EzYg&hXH7u`(_D8H3wmaXn{{ z?3w6#Ji9Z#(;kY7s+v4jJH2)MJc}qwDCO>cPNVEAkuzT?G>~ACje9)YA6MDx72bkr zod2L%^E|uMUs?>(F`zX+8anKn7;|U1WA3Q2QsA9XgWwh6kiGK`82@UDvR*hxzOk%*j8`8&~sGh9-w-jW?sV z#I*c2o2{BqF7z$y!^@Pqs~{=O?d`v>$(^t1Rm*?pxbfLU^6jx(;*2^U`a8thMOHfX z(cX|{pfqKqvI)D2tV%W9{T_C80X;QlOyxCXn)CnqwrenS#G9*{J_;Rv(?m!(wXmLp z2$b8S{bW>p!x*LtR8r(vQ|)$|p!9ox&2V?k^xdg-Vv%&tAs9i5JXa3U^Zasd!3Sx{ zq@(Fdi#6SR0YV$?5tzIhUo$9hEJG$J@(f(ssQuwwHp20lT=?2gwfcRVrqT> z0|Do@1dj~`G&T`^kgYOTlaRjn{ZUC_`q120{ZC8PvLwbdfD|$*ZlOcgm39Ne$R?mb z>G$Q_uV~E273cwU{(M~?b(ldFiRE(2;JMEcQJc>xzu zunK4$ZW5>+&f0YWTQ<0Xo66UXBNb|c@H=B1fVk;UXH>jKdH#JzQyIh2EGgIo^pzbY zB=yAVd-RWC<;3poXO`Om4qoT47uT;%yGbnlDxQ7NhIXAf9tyy1*#!I4{2dd|Yxx`4 za4KaNbS1s1D>iJlGJ=aYdv&RP=6LJ$5P55#vXFnK1fK7}eIH;Rwo;$jsa+NuaoqRw!O;@BIsD~v(v#^z zMWL)V|(jjLDQNWCDqw1xUU`A{%3}| zKrNkPbsf9=Xvdl{$WNq4tTqUK2{~I3`9~tc0mR@d`|bp0*-?uaZDglsXy>-NxUYn$ zbQOMH(`q)OuwKS8xQ$}X4H2u2f_^>sn|SItawPUnE;)&_IJ@v~XN2a&VVd9=^bc>Tl}O`v6Hye?XyaV3*Nd$@9OTNj*MRZ8wFpKfSo=>aYc8ziZScT8fSS% zOXAl4^%-Cxuqy;Vxi{jfYx_j5KicNi)Q$1IgJ4lz$Qk&R#!6R( zipV!hwDEw9gzk5>Zypa^<+3Z4?2H9vtGPd? z(Pj$19g|hv6{fQEh`r_9f5rQ^kWXyE?K#ef>Y^(@|mmC*?CZ2w(bjNHTe0W== zE0x7$Uzq-`v3!^#XXe>rA|9vPlhj)Y-TNF4BxlwRhobzR&O+^CRNI*gH-h507zo)^ z)IXs#_4wdPlAD-E66G=ot5!1jdZ*}a^-3JUIrd0nFnHp#orQa*L$s;V7{_BNU1wzE zSng-BTL4y=&_5(|xKql%whXJ8w|5;RhrIxK5_fOR%qfAiXJYj)TSEME8__Gs%bd4mu@9dJ!6;26#}q=ywow z;9xcPCKvO-xcQ2tgkIkl9aJvmw#JJ$ffa928vzDNH`S|@@Dttzr$IQ&q9AZ?hT4_n z7_yEinfBbBGs;;g19}UrCr}uV2Hw{`P30n+jy{EKIgNt5d($sVWTRXf$<28egQfA_ z;!rX+@VDAnkHf}2u|-z|;9xIQ0>#5Vo7Z)ruU65;cxcnOoFnPKds^0Hc)6xz`NeH? z1lgf{lHklpqF1KHxKhuD?#*gW?X-2KRWQwHCJ*YVa-0D;ReO8Z3>-%{11u*xXY}4O z{%1tD476so)fzFs)idV^N#?%toOjZ6@EO3BwT_zNI<)1g-TQ*?AX<|PskF-#j6Cr7 zap+%<6_ATNtwHQ|P^y<5gfuO7?OFa&_0;}r>B2Ir%!#O;^&0n$UW=RBB;bGDF4f)m zV20TlslLpHSSlj9_%1sXOu>x5y3>d1ADs&|RB=x$da~_1|h1 zs|=8W<;fdkDU~`7)o=_pIlt^9)`qv&je^1S3utmplc=w-FwhQXT$rg^kw|3DHD;q%D#(dkH5<-@mR=CsoiGbCGU~797$z=xh5+g)5_OxualFCF5tXz@u3^eEF z_Nj_D;LH5OCKI+7TI%d9(^3u*e6b`lVJ^nJkgh>){Q)WY>DgK0=TVKyz`kan6-&T-3$UsuzX=y^*pl;$A(pdH0I%}1lOABM!~p-^@0!0 zhr^pO$X5V-b*_CPGp@8br+CRB=ins*7iM8F`GXc}ONZIDSCH*RhIeUmCwtJ{Iec)9lw7wGIA-@$hH8r=mJ3O>PP zIkNoaPCc4-0PgO<&eKWHDo(xq*AMy+LT%N`0u=WCJ1$)uNu~IP+#re(C+L$W3gO19 z;f!Ct1e(*}NWRl%hq>$8;3!g7w>}j7wTpPLmcp0lXIn@bZ5^lt_R3Sk35?u%50SbA z?sP6Y2YMO$8G71E%jE>t2M9cxrN78?wK-3}5gaTl8EpDv>>#-2 zR_%b*4Ml}?X|5{&{^T@@PVL*cWFZUm<|Ez&Yu1&49sVc*p)tg#6g^LRn>Pc%Gbr{x zKerC=X>$wlVG*F06cS|wGSyV@c8E^y=~`UZ$#V!MseT)mLjgdty<)@U zk~%8ZaLaOjR{+ZT4*WFu?}vbeZ?jLfZVd2&Sk+w|-?T7B)JzY1)iIx4Sg@g*MQy(B z`6kEULf*Z?kQtk+8{-q=9Nj6WA)>!?jP}l7M7M4R*?=E}HKwHR&w6&}*`aUM4!M(v z%z^WIZL(YAXNXkUPH9At~(3EMZ|>#;HY!;%y`5e~!QoJ z&ot}1m_@YwJUAC72F0|fN)UYz}MprKKb7|_Xx}pG>NeVBi5d# znON7IuAIoOTf=Wig6~H*-Nk@pimk!EF65qjLva=vq#3r+x$xoS@TsZqyyn`*zq_6^ z>n;E>lIYgiu%bISiT8^r>m1!h9qlcRWp%9$CN3$ojq_O(|2fLdcCh2AHcXbamrlusK@SKoU zM6Hez&vzUS3)v4t<|jy)F1m%hpt`Ho{J$0;i5J2gp>i5|)p2pM)Sf92_x$S%SYy&( zP!iMomS0lIOth50R%LbrH_Yy@1k5q3$80b_*;)GRY;hjJ4ctHc%fPZDf)3n;JXhTd zFJ6UiSX-S1a73rv2>WU;2B==_7J@jB8r3V?E6HJj%_+(%3wKy>4occ|>+D<``YTYR zd}mz6xJ$;PiG;DMVMk@B2W4r(57b@rZs-SrviXMx9d5Iha;I`(G!4%r@r64ekDfm( zyRP+j_aisa8e|R#1PHp#WU)5(-`ah9&AkD10mkVhDDuBNfZN4>8OpG=ny(g-x-ow} zT;S#3cuv1hZ;1k=Cthc)Uyqn<-S1Hk`gw1~k`0CQd%IayqNuAza2*8#@zq|t28uptbXdKe^y#@MY3PT zIxMo5Yfhv44PK1Rf7W*LBD^cMZhrmz_3f%&#kFvB^7L_~hkwIycF-((;Y;MZquk+g zQM449v1tVz6-WRA3*jZ?4w6S(jhyMm#*OjHq8EprGbW9Dmk0PK<~5vJVDpzkbXs%8 z0_8ckru=#5Dw!ry&r&2$shXuxeq+rp+ud~AvBpExlUc&ldXryyk3T@O*+wQjim{|! z$a5`~1>jY`h;dL&AbS+a-@wRW3$5AMw1ai&`n|)ar3aPRh8;@zhtcUH4{HG4BF%rc zp8L>UtM~L%jh(yi=>y~8wqpjR<;GUNeox4p795iPBRHwHg1m6J8X?4h=-cTOyd(J9_BBGqW+?|D9J1lR z_oruf1_|qhwlkUr*>57SLY`Yy9kUxZvDCdCu<`OQ9HTm1Nd^qcR9Re z?|RD-Jon$##Ry(z)`#rzn-GGLea_$Q>g_Mj*f@5cy`6q+#s6kd@7H?G;J=39uulxR z98JtJ<7by;7>zrWxg44_@NrzPH1ZGg2LMMmV3$7n%z` zqn(`lX14QcE2g#?hMrkb0jf;Tr-WR}QZ2)|)YYT${(I5ImtqG5wBO`amR>QG9aHvT z;zCxfRa~Z~9d21Sv3pRxs+;JkFAvsPgvaU_3$Lnex#L?dYqe@E#$4aF7vj4Z*LJ)a zzz!eVwF;jgv-gfo8cH~EfyKmEQ*B=l3poNp9V*E%LfKCV<~k}c3cI9 zf`?{cT9WM1)gukElkLmq{Qa>_vgbY4cT#pM6yo_NYx|PQs0X|G&O1->KiA~UHRm)s zHfjGIt(FctO6n?zeHTbl6<8S^dUS*lfr)hI$Xy^xKnb zs-}eMt%fBvSw3HNnq~kc6=p9^LOEc zuADs~D!vwOUD-f9c{&v_HnFJmzg^3r zKwt?VD9K@LLi)ZE!NSm@a??jXU=iFm`1&}%LCZO$*9QGSa zdsvj5kkK1u`JaL7jk_Mrg(YnJjAWmPra*>B$8+NKvPr4voFu4+-~|*t`;?g;YvInUY_F_DiQsX=wwgbI^nIPHTdus60YhE6 z6MpVts8ixH{P1qWyjj5EI7tOQhOyh|=_!@BgKT`FXr?%u36~wmIWL-@+9Z;qgI=Mi zw`0G}juf=uMcJgAnd z(8V2Z%|h~NvPb7)aaej`ZCz$(L4KHB*ZUn|YJ<9JNa4}x-?!_I;=-`?Yt| zYH>D4&KI!W&Qcr$Z>ggxTKL+5R(IxeD*vkHA0pS7VGkLT&8T5+m*j=HDV*ENeTQ|u zX~JdoUapuIE#Kvo3%Jg=BhI?>J4o`Shp@HR;jQ~FydhXjvlZ1={%(BvmJe!u){@NS z_htszq<4DO9R>wn5Na`YseFMtO|FP}ap#fHf6?CQ@$no*dUYWL`td|+NwUH>{DP{+OljNJElN1z8eM_7UD*Zb`Y!lIo#+BgD6 z|K8XW;z|gZ%}Ol;}` z#C4?ZnK@zSJzG$Aw0s`KF3lWdy?YOKYg;(boFxY;QWm_gisF&(`#JOcAm>KsZiE2 zy84~LD7wlSyr>)WNqMQ-VW6p%AvDLg_^!MXkrz>w%?gLlX6nkC?a1y;Bg&jTw(*;- z$95yWA*Mnu4W4y%mAbtGyXq54v(2^kO`$Pp$32Zb%NgQJ2=3Sh8d;*enw8qmCzWBf z^eH6O)DmCo;Rf*A2a8vcatZblr=t<5&ic+5;+U_-bV0nF1RgQ;2TK{BYJw;}W#}2I z17tik39MvlRk$~ZO21Djl|E1{+1Cvi;kX>9t>~=-T;FU|qS11~-1T8hYB>)$nqzZ; zTI)#_y34ntBvz&Ysrhz4mOEl*4BWy440;zX4tp-|CVS+aZZ(G8Wi-K&aN`KM-8~o3Myvpn_0~%AXk7j{$aG zQS7{Dg`$x&qc5EuHTgKdC3r?05^94$HeN(t>7zKsun);x`Aj2a7A)Braps%pIs|@t|I5GU7ns9Oj&)dhG|{KG;qxNrf8h^AH@Wt zz4SPlK<&zRm-=e1&uO7fBNq5jfp?1#CHvpR|Dgb)2q_1fz{DU&xj`=Gm`@u{w-&bk zP1s09%g=czsaBO}HZSJxj*fw&)8+pS7v(QQDc8vE9d38r^jI}2nP8y>%_)_np<|*| zXFLwH#d&O*^IaD4A5Qb~-Z!zpk{rjqF1;H45Zy6TE&AuWTr-bh=&hUqsLptrvda7| z7pOzZ#-x70XiaqD=y&j$#+a!IH`PAXOdPf<*{Qs?)-@<)n7)2uEipkWKn}DB2R6<* zuzpjf3CSa%NXNlA854jOC7IhPxGC-OEMn?rK)|sp3@s)#8{6MWG~9L0nwB3vy;)ur zx|=T2XH)IMyPhKm5yj)Ihxc!{p-F4<9ifb(h7f2Jn+`rJ4$InRqH$WxnM>O5=?;K{ zLaHrD-?yw?%wUTF#C>f5zWzPtyBdNX1U2i%A zC+3wyj2Qe=In5zVn`sPE-$-$7B-X>L;c&_g!k;zsh=vDFWv;_>Zv74*V`Jpqs@y*}1En zh@)(pOppDw+udk?mslO~6%}>>rX7jGMM9Y*6cMnjQ{= z(p7V$6DI62tdUel^I3>)4{zb6oeu>gxAE*)dgz4bEr(alZ6`@pQu&s`=eS7WR)gS&sdi2%TJe~S5b{*z%q_~NceUW2|^itp1491>2Z zDW3t0v&C=b`2PL+?V-3CUF7N^^GJ+T*v><|EKoJ!`Ysk0;Bi4l&w8y!>09`{m94CI z^J0Lz=zJ#5I~$!94^XX;ebX@ELJC)U+93#Q@PyoMQ|`=oj|%hul!hkQ{TK4d7smsP z<2W8Ns#F2(1Y7&8C?VG3Y&zpEna&t^pj)OIy zi_pXFvG~$9{=%bT&z$p^aSFPpW)vPSp>uE$bhh&;jAAJ?j)p zw4NVE^$Vu5?+H#Wi2~#|LSBFu!iQOe6%bvsV3d|x>aAhXpsoVtoteQGfc49*&YI6v z8@1)RFacn@!{pvE8>|c6oqhxEken?`)tDDoNJjI>F}gF1lBiS`d*P*P1?QzE+{O8& z^D^EDO(K<>#RcMj!%RF!MzP|}M z9AmF+tPy_qK3HpAA+3rRXm#{fEy<^nl&d_)Y4DliWNfKl!2KrWL|K4133OlMf^Uji zN3h*j*NsVG3Wt_He9Y!>lJH_dOL6v)S>O)BP8W(ZeIY7N6!gN9I5are>RUs=x_xHw zH-T?;tSXX!e!STIn%{GUr*V`07&H{Kqk*C&qmKT?BQdr=?7>iMw?jo07Vtdm?GtPs zZFQ{qWLtFo4)Tfp65>sL0QbzXK%EefA%|`>GgB(B8f)K`D*?^nYt}pyb5KZ0$Y0oV9lDZLX?b%!^JjvU%p)4;M!r2qz3c) zfwpd-DHs!^e0@k82|Do5%tX!vIMgkia+77<#Gw%RaW*2)L~a@GfcDE#w8t(cBEQkMIX;h!jA;M3?lK_O%$}_+&xV3GgC) zUPY(YLhea+WLiC_QtQmzgzhUb&JvelfZe?VoGG{bL8kqn@Qne~!IWttK6K!E z!j0AzI&9zWdNy{`9N%US_>v&q7cw#&E5{#=4_p6f25u<-Yd3Oxbk$I925w)wJQ%Ke z>@UDTM5lIqCyixK%z8D%MaG<4K!Rx)Y^TA0gqQ@b2eHy(gDT2q#RsN70l(V(Tn?%m zXMNM$Jkd+_g8kD*!}CawDlzTBg?q5FV9q_EAC;b+$L5y7Xf-%=5>{jO8=&Q`yXkB_ zj{ddWc+}Q}r$YHYPyw_}?^bZ-TzbB~Ry0<7r{I>i*GE_V%{ak!QS4#GxxPNuYFNZO zbnu!TX-SRY7gcD6ycIe!S*?Wlr+)il1TkjHfi8~<#I z)zcBLoiIzn=#cW`_i(Y1VPSv7+o@rk7^lnpRSU5Ds@hMXsUBsWr(>Q!sdK&3Yg#}?yA09na$_LW9JDKN@Jpt^MYLMPP4o=9$tLL5cEM0y~q+o_Gft)}#0(Rkv5-YQ4__8@UDp8Nahcmr(OSg2M8ScW3MIKME(s(=Lqy#g^RRn|LvvO-pmkkC z@i>AY+sp53Y@hvLi2|Nw$hYb?0w-IlN+H|6@hw|l)ytPoON*jok7fgKU4DKcqgO|O z62;hFYH&+;S31o=@~DC&AYpERN~(RbV|z~^CEc8`PCO*a6F`R!oB=e!g}ti7Fk<&1k> z_!V+3mn*825@c#gcRZ=JtI(d`B@RAmwy}>+_aL=jmM(Rb_#PJ21!>}uJmr_qt92h1 za=X`c9e2&g$B+<45tUD%g>(hsMl_Z!39x{;hqY8iRj%en($8f^7K!PkLzCDO3sSB9 zQgd2AntSauWN_eM&sg{4eeDkJY4PJNq10>{uZiHlRMEZV@cRB#eU}$v9!Fo5*D-{= zuwO;Lzb*n|8Vg=S;*$F+5cA-!T4fEhuMVb+`W>E^h`FR%n>a0rwID@N<-|?kEl3=V*cwSc8gB* z=m?8Lrwz?9ZW)x}GH~@z2dA@DR*V)$!7GlfiixON+U)(h}0{g`LFU zJz2|_*^NTjk0mnzk^SbD`~j}QjgVOrRbmlUOD%F=@<$=S#i~c%WzGw z;=Yz6w?h}Mi?)|TopTz`Z0$Z`{Sv@*m{BwYjHEs#$cC>U!XaA51MNWZYQI_AG~EXr zzOiF>#>XLJ zB`Rn8xM1x3?@rIulsNeV{v(&3xcGHa#N@Z!rbr#ssnZ5%*ONT3aW*V7ZDmOja zNJO1;HEN;$VfSxA|6~t7reJE5Ckmz8ZncsIyVvqPsr}RDT>JTea(Uvvo_uShj zvNScH>c_37#apnd>IyY@WwrBxM}$Px*(+{%k5u+{D((@+5kW#$BG@V!g|ha6fljSs z5yU&6xdMK@G(XLlKL9pN3=i?Hqko#FK{oG268!3KQi&_z8M7hh5bFh!hO`&MD6i+B}2Vn%vy##%y=2~fxW_EyI$sLx-xKM`3W#)Z&u;}MQ4)UQL-Pil>?hDG*{|)-j zyVKkZP3n)7?Bs6y{JEa#T-ec~L^F`3=W(wE$R%vM$iA_0K++dU8h)qB%l4zz;;Uq~ zL2tIgYk<7^L+0)y4+m^_gYrG~!URg3;6aF}Jn4}lN~c`sxI31AffkbTaU(`t_ux_B z=JI!*>(@CjEO9~Ip6;LuU`;!RF-E$B!&Dt!@^3w-JC9sZ3vxn{HGhn9TC(}ygW>r2};#idIW;f%WRgn@cy|!NwYb-3T945wM)LssP^NA_y7H=nwk1 zQIz_dYl~;NgJbGXdRAS|@SYzO+WI}N{^Uw%@S z>K&mfyy64fWA@rNeg=()QGbuC{%vB@X-FJ=)#QR5+8OrSXx(L^#YtP>2rxx$vE&Kk zjY}-BP@?GR-}JXY%#Pz;R-IZB41o7VM7RV8hA80634gk{woOI5Ks&BEH{eLm`fVFE zd5bl!-)Pi6sN-p@y(re&C)M)>0etC09erA!;%hB6P1^TG6{nR$!8^t8_QdS`;}|Y{ zaZADbnLHoNzBAt}y}rv-D#=+~>SM2IAaV)jef9^~2~d0wGC{n9_*~DIo?NmRM*d>- z%G&ZWjTZpElY6vzCOR1RVzEB5-|ks?8yo1W%!Lb9jvD`M1U<>NPbC?m03N90RhWI~ zDpaCjyH^_g(hu_8qsvmwJMJ-F{&Z7*b_Mqup`|ovKttwN$0v0Fl_dU_O$U~^?aJ$4Lua& zxj6H{cMoU%D8qgx_tgx57vUka^IYfp=eP{trN^up0XSlwr@1h15td=b-Q?nd7_wPb z8GtaoCi<5a>(o@Z8Yf<|>1FV|y|n9$yhPa-y+d;U&ae+3W_P6RFu52&K|DlrX={jh zjt>48_uCMSD}{P92y+*<>#4J?iFS9cVf$z29i4Qbf3ku#q{>^a3#bRqc!sZ*3}DKm z(rRe;$vuR_0XoqZs|%}gxF1}@TbM8QW@#>earNOvU4*CV&IkiLqCluwPwsf5Z^L>vtRW|*1l$)fZx_-Wt;3Ab*Pl`Y`jQ_Q<3B}zM-S4HNawW4 zO_&Fa!3$b`$58+zZ%6i{h2I1ZeG;UHMOPM}wy)Q>1H}F8TR3Mq-g`m%QT;rj4YP%n zf!_$$V~oWXjNZCJxQuUlP`5&OHof$BADRn@Nu6k_()w854X71 z2SMr*M|)&UHC+KbjU&5+celziPJbtG&uI{6c3WcIRttifF>L`;8_5K>x!xuhe9Y2V z!01WujY#YfZINfecs)Ty{uW{^_#Eo$Sm>30CYlcq0NHY%Kt~D=H+MPPu62MZYA(ba z>z%Wnp*xu)qXcVV1;T&8-E+K^pR*Dp<&*+8BPxR}xVB9$`Pk!ne0bA7`&NAhrcxB= znAI>W)huUOA_vmb`2mXP{>l`dt1b?2-OqTQbs|Xgaq=^CPUZYc|6E{&^_U$VZ{ zsVv!if;t$9wLh$}Z(z*J;6Wx8hag$_)I-zfxvDN1$xe$v$?x`z<@bymrwa?SuOs4u z(6{D{T>xnL33=_LCGLikhJhQW8SB>b-*w!3yu3=Y`w_&{XjNf1^d;i@6kk$hi;SLf z{;W9aywS-uWp*S&M~bx^sQv|r_>l55^6_Iou3zIpw`|F*!Y)p6o2x0xA1}U@>sEzn zZ!UnEy}KpvMlT~4G5nx|Kx=KyHbON06j9WCP}Cg!IqD~4>9;(3@xdl<(cO!J%^h_=!v6Izl@*!qiRKAsBxR`p@k!2tCHERJCXu%aZTaP?JC zMkE?VwmPmi6bj%e7ZamYfw&CDJ-nJJ4*H$a1a1q)UL0p!I7+{tSi23_+7?(rzT+NR zb@yL(C_P=1oab*3AdJRS1A~!$ZUKIT`CGEu#-oDL=^KS0+u=IG>#*4HEts>%c+2*Y zHEBo4R&94&*eEd~J;vSrpXAb@>S%>%Toq{`Sh$h8+N;&}mGO;;%(+ez#^g7uxb^afKw};GLqRb8D@HXCb7MC`w~C>WBkW;BBHZCo@MaK@!I9^ z|B&nvTL%B~!`4Dp-5QX_NHquFvYgQl^qoYez~f>lVpPl|LN*f#xOAc_ufgp?7{_}x zwup54G0}<>`xAFqeiwpBcNY0!m>Sc~u&o+Fo`DJS?L%4cTpv#%dR5e6m-FKibhgWP z?7(ZI5pFa~y29S|)~vaaq0HH@jtjJ#R-^1R5yOS26wJocY;=}_JAK}*_x(OPH9Zq_ zTkbJ!o%7FGkb3IHLtJdVDW}r=F(v4sbCdUdruAJ@&cK01Xn6Jo=H}v<|$9IQ$-UZIfbaWBMR zHr=7GPz=WlsW|QVg<`pHpE=)~ANfcee&XBH!1h!*(E(cJ_Q(&Mi(Yb;u*Xj2m==K+ zr91^3g6-RFAFQ^dID*+9v`|j1&_5?Jli1>(KhzS&`j9``PrV)<$krE{YK^!r;gu2M zZS&atU~W~Lr~qByR3^sP8^UlQy=vBKPne3s|F>L-)IfT22;8R@*U$_RowLW&vyH%b z*Inz`gHd?VFRm;gurdgv3CIaG5`23R&iuP~B48px3~{;nyBL52!jgTQ=H`C*@;nO+~Ic^qNm;_KanSsv>S)_)PG?6shMUExH|Ln!OkU9?nO}XZJiRy zJj=2@GNqc^&X}x+ee=r|c7B13GybI$E(m*Eh(>7bb&_ zF(ONxMuFgc?)d+s={&>PZr}f(2(eeSR?KQ?Z+p~?Ra#n#ws(!HpjM2CEp||}wQ23u zYH9DdlqX<=YjAyM9MKVofA9)Mc0-ng+XKQg`l3tQaN zK8?Bf)A0`}jY~{5h_pU)6taqpbcHF~mhqpjT-nDTQzdLvUaIW=Bu*ceWA_dMzWAv9 z(B!{$j!Y|R`?Z7HvP9)DK{sWg!v+#me`aXCO#(iKPtjP9htJS|akFu}LF?+ecnRZ= zO^Zb~3WSY^f>6xv_i#nZBd=8L4i^H4v}=8v9e%92lCU_7o|!xgCt;krQCL0zN`A*O z{iHZys>J)bxuJXGPb)2&;Hx9gLGfw0ptH@w9J&y%!-;AMDGQ#4ZQIjt45j9+%aXJG zR7LuQ#CKB>xou+Wvc0$UK#uA6Q;&x;rD1FBi?8wbmL6NnMPuUARYW!tTV#l*nl(t!U!TG+=RlyZKkw-X5BUL_1)l?GRBbnJvVKqB z)Nw-BwpA?N;|Ap}wnB+qc!fLl5kBJsQ0)+a?cf8{Dt_Ve$e%f3QHXO);Lbux9)o z@%Hec#t0Q;0!X1C`ety|zYdsd+)Uw4lOab%xyMIY`W^oimtl%FG!FhcDx(u=1tf7Ayc}U9pk_JXWT+P zljOg0EOO;1;Tw4i?o;R}awGOlkeqj7!uFJi9Px7AwK~9Fef$8n1)KB#wNM+y84|la z%m>ECmOs|Yj6fLe%7U$qQ=V?V1uf@!kMF`{m3Qe%8=?IWb>qoo3N#@*Cn8Rwr7pqR z#&6$z|ME{gi~Vz^Nul%>Bh75l14wh!dBARkZDF|*hmo{}2Y*+V61tZRZdugvg*<_H9iUx4jq zhtQ0lQ4>@^iMa)46opHEp7f<79}Mlg@YXr!r`C6yp$De%N#8RvBTNoMEcLB0|*-bO{n%aJX*t;$yKbNw>a9Z0X<(|~)x z3ZT|7G6rl8`tmo5c~N}cXTaQ~#P0x3n}x@c1JB+F@4H+-ANirS1rL}9G|m|194Wh| z7(P7%((Q=QkI2qE%udwS7%r?HcZy*nNDCFq2lgi1cKzrrwK%#8#*W$-RUPtY7C*_k z7AfxclddyIxX)kB@xo0lr&SPEdf=Qw$v@{iDwnC&Y+=P0eo0JQ^1Aj@*`~2!i3W~s$pVVNybv^I}uZI5! z(;WX7UmJ%rrNl!j-C?XN+l(N{U;;5;6*<%9NZaDx5ev>6*fww?Sd`DwuAPzYc|ZzD)%p`4?RlcQIAZd3OkW7o`qYF zdXK37x8?c%!bq%}lr2x@)6B2ZWj5mZvLCFAh&) zjj;)}pk!lY$y&L>PNW3n{uf-mXkH;dMLC9?zrWGoo>z4~&82{zQv1S0;Q8$((W-?> zn=2a+jBgMXr6g+f&wHiR6H5<^uaN2wG&isQ;HLHbyH_dV2Y1WiHCo)cmL7P9sJxph zE7HTf)ln*0Bf(H6Pr_)~Vi7}6H~t~356Af|tm!!c7fu}L%jq3gD3Gj$Ix<$zOf9r!&)LZ0ZKCNw-zdiuKY80I(!qV`6H>aZG!~gQn2=)x_Y|++Dw#-%@s8D2l?Rh@FyFw+*KMvgTXTncDq6K=sTl z;d8hje}YVHYy$Rc^IYrael&u4Mjw%AEn38}wN`bJ@CL`c=08o{)f(#MM_f=vHOzJ) zzw^q-@G1jrq?oeIt+k3}&I^VB66HI#`TGclcR4w>Zw!0_0)3pxiYpvW;aU*RAiCjC ztX+rq63YvcUuSw+4ecClO;QGgYg!C2l&-1ZR%%$2zjgl_#qjou77HR&Jc%=kLu!Q| z_nLOoy60^+RL7a{@>wwQ9Y3apyN8Vu53XJWYN$OVWL;GKCCb%xjn}=~PLJH5v{pYl z3NK+T4V!bs%abWGkNs7xNICE{Uupx6@nl^kQgLKB7Ig%fD|2?pnwFY*SRb~=-O}lY_y}(~Mb|Uon02JF*Hp z8*GI3{Gse0juUHYCl772n-bLpR&HGJEQ~RN8}c{O7|9xW<8_p89f92Z@hm?TqOZT6 zn=FxX!m|@>9(aca)@8ONfQs79tPlLuhVV!P29YnI`=DlzitxwvmBHSB+*gfLc$O@9 zP^aVr&X*@xj1B+5xguD*^*Ls|$Gd;@S}BKnNQjOX>-TW#X8>jT;TadW2-Uddoy_aB zojx}^jnUZ)y>Nn3K8V_Oi-MQo(e@c3mfV$ROtq&v%c;xbW_*`B-ck+%L*yW)5G`Z# zGnOQJlL(8ko)k#EyGCrUh&3n3hj+&i?t1f~~2eENRVj+`A@UmaRHnxAD8p;PGT04WxA zw8%{H8l@k9&Iyyr_swc$et!1OlPagXcNU_1%O(8susxnr(hsN`dB&1U``|73wZ7Bu^eeqeqgbc;pp6Ls&?JIXI!!I z@9d9X;)E^LQr1B2?T5v)_wgY$JFj8kiJT^@r~AIg$ttz-zr&3|DD_GAsV)D4!<=iD z+1L0(UQ}2Qj0RuFs*TQQ-?F<`F?`--igNu+b*&8kxAN!Qk%M~iL9OVw`56=Qw}N$(*K|4*|;EkqaK;@I@dMu)Pl@lhFRa(3If1SSM$Uc zjw#AL>3&|Q%Y23LgNxrzq4EeWG|^B61QH7kc1yN%B)2u644&XAhcYs%xU08lVeD(^ z&d*B_;?q}Lg4nl(16jmdNWs%_#?t{M?^Rvio~XD?4Y^{m{PD(7i`X>(^)JZzzO!qZ zs3)Lwc3I(P0D*H(BdWfriI=3_mHrD;uX!n_qN?Z2yL~@J;M*VWgM0%L=x_hDy8k}H z@du3dfn-K7zM&`tB39o~os zM{bCzhZSqIzDS5urWo|f230a6?8U!c9^Ad4V*>z)N*g0m?Szl?bv@Bi0eLO^pP8#P zKxhC}0rhjeZEtV_jZ##)?y}CTj14XN7UtvLzUGyWJ5Q$jiVhW>I0#ii{_EsQhF!x~<<-`$x+ZPOiI+jQopHb>eMj?Y)Mf{lGl5!eFt{)~u(h?P5QEDU(tD$q|pm35tRkNMZ# znTQhmv1@1mnrg5xX5`T-b({vc`;0Tvv7t}B4?`YHZ#j_Lm##_;Y8MQc86;|6okE88 zEbGQaXjf&*Re>51x{8E1Q^`QJ$BM(H`?J`<(Ak38REFkL^YUjUO4q~Go+^I{{=6K>>IC)C@;hrHc6rzGZKnz2_n!lr zBFwB^^~!TC>_7E*9L`-dT;w*__*2g3v{|e5kK?2nhXt%qY4|LQ(Ql)DeTIFz%Mf?l zwxiM4Atbox$l?RoROXoXS$EE_0WG?hyx&$;%O3CRUxoY$8h=gG`K0{ESm5&Lp8nkR zfg$gH5rtPck6YlQ!OT7M-QtLg{rm9#kHJ~_64GK9D^A7^;e5ES503k;tQ#}`WGsK_ zG1~IUnGCF6%G&N(f4)zoivFz^xd{7EG2CGq;Q4{f%=A-gyt8f$T@-oVC2yv>Ah$&f z7|sj|(Oei-^j&b1KgC}flM6eA!1ul5(@BeoGh%zM>a8b3^uyC8))JSE~8cM;Aq{J zg7lUpkAY`vv&ptn`mC737RDfXcZRFkX+JP;=to*?>ae*+&S}NkC?eS2euIo>JnNi; zoqHS=^lWtrEK!SHImY9{CRK`bb4q6@ z14VdVD;E#{k(Up6HfYFl^OXNj!Eaz4CZ108^Uy1ikPlj!Tg`}NrtXaI=N5)ew+RPp zrY7gxh{6U|!r()xDWH2nCcg}}=^Sj;z*-RFeFb0OdGE)>0D^}8V0K3@l^Aso08)`V6{!lp;YN@ZI4KDzEw*;9KZ6 z5$53ejG*H5#d9drgVX0k4nd;2)*98oyunc8HgX5}+Wa1n?r|C~aj6-h4W>Feh`pC% zYal3>F!&UppvJMLSJ%_N1T2=LbsGh{4a#SZW1!*QOcs1Luo=W*(Ky!c3O zR?2cv-KxmUAmB^uX?E-BpZ`rrk zoq@_P#;ZCf9kHDJ|IRo&i}jo@1t@K8{Wf=;6HLS@UR>`z`0Xe7y(gjO)N$y={+$J| z3@=89R;{CUjnIx9{EjOLW~oRUGdh2vLUU|JV~M`Jzmu`zceyKBqQv*Jq$~Y8r+2o| z-8}pc&qMWMr!0R{$nm;MkXJdK#bd@2t*yqrj)GKX8yFmRj#WZq9crX z{;TTV?QSIgW4j4|9|x;aabMSvnVU_FM(-JOW6p}SaQ*R6tdzppAkegCg)d& z%D|Z?+y2d$|A(%9JU=e=^x;D`zZIlPIfeitP9hI)rw#}W7+YpouQ0wWBqhsNNyux0 z+ZKNfI(HBL7K$8H!E4EfeFqT|_X)wnjvBy|Jwte3jK*n~a9mr$P473qK`%$m;K-!` zDvpb`>)d4#+=>e4*#(EN?=JP@{YsrFR~{*Z2pA#XR;BbrYoeT&Lqb0Vbz zdi1>09y2P3pJ`d57P2-#!HZWPXNW3?|7GS5<`L^8w{$&Oy&c7{b>H%l9_fK;)uRak zQ?43qva+Zc`5M02zd5rO5%Ut)WQ+#f-)}{ecQnY2WW0}0GZ>jH%%>SyaPf-Pf|(#` zgT+v6L)c_RK6{d92sp*Kjpxu0yOAvOZa)?CR;$g>KqyJBc=XovJyck&R--p^yR zi@jwO4|sZXn-7jJcLOBisu(}~SO~^7u7uX|dkHcbeP!dAMb=u$B)x91zE~DO3;Os( zer7Ja@47nE$Y*V{>p^y1VZ?V)#xSwLE5%2|m)5yx$RA8-xLD(Vm24D-Xwa@(_=_53 z{%CMphAPKLVh;NnjgOezjK9->1m5w{K>#&YUi}FYgz8iujNCasS&TpGNQ3Dq?j|>t z8^3E?a4 z*t~!LIW|?Gt>c8#Hn!B$MyDKg*0NQ9CR_slXuo9<(pse-!9VSlx2L7LE|b~7^=9^A zEIr)k*M(n21O*l`()RTuZKe`XFQt})AaPuQn8Ytj#NCCBnh(>E8)m@$Ic+u6OvB5I z{;d}`!W{+#EmU)wR|w31{{&!BDf6*5vqBa;BgN+el+Ep1$6&XLryd1yR0HavWU-4# zYvt#xHnf3P=eX9E8y^FxR<-YX8QJ75(g@vgcDlBA4M-(R_3v3ukn+`V*JDNkr_lH? zqorY3*0ovEGo}?mz$AVUQqs$J`lNNu8+{Ar62TV*_ME4j#+cH&Q+4rubPk4{^U@iM zj(T$)VtCRBa)ub?IbpzGl31%?TS5)2r^;##c$qslE)9-s*O{$SqS6CFgI@(&FDCJT z0YG;{~~z~^dAs{seR`#}uXO0I(DnFzHV zZ#f7y!%IgPxt&#yebC{|jJrn7zKs?WkJ4MG+$C96Wnaw_@sYoEwHhx0WZQ~jyv)|g z8~{dp!*8Pb<#v~_+GVh`>X;wsLy_=tQ@)tR*P0T)=)%)poWIc6fhNsZ;zSbwN}FUK ztAMUwFJ`g7q4(i3h2{zlbZa$xIVpJe;5Lr^j+#k@pq<8-g2>-R`F~Y7f4$l2)k`)`gq{F?E@PNl_rRL;AwwTI!QF;t72&k6aKJq<0Pb-r6`GXfjVEpGLn zBt74d4R)cg@q7z2IO0ok$Rt;D0jeJxS+1I3wOi_oah|k8&MFAzV~tKSiIp5jQI)&Q z1YgTJsbl+1jl?;g((UY!#=o=;xCD{LA)2b0d{OY8KY2Y*Y@ALIJZINBLa_%HEsauE zFkE{o<%B4A<}HJ~<=|6D8fagGF^Io>(SZCQzQJhok}^>R_2p@<=6M!L!AAq%kTbHy zO*pRdjyB6@(oet1aD-)eiW(gj@pnM-x%@%2mIwTQ2YCKf4yplqZI(hb z7Fc_D{9+a51*9u;nEAARGVxPKD0yIg35s{DY2<^MMv@|GIyxAVS21=+T z>n9OIPkD_(XAS*~01*cw$5ivl;j~HApK$|>0H)IALCrN<1)O|?=E7Z#3;|VePA|m3 zJB^!WMEt@Nz~(_Eq*$ZdCmZ8=6J%cDn6iFN9jIpucutso(j{OJ;ApYUG!H0HVU*M2i}@E6S2REP z0=;%1Sdl7W()zK_Noubh4G0FXlI|WjiT_vc__A0_WEqFnIKwu6;eQ<`ALyp?-EV~H zaq8`K>&r-yTAJ1jC8bK`DJ|EuK8{`0VH@BE-$BBfERq(aZU5VX^bhXm>5 z^XXm%wH^o6A9WP|PZ1RsG^0N&v_E20!pwZ7S5BBHqKL3Ls8#VND*|;0IYkiMPd9)? zU2mZ=EKl>jub&#jgmYG77?_U#=X6{BQ*|1(tqebp?%I#xJ@sT8H62eZwue#dH|PmL z^2`=cz5%n7EoFLBhVC%Rs~iYNkiywTMHp;`Wt`F#^BIQH8@qYq7Mf_8A?q57FW5akLabViDu?zleT!iA7) zCXt~m031CVGj9e?R|2t?#d{i(k3Y-JFMtTT3Rc%qJ@_Oo7?vgv?=~aPWO3;!cY_q*C>va_qSY+1<`2?}g*qb-N$_AQLo(#=*>mn1I=7J8Wg zPV07G+xKYrn?|B>wS|H?;_#VBTs|WqV8A1f<`pBFM>V=gQJ~kYTR;yQ(szh935br< zF%6S@x4x417e>GMX=gM_+SdL{k8q3y_R2m-R{@N43H z4Evd%O3iHW9hbz(P=b~Q0JUY(h>LsY*KAS)(1p9|Wh<%Th28XeC}ct_V8P#6h5FRZ zfNkPwGw6hcTD=bZm~Zptf^w3FrWJG^7Wc+<9=s*O^t;s^)b#%1)<*iD&3Ah5BZD3v zh-im91UYt2#T!=(dD z+EYq(m*db^KMYt1dF4%a^``uFhq?07CCl5!`5#nQ zHJ6q?O6rDJ4}SQD;kk|*w7C|R-hdN-1vY`~UJGy3(x{>^MftujH{u13$4YAq_+d33 z!SGppnaaGIW?~|Fb!YOpI4ZS{J(d-!aS8itFaA6FFw?hii?y{nmNATpSM|t6^X+bS zI#iJ}8-lHl?`risXMw*SVOuz6z`Ew`VYnx(0C_|n!4H(gfw|Pr?JnZ{yKrVe? zbW6gVRYC5dgq-(Mt?4cBfQTsUsPjseOR7|ojT z190EIr6^(Kt_5sy=@pLerrBL!Dd79lVQzM;pH@5R(K>x^)&}rv%Ga!gF(tWMP18J; z-u7D57HBg9*MLqdcTaTB@Mrv|i}RtQO=!NXy#&wm$K7w;8MgpC1+6{66N=&2&3L7> z8dwanA#$Llcu)E~@^~Bg~sgg(6PiB)+d<|nG6Xsx%(&`%fY+o-}$EUmk$%V%tlfgpucD}i<6jbGzltS>tny@8ozPZ*lyDr zx$)MMvLQ??19UHK0r0APc|IetR%@P?j^8Ozj;xLwAN)P?snm_MG0wlvm%aWJP6qwh zejf5;d;G%8*B9@)eGz;j%807;Z}vE$L&sq9(FNNa8c4UhTQf+1ts1!3x=!TXVwDy# z#@Z!%6=nO&Z=U6SB z{0M=r%qsSWWlyfAC$P^Q!|upQzv^?ma(tQHIvWFjSt?6V;@~)oQ+ORT{z?8z+I)u? z7^?>S?}Y#8?#~{=0}ye=vVN|hvIhfzqJVh!OJ~iRQ!2Jz9?PQ#6h3219n#UFJ-xoiHPM_8!&&uxFpiYhlWXtsX6y2H+)fCJyr7iC3X z|5lkB@%$m(RgW;?YT#RK#G8kv4^3xB2DP%tSz7reijl>qiZ>1U72&5xGlC_(K~WLA zLBFu!a@qh34LU zYIn}xJ;g5eUU;7D54HU`{eqB_)^R#xj!y@+plV8dW<4A9|Cw;76*Tdl zq`H4#*Oor&9;9*66~yv$>@(W+05`Y5qdDC>@DRY>TcchLPaOE{t$zfu<#Iwk_k*v}Y(z$WC3$27$Ru{-KhA;ItJ zNB5XAVydI&l+HGFzue;__c41Y?PSnG3ieH>JKvvx&)u)yo5!63;_me#)E{OW$vI!; z{CwkteO6#L<($)op8FizgTxb}wi6kk_s}sc9ovvjdC@-so+UEUds>SI@w zWHJO`Fge!8CFu#@NIXcC7 zP2uA2t0+a_q+Ac>!I2!+86@%A4+9`454Up_^LJM^o6wX6WaMO#z=57t>-o{ItDgCW z!`Z-podRd*xh@#5-C|MXc4PN`tD>7MbkpoS=F;v$^I8;yy5VgSKwFtQvT})omi@c5 z>a%f%M|4ex!&^=}PR&98hAh0o8+j>0CDm;Q92; z?+&;Pw1ap@OS-l?(w4TAJT}V8PXjjQN!p7;9*fmPyJN;5-d7X+fDq|PsAnFc#};Dx z*4DguP5fp^0!z7}0GWFLy%u#>7dtF;mB_v1UYy(9$6hn+9rC^BpfVZ3hV%Ixwz*s{ z{3w(o%mewkG#BAn;avP*u0{Gr;8R6A_U3GiivB+f zPGUi(?5HPPiHTO(xzD(?LO`e?JprA%HdU(fT&wQ5^pT9CCrx*sC}=!Z=RBM56nj!% z?NeiD{;Tpd=vRxtbN5)^mH%MRVOG*0)FVFe}Zyqw&D4s&VS6Tk>p>vStUe}Sl!J_F~55ucmQmC zrfTv+L7k|@O8GBEjtzWJu|mF_b(H5MJd!#e1Z$$^{nSs@H0Oan``@b)3S0q+jg~Ab zSMTz9D_mMCpc@*Bu=`;_QATb-rZ|(L-5ayC?tqgOulP}bAB4>f-@&odu+t$&3V+3F z{4M+8MbKAT$>L{6g8D6o0w`8M*~@ENHu4*MBwl=bH*7P~Fo=+eRF6K(JN0Pq%c3{e4%!T`-O6oiqDU-S)@tzEy?*iS)A zPp=ZnYSS6C6i}e>*ho&tGqH}BC;H)hQ1`HKgm5b}!67qSJFe(nL6+K7?i`}hhB6;8 z+GwUgPA>#1q-;$0gxaOFbkGq-oCWB@hP31A66vQ8`!o$`<@d9UFYB?SDo3~-`nri9 z4S{D_zrPxov^Vsw#c3=Arr!`G!jxwzyhjo8`aZ(n*E{(VUm6@FA9QnycjBQ?K(w&$ z>mnw$qcS0Z0bd;@Eewf<{F$95y)$EQ|C8^{_Giaau%NB6`UU}lRE+qW@?d>>T2s<1 zbc^myFJ5_r&$1-X6RNlDh(4yO_-CJGwy4LDiYI^r73TplOW_j)^qD{~o<*!r%XBuW z?hWlT~v9?K%o)GChCbl1}&gsEdM&~Y^bg%uj0 zO=3N}DfX!vD1GTPhTY5CV=@g|$vak~O4RTc*pjGYsr+O!<8I?VOYYp+4}<6-zBFy6 zH7OcFhwo;e%e;X)%cyuxR05&KNw(KXnuiFjj=%|oOYu<1N+{f^FS@u;e8}5Re>O=s zrmpaBC80&J{4|V+n9W>p9*D|!7nuA+9=TZ9D;&u0mpg&;){D4Y{I02H$9UcRRGB_f zb!>K~Zl@}D#|uTpqFOur==C0eUx#0`*zIG*$BO)60cA#%a-5q&w3`W1tWx~ zy5ZC$|76#=eT;9P6rmlPaN50fPt!8G=3+YJSFp@XR?Gac=p_PDk-yj&LR{X_cSSyr zV16f2(>$VOHt-xI`@vOEz9mJZ8)1D9t8HB;xm?#)&d+2E`4rH3#1}#(ovgXk?n{Bh zqSBharUY@y&$WEkrlpsHKHQcIEc(zlpf7FPs9MF2fI z0q+9ppUbmI?K4Nzy`3U;Q@;SQcSqIr#T!|>Hv)+;cq*%}O@Qa#;|VMH8%(WS1gEJFiDS=s zR**U{@Fo`h0aIbA{(o73fxi7gaDAmdY)kn-098si$E6tjbQy6cX;37s)z9N6t~LSd z9hNQlvZ!v9z^Y0=lY`-*)wt!7rC-H9&5nGOFzs_Ik~MhOEBVn>t%xJ2hM#St;EOXP zA@90t%vkq4f_Aa4aFWGre7eAO!*g5B#mB4QRq={+Xwcw+_Y<5EX6MLr4h%CEk`WMf z${@ni(>tmqlvHJ*6{?5lcPeAH7_e%oH)(nBy=Ql+%ENt*W70_`EzW>u%$v!YmtXs| zt><<&#$$rdREWP=8V7cc$t`~c5B7JgvSyWPH{4oZ<{A4w)>Nj#B`_-P_q$gnxM(;B z?r9z=|DcCh>I=q6mi81@T{B80r~k%8ml;lvf?3F7QFz>U-YlmIx6wg)l zh#&({x|zNqIf7f*t2VHkRtl6?MoG|zIwKOv7fvgsQ+0txM!j+{tjurPa#?qw#O5Dw z{#!m6=?GR=pZpe!aGsq@y(TGg&IEJ}lgR-yDZU0ICa(SV`+RW=l^%Lr_n?UmI?y7Z zb89&RVH;Ucw-GEjUr;(iVxI^Px1Hb>iqS9OhDlWV(xOIANI-ds_Wn_E&yl{40iC8% z0XKmh;X4B-+^-Z-YdL6>H`dSU(G1Epy5#BI1Fb3{d2YIlJ~e&~7m<8o2@1~jG`^u{ z?EYD#zb!aY5UruU%4En5-E&Oj5*^u{xucwsYmq&Ye&+#zy1fPj)kRTbDCHdYGW8&u z0lbsKCiiZ=pVrYK6Lk1CS#Oz3>%o~TZQ4_%G=pmPuu$XTsj@L1yI*8>{@Z8o{-$us zk)E$Vo;d&+Jf~49Q)zST0Yi-ZrWVv`oyi93tVqL zZr%xDlkMTAS*`jLYxp*`PY%}2OJ0m3vi-;X5C4tmr|qFnK2*xxa!cZPhQQXgb$?s} zS#5I5NC8cGs_zyauZ4?JlGGwz$~fSwB6S{-nOHgB;o9Gf7fBD$m3^roS(EvOn8?J@ zn9u7o3OKD;wcA)4U(u48V@%u%ZkSInJN~h;0Ui0Ch-N+&&pY5oR*Yg?)E5#G`3H-L%bh>@ zw?^3GnMW2^O`nyuL0h*1NW?}bEo}u^ae|@_57t-^ODa?6GIlfetplcxBBCx4xErf{@3xL z=f5YHiiD-hYDsN=38K0Hs=i*;6E@yC+Yf7B`Ds0TQQ3dF&%f5$#OzmU?-r?8C-xIb z8dd!4d$aDd*n>}rVkd^un^2IhcWCx1rHGV@kJ?;*W`Bp@PJ)qP*7j>*1hi1 zaM;F+eayzf(iEbK{{cDhTE`Nk(UQVR+C{V_t=dH>y)pu|@xu?_?niZ>0Ali5-!Y+wYv-+AJ>jpy`34&ovS*jdm4n*WgTatBy49 z#&hk(`XYy`t+|Qc%^dIQaIm_3e$7o6z-2;xUBIN1EL0IDob3MSt{A(g;0cyis{4jd ztev2iRDoH4Z}iFF>!RQ{477R6r{LJv-)<)w&0NI}k##`SAC>eGx`M!#*gJN}$`NuD z7wjiAf39 z@ksZJG2m!E2splH__^ts-)c^aac+lFjto=cN5a#xiIb zp>?|XM&STx&cFER@E*yB=r(T%{UeT~d4}=f(!zJ#8{qy~EdaIM%}96?>G2*t;{FCE zefMMY9gf?vB5p}+SZ<;5r*wBag4o82(F23S4VM7(xL=BopF9`$hVX<=azH*f!RjI& zfR$S(KI)tJppQYq)@N=G!4}4-qO`LSu{^_yF~tg}i%|mqlp*T|L#tC{+!3BsWbMp# z$iNRkW>nl{MX`9)4{ZOXADNDMp^$-4ZQRBrR>qHZ9p+7VwMg0@ZYR+F{xEK7N#62-?zg3AWEQAgN zP}7{?SHD~HOuEa$7q;w8l*Uu8K0)?=ge$APQ&yc@$wj~~5%cPw{~o+jtDY;WKJ^d1 z*zRwz_$V9BI#fMg?N*xHH#fp-IkwczK@OIm`Ot|x875=@1TRSh?lG&_0C0X{XC=AQ zu5kR0g7nFi>;8^E|F7|2_kh z$LoOu(G+T1xiga*&aVg}foO2=xysUT=b!T3(U-!%N)XVIMpbnaK7`QG4*&d}#=LEO z{wSD+%Gph%$!c=E&Yvlz1p9u)7r!!nFX2mvR7bR|RUl7ExZ3JC_GzSfSreic+=chI zDdE0VHSf86S5f6h_MkDi1!3IO+Q^zrvDg|Cns%N5<{5(J;7*xOf>QWA7yK;nu6gJl z&J%x{Tcc)aw%clZ@}&(4Ph7IlmF5~5+X8~>pd#2qxHGKc)T_2oSh|w3@)&B31=)r*Kag%*R zz}FEqoaoKOZ%~$|UU}dzxnYh+F?@h;udnKYz0^;&IaV2WxC?M(ZjL(%BPtH;-_wGh ziDE0AS1qKdMfd2PSR=c9vIn@iFKBUl72>;tn6cCP zt^k}oWx}k>F;=YXM|xBE+3X>0NXvUH=-;owxU=b&R`tL%|=D4UFP zY$92ez9HF!IN8VM7#U^nd9096Wpy$Sj*)fDD4QeW*bc{@_qp%KdXZVl)qs z3Niv@=<%g!W6+lF=QtEULq#wMcSxUz;tMjVBYJ6@x_U|NVjSI*8Hps;KD)0RaAM? zh7+O<#(_U0QAWkf!+tL*xu33pWOF?mA-6aX`y zB->5_pY<&3%tQT`lWtCv+(XZ>)(hzU9!}P-geUhh)xb1T!71|id30~3Ev-@VF{vkf zr+2}s9}HOe9Gm7eGsF{|l=l02LN@MvO3_?NQdHsa*VzUfr*09)1Vdnqr$P62n+@Pk z`_(w}gU;Tiu7;cVM`*Ei-rm5E@=9g1_>#X{gM5_P3+R9J^Z_RDT=eLP+G^|QBXyf| zMHHP1K+i;tzZ%Do-!U3D{jleKRTnn#nwVW`B*t66kDFFWvUZjmdNr05A9g22!L6c@ z&W5nxt>J9gPSJNg8l&oS_EwD+V~nI6tfdt^|MSD4*u;S!I}!)zq0*!@8_wZD-qnhE z7MAY9saVdAL!A(w9JnD#{1*)(3vQ=K)>qel&!(iHNg~qqE0waYVEy<%J+>L`t8bU! zTibByHCX!goyO8aT21C($dxZF4xl=i$h0cXoKp(*XZTh> zV1WX2u$LbJXArLe=vRQ9a@j4#gY11tn>9k-JNvh5LwzPJQA)U&UsA? zmsJ;)N1sb&zgOe#4rtyp1|U}l1X*jP-LeeiO~&)kwPPwu@u~)16g&sNg5*qIMf%kz zyk5xdrE5kRQWT(H|B^ST-VXoE!#Z`e@F3#EP~pTpas%yT&=oAZA$d~|TRq^I*xFCv zDo6IsCSr(YTYBVJ(M`u~yxJW){6!jUCU7(azokddOhCrK@_ZIp0I;T|>zvI$UZ26h zndp%2x;oiWZ4YNBHf4G%kXXUG`AgQ=u?+2(RKw3mLp5Jdab7IayTa$!h6uwQ-QK8Y zgQJ}UzN4sJd@F4t0))ytmsz)z0BPP1@slGTq;>0Y6N+Ob8$5XN#^@Kt8#gDW9vZ|Q zbpe=DdkvaWVC8C*eOUwmIQwucmPF@~=2RHCS!tnfZPLr7oZR=|Mag<91M2A&c@5+A zlOXQ|mC+)ht33P*e0qiuT2Ovygcu;XBcSOrqb_qqRg+y7^)>xTPwjYQf6RuMz2%E6)^h%IU;Xo& z^>lasJ6b2`kr(y@eLqJ9&b&Gs1Nh=ZV)|A;kJ2D2=sY6T{cbM!%i~FgYELCvv4I*s&+f4mVGT|S%@@z0KvIK}CQJpnCwKG8fuPTJ? zZ|brKj~7YVbmuOue@9PPFo zQ!`cm?{i-0%9W0?T+zFoZ&4qGsd8{rI`}0M`vrQC%TL%&U-&RgXJ#-`Fx0*=(y~+d z^U`^KmWA~%7{060zeYX#$E-$R+kNs+Xf6yCHtV#loQr?uvvEFsrm)x$Uz2Y&#@w9q zcIp-#;3|?w9_d>c`{>FW8 z2>@{};;gY;4S9hM+hjfWm*?>yETM@j9M8wS7mh!M-mefIr88gNLcB^ub**h&T^LB7 zlUqmkn-bsXF3F!dTCGfj3g=E#c9rGhso7gid>|3xp8R7q{cKfX z#-c{xP#EC;N7a9Xg=3vzlKM5f7_#TP%PhQY=a1fAGZN;GB(=_MC^ib`JBiOrvBsAc z_SlU+=Od3{;2vmu3Czm2E!7g8J*ugFhZ!nxw;#J-LEll)Hj!|&N_z@#Tz3XlmxeGV zA_S%XqdN@fVaU}`xE-dc=RygnPzZ4ds1y*LvWQ=OPxUPQEfNn%ouG?R5IqxoAmPXi zJh>!}ECyc_3)_FOO!UV&rY@11=%xQ2@($mEJqdXc1JI}xNL&&W0rDIKtKS1q4S21* z#`G!|KKbm*ykl!FbrlLi>pyLIArT>R*!9I=Vwwq|AVj=1P240&h^l$z)abuf`Pf%R z=v(M4^*UvGFc*$}bvRoesNANMYbp+qj2Mvq`#4T#WPE}~cL<$Nf7WYc|?x;pdisv=o%!98kXhp{Nc3wcQ zprP}v_-4O?t6->o%Vp5E(HWcuW)J>VuHRm?1+%ap8NKQI{u#*zCX)5$-gmdD2}$t`HSyiv%X^G=%xV#Az5!fd(gjE}`DNCmc_q}$oPiv7!Gz44w& zVdjUwOQS#=8eSgrd^bgh>MV3#VQ#x}xGQ4#($#|L>Vrhhb?tXp7}C}1wHwsuwW_O< z)7g~#rw(^w9jPCx=^cli7SuiKSGV$^yp+;o+>t*Cgs3(RjV2yksI<*y?*AB{Di4{W zK>?dwxs7fx#QH4p3t_-s+|V(Z`1owJAJ5cZ99b=UU`c6j0}+<#5bd!C&8t-Fp^+zjqrR}9__O-@0!9w5*5c)-T-$6J6h=)uv3GxdNs#p_7N zdvD=wgN!TF1q+Fq0`--=>bG>hWnnrLUloCXuzYgR3*+NDJ2>-FzZd2WHpq>@P-?;; zD}$A>2eh7Ve$B$O?5B^5L4gwiNiBkyqgT5zNC;+Q5DP^kblTW(jyFeyT~v%;AIEFQYbi zqnkhf4X=c0(@12W#i3+fMtzFu`5@oh6Y7xo1!=%anTz}=WZFhscQ)BRzf)H}@k$kS z;>+o^GdErHZuz%SsmtbiVAk@=#jaY`SbbtaHHdKDtO3PC$0qh<6P0Y|VI|)RjDn%Z z;bm7-?|4R9qu?3YPX;dx$lw&n0@W3oG}@i0pZ5Qx8Nvi^go`H9dLHTqX1q?!rkw5b zLzb_SBm>7Q(xC!cstJH-={b`Xz&qIB1^3jwLPLD+&s(E zP>R)tqBl&OgBZ|$4-A)sOQtuQS079c>4Vm0YUhCddL|TBkzPB?`|$-PlNqkaD7Vor zms~1~F-PB_b27`{JL_@@WziC~chVf7;oS zXLw|6)3x+~)WuyzC23StrmtWOXz(ee_ zIEa)u)j54=@XsI39_#c1zxeRKl#3o`VWkx~6xS&ixl7178*_wA8y%Us<&4Vzx40L0 z&V3?VsEhW?>N;iD#dFuHsh!7e7FW+u% zIlCOm^KCa6L=Jnq_Ok%+knQ%pYzoLK{?_E$FbSmZUo4p*W+p-I`BMSK? z=&m*gpo()frMa`_%NO~6{9lS(DhOILEYBVwva(u)rM1-W&?SaNrqK=qKJ?3?27aje zM8xuD{sXz`U5xX*eQm;XvHn39jXKFquaEK@j_^~RPd&yRg3G?Um~Q6xVO)XA4~JH; zq0Dq_pXU)3dfNBzPd#^N)ow63FbtZ*_X|vxkNbGmNY#w%E>R<7084Mk)t#Eg?})PT z=(J}}Ns@ZI15*-Ui9R5@nMF7uZd*ieb<4s))TCJ8`s6I@XMr8sGt zzfZW!a}AUYZ|)n1+)$B1Xc{{HQ7HrVGqHyWblWb};xOQydVbw| zvPxqBWWs|`iyY1(1v6WL+#8_4k}F1v%ff*P?a1SBrs!y99dwTa!#e#|Wm+fqsMclX zM>Lvzhqfr-4T^ls2vs1x^(xD@?Y+Q{jXfvu^mOEXa(`w)7t zvD)4HKagt2PN^616ouF2H+DWpGf&cQ)l+1qg~C=CFf- z)Z%p=9l+M8zu4B{QB*-kT;_PT>a4Y8qDChC1?RR4z=14Jxs5hHkTxZd>tqTgKJJST z-0B6Hg3rw;gT(fn-8rTxYmGK)Yo3;yL{eW0OS;)_mF?zPnu|BgfR26-gGk>RtfhMF zC`#G#CF_%>scv0B=k#?xP}$)j011vrSq1%~H2^p)wM&^RZ}{q7h6@4S+TJequ1yk| z@UKhO31mLYg;Z#XPZZ|%(Q z;=!9dHy3-I%t{-<`V%@__^SVh0-*Omc5t=Y7b-M0#(Q>dSMXwfq9x0Tm0wDUN%%$aVi~1c``a>HcYCK9vhS6OjQkQIdjyIqlMIyADWR~}_B;nuQX7c!0hR`gxTsRK zk^O2%>Z6+2?a1SPAD-<-tFx+a!aU(|BAp*MeudW{d2I5Rhx^ z8kN!P-;QCc5ZmfIaM)|{gGGSg>Pw#p(0+{MW$rn1S?$weC`imE$LR;8mNob8J;d`( zZ9z*+<7HteJ&gJ1#+M{Q7zRR*?E_=(@TG>=ObDD&I^0%C^BXX16UzhA+L#=Uid-cd zJH$CPrkXDFA1N0eGk(x5WgSE@Z=nfw_N#}#kdy9r9V$=CR9cbR2r`+ zHh0d0RD=NerlDzmisIRAdMz(>W;kqeLO4=Xs&0R{Uj_XCS^!YwYW<1ouP=zU((Tq%2^_bPJ`pvl1b>oD(R8&TmV2uJx6BQgS@ z7AoT)1{vw`ikRQ3K2I0G?`HX&m?4Y>Z(|S#==2;d>UG(M990*_L7h*lF$oegzb@(p z+(xIS_8%?4bmKiIa2~o7{vcHE_pMsaarw}S6S}$mor#^z;DQ+!o4GMv<-L9Fu=cb# z_>qR{1Q4(%LY8zK#Gq_^`TCf@mlVQyxun#Nm;NxQuLMUo?dg4j*K>|$=X0ygPVPQk z7Ui9U{bMI?r#rQ~^5mVm50q}GWUM;Xx|(Z#x_%_p8^yp9MM&|DAQJmGR5Ka{2-{-Q z;Uwvfme??vKXeA! z!E`wW)A9cUDD&pt4PsHkW;ZPCQ5*CKp8Z>F9NE5Mlak}3%*OXY>S`9M_OZ0QOZqnpNP{0VUb%Uzz z!V85N<91vUoSU<{ww>@fv%dO#@W@?hyzSoEbJGY`*t^+uYuu683g7t+{C@ zeOk54pXR&3??JOUdmCvMu8K70FLU;1FF4Brz>!IP{74|;Q)HY;Qpyb2tNwXpjh)sB zo0BIzjcru>r}nh*1xV3dU6M<_YWdB-75{+j0;|9NHf~{h^!kXE)sGZfy<>c zLK;Sy9*2I?NcSRtPtm=+@~R|Fy;+MA^A`oZ;mkfKy+|+O5<}Q&c=4aONU~gOwkL7Jv3(3#9MPWv~(AEJY_HWe`BqqQE~EJ#!Wn`R3h6^WM0iZ{rAtKJ1Ao3 z4xgxKb`fll*H&B#3JBC5%my@8Zj@L)k7+CcY$8eLtkGC9u_x)nkgw#i3DZ`bV7StaEtJIGS4XV@722B7bomvrHTROaGp8d4A34kVT$sgk$?=;aBnK*an z$acB@V&KS8W{f4rXeZy8{z}3ej~r`tLT=zk+GN9Tm47<>*~J;wEQ^{*Zqly*fxor8QfSn4tle~yT5tHckp0`! zI;%s$3SXh-$zVEhn73a`;J;4TVJqn9@*7NRyvNb5eO9vQI^0O z^ZEA;9Uaft3PA+_Hn8GrE0jU)<Ki2lfyH}56YNb_;)YNHL1%*ZsiqDT%bWuQVwqFJ2=oJ<`D<9L6z0FY2@3AIT zE`Y6r6IJ<%>O<{ZL10aXI-L(Ziaa{DOOGk_Ep3!F^B`?hDwEc$estbN$HT(bwl&3f31hlM6$lgFceN;wKfDS*8ImI`Xa zFM0#!pnA<*%!ZRXGGIT{z_3NxY=Vj??JHok2LvNkLHdj*@1E_sX=(LYk^%a*v}zH^i+34^;*q-=j|!md&u)yVZN>;j8+USx$rLr-bguj7|eXG z0Sm1=*t!wIRsT^e5`s$fhz6T+oiVT28{`|M)Y*dag|WXOCGSjn(}A%u@%Qc60|rkY zmzM=+HVTbQB(e0We0rPn(ZDq_x%OXNtd)F6_Y)$F9P+BZ53&c$ns{#dosCZWtcCk@ z?M9w351*XHz2OXGGaGE?*FV_**`E^b#1U1eu}#g};Npej@ZUCH7aTbZIpP}aQT9gHFq@e^<*jGmF{y2ThyOl!PEf!{*aBij}ae zO8Tk)B@*EOAjd2RMQ6@rG0n^OP?i}?LKZ{*lqts$@%@iOT| zbVoP=!e4d7I&!cpm^9p1pV=^P1U;rh$T>@mz13YVh)4E#E?Q@d(aQ!L-he19tiG)` z{x?3>Tle+I5Bu|f3x*ZLX36efdUNres#ZY)ogG;5 zZNBa$_#qv0oNF$S9^B18?j-Kh0jQ^X%GJ9uyaHX#m~%?Bi&)GtHXLUULEtc~hdT>hR;ev{U@L zE-fe5-n{a-cfI9Kmw3dYEq>=WaCC53bG?^b z`C^*DucJe)!*^~b$or`|&dP3@N#pfdV@!Wb=l2XyOzgXKD|u^)zw-_|9vv2(d+Xvi z3i@qjdCzmhNas8Z_2eWZ(Cbu1qNaMAp-T&i_715nPHnD+nF!CHTJtOY|r~7`XdZz)UX_LrZs#cXo)FuEcNeiYj}JM)xE*SX5VI1jz0AI&(_vI=h2|_mQ z)4lXkM-1N~EFlb@$Z?~3bl7?@^-=~HXlrjW znv)@rd&;+MhJk$LSqeP5*CpM_c_NOqe25M~PBJmh$Hza%D0ugkWhBnXagUPUIz>XJ z5sxQ}AI>nLy2ucCYnq?Y55;;jn-qK+Tbu$T&-~HAOb89f^kbRTq!UAPKIccyW3f1)S8;uq`@2v!u|f=QL1eL2Gdcu26* zQX@vwP<=z-ji&s)~z$Gd?@eAvG3j-w+Pm)avwP1^j2}-!n*i-;#m+ zuf%RYoH}>r91v$-We7k5v#pNE*bvuw0A=#K+{Fq?9xbX;u<||2#k1+*AB8ZEt}K$N zJm@Mo5^54=Ouv#|c;py1XDUAa%I6VXv(eCxuc0nivi%`Ru+7B-`09kQZ^5R$dhx}W z*LyNTa&f)r?Da~>IC|DV1{b?HTQ^nr9b8>wo%d>Vl;ufbQvlo;ZPE4*i2DyrInP60W{~)ta(sp*m9D19m|JgB`SBv@{9FJ)izKXe zaQpT=OF3(QT*NF24H3_`n&$m~(r!4tm|PQThn8hZ5+bhzc^iL2&KGL9lXl3?dvX5b z*sGn3b?z)Zl?r)yXxgR4kqP$oR(qz)=T#nmE1BqVr(gYbgNodPqq@|+m4clD^gcB9 z{oHqZ?{|K&vsqqQg^=Ir=mOYd@Ogbz!FG%kxVU9xV1OD*F$bZjU7r$D@N#b+KOLc$ zA~lNcu1|0uAJ9`8X1wf!=bgcVTe^g1F1l zJAQW(EH{4xc=W}|Ij*to4%7caoTAp*&VK;=M1OUJSFE>l+l_?tOT$e&cMa^~%CfrD zj1F8HxQ8gS^Y*zHunQlYjE)}L#`tyWimeKkWC{H}G*4y71=RQ+W|med+GgJ2+3)|w zb%@z$IOFBfU+8aO*x&Dtrjs~bjNbdq_>9j=;v+c|pImV7)bf>liHTK@`X+<=))R#R z3T4Vu%5Ke90!i6RnpU6P(uIn^tAg(CBJ@T7S|?~<*{*1qY%z{wKrA}1m=7kH{QI~N z@pln1-zYF$2shoX9#Q*Y&|OF@bqR=2PNjUJbW+R-83FJF{dAzMVPHGj|0Z!s+N0=c za2z&lu>I@E9UGKb-PnNddY&p`a{Wd=q9{w?!EAB(?)ueAKLzX6gubZTRE}^WMs{yX z(cNj7@3Zf*1eyD)L9SEZIHZ5%XQ#Dx`UEwL3$EycLcgRvceV0dsSqG2=ZpsgVDI*D%XBPfJJ>gI=VcTx1lQ=(#T(Ff z9}XX?sK{QuuZTx^56@k@jvu~1zb|hnZ0W6X+$2EgG(F>6-f8r|WUF~tum8so>=~YrVNC&jXEUVq?X~iYH*``^(|7Dn8Na8x=&xY7l z{%ciE51I8p^zf|;fwn@2!>SQ6{nL4-?RqdL##0GYH&+ijuVJBeW5@h(`%#65G*A0< zR@rT{890+Xi?#pg+lN)3G4Bwpoa;qf=KF5Vp4(7QsXsnYCKu#3Kq`%D<&wARYHKb}XQkYA|6VFFWQW&~#9 zT3f}5h3VG~txu82!=rj$lUyIfYHn|7*hxizgOEbG-#n!yoH$qZeV&T-W2b9R=SC^w zRg@Uz?T+cf{}lezOJi}A6rHC@T6rCXm*zbgQO}<6Z2zKs#@5C7DHNg9#Y=# z2rodfsZbt(1n@9>;*MuUHIfxSQsjCLRg|ql;^REzL_QQ150A2kPYw=Rxl@e`7CPvM z)eO=ni;dJNaQfOX)C3dX(1sw`F-Dn+Yhm(Ay`BUf;Y3v%QNADFRaF$PI7c5{_58+e z5aI57ZR|q@$$`%2T%%{v!_#2ht1rq;Q z(&CK>OS3s#f4Nnk6#R&S+{C=+y;|3GM}{0vn*;!3YaHZ5SY}j-gR-p1A-1al(>5>Q zekXV-X%I&&ph6LDU)0^l5DUsKnli6%85o3lSCC=ELEl#!d>Qw~jo}8_ z{!8rmB`UQ1G3k^hU+>XoRu^XShxvCw2@@naaszEN&|l6S@-xi_GkU2D-MKTPzQhBI zHX5EC1_S~DBf|h0=6U;?3HzF?(U~||n}65uC_g$?TAP#Djg<;VL@mV#$rh4>5a0OB^RpnH?)t9Z^Q<{1qGL0%LU7cHbek5$u>$os9i z%<;oY?uq|V@YLV3(6{lHHEON?E z5XX0>k+y#|b{iyu$kgh~MPI`i<3*QT$u18iDFlJF)$aC!93qBpCgh)|<7~;GhNpwSA=|0yV z&2HAbY4Brzk5jTi#^hLX887ifF_`zMOo{;#D90q8ZIeIxOCO)x1UcxIO$hi4rdwlw z`zNi)Vwa^-o3|0oCZUb`@OCd~@j~K9p=9gf@71F4QSjLc55RswNJi?gFGl5tEFI_n zV^BeK$8k*#S6JXiKY|FG+7k4AdPa3TXKekfN8+fCq_nxBPl{;|lq$2zcfK8)dwe~{ z+j^tXZ4E}mFQkoDmXfzpT(1~kJG@CmmzXawd{49X zS3?uyjD!EB8ozK(@gl=9#pPbxZtD&I-;Omx zY57YY+*b!D%GJfy&4D%tLQ_Zi&iJ?D61DHyec5l}W`Z6oTBQ#?N*7NVINOOtaJ9|@ zkXa*40WKtqew|xGK4{8;?Bf$9s5A*>Oi*a z+UR6Wj&Oyuj}v!d4fnWymKFRO4hy6QFkJ9K3ia*+l#fje>Vj+I_3MahTN4FeI05Jd zRWeSwN+3Gp+v_pg$IIN};PajH(NzOJEQO*+p)0&5D7fjeZNa{d=-MBLgoRl;I)5IA;z#OQ9b!6z(Lj!+f$~vWaM? zkYDoL|9toZOg|$Wp@u8_pO;$Nmn3PfS++Eu?1Ma{#WZeB@-z;TgU{4=hQ*TAtqOs_ zkzElf&Q;1=LY`C+Z1HTCo|pERfP1W^S!nyl@X4T;k{uYlXUo6&>-5bLD?g2E_$CSHLtv6$&Qz=A1 znC_N^!Fg=BN&CvJXE|jxz{gU%z-19=z#0$sUYh$cwf@4y*PMrY6x$fRCvA$U8x<>9 z87mAqNQ6mcw94cl20x|ymGTM0M|2vbhL$OGDgEyo%6wYGDfhi=+q);FEM$z1NvOq3 zVJ6BG9YW&x3r{I_0k%lGn)2(1jD-2*-wWDvOrmU%GBwQ##CxakKct%VRX`ljv;Wf_ zNco8Bacz?2d7Mxc+qIrN6)tk+Y?*`tG3(_TuamlguJH_+IYHktMX7Vm~Px&TpkW^1mzCyW!bxjlPRPb|2eh z7EzIrmnR0__GYE@$N<8|wC?flGYDy&!l}k$o@?ZQ8)A*A1^-rsWxl7tg>vMu5gwvU z9BDCh&$3m;wNCIVMO%Fio}omr24qHAf;=Lg8?+XMEc7eNTjJ(d^8Dyny#V3RDrotE;As;V?^X(jl0 zknULpuU!xb)3vrqr7ZkC$QYYhd70$>H&Gtl!TkD=>B0>HY06s3;~hTS5_E-6j*JGC zT+uk#<{JXSdmm%(a9NXU=+VcUjbRSn-TIeOU0}4?M%G)txR;~6 z8Z8$0=e92y~iaTn`(d?32E7Nqi@Lq_z7E<h>M;^^4pkq{J{l~BRDo7Cc)GiTZCzchM|7d5s6t%N-%!v^& zt{&Z3ht8<%n-jnGhGMfpmx(Kd#5$M{oj)FbiV8Kdn-vgdOXyW@Qta-$G!Cu*WP0Sn zZNoV$ci^DjFos^eb~`uUHM-JS43b%6#FPT%ayt-d4qXd5Ip!}!K!U?k083_?zxst9 zzq7wTQp_ACR+b{H6;;`i17b{G-{(qs$=CSila@ZaVjkclEV%y1g6n*%U}ndy?^2-_ zaX?{BU4YW2PF|DIA;>1O>%9x-VZ6r5Y893I@wMi&C?l)4`4_Y$Z^%!(se4lF8Gokb zGy?|&s|TCy^2bakxO)Zme#FbfT}SAeA+Z~EJR$&;SXj@Qqw!r`HbD75MMmkq7n+#Z z(a^Hdp_9P}_ifCqa+G5Y4v2&Dlw7oy3x=Wy3;O@4PBZJvT7k254##d2mM<2JSGW-< zfd^?$=fZr?)PI;-haCO(lSC6bg(4(I9GiCkpP_`$PE<*>$c5fBV6(D<=A8rr%qMJM6x{Hw97NQ49FJ`h%qt3WOhP~{wm1^M@ z_2Ks|597pask};cv+4Ns&?yDN$yHhn$Ov#+Jte3*&UT=*diR0>1RONp-~HkKs9qy? zhu%eN12v?+bZVw!8xPK%`r^7=m0*p%g_UpfLzHj1fH8shBIjew{6EogW{3(LOo*a; zDPm9J;^J-f{6d4mlmX4bPF!am{O9rgQr1rBfJ?<%n5Hg`p^g~rAY55At?z$CWi&O+ ze-c|wvVI5`*=M{O?$5bMD{UND{*piJeM@+I;9bm~XDZPy$d&1lj2Tq)EIzI?{+$&4(1#K0FHpv?@AD(VVube+JZbJ7n z`Q?4{y9~QfLc3l#KTf)92%Zi~7t_~6QkXxc%Nf?Sw+-yQ`V(5)PSVh=sm}K!-Go)Mc#nrpNW@}I2JsOQ(ccc z$#i86&8CU!pHbQ(V&JG5$cQ_VF17-hqtqX-7z{19Yd79vG3j&(yibUI3f` zj*5wV-$ifZe~&TiI9M9%9<8bZQcHuq=JVcaa%MJ=y&SWWtn$l0=0a2uLc(~R0YAoG$F(bee3hzLlvq= zmA7%(%BqLO43?S8{1&lXSa$$sBC-{Su6}bmj$;CS*m&X);}}s|3c2K9l(eS}(3!`D zovMh!^xGA41urvVqvJiv#SPL=My2$b*aMqshGn0yvTp^p|TP0JeCB zafG8kDUH_Zp{g*Hi%uJw%&D3&nsx)`NylL2X$A}K3tEr%0gG33d1Jwy9;1- zPO4a2$F~{rZ_)-R0sYf&86Q+>*q)b^FQk84g2r0fwRr#aS7hNdC z06wijoDwoV&M#&dZ52D)-Qf+K-pLU{<-gw5i(k{-q?f$!=gAyIExxB|;SMBkH$>3& z)BgvS;V9a_ankru>T_?@TqtRACzXGSO^r9SR+= zlE8manq4x;tnrNke;Z{WL^L=wf&^t+Uxj#2IOzr$({qym7~$TU-jRvwuZu19W;|!h zZII56pcIemCEjMZ0dkEy+C>n1=bNOa)Xd zy9css_A7N+qsIp`;25oMgQaWX1zh~bYWBfc4PX^MWf(?i#JY!?O)v3y*Jt#ULY15W zCDRBm9podMdakbj!m}?6gG+0ceOS03tI}!~im`zUOrDvyvFqkJdQ9B5VYC5NZ2ZPF zWLnu_%Jb192RhIy_@IkgG+)Y_vmq}_1{nyYZpsr#X0*)h6elT>Sg!qIRy`@&i>G6} z%6T%1Xn`K%nR~iwV}`)_>_4=abSEhXCEtv)aG*?fZFdnF#=gmNV6ZJfTX;s(K zcKwZ0Q&mo~W4)ibCJiAi*bI5QHOD2~Z|VmvLc!O7n@n9uCav|P=qIJ|0z;w7)!}&7 z)#-4#>ZqM>GjB{JPTNt`I~0GljsI)J$S05P7c-r?W%kK_NaojElBdCnL)EWX#~hg+ zG1=d*0^|S3FD@1OyaqU?l@}bC)Nc7y>9F{Oa_|UMkQUvQ1#lCUL^}~Aj-K3j&OE|= zzH7gpU7Om6kqlnCoplmR5ByAXWficRVS&ArQfJKUgRFp}Z!x*UP_MtdR<$dd3W!?Z zDvGSNi<$f=dBhNl+#*0LLY%mQrqyJ`R>_>9n$$Llp#Xo~SGGmA0H%;M$P3ez`!Q2| zld<(W!mC{>CD|L4E8H;c_kbv!XrbpkeE)Gv^QWY8g~u$#j74(ANF>r|CN`2zp!7%4 z!Z5>&Z*SOTRXCqqZTRWp%0_5$0X~4S8+AKF|!^;Mnl-N zeP@A4$VtfN`V(km1FAoW>xHma(n&yO;Edjn`_bbzU09urgbwVD@fHcEke zPI4z$07}~#VB7{Ge2Lk?s%F#_u=vmNExgO$&QGgsg>9dBL&10s-7kgK84aZHl(qSG zaBtMs1|_}8ZAl=mxXVs&d zZct4W#m7mG-mMRN?KIjB(rO81QFqB%gS_rJ?v~gK;1u3eziNyYJNk^(YW2Bbygl&t zAja8cGR;%>imd`Uc;xUopfsFEcNe%er79!h5*iMtOPwlruK9y|mh`>8Hdiv3Hz@D8 zsN#|ylTvy%q^9z>g%(VF+u*|C_mJlVdTegca@VkY;_4kI6&fh^?q5uhJBj2>?69l0 z$?+-LXsDwWn;Z;F+daJbYpjx@vafFsCU}wiPk6>-x|n<@;y52i0*0OmZxffJH9X>B z>d{_0LPv$ z)Y-G;SIg#50!55Q>YI$A1C&J~M+k-S^1}v7a!P^5f;|TsoZRC%r9r5U_?Uy$IW?hR zaiba$zU|)KA&&S}9N-MP;Y_Zrok?Mdw?r`9jcJ{``wmiLFSJ5I#iv|1-z{2>9# zINOI(RmBXbW5o*NRJ5t&GKx;$e+tyndnVo`Rbl?caEIbJNF_}b=s!_S=ZJT0Zc(Ab zjY;?ypx?aTE4a;2d|Q;95?fRcyG!nW)()-|22_`77o-~Z)D& z_W7RkJ7@pxukAkDeZQ{f^Lji&lX`d|U?{%Jw@4{6nB-K^FqSX6W6&LHN5KIT_4}Q) z)?tMnZ2U}Je-`C7rE3qv(;~93?>Y8_O_}JXGAJkWRl&0g z*GYf@J_}f) zHz{I8kYDR8_Onyydzi4Iz$a-&I$Db=wk#g$85)aKW|nHrOI2ndGqEWr4k9Iv_C1Ye z#R=Or2>7eqDQ##C%@fe9YX|N)?ZV^kt#pa9ov3@BK;zs%Ho(@SR2xzy^ zMGY8#sGRlG4uDKhRcfb0I9gu~^cd;xzc~&Ms=)83S+lzgU;gy1$Wk=889Vm2=d|&8 z13EM0C)~;#v^C#Vlg7?a(YOr^)|5H#rspsYs~xr)Nqf8;!SwIz$IL`f*&c6iD7HQF z;}>XVcgKEuy6LcJ60D_A{7*hcFXktEz)1Zy#Q{e!QQ3s|T4rg5ja-0ovv+{P-v%2E zg@c|DS1 z_vB;K>GZzqyr&!dQN?QxZBILzsQS8$>89u5;^IvFb}Tw+B0Uatql=bIwp| zS-(OtHTT=#rQpo!Qa(VJCv&mv=Jx^Fd^+^y9GvyuEj?s&_GzQ`wuJ(srh)p_&&#by z-wxL1&iU`#kr6FYOo86%&QgG5 za>YgUamF^XaYNn8Fr4>u;J^D>8Sf+?-0UAEVeZ~@Fx+*~TY1gF(sGPx5vWW9H`lra z>P#Sm9a`)2J}Mv#mW<8$<*L8=`+h3x{N}XtjQ_Dq7{{h2`$UdPxRY&iJCO<=|3k^p zGkdYhA$9vP-*L`qU(fB&vn;sN2ls}6?HWyJMlL(9to>2N?}q=}f9Os9Y54&7@U^7j zpn8Sz*wBhn)LXIX3K_WR`gLeFin$^8ve@R?oE5!N zTHwNlV}%aZ{xmvxd@HlfDT6dM^CS!V%BXe+`XO-lFWn)n7lTb-SZ6VkRKzCFLXYOL zm}*FbGsU5&WV>kcDE|}LD*sQzi>W*~2 zNFqZQ!xO6RWpUakYQ?L>zGC8ukf$O~pDwy%qNlKaLCR8}ZJYdD^3IjxBSt~b-Ct^E z;jrMO8FTslvZiWeK-RsExXl7oz`nbT5`HX(1Hl{t8SDhXvu9*=BdsmcnMP;)J~Ut+ zUlcp3V|lxTUg#mE;tYYfE{yE&MWcH#FdAez_E^ZqpAca-UxWpnhouv=JVCx4q#~@8 zvWbE{>cIEZwYL^@0{e@PtNhn8HI^<$yhR5CfVHx5DGXd&VM>G(Ih!ntZRQLBPtM!OP5D%HTzyI-mSDI|3}8GWerG@d2W;Jyaz!AiOAQT!z-HOez z|I$iK6E;*p#lcB3v9)m@F@^NvvXQsRAR=Ek$G|Z;eRKz`JvrHSVmWy#oES07X2$`N zBmUy)Ye}F_g1c{`AwW&x-Nf6sn&Cx%``KcYWl|Z zKs_u}mlZGHKK4yLilrkY*}=$frKiO{)tA^eMR#i47ltBXHH>Dft@W?oB@9W@JD4rh z41HGy#`J{&mQD2^aZVYvH3~(Bh? zb810R#lAXgdPpoNbF)Nfu9x?uL8a*XqX|csNq7kN!c(PHZ;BsG^UHYY&f1?-Kg0r1 z_1`+RC#Dnnf41#N`tIuB6E|i#=1!ZB2~UQB9qkL~}3CL^ev2`Q3TdZtz`@ZNI)S zte02iZWa$q=g@4|=b2X-%)AOq*8X$FqIVP%VOQ-u7>bJz_TKTzqxV0fZg48%7 z7--NKFe=O$Y0akd{_@=~67f|AbMGHxmS<%(u{A2H>RJ>l7{QX#;ZbrX$pM^MlXdEp<#*Y=e za2J1ibK4Jtx)rNQ24*kbFtib#Ap>1zWa0wmyCzz_<8hJ4vK}jd`?}+6t&oE?OIg!0 ziZ`y6kQDkN#gJjBeWVR6$44^QHcn|Wq8hLcY?g~9u6&FYSPRnyicLVRLj}NCwl7jz z-z1BO3_;;l#7n*U(3XUqi8jON9IGWd0fb;)ik)zEpY+?O0|_*;BPXx2c<`fPm($_h zLR!`D+~2hPn)IvmrGJlK_!?bJaZ=lfzHJ?fg^W=Wcv0H}#H5fJTAvfX7ALg=LULsR zdfwtJ55Fj=P?)jod2V+& zHTL$iA#SnhY%XlfZvNwHBjqGnXa@IT)7~(_w=*e$3(p8Si}nxWaBNT}b@=Z<#y&7N zgEzznlZxX>Cae@CEw8)NDJ#(XGYeN)Ftx9npx!CWW~UzdThUu4&r+#V{XU3^&vc)# z+2GYK?XytepTewFquOME>}?IgRzD6NN8D{WdC`VUMvCmd)pG%$tJEVRIITsI^iI+G z{3SU8e&`_UpFFZH12%52y`>@Bq#Mmd4)}(?_Rf&N5x1CnuO3q9%dEoTJ-hM@j|SSA zgYTq-+QLqK{unWXbgSWs$(YZ7R^Kz)J#T3#GsJv@h|>6J9OH36H)8DEiIaXI@}1fz z$k9jVGZR7=!?f1x4>uwlz+9879jBZ1+9=Q3S204DJM=#B7&4{HGvTz|_#KHTo0wH3 zzoe-6(ckC?j(WWCynyOI@)h6PR?OzcVfYWHdmC?*+@mZd^yaS{8tSi(E)y~w3H|ah zaNq=lOoSq!`$wJ>;mW07*rcUMl(k~>3?}S}4_!D~v?DiVByqicLQI7Y-HoK_`C_vV zi@KyMai64uUAoxU{?W<^@r>C4y|D^h2HTOjj2kJ{t(^Cze4y%p?qoqo;A#)gkgG2H zX_tu95Q6rrTG-oQ)gH^D)!|0T&$ovnxD5dH8yxtx$Z+>6+pH7pTykn;wRI6QIKni&>tYyqU?xOe5;+WnZ-FY=8Y zq5O%C%U%sS5VpCXQs|uIDF} zPTUo!r@14Qj!RVB=cpz-QQbxyHC{P(3SQ(LB9e!*#6b$QCXrBfPlBT6S^4{eP0e*j+c4NRo}BcV@ueP}_-KbzICD5zdmu!J==hs(*CamtX=MYcvoqPz=mwp)za2&wXLnZ1wbs!JqFudOM22anzV%Ap9wUuY@` zJe=!P*-ZEA&dSNOgDKg*W+BC<>?3H2X2Lsm$o>^s=yB~?`yFpT3#(;gNgkC~PcwOR z@FLVoh2b7~qRN1|=1X#AamugydJIM#DOWN1dK}UnHCE=;p(=Yb){8*PL4}7dfKQ2P znbU$CJflw^A5_)W*@7S`QC(?O;g!Ht&%QHzCrnuUAHmMXXka&189>SOrO7v_3qv{W z$*88VC8{N{WsnrLeBQ%_LgoUP*#Onga;>NeEj68H`zZV(J48T%#d=>A6Q z1=F+Nmq#%{{>yuahOM7WYrm4L;NA*VAPnGK~%Jc zg0rK4*rBCQkG!a(1@j!QoIx+n4gL+m@ zSUy?O5>Q~y5O?`Y`{58VD5Y4c1@oL1{PW&8m}BIpZ4M#QZp(=LOS0BHvhP0YeB<|A zDQVR3%|#>IMBUb?jpyxYvo82QM~!!^=WQwwHm(?n7~5TOWeBMJrvA|e{&%%cG^;l1W@2=#6?QrpIKHxgx6 zbPOA-IU-#C_Zceh6jvQTGi{{SS22j9K!$~E+)m;M_iPYpd{7dxs#@e2;sG+bwJZD? zumd!jKP=Av1+HAPYn5zMWw4T{o6(2lLdE|9I7>8T5#WNbBt=~z)Ox~%({ipz8DAHv z8fDr;NH~A!mr^6$hm?o-#^UTY_O0yOiy$*V$^UkLjsW4$I12)6|DZwAcMt=lJPaF( zEs2n72FV=Et#AbBS(o4P-ib3H?}R7EAjzox_WFQxiQ2Im1CGmJwva=F+Mw0Fi0%r| zGJg^|oaP@VGa2h*vHZ{TeRZcKDaUY_O-w?f6m+3wq40|k}Yx2Rzs<%p;OfWr|| z=nF9z9=<}J8hwL!K$2TJ$B^0RhNVn;9RBwO?C>+CR`O~%H61E-9USgW5~xtvb^xvG zo+YWgtQ$P+TU+?rVMXTn#BjC*OW~rRW5%gRb)G3S1FQ;BP7kQOFI~ACY=kBQ*($2^ zW7J@p+$QN^66nvX)hdeFyAI$h3S=T~vmN173B5Fzf{!C zE7lZ~5eA$UZQgP%zpFd|WRH4jLPjY5tZxY#XSaNfClUIy*=^UITJ+YzR15PU zN4LC~O14^40=sgx;zQ>O{Es}Pm%@?m?M3vb%D8Zzg8+YjK~nYl2-AW#14xu|F-N?AXgzdZ6M#z>j(cB#H)E8 z0eB_7WUr-L{tAroOMq3g4}CgTcRw=8e;$$B<)%$TlpuPSA97#D!T`{_zs>nWLI#;s zod6|hON=>&ay50$1Ov-n#rP^^@^TYk6L1Eo#*D}^?5VPFZ#BDZh(S`efpok8YwVJs zQipmH()SbZ+S*K_+6kN1YsJ#eKsb}2?33Ctsd0oG<)U$fudFwzPR? z9my5wC%0{VXduQJNz}>?N4%3c|K37Kg?W%1zZTuNkpPN-bwMGIN*>|8k~Bt%z!(Go zf974okpR2JQF9&wq4Dt0khGjoS?WY$i`cG*VEW0RJ)A2yXWhj6sB! zwq$~yKC|dC|7u2Wmh3luL5a@wcH@Lc2Q90`$CLUy%qb${jtc& zifSu*L>RAQV=QwpPK=gQ(!bvdN0H2DF^?x5S{ z;fFR*HMiI}aM<$FSH9=d#3LiBq|OR3-BqN$J=dS!_kjcz8CZ@e zrkc=Fl_YwyXJgvx{~%3X74_l)iS$LQdy0egtepcO#t(eL=4q=u_T?^4gXAq`imq;0 zXEO<^Qm%w&^*4_;{sNrTbPefiPW~vxy z{C3^Z@BOu-yC~Rc+9K)IKTq$7uVG>uyUxvDJMu->T|+u+KbyGB5(XdB8S8(*`^{Mj z0{NG7SD2fWjMLJL{o}3QneJ^`%@FT{-F>|Sy=bYa)W&ZMA<^&LzNo#Vkd}(myY2kA zsmSKk@upYxfB(QFFZOYGbzKwol>AK6YEuw*F_q*xt4&_?iGe8*RRx$F-K0k91?pvrjK=w`745 zKkJ(zJL&fkGQkqx-OEKi^E|cUc?um3>V_*<|JFZZ0lbbXB{{6TZx;meQG`!l_&~6c zm;a>q+m2+N%%#NlBU<*Gk-ZJ^1BQc3iBZS^u*Ll9|0leOt>3 zch2P$fD;_!QDbVdoon6jN&)Cn8N_OQE{Xx*?4- z8F)7Ng27v#?TE?NVK%D=>gq@XcfJ!@BU=kkivG5u+d9oSh%g$6?mj4?*zTxaT$XwTCay>Pw&0t3D+%GAn2Vl^6A5fES@4*ee zgB0o#A#FX{nVpMjzkbt^qSOLky1cmr$phY7YGmnbU7o;_g5Td(VO9(EmOle%mZuQD z5h>ap=J=BZpC-{yQ8OoqNx=BeM4Ot6tG^c4e}@~|PRs7K5@nH$Qj9)W9HJvEMi^~& z(K!>l^*+b{&L1i&JfB2iksTtdtO5^F1u@v=fL;L`+xaSIo@xn{R8nj@35~BLF)$0K z8gfVymkHnnhIAK4Oh1WZ3I&P~CDy2_oXP8_*)d_*u(HwjTgYh!wHelUl6B}|?Oey< zEda}oPLh|(&jiHqr(P4=&VZ8T?QqF_tG|!17J|56%_fg@?%~Gv1 z4@$Sdwu@E6RY76AYL7DH!|1a9;u|fyxzcpR+uMD=qAGi*#Voun;ozX2zj$)N5WIop zJD<5+f?tvddolZtT^!i0 zP~3fms!^bEl&m+h$$(ev^x#rAu19`Ag*Q4*6%9sym^#dFI{KuvsZv{7)PyE&`hs4V z?`J|NROvI5F-O|f6ZdXc2e~F3mvqs+W^+oxT+K^nVfPUm)&N4qUZM7}CwAFPxX-Up zilv2zGlYM{nU6JQ7GgFBl)b(xrxYf|i?laqQi^JGnK%4gBbBe+lB)YX*Z#q3>TTX% za!BQf#3L{C@Uv*$jwrYwS!Rdl@%t%PKBI*Zl281j*5d@|O{5*5qA!1E3c!IM9NSrF zm^k0W4mlrc&e>$@ZL~LScr{)X9rY*~v}!*3$`2HO@N3<;6zpoh2nyf7M1(qdi}}6%{TloB0ew-wJJ65FDOQy;iOZ^mPVRx) z*Ki(gyoLz#aBEBe;k?$`r+>Cn(S8FM^=l|N2srSQ3A)7v1px=TVxaa?mTI$%97FMX zXSOO_G-R=;>ypM>`0tw#PXCLf_|Dv;oA9jzO!8*Yp_Q1DHJJ}SEKoCmh_{+S`c&H@ zw1Q~VMO=LVSrajE@BG|JW0Y6Oih8mZ5YUwL^Wi)x>Y|v=)Rge{cHQ znHAl5XW*5&V*bb1zcQ*vtnkz5+N&H9Of0Yk?4WZ`VZEq=ayYspKO?$#kFWMZmV2pY zw4BuHtehV1RUXg1Dyci8_TcwWJzqlpD%8_DG~eIPl#7(vD8Us~6WC|J=5v0NXgK99 zE$?gl>b5xvo>-2o$h7v*ww5@%kND9Ui03dHoqNRl7~R`^!{lMf=1Uhqbm;T%;vl2= zew3ky{6z7Yk~Zwd8P=S=jPJSS;2|b9b~?;xU*O-l6N0~@HhXjPIN)l*=JcQxI#JVn zGZRde`P!l!n`SM2;K@6YTD^Sq*AM1M&<3Xd9>1J8R%9Z6m9$6UdEG- z5@_AT|9&(rYLNcAn1vxE+3(ZjTCM*kWN%eZvcR)ny7wweB08eNH_yvvqYNK7?id(- zz^>P@P!rFyuzwTeyNFWZtccx49t-?8z6AHk_HLUlel!SiJ^21+vw@^pKw-oUzLHsl zlg<)=uHf&Ys}2&ATMAvkc6|Vk6VQlOhB^t!2*cnY;CZz)EldVgQ{_vi{)}TWoWnNe z%DAgH(D*{>G-5T45cD<`v2zC2TqS|Tr!Br|(2_JJx39D?TN5*AbOjUEX^hy+^S0d{ zeW8>}bPcVsHO*^Vp#gED{oShx`uC9!0|;}bK42D+2F4ewxd?bQQ9VnPTKg&qE%kmw>i05GwyUKxO&$Zk7i^P~7OvK0bJ z)@T6OE=wysSW#GhEvvh{SJv@SE!x%x#EHN8#buUQqe9z zzto6(SN5Do2yLp|lz5#_SpKGS>>cOU-5ylfDwYcSc2&;H;HmuAh|txQBr*3{{+zBC zux$_nVa?KgX}vE|6p=@1rX3`f{m}Qj#v9ZS=)+to&P@pC? zb)pZiC*{hE)C6TXCowKFT#82(9NOa&uOm-uwwHf>jv$*XmTfa-U>yQY6*Z za*q9t%dydrRYh&bAr~KNT8~mC$lc9k!rID7rI3EF6L&YBQ;IsX!jguDl1pT;)6qzs0|hqBpeRg z1we*hJf^(AD+O3tc1;Cr5+{^RGce_VEtyfw*)88F{|+9PYYtC2DWEm2?;!GcB$#mf z_dsh1Oym>2pGcG2~2oU?} z1K`=vuJZSgoWZeNUI*bFqGPhNI_ioYvUo@z(=sS#xli2Q(=l78dh*16MyW7K$X|~t zSHO$KMIyzKeH&UUVsVscKV-bKc~nYiOK4PFs)M#6ip{Ll9DU6<^WW_WN7*7@m5<3g zwwqyD8M8pCpRNm%z#vxhY`nLxEi7g$%P}-5N+(&=@5xe;`%Wu?K;}_(?EJj>@&kUq zsd+DxakT*MQ_bfhyLs$oO>Lr# zc)#(3Dd(9bw5pkR`;wPvpvD#Nr&fOG9W|nz+@;t5UT42(+i9(CPj_gq(yRTFEmv>)6Y>6EQtN>1pV;9g ziCJ+54u@5RG`4a|DFwuNJNVhNi4a3wL*_a2;S84;anXIsI*XmQjP^}8P)^( z|73SXXirGmYiX5Hm);$<;;?Ocn(ewN^X5^dJ>3E;MCXFJ*V5IxjPuPp;iX!E_^At* z(e+DOCQ;XHzcMNwJ=w9i#oO3FY>DG5Ud|uoLH8V^l!A`u-BD(C={J@+MYlv;*LzDh zdv_Z9vp!%z2Y{i_5fs$#_GNAM%}HRWKDDx4w!cBx;hh({7X??NS$v7hWV*(bWgw>a z7f#9wpn~OZsGytUWbo&+-OFA9Pip5-+b)G>o6`1sLduw>>xCsVXhgI&ez5&&P|IR$ zKQdcg?@Q4xh|%(KK*CyWuGwb4{qPp&`;!^A^qamoK*|Q!SFnTljT(&mWdbMq4OE+r z$-yeseZX43yGCs>8CCq-t%T~-_7m3?=((2MMUk`nQrKe`F4c~W(f=TKTv9iV9kMzj zo^f|QoKnq?+#BUOi5jvzfU?SaF~tkev+e@pHVkC=ALz%Nu)g>N799h&zT`$)rt;)F zPJ1w9$?!BtO=)R2Q!#-R0Af?@nvUX)lx*2OgXa!8G1fdDX@zycwUU+i-$-$-G`2eM zhs-H;DOiwBZxdxw{XG_qw=HAs({z)62Bo)bd%xQ|`{f_YL^Vfmy08vm=4xiHP|iN6 zI0Z*SWkR6|;RTPc9^8?irr9t9-Cvv=w0aO54QA;$bbG`3pd;9#WiTuC1ogsA>G=}) zyp{NF2dBx3p!w{+#KA{^53~`1T;wQDs1awzanMhkA0Cu0B)HeOc|~vfBzv5g4=zX{ z9Y2WY03msM;b&(U3P{pzbG94xOe@i0QB};4?LAT$=uJ|tks?X_A#J$20L%5P2XT1D z9!m43HWG(f-Zto^$R{%afgu({S z-KT8R#s(A@kBsK>)Eke1|8h2QBAYd#jRat%(?(4+xd(@%m9}TbdA*W?$-gsQ+}}_O zA2+A!ig~ZOVuOYBVntfbYMqaMpC6C!NbD48aOc>Aj+Nls}{gpOxVY zx6-AFd<6CLw#1VhEM4Ed+}~)z@ph(OwGU-#{c=RUDAF^T*11Qb=uGBdS}iy=DC%;5 znkiPi-_jg(kC#G~OZjf7j}Ap-iVxMh9>Cj&M|6@&Drlp(A)KFIi7E|HN4g^EeMdDG z6zw9mo#xHTf|f29@cThL?tAXr{~p6@>rm#xM&(1{{r%xeJW{var*~yZbdt#V2ZTo8 z9T5~Q0C6Ew)gsfpjPV@I9S6GYk=RI&nEaEy^pGsHhnVhaGo2Rad&JFL`@T%oKg$&uN z#E7`HM2#98A#D&qY~EZRwEL_HTfo1Ggo^&`Z&k>IUM*8+pVi#sN<16y1$+Z`V#&lG z{MPUTeO0d~uxecdUpSgPU<2?&)Z66vDE|Ns@p+7Q&Rf?pvabhq@1mUtI-XO+#`z6B z3$qom(#V?R<1#&Go(*e==+UxXXvHo1z3$4m<=JtfAg)9LB1X8Ic&}sb#`NEn5<&!Psy7mm z(6V=Ej;g-|(Jr-~}VP1N37OzXyH|?Bwb{ z9?Lg*$Da1W853!zN43@e7$ALOhJfG!FQP`1K(^v{?TrRP%(X*#^~#@&L`c8SS)KDd zR*xlp4I^|Sz=JOU0OfU)tOFZFVjt5uB8JqQqC|*@x_CT9vV9_OR!uz?7>eA)DF<4Q z>g9k=KOX+bYz15Ay0Xqv&bp!oy#+d|qNGCzg0L5R?{gVQ7hqS%5hmeQ_!0;4-`B zpkm1Q&&e-vnDp;keZ3Bjvok5p=9cM3M5?J&3L0vm_!Pv&lPu?5d!Jp1)x#MZy>{QhBt#hotz7JrOf>n^2Rw;t=Q zRbc$L=P0qiuzCl_=S^ReOzIYVgSIcr+F8ZjIl8 z*49CwJ^M_+fN$eoY*Jal{S*iijJn`BkiHdwLt)t|0_?%K6VFyhhy1oPF<)sSPW*C)x5sBcC9o>gG zP_di8zbG`|cGeF>e4lFF_cU58!Cz?G!>FeIt|>s|?c8tGjfh8LTuURBayA+*cv zSt;R3cqJkG3PVz%cFVYH9=>=IT9`(=*KtFRva8cx>6&8@Jb2DZC*_#`v-5`< z00yQAf5F9ibX?|}UCZo%V{P(+M{;rC6Y^}((EIj2%o+_1o)66=#k(cI_8|c`o$II; zW+%t}T%TI^*HhB!Ta)d?rtTWi!Q$r%@+rZb%$63(H0>6mO;0nclkt+#u~M$`qlFVz{&s$nE5 ztcH#~KCC1luISw}C<8*79%0KfLhA|6bD$AN^Pifl?7}pl)W3wjA%*jJ2r3pErh0dA zIg^C35S3B5{P<@#Ls}m&w;}E#=~;A;WJTd-Py zBPo3K_pL=9?>R2j9zAA876rjBP5!yG%x-3Giz}vY{7->|c%HW*tK2sR(~Vm?@jlpz zpj=T)YHG`*sO9VA*}mVZ!hz`on3vDRNgy`72_Ac}8AwfMqDTts{!^;S+zVV6ls7ma zVX~(54CM*g$ozS*p)a~BIM-f@y)!#5vmAr-FA`%ht&dt%=5zxt5egA&K0;7>^G!+I z_kzTb1-+b3xmx2jf}q-FOD^CbX%uUY=fLNlz8Q1{-ETqBr;=c!6$H-~{(l!B1Nq92 zKNAw=xRE4-tQ?ftl=}NNZ?C-KviUe}_Yyk?_eR9c*|d5l&L(v|*sEG9y;yY2*sSw2 z_jbxnJ+3p8)cJb2Pm(O39pc6>U#D2ZVq_$}6b0m1Dv~en-7{DH7QNFt&*D)avf-)d zV8xuVbG8p?d6j+EsKpwC!In5zWX)VVnRM~{;kSyNH=SUzU<-kZw+<^qKs}Krsw@YR z4h2Gx3#rsu*pt$EbC&)kNfXM0ARIGk!k#XdNV-_MREb2|J?YmEXzEA^akzc@!D`&i*^haPBz=F1HwOeu>7l zYp!-fh8EHLUBofNX)Q1;D@~x zf)j8b^U#BAbEc+Y3WI6S*rtWbazAdLv87)9i;zJ)LG-kQ^iTNvhXcRRUdmP1LLip} zM{vLqq1k!ZGf^w!m(+SzSJ4`w7cpx^-3mzG(t|@S1q60){IvUR9@8SV}HksK^$aQ6PNp(r2&dht)uElx0 z?Wrv#1|wv{`KQ9A!InJ$N}AAUzUpMYJtoj{z?ru{I+#?~O+`tgz!LMYHazgXGpy?m zsHaeOEcN2{p2c~W&fu6n<7_e{Hwgb`JFR{#p)IjG1!1Y$CH3xb0+bQ;ox}3?`+Vp7 z!5e(FlXG!Xnj|@pO6-VG(;%(SPrh1;U)mgF|Ln=iqH@4a3OZkQt*=ggaU$DU!=*+a z%W*rh33w7`&7tLe*T;Jkw*FdjUFduqs1-R0{4_}q`YMs?txXkduhy#3IzR4TQ#Gw+ zXI3=m^+sf8;_@|rlXmjd!KW+$9e@+y4{$!rXsi0lfW|n~`zaTdvc9Nm?iQIv69`U< ze#LyXB!{o-Uqff1-JM&7sq_}nopt^)pOVnQ+}P1 zp!N`7Ur6tRl?5+{aQ*i~>gKJlNjZ)k1AQq}Ht2(seZ_O1ExAmd)P`optZt}?bKvx`1g$W*jOj^ai&4d(bSbLSRp+{)Gl)+)B=J?%_P>sqsC z#>OrTYh^b7+RTVb>-gp|1U5ux+Q|n?)@wS_&n;p@|1ezqy>|0Wws9xA;5VvTMisDvx|!cO*T2hz_P>_Mpm%Z-WB|&(3yK z_yB9C?XZ&j?~;QS2>{$L7Nv|Z=oc|$vpF+j}^W=)Pl>;grLD`X@}@*J>rsD#zARsN#m61*CQx*P=J zn#IhI)22-Qmv8|~k1iKKA6yg+0m9(mxNr7Wd9_}bT!C`*Zk#MM7x&reXTN;OmC?$Z zc))EXclCKqUgXJ!TJ}9N;0{)E=65gfestH6!uSCXHT(xgoGYJ*-f9i%T#?JyV zBeXgbPbZdRI1OX=aLU#-`$hHGht0$H$Jkd94M|dSON)dnS8qM&VV2H5Fw< zj%oc5t_y9h$**SS21a{%cH?mJ;H&o(-wwK#S#29 zv~WMNy_aI;byl*cpT8SG>n{7NQk6d=-)3bgk-vv@$^QVC~3f5sUGv!Nl+|KM_=~I+NyUMZu#x&Vq$&4*t$ctSROPcmYJf$S5 zfAkUHxpLX_hS2`gkFUoy{_7aC7Sl##5q8elxenZhcHC|HP`bFQ=vUbrZ8klpuEdMC zhP;6dGm=wQ5c`u{(9u;dE$Zoz9q5@tpG;-{Os-=Y2iypc~4 z*|NbGN+adMoz+qPbYzKZ&bz>*4LRDx5|*%zRq?g%tpp(7^u{9_*(RPT_v}K?$+*I3 zgcKkE5~k9rUx~2-NAvv@XU`9@v6Y>-m(f+InG`f&Wk-Cw`vlvgLbVw$m@*pD#ODky zu_a-(N=vXkc8GL5V|$x_*&^p>D5u-PKbH7lt<1Ujx#05(z!`$Ta|@A=vw$V`LFDVL2FYJG~9wXM>rmPsEx?1VOwH8D-@~toZ*E z0>GflFOquP#wDNf&?XB~VB$8llo6xB^hPF0@!mEEEeN+DoOh7-(HEJP9 zrgcKVF*iNXlv@j6ZuIzhHj06TSoWS$tXba4=2GsR!F@U6FM)Bk-T9-*YinDV7dkJw z2U5w1v;X_5`qYFJqZMTR+sQ}8S`2NL^{|WadGd~C|1-LrfGpBoO;x?IX!{CT>enJ5 z>KtTS6mVjkn$CvtkjeyBuOA~)H+%r$oF(p1JFs@+t0hLO$p{b>Gt`tbpzr;ETf*#C zCO-#|MwDB|7Mg*5Mi;WC`xPWL-{zxg;t3Yrt2Sh5@RzLnAG>4y%+oL>Q0huWkd8W; zpNo!`T_y{KU2NymnSqpss*j*{;JDXQ2Muk{s*rG%?pp=hiv0h~NZW*pd5*MiZ3T3k z?vTvIy0cS!sb77!sPjd--5Zged^yv&$c)lqY$#oGhP`S3nMrXFv{4uaAk1HR2-P{{ zFOtLQXV%|`a6&{e0Wiw&7tVyABO@jHhy&y^`e7D?@((6SA{*2i)E%5jyuItNxuLPX zWs|Y>y=GPNayHS~s3LIb2V42XZFq;3TjF2x!wCS#HJLe_h*j>4X$8r?<91@;z~S(p zgWc{U>rYjVchF{hM9$mIKimB8H~;MW5?$nJCJ>M<4SWc*dJgiL@VdLOXn*y3?C0t3 zx6!dbD)cKF|qTgisy7QDRQFOV%D#LCi z%M?rO7Gy+=l|}Z0!XFRsg}J0HO=+dRTaH^Ju;HMXuRUX`UR(VghgIy64^np6Q;z}{ z`r){7YvXKo{ln$hDHQg=*(ESVdb`T{yP;L$4is5sqTFq<%zVFaKQyn$)>$y}?3d zpJhd3E0#YQ+zAEHJtd8X-{^6`t_u}K%Cxfp_eLqLcyvEt-(S2rlh?9-hu}Y}T6rFW z(SkcHQfttNKit#FLP)yixhtM%F((5L2tQNA%Z^ZlMI3!z0MT8H_blaIRq|Upd)#Jz zOjh1FktvPblO6+~G)aBYk#K7A4uC5E^8%6Vq1Mr}pY8HmvhCXpr5e^rI8BO1HER_* zLB)}9+b{_YV646_XO{Bq!ER{+(`Mk*U7uI&g%NOKwgS1{MR#OMe~4{a>@ebp{@ z1TJgjDrv1x7!lSo1YY>^Ci#5<=jJAxxyOTx)oLOq2e(|sk3|GX1%kE_Rn(OTDsmLS zT`^zH%!Pz0+<&`44`ySdXW|o1O%id6d@96 zLFKK8N>RGfdnX7AC`F2NLI+W#OD{o`-a+Xh3ZX+Flt5@tKF`ee57?RgVR!EPI@dX` zb9ePkcvm4)Ab*htBW`-MS_BE_dj_byg!<=evb(Q$xY6Poom^u-+ARK|cuH6Gh<`5Y z#o19UQA9Haf&R`kI$TTrag_R|V z8}X#ol1DV?t;uCqYQOnqi|M}sX@X$I`IKTv^(ec`&EX_z+ly^;8jIPGAYAO(d&;EhiSUZBTV#96cRgjd3VtJ8 zzF&nq24rZ+#gz%mdY5KT)pg15WpQj#p8FEpt^Jz|#G8;x=?7w=C-tF$RQHH+OYsUh zzAtb^11fPE$HPp#aa5mgjNXUiZ!Nx~reD=g<~1mwlEAC`yJ7&ktU!>s*>;cJDT^R^ zsk1j0zFJh?m~t<2;znKywBfOh-NH zTA3p`I*-vIY6h5!Fd7v-FWi#eG$<8R6s&KL?PN0=-WgH8zY2eMix<=TWxG&Z9f4-iKW|GqPO2=U+RFRA<_t1V44NL67@#`0RLBYKKo|`d(*r(M74kGp;A-QmF?6D$*8An}-NnoYkXkR))L|O3H09=$EiBv&p={Bd0qPmV%{>4kI*`P zG-XlgjA`ck#&Gx|!(Vtp>0bZfWz4e!F`}~h(Avt^UF+WqLy`slZw4>+z1s`wyKnJ} zH_rkB&srZ8Z(M$CGeU4+ZmBzFsIK2q@9h{WcO}PMGY3AkjGVN)Qwa-kCiudY-U29F z6%R>~1iQ`StGOa^5-23Gax_S|>R+XO>CMPzey-AoN0$p;?i3BQRM;O0u^s%BD-@}L z@F0urms@Yi!;7dJ_oj{+%!x6|{l;fgucZhB7mX=(R1z%i2vHFQ3#{o)g2*eDndM-R zbPuhY%}!iT4+@|h!SxEQd)Wk77{lL{`jCzKILyCb(!4MEokcT;+u!)})p#W8D!}Qr zyFBl;RGZ$~z4~)RS)SEGWVpxj;p%GC_X_ft*9m^cn!(PljqtbN|LiUl0Rb&LS&&is zKD(4F`R-B_8L*iC{0rrseCb54*eQR+W6T9L!W@L7=G5Gw)^uAeocvl`yHRmLt}qV% z6inOM3AZ&@Dsmo(sbEtO4A%BwV}f`YQqeF41A6WN;Gt8p6PwPCDn6x%ME)wDK-*(E zD$>FWjVa6!rWJEZk$?~EPe1`?UpnQjkUvGnm?0?vawrwGOVnYuoon^UcsiQ=R}Qiz z{kr0+fW$uCXFk=Ty@XyquY~h!+3dM|!9Q|2C4VfaqPR1YWYEDyaPXw4p zRP(N%CIhAgn> z%LH1Ka=E)l{u&ypQ6&aSA9rgN4}wPUrgbbNR*Sk>a2fykr+ zuQ-JXTjRB!-8O#0oT_CnXL=NNxB8~ zkUy-LVqWZe|D8xZ8Qq`NMMweFcP#2t^GH42TzA3AIA&m;$L=Pp$F3!zi3;Ff=)p|F zvw|Wg>tphN^#Z<`+vod7)80;*FKnM3XWv8&M%G;ocvJ37mALyBypyO#6<@_~ZqMua z1%X(tk6nDti2I&peAwN0{=7G8O{u8Va&!ITl18uJMbU*0Ey+yOVm(>@rXd|Hxc>nUF`q2E_q;5J`eo$J6{AUcCR!ZQQmR%c+Jp-g3_oDB8 zO&8IaT9S|a(SzzAo@NlGX{>%Q(aRdE(}y;dj1Lpj0<#84$}$D6eFt)+aLKfq9p3y)OiAc@dwl{*{my_5>uOG5ve+ zcW?6=Iagp9{Wg=we7F%&k`Ae#;d#B(uU%#gs~RMKTjItJT?@tkbW$@8x|;BI=Q2hd z|1L#BIbXpOqJfFbqQYn-LmCN9YFYXB zKQ4C#O@o-2zEn#DT39vHlxFGH;?WOh3(qBLj91r%QR{X#R zQj_N@5ZRkOaa6q_P692CK3I){cY${n{N{4QET)i~f z;uQIr(SL6$_e%kvFH?b|(X$!lS$o& z(ksYkG>th>fh{>8&RDTWa1ZnNxoQ>QWd=Ml>KBSRWteVH~`t&WHPbYXc z*CuYQUHtY;*(#N7kfE41V1L{%e1hefbGUik|LJX*P+jMVdTrLL98`F2D8MR;Q~Pe| zp8S}oI@(M5HCt3%6dW z*;NB883mzRibK+qj3Zrk=h1A8JFMq4Q(DDTQA_^$)%SUT+TPRvy!iw@iwJ(@VrRjC zW6c#FRb^>|rhj6f_(ZETnG;x^4B48LY1@Og@BJ$YSua7eYZ55yo$;0C_LF8~AuPq= zD2oOf>s#WT&exlRbl3L zaZYuteGd)7YbM@;c-4{SK~!?yR%^+i?xpX44WLP%Q@d|Z-YPBlAx?eLBUconbk9l1 z(29%l=^8U{^B?0kYA54vPV&~uyQ<~O_KqsGgubWwJHJ!5=9u2=y>I)FkWSfYKT=$L zW%hxw_EW;D5)~S0Wf3m1{5IBhZ)%hc)fZBp$~;^) zqumZ?+GYG8FGVG^_End#B`h+GK-Z2pglOFS9GrZQIu1gFuh57H6nk{@(lIVAm4JGu;w` z=fMVR#dhNSzzv}{S28Y^>22R!!8dhRU?Vx3-W&@>mWf|a+xl!-u^AOzZZbQIeoEyR z!BNe6bI3NUL&aB7egV70|91d&KBB{H9<-+%y0>-#xPa2+u>byp2tMHC`^f@`@Rry! zxBMrEo1gbx2=9S(^9VnIn-I&j zzRke}D7`d0J8RJ8_>T98Ac{BZJ3f z4%J0(L~Ep6q$hy?L!Lx`=~M2HlhmA~UM_6uL6CcLPJ45*P&{+BZ5F%wEuM}?y^kGRu6v( zR&Di7-dOf9OzOR^jIs}Kp9d_$!4uS|XhQThn)Pk`skp2cUYR6Ob7w*XV=I3jLMu4a ze4&{8np}T6E9s^vJO1(?)Bkw^g0cYY%4HnuR^5%+YC{^2@Xs+F@T3*reWNZUc6yYm z&_{>?cbs7xiWen1L+oy}pAb~z7PgR3w;@F}&ZPz?{@H|D^}!po;%}uF|9l1SJSoz8 zN}(~e^P}}#YZYEa#;(kT{&hyAn|JkE?!F}%$4Ou0nD`(fv@{6@?_KtwFuga}b+wPO zy$1V7e$&LIn2MQsZ^w)*gURfq=0wu=x4F<~1S7?*0D;|EFZWhw*)&r|H^DI9 z)|+g>HI9m)(*3}VtJGoWxlJ2ryzev9tSet`x6904Kw2lyN}L5(GKsJPE7TP4(J$xv za;@7`wuw`w*+jq8oIA$y4|=~qH^=ofX4;;wy%*uN7V8v2b+4tVq+kh5I!waC_Y`kX zvDqu+-Yfql8C#Ry)#V>Eo&_5iDXyB1(#$o_T1PRX?0a)sqQ$T0N1T1D=9304BV}Hk zZ8pCdPw9GBg$huKQQ~nM+tjK`Zz1h>N>Xl~Ttlc8F%N(HtP3ZOoTzW8SUu^JU(<1m z1A1|MpFwF!q~e%4gJ*l84(Sri?2%m?WJSMf9lbPCH)r9G|2^;0Y&oF zlx(JEjlV{MZ61jAp$b0FnL(G~94@6+ElyIkd7EUYW0KFGv|8Ah%6Kl4YLhorLNZjzqdL7$F@P2{=S5JaG^kdT|M5g7QK^U^yF(fiqm(RL}dc z-u|vOH;$>WL904~YIjHRp1+gZj{bLya<&tt+C8ZD9uj~6Ut!kZcZmm9F8nswhy{>| z4mFBjoGEIFCW6ZFKz?N8Dny~yzFmpIT5A#g!gGm>oJdxX^E-aP=HD`x3{pOWkv`k| z#ZpJiiN7V7QDsKyQQu^+YlSB!HJex>1BWj7nqI8DQc7uU=K&2!A(~>-M6*}n%j9LdJkH z9(mQcly|GzlI7xQUZ5^x4b!GpwbbK9~u# z1G9E2dEc9G8W++JrwIm8FtUY$4r*cwDaxSul0L;s_^D&wP8`; zda1?=xpcm1TaU!6toz(HBkZ74ah~h|-SU<)pM^)V-3ea)7|TWdY)=29P*@(+F; z37AZMYJXoDG3(a47w8ca7*sFaDdl9)Wl$mD9(Z=K6op*un%D+wl*JG0oe9+2f6>`^ zQyOXi(hlhqZ&JH}yM}A&F+TNvrY`BHAmlDJvQcNG zXtuT%y=;<`Mr>k~3T~?&Y?4M;8sW0Gfbs6*0Qzqy)!jeQim#tVpty*$<&nP275FM@ zL8o!El;U$=MfCoep7KW@QWkCCH~epZ={?JbGy+nkbUkte9PfdhEz>!;4h?w=6UXIX zt`KtG2RHGU4kfgI%GSJy`r+6i42FCPKIH^LamgJ6A`8p%0 zMF(!DBv2XB;H+Ki;rf?Ytb46u+Epq*=fESPfbfH;m>1JBnHQcCKuPyMAx|F3zT_z0 zLj!|Gl{k2%TeTy45E?aMkU5ZyE%oi|I}5TNVM*wbwp~v@aeUop91Pe#)G*k& zj~R%<_U>o4A7_@VHfOydcPY2+jtzICjBB5uns-E6fF+x*$-t{r9`7s@SRD`?*Gd>7 z?cmot0>hm^+bSGyNqIC>b??eA4qYdam1h|h{=JOou~OClKy7(&xvVH5ZLEKVNGnXl z8XuMyBeH1XsS2QRJ?igWCCH~ID4VdZ!dEp zX!n0hQpkORk!!&Cuf0!WT_{66-~t=TzJt2=0u#TVw<>^ajT^%C?1};!DN6|C*yO4K zoZC-NJyJ1uFF^AOhwpmiLx^C|-39#YP_s^rH3Zp*Uk+OBnFmZR5vqs&o7ai_Vm3Q#Sdft_g5Cxk`voZ{mnQ(r;gJ#If zu5uQc**e(#wpY*o(z=Rt;zj{kDdo&kn!XgU3U_hW6{IyuiLb{CvQaLtq57vTZWCQ9 z`&AvmOIFCCx3+U0I+ibEDq)KA^R#jdfsMS;hukb{b^Kx&0zC$*Ocn3oF&^$C&z-Wt zeX$o-0sdx+yD`bduI}?xVAa%QJ!CUz|JI86Z)<$={(K%RcR4F^-G2+xB zOioH}TY@V7Q2C-{_xr}``8|sYFr_K+@s`Cwo=d&|nwp?$P3ot=YiEp34KgOPu%U8d z#d*$p3sw13u=(ThKDBx4Qqy8XwQ79l*4|}Sgx|OP%D@3itozm1J96X8Q6bRd3>&*I zv)c;4i?+&^Kip9@R%*&odNOfhK<4KUoAg)=aaC1X*n%RhQ?_8(-fpfTeG;Lo?a_Kj z>&C{{Ti)xkZT8q;JpgTby>XlWqgJSJMe0bRV3R^hE@YY%M+XypKY^Rq*U0>Xur}@& zBOz)bmrkqzE$Qv=?s3%JdRfy2lDNyc_t2n^fC}}_WzZ9Ww9j9Y`6J~G?ocm103)F& z(-6oj*-?k%p*`KZW{=rcQf%7+FBKYT`%eF2vB%9IjD4h-v|jNQoqGv^|)9VybJ+RO zBB$n2xTc@j&bG5_;H+aWC2W33^Rxf_14_Pdr2D}KX=lSgP}x5kmV>mDJboO)kFJ4N z13cFm)|0q3xA@;*)G#Fz-s*kxBD4vVJi`2ASoGuhHai#6D*(%Qf3SwDTCbNG$AT>p z#D~oA3*ErUCcJ=Ss}KUT?4mbr;|nheH8wLjn*fIP4Rb=%(cFrLFV(I`Pmit1`Wd_C zE_;dES(oc+*B%)6)(1Y9FKr|e1Gf3~oV!P}i(eel?c0_q+DpKSpDuV~t*piIAcn+psJ} zthLmO?6eGYVjTKju($xsB{V!bgsUioe-9siiuN@ zw6STNFK#~`I4NEz=fzKT2R5FIwto@JtA_1hWQ z-&X%$i88g!ve90H?GO0|`DF7y+ac6=D8zc@$@Z8{#rL^#zOSF8%lV4Ht}@nAGsSl- z?fDp)tLhnX2i1>{-VAoamCvl|BT`7d?Uf=MRUJcKn%0o7{NL7U4A?J90xVPhm;`?_ z;JY*!d0PAS)&SC}zq(t95VjJH@1=KbRbFe428R&J=R@qq2EUTLj*~hUPM!I!&9c3I zJhJ(*FyHpa)SMvDP4)-!^&q~1B~eJyoqqj|HksF#{FM25Xl8qj>w_l=&t&vsJiof< z;;p|#c1!lZIWaJ=hJ<-7=d&*IRWE^m zKAWcn`u#-!1u3O8Y+tNEkB|Ese_zg_drfRcW^(#SlhoR6nx8f0rtZ&nhf_#~h8{!p zBxM1B(OrT_bnST3X&A^%OT`p@f}gXhW6-Y}yZ&BN!GTzl+|*2%!Hp`-S+Dv%nvw_e zXxtrCA0-#nsX$fs%9@9iaiWxJ3unI1A7PR?MteH6IjBT(wXYCLEN&?KUi5lj7}!)* z`g&juzO(ud{L-Zc>zu}&OAx5yU#-iBTU07S>Dm#6lotmCs& z#w~8=yQXUAjAW``q|x1LR+R>8#oPV?UgZU13~j_t8Df8o_wd-7fFV8A+>T_~ev6u` zT1(=m%yK+dlkeJ%M;7I-GSyj`-DpZ|>&FeF*g}e!{C#aWSNJqmS~oLE@fSz&%E)ZS z3X>4jRErdOJon`~VqfyvwL%z*+RLu5lZ(zgU(nf&<#xsfT)Ds?I3h3+M2o((pRUxS zyCTMV+@SW8O6LXs96?UaOBeGiD#gY%I@kY34=W@rnh7@1BXj=@r-OkcyiBI^Hjv%ZB=% ze-hcM8kg@R6{cqBB9qECyJXQ}n&x%33%PL0#&>(YPN7a^to;tB<}50OVi5}Kp3TRm(m0bGws#YITbGczwTKi)?K_xOHEV(_TJ-u0W$LOHSRLhwR z-)c)6ts)d2tT_)NiEOk{A zCCZ@^%pV*clNSkmG`kVUurj@xJV8&*)2$)t!G`^-b;)nY6|r87j7DE^OE+mXvD>%P z*nca!uOj5CA*m^3zi!iLTzGpC==1EY3@Yd7Nmoij7r& zys3)5^NB=(8^J8JH*AF|PZa&*DQW~41@ccn(BKClvk6~Wk#^1V3gb}sF zd)VB>;YQ%GkSn^;rMs(ogfxq*-2|Qjg?nh3_6{h~PY)rRcd&WU_he3NRcE>s0?9j( zlY_WIKK`WPW`EC!rovTKxbMFQ!6*dRul#x;iysYjJyS=WZ_5Vrqbtz(#(ouP3XY+~ z;UFd_8x!U-zRoWd>3R@Cy-qQr?X;w_5Ia>~+20!G#dtP?%bKtuSSyv5L$1FYThjFf z^Kp-%!3amHsHSsvF8SV)9M9lVPOs|N>A0KD3OKBy9HmT$H7pY8%-@t)6D?r!>cl$L zHy__vnzMGUjn>m3hdeZXV?=n?>iH!+r)ti~0|RYSF*OD|`pg+&@`W@Zes{y|>hNw4IuS+2u$2?c!lEwq2yV(~qLM)rMp(<1rklWt~{&8Zpb%X(h z@gIlL!P#+`*U-Y_>0sBp@sehBJ<3#mr5uo5ikT4KB%j`vd1@DtN0zea)1n5gSu zeq@m7)7Ww7-r(3{nh(@8|4{!{yH@+FN4c2X+f0103BIgrslJi9U^zJn&vg_G2qwfEq6$#=5(LU+pw&$XSIn&*IXq*yOy~&x&wxa26vytO0VfUp9Rh8yQ9gvMiwC%!9oW{qMDOxrJT7!!5 zJ`dk=hlL#wSNa;2m7JtO8^zt^E@3$H>)b9u8MO>I2DkKo?=d5S>5%_Tex(4=6hFc*Y9u}M#xFN56-Bj=rsIB&>yW4 zDZYM*vs>n>u8c?_**})wHcs0FzKYYnMi4|;`nI5{f0mrJlE}HQ1GRsgDx(l>(K#;d zsUu32Yjpt(n?7ci6pCQW5_x;({h`ThP;lR*cRGre{2=~#J`$2{wi`5Nxt#8AWI;~Y z_;)BoSjDF3O@5u-k}vZd+>_*=7CtLG*r#DJ!q;oKn6CzX4KM=GYp~XFMGwtf{NQHlLgByNgx${(t2&b-l9Lp?&BN6@ zh1NE-Zc6mPRe!p{n>v!=t9$^Lnu0#VuPbgJ*x&MvR$1=6k)Ca-OMQxdQ7j)V7OV0= zZzln{OwEw!HuXSA;A7r{^}ZM-`GK*WIfNsSMT?>ToETMungu;hls$`IRm>-O$Q}dd zQ7AHwR@09PmlH(n{ovcSmt7JRy-EJxWctDNq|TMsKeG*8O*PO)F*US~J)G+oMa+u3 zue&(#Vs2qfA7*vbGKVKezZp?K2ChFz$^7}y3y}ttyHl0LE{!m73(KB}9KqFjpTOT1 zXT{yGd@w*!b6L}owboiHWDSfGbwJ<1!G1O{a6A;<`BxG$$uo6%o|q@dHlNu9f5%po zu7S8%U(JDKCZ8B4Pia}P7!o}u&@_7Ks3`$UH;xmIr+!*XA_24DxKu6*MY;_{x0d7_ zkw=)n*5?2W52f^{@pYVsQknCGAwr;ONgbQ=5bMh98@%IS%{+QS73@c-tBDmFz`bDB z>Q-Wym2lDd27(E1Pb1$1|MpAm@a66F8TebpAFZ_Q`fv0g2R#4ORJo%0=GMp)UBeSF ze71p91FobL7$23z{6fY7T1r);T%j$eCG2&=`@530N!Gs#@2~~pY-8S-uBa63Or0t^ zOz7?`6&kkG@^J&{OSbqUiugNJudtqN-xN|#y)hP0OANm+TpRn5cCq^tx znZ}8`;@<3bd2iFpAV!`YO1O@Nf|pJAw|fhh?~eO^8a|_}0(>7-^a{+Z&6Ib)R~E1g z%p!6v1zG6MI_H&78Qsk3DXy1&F`#_Zchp>9W?7Ty;K)kZ_8CLfA7fI5VNqkho{QTD9vdHx!sU%J1Dp}NC>fihw~ zTFl^mLh!{IDJSbp<=m`1g)SFG3;O);NeROr2=&Lb2YQ>MG!LwSY8vIM;+JFbbv}Ln zP$rh_yvqU0?@g@u<1&5{6(gv27;zCv?q(0K0RN_K(zcC$OUfRN^C3u85)1tZERuE_s_ewjX3NCASlVP-Dr zKLvbRC-~&LyZ+m*+T^t2#WpXp9juE@c)6rx=|HsFP)d0wT3_~Qkz=-+JrmiTAnlTo zjNskGYGuAaqviQV0Xf;gwzDJ3=y(%`@I3!`eR3J2sIV{eMz?_*qr^uiuN75<@2(7k!%SG4%}09Kf~37n z9giQ7{1lMrURZK$^spB!{o6YbrXo`$IR z2%r2(0{r$3$gF=idz2L;(fncE5z!sL;~rLz!udxooD1uzf8HLRc|l{W8_3*nHY@+a zS|OU`&xbo>#C@|%o$Yx#Uy}sP=bH7qOfG;6ve{BWu>-OtXnJo=V#IaaHMO|cN>3Qq z$+LAUtjl274(y zU_G1MvJ!J5zNOfjK2gM>uU8JED!9ox}b6#)IZnWxt+#{8s#=tO_?l zo14dNe-EDs<_q4`kyeRd^1q`ip7B8ZjN8I&;d*zHKmpoklZRuyjS%Q!zcEI?KfgOq z$XH$XwNOf5HkobJ{@ne%KKPQI?+H}D=YT*W1r`Sox^zPYdpAb?0=NUnvs;eGtG>tQ z$)tO_WYWGSJ0yjor0>HEz?bs8Y8cDW%?$FG9%NA4@Jd z2qXBaKdm^LzL3Ji>X2dXqh|wkH)?B`m13`etrP4Cd6VqGc*zMN?$3B|pIodi5Z`l+ z+8o&ko=Q|t{a-{nX_2BZkr<&LiTjcIp< z18(Ks_3P`c)νel<>Cg4cpQ9-x=Sh`bhW1^L9a6`v73$DE1pd@Yt&iYktEWq>QN zXWEu>BPfO{W}*JmmeT+nj>OJqRRVMwW#IXt15|MhKMp+K4}R zBVDD;!Wj^8tueLJh4=yra9oFlg`hi@LL4^Fw%i`KY_gtpcrrQKSEB8Pdc!rW#c5Fq z=WkAnV^{BiS@)$dw-ekPUki({H+JV;Tdf4w5@p2UxjN$9L>OdYObOBQtfcwV<$|x=P7UAL^pWNCgLH2%}e1vUXPs!kgr3w z3hVCRNe4C0X{Yi9$1KJ>@QOK3t7hl?Vh$k(Ho1)W-e_m+_5Q6wmCM%eH=R3^Lg?g> z#Pe!ooQiidXyJLqr#wP*qiBABf`ARf3(FT-0*{%rbZqiti9R$lJ-!!~++D@TOAX%b z=~_a@^yQPp=M5gJ&FdAs8Ie(#!7ge^zo{fME^p%oK8h9wOi#J zV!oUIsxxhJyth@NzXQMS+0laaugi1t@o_+Lc8K||Yo9`x^#pU-O31Nc}^Csx?rqsB^xs zV+GKgueUyLMSEf*uC_XLKT$3_YJ5duFyv$(EeQSog07to=wi3GxI0M>r)b8D$@0^j zyu4GhPrcgz1y6OA+mHXKjx(IKLm69~+0OPK^D0KPEnj?*tr+`~V;Jn()HbewkRS8u zxI%O94ewv57dJvJT8O#}W_+#Q)ryxxHRJH#J4DaB<6xVbozQ-zNmtO08vv4h?tcTm zN(p8Q1gz$l*@ zD#v5BNFn;*H!m4VETpgMQF&cyK;>Z+Hb?KC?PX=_@hWKC8Pgi7O?}h5ukxP;1{OOU{s>&zEsmkn(U%kdW@iWe)W4@=QmZ*_;ajYv+SY`OLh zNh?zu0|~x8B0`e=)x=N$s&xxUnpm5u9=~w6w*G_G6Yk(8n0I^I{05NF{6Xvf8^k$5 zj+j&zV#tyd?vYI*wdt6^A+J6!HBb@*>%5~N%5+Qza1^MYa8WqBuB}InIVX*oN7ogMd|PKoXmY=YYyP5J3a|_~*Ki61 z4}=41qV3TG3~mDHz49|7O7aoqwbBY}KiD3nSX$BK%}zZ_BvX|guu;}Bt@`}2cKl4n z0guNPFFhDs>ekDP=h7mCY|$xz9kKY%)PdK$Z`l`0mRgeXVx`lV7;$EiM`uWr>6UTa zAPtQYY9*?oZKYbTI5SLXZyZ4Tzbg2yxg~T|Xw4Sv&-qtJ)ub?E?XJer9W$32#wAJN zN_>a>?C|%F?ZFBoYrn3-ME?Dhs#O+hzm{2r{(Wmw_`I}cug`O$9FzQEnq4C^igum{ zqmX0D6gXa=9pSSy>+g(3;_C5E0f>#`5Ypuyxp?Rn=52v5Ki+JbMvZkVU?w<()WWZ5Nxl*!wxbS0OF5eFtaT8(>?dOaT18QK#tdhgy0$K!?A7e z@6dFu#{q=Xm`7M7)kqkT?y^?JzUb5b{)s;>q&~eIbfyEvP53*Hpv*6OvikU_`oHp=oJEZ(G6{^1YMAtE?=A8* zLH&i(ef_21)(sKP7wJ3+uUCqyzeVPTn^GqZC{H%dzT~5_oH=|p>$fbn*aB&p@tHeN z-mCM+2eJ?P4&P=jvG=k5YyLZw2UpmNAV(~r7_2Rl#{)l#AHX3^Gd^`&&RxBptN5zd zJe{e5I5Q!xWPg>bu}P$zPG-xXEs7ykQZvxy7ySq7t&h4{;yHYJ90`oHU@r^@T}piF z3G1EiJTCassGL%}`1@~AICB;{yTu(0@EiO5Eab?ztXet#)3xv};y9FM~(4+d)N@8Vs|G+0iD@fiO>VMOmbMmi0 zYzJ^=+5>E6hZhlGJ^0bG@(KP&Dro-IxD@p~$Z-U^nNO9}2*0N`$R$<2`@p&qoiP#IXkZd`aw# zX=Pc9^cWFxaUe~9yo>JAuyDJb7Ip7@2doOMk(K!%iOoAp!DY86>eN_-f^{oSzU z@)EZ`%^x>8H_Mk?9M@U*CJKp1z#Qp>C_yoS_>rm}9{G7dpn5i7B5u#7MC6Lky|XO- zmE{A)LuAu#lyPnIu}1I6e%9s#qTahO%g1DemXJUF+vAe3_ezE*JWU7Og<-v0}+F=Y#E# zg}%rRPD=O(jq@r*AGo^e+0T02tq=)rhKD-9P;BqKLuh~Y%JHts8#)tS*HXTAsq{3z{EzF>aI*ySzrPVL zrM11FAF-I*(LHR3t$nn>Ex@>s-T`CrNcy)}K9e}!SNNIAwEO`wdwMapC@i@{@?#Q9 zm&A{rWo))S2{|z4Z)MCZsY?$M_SAcA)EC9FnNb_Mx;mgv)R9Hw9oTM z-<_|<SqogHe{aYd4%wP^+#ue8G2!D(gs17UX99mN1yye-4)vX$k)Q)xz6E z6mi(mKen@($EnVeyX8~ZqUp_4sjHv87q=P@`04p8TiLGXEI1mFZOM?)@}Q_4s?!fy zEd0FwZ_#=5m}Gu1AHUygt?qE8rl<`c7e2Agut>4L@PlQZ1gBELChVZ>2tfK=Bd?DzH@=$(0ad+ze)LBo^O>N|f%l4qaPCcO?x(@bJtBzNi?|2T*EEuOpHX=;R-5y!3KG0o^V3n;tt>=?bd;CeY%A`N{gd-l&j z*5XLe(r6b!OY+o3Hd9WwKSyVnMtQ$o!bx`{JRK zd*aHT=BcOX(vpMPi?2HxU5Ws#%hZM*U~Z&xOB2_T9!D0Zug#v7ooHE->;uYAN*Ai+ z%YBhYH{uVpO8RH~|0pMgF9m_IQy%Zm9tA&nESvW|uD-RCYvr5zs-T5-e|<;PA7|L> zi|}eb)n)sw9;MLXWX*0iYQeSMkHR^KG>BFw}VV7y) z(^B*x`r{PHuXshD^dLS?ZZE=j?}J)_f+@w-9N648M+}${ELPek&m(in_B*cpJo#Pt z6Db}vA0{^iNx4hyC%UItN@Lh|t~`UNaCV!b z4qR{P_fktO0h@2B_uev(!1iB+{(8=Qb1&%dZvXkag&oEPHxn8Q^6A3q;KK8kvn|*5 zqv@Qp=~-ddHG|Qcj)G^xxaZ=R^J%jvCcoh5pZ#rqjbaMdOye@pV%|D)+FyqbRh|2@LdtlyZ7VX%R`TZt+W%V1H<}~nc}VI%rp5I<>m?`(ztgu18SVJ#LEbkk zEV*4xZf@eoPwzeU-Yxeajs?p0RDdke_br<3VwX zbXu<3o%}$}+sqkA=1^Dbuc_{mpEw1T^o5Z5j6ngG3SnAR$H62&O8lq0l(=mm@rsW{ zDkJ#-Fyf!8a=Qr>-?DfQGnbO7rK|k>N~)m2xi=OY+Y0kf&u8O0cfp~de~AwJBtPx% z51?t4(%(D_ES&57Nu)Y-`d@EqUKwWtAfO4YDDsf{@Cn(Qo^a$XEBWg3$_x83dwJp5 z-v%)T%fCAJ{CflwG?E)v_V!mtE>CDVv{D6D^Jnu*3J$U_dJ`jAd;mac-gN5KmHBRP z9wTLA`0+Q0D2B%4Ze+8n9Q${LK)RDDc$!1b=8d(1so6j1$4Y+b>GL3~WS3w{k)-B>GL z(xBYx=7Pzqf-fI+niZDUJyW~%1zfJ%)OO{wTB;7}$)n#CdgO!hjRyfQeDC(IfA#J8 z$w?K;9z&$@?%8rz9)a(1xY^Hl@^paY#FidHax`d^AJ(j&N+syY5x#{hP);n92{4Nc z9kqF(wd|X-+;IAWB=vE_SB!(Bio%jCv>(}UlHPu!`GjL6W@Vp(3!}Ssma|s=j#e~J z=B)h70@sd2if$mm^~}C^IDIO63#dpQvzmFw-@&(G7cAJ!+#Y28d!O*g*AOwJ!!nM) zb(59Zs3*$}*IRd<4s%)hMSTXly7f~KT>c)ou?52LU%k~&E(nEW?sPnw@cCsb{)GN0 z=O}e)hF&kgHw*Ni%!SKIHw@I>fAd2b!Gs!>!FNFzy(Varlq;&TkRlmb4ocy7eg=zh z1%kbE#y!!pyZ6xJn8%j-C7yq$ zTNbwlKV7AwI@^GUaf7&D2xdjDO53X4<)!49^4`-Y)B8T$G7ev*XZb4+mM6NUEcI*CbdW72v*k!Ty?X33gyTyrD(T)FgQ>!FFDFv)a`Xso4*m*J)&sW(glI(dxd3**h z(^^S*tMA6><1$uGx8M57&~(-_diH2B#&ixq+vUDTL!S3gUzfB^E=rOj<~e6eF7@Uv_Z-xzJn#o&q606VPeu>EtK|*GVG&2c-s~m zo@oxh#O)=s&|^-k!tj6gp9i`xM#tD*1nt}l25tfo6rk4Y@eNAqABx5c8_0)@Wg5~*Yn^@p z=b@zLsU7w@o(R>bcKfOptmmZ($pg{66E71%FEGWL4(-q*WMkfJV|6aVfIQE&oa1r9 zv#P&uTRO1(Nf-Nyhu@`;C`Wn8H*+kRN+rJFo=(aNZ*Ae6j}ZrP?#m`e*g! z$b9`y$lk;Pt8=wUf<3emf^T-5O19h&C>#y%Rs}D2oe) zG9u_z=}H(Fx`V;yPnAcsrdc^Rqi=zS0rnGV3R31M89@sYpUqFZU-tC69*q>4X(FrK=V=*y*vf#>sE}B!XWA9fA)t-^QKy7fS9M_UfdDZ-56Mt1 zI$ML7@qoK1nF*r)E_L`%fTaZsRRoP4xnpF%UKB(3=ku~KxEl53*vDCI1;|crurQUn z5OC}le$q`*KhlBzfP}|`z~sy@=tDOxEOTOlkG@#6w#pU*8fQhhl}cmxN=cA^1@ovg zY&{|nuxhCv`k`rCtal;>P?ite(f2)sd`YzV8R;SmK^MRL!7Y1(BxZE!sX{~ddYLJi z*M6koUs{MIs|XsffV-7oT-3`nodRBqx~~9@Ct+xMR=Y6OY&lvoBDoSStiicMpti+G zt`AX|SN@-U(nEk*lnV7j=B)`S=r~!KI^a9jpc4UqF-9f8X8aM84W{yNgL7PJx*Z?o zLf|_Z?GL^H!^_>v_bw75L-n}aA1BBZ$Biqap9a|53r!bBic1G4i9qg=0XDMyYV?UN zC2zNkA(bPG{*LxOA-t7LDOuXBW3m@xhCpNj6?BlkEYY8l^Eo!_iXK~CDFgq{98#Nm zR+qX$03t58=U{U=*En?u{JiqyauUG^Z^+wVyhB&;du5?|&#oQokK)xb7N@sLBYPx1{)Rpx`4tPcReY(tW4r}X`U z0=AJzOb~#q{TEk}(>frrS2MrixAfG#<$6lTRTqLmv7+AU7zVm(Rc5bNuC3SmDEpFf z`AIX4?fLHb8@vCFoJB&p<*`aRI~?oU>&ZD87E%zbDH( zXL?f$RB(X8hPm)uLM9@wfx1bNDQdv&pyF`8!=P2G>C}?h!EvR?cBYx}5Ra71(5-JJ zzVUy4%3OsQ!b<#o*hSL}+umA|P{`vNW5H0Q{#r*Eif&u-E#77)uS93MxbK%vB;p1k zDjQ-9G|`eC$pN1shCz@1xi+|YN{5lWpE5|MnE`NJV_8tw&Y=F#?@KmjvPWH)--aaV zXZE+9b4o%x*z8L~>vv4>aj!WK*aX3)iidAPe(mm1SoNkA3DoyKYJE0-Y-Mi#W*^XzEoy)eC zI)R>@MnAHmvgEe1uXiHuc(}#ndq;grVd{P6??p{_#`1-T?NEH&TUZ2ctMcP(UNdlg z@I8J2*~NZQvM(IpcJq#y{NeMS92$l>IB|{oD(f!c%JdwN)gbi=*`nPd9J0>G-6Tw$ zR9st6qaI7Q9K~tH&U*O6o;{GO=~%_ao-glE%)lryeDZN(A<=^wtzloQi`s3yNujt7 z)s8sgZ#Uok?yvj`CkNGWX-jCDm8e&?y<+E~d`9GvY`Z*Nx|*xdT4?p%J{KBh6Ikvz zP^ubITA$eVhy<{3@X>}Vh$y?Xf+*#fT}AQY@7oEwXmZ+R<^`hf$%y=_C?}HhnwxNQ zjbZC+73GPz@JXxFH-m@VN_=E;dKV*p#Mt!9QIX5v)io#w6L*^G_sWgxp1*SDzk&KD2L5G{K*h6nH#~B$Whp(fz8L4Me*gGLm14mkcHcYg4TNT6wo_wk=7q#z>c;}BPP<1a z%~w!3mbxNucYrGUSVjpob68$%pS|tf%5EN@R=AC-mzjxrOrPPLfekGqQ26?DI1)FL z`3@DT2my#pMS$fREvKZs!g>*uWxnT~9mV6z+)x!l`>ki)AvgYU*Q3v0BW`Tw(d4Zq zbT)hp0dV-m;`OA*Nfn27pSzs`~w z;iS`k&|HySIB@i7novcsa%Sa5+sw=(BJxQ#I>S^!NGMlZ*fX-q2U$4{c7?mB zIIo~Xwha%NaD2KcBNkK(!&8_CQbvRmHUh>%Ffd0IQ>-5;Tjx2I1y zf&>b}{Vw&Sy@(+qA~AfT!Z!pb;wPf z2nnl*KY#+1!%h7Y7l8YmY>&cFZQ0uYbpdi~;+?su%-n~5&=|6t=1zXV01w$5e&w2v zk6e6@40K`rsGR#PgQF1W$lfXSnA33*vnkuDsF1S+JY<=OI*;8aW>N33qNwE~-Geuc zp!Et1#-EnINTcS$XorM3z5t#^i5yoB$LeJWBnnR+BJfP;JFs<4R-HGc^Ri6 z3?(7|sD;x)YniBB0#e)jxt(HWH;OnyGbYCc*?Go@4i;OnRV(X~*_pEWl7j?dIcxOu zobc~UTR9i`a`l6^w@?gjWaC&_x;cj8I5f2PMTBeeM7+{^Sno6Uln-&*PC1RqIh?VT zY8?klB?b+yfA8oId0#Fx`3604&2V^sQ=g-hGBF*bS53RC6NN}@e&UuFj-kNjI#|i$ zK&ITNJBkwju*ScpnTqj?2f8#LePJOL`3T`{SeHC9;-a^?a)hU0vt@D;gD<&ewgp2Pj zAh!#p)bl}NjOgCafgg@~v!~q>#9~7$=BGd2=0JFCbyJOjyeFr<~XxCwc|-Z^`*`vYD&10#5n#LJ1e z>rrz!oJAvPT}f&#(7!Nr=6gmLBU$QMU|^A|GU;a{>=-kVS`FYuXww90@eJ|*MPNd6 z;zgOw)}qV#P$|e^|5e;CZ=KK+vW;%{m*@99h!c2yY;>ex(RVtjRK9p8<08XCl>uCz zApkIM&@kB|CJr@93i*~owaiGN@_0ZBOalzEl!#g;8la4_H{j^MpKoyd87SKJn@Cq} zW$f*VPWzb5WxgRg3y&tw)YMx4HuDn@@IUa@HvjA)nt*_8qWD&#UuF})rt+x6FmF=X zm&&s5GuqK&P=__TQ_trCtvW{%)<%o`;~PL>e@;<7VH3$MRJy_7(WKs30KyIEX1Ty; zyQJYGr;8C?y-9p}CVd~>Hfm3+QAt<4uS*1#&zUr`<$TL)Q zI<@{TaBdb?Lf8A05OMzlhJfmUt#4EqPY*w;Pq!_tIe(pPu3Gw+SB4)83i^EQw~2Sm zc%V%C*elxe=_zQ4&9%Ne+kPzP2}<*P-E?N$QOjo4Xu_}X(@-w;668sPU9s=LtIvHN zp;-P@N8wgW|Yvu`WtJ>r%S`*1TlLIgWBw z#$6g@&TUe}mbC3YUowj&QdB)y4xg%M@t=>AK5a0|?CtkPw|E7aRbEXWgj$^3Cexy? zw{|{E*(kp8F-jhW4eua~`cQ5?$}-Cf8zzVnTrTL1eAR{2c(v=jp~t5Z^#6QMNUKj+ zqojDWSQp*;aDpbbNi~}_yRA+g7xs%SoQQ^;CCg>oF!_D#y7%_l+ws7yRM=!B=Ft@( zESB!(jNim;3QG$e`wLA_tn!hBzVU0^oyB_>hY7>j+_eB=ny(AfS3lN$d^+k}DD{%! zOutZtLnzNLL-Wr#oFD!?ShqD)A%CAqq~qd(eJQ~- z9>Gc?&`XJ=&qz_A_e_^0dGUfa&aF~_Tlb7H_HIJwGUu{DLB`@aYvgZocdC1J>wdhL zSJq`^hC4SabYbWGOgfyBgE1n+?qoTvb8*iLImA+`y{-6w@*b0Hu=-_N36*DWGW18? zJ6HOXcePvQg_FT`sC=qK?)q^!KX#c_3n4E_%IZU!gwu*B(dmy!Y1$pSafefL#gs|$ zFiUFN3RzlLo-V?LMPQci#fBlmV&ndzMhD4GNS$qU`G*g#oJwwpGKg8^i$lkS+GI@P#Z1^)}^oitR)!s+%XxlbyKuIPl(07P9==@I>YFyVRksd!k~TRd#_v0Fme6r-~ z9r9)r07f^@IH;c)+t<0wMJhjNs3gOxL(GIynblx}XYTPP{5!6l^+G=te*ClCwmoMz zCFIIVxCX*7vv%7(_?2}>-@bUf8uFS}5e>UgW)cPjK^CXN@8V-2R#nhNqA|*N>OJGM zx%Xb|CGEj($KT-l_g{igrp}>Hwa4Nv*O#Fx+drxf03;3@?$bFAmwLn14I+vDasSn= zJE$U3nF&e4_m+(TIxz1?0UR< zyL@G7Q`F!!lH4}-TcOm~kjy9GX{?YDD5&bRKF{iU`#WgD$xaI5MJTVj#H2b}PvO9oppGZ(DA5jp!-HemNa<+1d!92Vv@$6B_~urrxOC7f z#+=?nX~A?duu4Iko^{!iaV4T4>lywqz|S#W-!;xMt%JZ>@wzOXdgS2jxT1z?O?mv8 z2SAfC5k9cB;f?ekOru1`q+FKZuL>myJ*h z9yBhNc1gOaFa*{1q|Qe5*OJ{)IfRd1h<~qHm$2Ko`X6WGC1kacVVuR-LS{pr1EDc| z$HN&QChQumG$>SiU**wp#@z(rILk|i<7b+y*|w6raLY^IIWBx^@Ixn`x9C4zAfkXo z8eXP%)|+_P3p5L9e|q=#f?u&!!Ny%M@n69K-hsA>0?3PizrRO)*^`>?H`kDIw`rKX zWbU-U>YsJ%URe-A(rkF6h8^D!kwG-PByYn^ku_rFW5L&JxFdiE*d4T70!>QuTWxI# z1{z*60kjysXb;h>MvE<8+Jw1?yH+phMzKd_oa_FxuGsQUQFb6GVHD>g7nJH@mwy!^ z^CY16cpIl5ZSN8w!!vc7u`@=Sm?oE{%(4jIn<7*Mu=btO*y`7xh9%mDz*g_pR?{NfdkrCeiIwH{WzW=O!LcDo@E&9MaL3Q|CkL@$e4o0CNXBDwGcywY0Iq44aS+$t3etRPy zymPbR5A{JWwII4dyKi@AQ}BOnZ*dUfe{5&Gkc5mVflGaKbcod1eNnub+v9V%S214xm;*(inbRw;yBuW>8?VmhRa$b~F7&sFDF=#2G1bdv1b zQ0M)T4;?yjZnc4W3V71Kl?^amRsv?{V(|JrTMXU1AHOyUV5a z-xIt+Yy5*UoE$0kf2d*|l_fE%Wb{-DTTJ#8_ERMM(mHsOpqec^m8^MXV@9g;KAn;@ z{pe-b`AQ^oUwfTdsQBzX+UN%rfPGPbks2Tt@_4)|yFLBP^O1G-(4^RYLC(0L9>1KI z)bU^1r#xXNg9;Q)uIdi|6;|h-Q0LLTTDfZqe@iEMn3~)=PKM_5`N8)oK&ievgDx++ zumBlE6^_kX@<52!ax$=(pn_s(0FUOyJjOdZ9?r`)S&SjWZ6d{?pwf zU&%+V4g@i4u?yWE$LE1YvwZ{YP-K+xEu(z&utd!&F7u7t(LtSPp505@kUjk3ay)7h z!aQJ^MbjJCnH4iyawi03$2Qh*ZGB50F8i+!V?q=Vr>kOfiWv+H|T%}NH)!d5+K^wuFfcUTq*|*@C@t=Kl z44p$?nC$M8WhB40`7Qy{T8lAe`qf=)q;Mxu--kd_)d(ca{t*yR3!kkc<2G3#E+1d8 zd>&AjhkwfTY>>1|9j7F!9bhRhNiRal|2V4x9Yz#I zX1^VRuL_@?CDFZjKp{l+f~sACjW%e_!BlE7Z@~sm>sbBNZk;nRPzDAG1Z1{pBz8$6 zYtz2j4RNOR3y{plxoD&UB+BAbo>zMBNSxA*wA%9z*&nkDJ%Z)d_?ymsm3|idUf8)) zTm=DlE-(x5n7zxkej&${cR5+=2LDO3EU=-mH}>>6BV;c3e}jepE8V@?`d=Be*YUrS zw}Vg<;zQ3&KX?#aT*XsmQBJm>+8gTcnl zb}$G)cS8W6PbOb4Zst3Zw<-LNLZmn3ifiwTRGUP4jKD7C^Y~`OS8F~sF6lb3Q#+Eh z6+IqT*5ls?fCXO>F@HC~Lb1L+Phg%&c@?foqYP`zY3SestN5HY3g5m=mGd>%?AhD$ZK|(eR$z zzKI&CD@1Bc>sYkJLxMAsuKs+h%Blk8>TeJ)2F}88eI-=4pt=5J@K1^~vktk!ZuwB{ z26wG09do>*B4#V|zE-X3>;&xX861N<9c>{#JU74anqo%i8)JNw8)CO_Cb6npT8JRx zZ+0K!udbz)8iF|oeqwMvqYzxWQoq8q3HOU9??^)fv}RfNHq8e;XAuvA)R-2wDJZL` z>s{xs3tdaHT(b};zaY*h`Z3NVZ1*cqwr^L;83qiNzyH zxZY)^Uu*bTz9I=yHH`s_ag)CI(xn|LA}68%=Ol+lTwrsx===WzOfC#5R&=tMo+yvD z-{D985vTmlOp=BR^h=7kYbld8XhQ#8>_1Y~9tY*;qM-Ii@U$(t@}6xQLYI>Qpu+WA zMCG-X(TtA6o!<>)vUl^t>6UP+KuyGB^~9%Vjf1Berd=cu8cq2vBapn(?7!#tj8PJ{ zWm2{8ZIqYxnwS%!1pcOW_&wjITkLR@3@yt_3|*&WlLCw@iEz@r(=ecyr_@fDsc|kwgrv7Xo-jNZw){cX@o67__E3Hn#@H{LBXlIL7Ze z)EiS-GLmeae6wS+EDe%_f}9JQ%^N68eb;|PPKs0Ga$lEDGaQIU^!$6Z7pLp?fP@P| ztS@}SkDhwfC~iE3V@zd<=lBU??DMw?F69$E%Fw&JUg2Y+03!) z>vSavXwt;G9sh6PEgk2^u4RaI8Bd-|B_W{~}~IFNCJjp#fLT?dh1I zVnV096vn-_IxEk;GbWn@y(~euaq%?E7n}>Dj=|{x4(58atIyrumhFzU@*y>FZqT%* z!lm_d|BIhBHvfPpE@=(hwMq9TtO+7`rA2Htawl4O_q=RmvnnqOy&7%N(6@${u9>(1 zZ*mg_w7^Efdf7y9Ci80g zGOHGtTXBfK{m$=NnVEflFDs@KKq^)w{(dEj1Av9cWQ%VT zqy8Nx`PIBud5QkI6&>?F%m7gH^-J97?Vcw^Kw{JYy6LbB|M8OLp@c*K%lDn?T5OH+ z2Ed31w4h{dG%2QLdReaX(XyFX!BcV&O^Hm&TfpMD%6u7TU(SS;%~Wr#uMUY*$-??x zd5p%Qea=4~%Z?#@r?do%-GY5J!dGPal7u_xcf3Yke#ZZa*q3Mn{QCzgXDM<(L{Uu)f~Kix)T(zObc(N z_b=-gF_^Nw9PehY=l*4diq|`N1XVK-h=?1TtCObotJT5OPs@C1NVO?8Z-~uhsqMmKCa`)0tj3a7@iYlx6Qlr}q z!_sY+B$vQh*qv85U;Xf9RTv+STX$Buzuo??mzG(BX-NXkRrRHE_m%!Jq_%yWlF56k zwPMIWOSacu?fj)`7Sb@9UqO&5qkm+}u=0I*$N|#4`>_a_>&Y^%k+u=mDaf1k?j@Ch zDOXP~eaS>mV-ZR1HInoM`1g(1qE>OrryL^x&3|y)0-i^oHX`K~CElyok#Pqf*3ZI1 zZ^ITBi?`0cDV)sfsHu@uy1jloMB$Su&EhSE5FWUT*f7vvcx-gsqmFDA%0&cCaToNa zUQz|@u_0_{Us{n$O8zcew>~g>A&_tSP0BTiAG$l+6o$FT*(yI>x*FjXi94Ic+*qvE zTK{PV*YK|XVYX;B37Qrf^NLkW0WeB5dX^+d(bm?r6i+ITOAbV87xHtQ7y0L)rAh&h zBpS>35*-}XRTR}~lZW>z(Bg+K>8S077Y8^Rzi}vy*K&OwHy?4$Cq*R5CNXgUV?C@D6<~C~p(jc0kg|QZ>S|q8W3D;*$7A%^Y7P1)z<_1zP z){MJeSZDkjLe6;-vB zYq=}Ug ziwto$&+OH4SdLy0R=sUSeq+FB+Vl9oo0=RVBLsOKsj!K6E^Kbmu(5+V#<}eYWM=4; zGD6W*3p(n0F=v&%9!(S6QTJ^5PN%LKqI91_Z*r|#Xvo#QF;B2M-_epjV>gR$;#yh0 z*KkROhM-4%yIJMD9hK%5=nq?x(Qt1+u+N4)=#h%R@W`aM+P0JiFOmA-Jt)J+USa?Ou>CEHA?4l_a;t@lbRqTlPGTHlV= z-$lgo?>xWzmII3XPx|3@kL1fawWSsGQf6(vfI$F+=s9CbN@(9X!txuEJ|ONz?J>_R zeLd3>o)8ROKSl?}w=#_Sd9;2@{GNM#CQ9>Lc^Y>AGLeXXj8#0o)k6~_;8wJ%ho~|2SnvE{zR63DXt<}` zw5K>R;~7Q&x9pc!^WMmujTew2{NUSmuegLRE2NzEjid8%muEN`pjB=jjt0X=2cp;7 z`RrPhjRB~1IDsst8GWH>Bc~EB8)jcV(>3CLw)NYgza>sigSPhDzgh)f8*belQu6er zdie_m&*a@hN`^Q+rF4Hq8>fsfH16Q#L2^qjcw1qopSzT0AsESZEfj0>2Ipl7E zM~x{OKI~u5E$>cR-p8=acjZ^d)Dr18^_y-fvcg?8PJg9JVWVT6*$XS{!Yy}+K~$6b z{j5a`Qw21Sev@42FTwQcLdd{9GZ~#~T3ZI~MBrW`KrYeEf%4^$tA4Hd5h)bszpK3C znqNi)7Av@e_3ts%TK<*$v_pj{6i3R_y!KGyeTKA$wNCqf=3`>yX*TcSoYguewXejP z&_Q)GQUlE}Jqjv(Vj9h*_|!<2 zzLvvpZ!_iz8m_&8s_06tq7vVT^h(2t^?o9-S7u3l$~MfTNh|QUobNExUcmx)?Muwi7UcKHhRwU7f5^FZ9X-3h zAap-4c8Lg{7BA#fD)SW6WS&d?xi9G7r;D$x`(GNB5q>Vy#_gHznp6U%H1DI?$P7F6 zBwA~SACEuv{Ak%TZ{wHp*^1-uyBJ!tz(5GR@_FV}Oyss3~d8WD=3r|Dw z*iz+?%bm9!L8H66gsC4^YU=MC=G3=>VKK|~-IhEC58--B!ynouD~Nuyih?LEO=cl= zv4s1#ED!U&`eRYu{cU>{x!#ZAieIUj?rc(oPCRknq~Z>`BH=Ce1f)}|oMn`@)#v$x zz2|wT)*>9%z;p`(-CjxdD;C*MUUfocP&@Zd4gjo@Ow(Cc+fy*OWUhw#uW4!N?|UBo zFm;fv07UG1ZGa)d7MsYKSiw(jt~z-?KcA69NU61ne`gs2 z?xt&e6yxT4g_Sb{KdFc(2ppNmQfPK$Zaqe5>3mDWYIFn@CukX3UGu*X=%h%3n!xHy zsFTo$rWiJt_dGro>BSwABoRQmEWn!W0}~?DYn~UydR-C*=P737o-H380HyV7JA;?) zOSXhAyhj`*p^Y&k!YWW(0#%4^mXUQQ#INF(t-pkv!s(Sa-5u_8P@^j)^I`D^q zG9vZjqj5RNZ&Ie36MnkM^NWia0VStSLpPzN;cbZcy|>tzqW~vPLY)U=wJYT(jLLrv zO*oyYIq)|bF*&O-Fg{I9B7#a~Yu1I%{MZJ07f>t6MN{k&V?%dve-fAl{_e#cnW%7qvXgTH zeq8FU-Hr74;HPnhWt^1D6*bZ2{Hxr=OqR~191@^%;OQi&*4f+ncpJ5Jb9RA>eE01- zTWKiNQfWKc8T*<&ePVe#qqtp(LMACilLP^%8daWNF6(^p4^7Vfgpaee}E2kkn5dd%jo(?^1_(}jM?HFHnk|}vK*fP_L zC;G4|XQ(vZaiQ(U{jU%p`jb$wPV2bdm~g+@bkE)GV$miJCgZ6)!Jy>;=9irxq?c{i zA-sK}>a9lCPupugXx$%o?+=$T^~j_defnL)yk9(Z9rQcK!2zx+Hm%i8;$uy%${kRO z6MfEk9Goh@h4*_H6ob>CM2dqHI8D_o5}22ZPe1deo63Ts-5S!M^S^V?%xhI&)8#?t%+*Ic~=jLDiUKvg>K%{N#@pEJFtq5UPpkVIe6 zFxLz_%jSzu{l1aBh0sBMYwQ(qe&1iJgrf81fSJ>3hqxxt5&hGkje`jZVq$zeAAC}*k1h=?-C<}xR703 z#LX>U?ka`MhD>btw>z3irYw0i?AnERlMWJ~t}H#fcHt#Uzs~eGIL52?kwvy9en0xY z@tJVDonp4!I8RLGcAAb-HtbKf1?kFvD%_rBgj5Zk$o--|4!~+WywTL^#a*2t1#bf; zOm42C-Y_W&HQ4}=?fG4-P={mMwXWorxJpFDf99W`Sl&%_XR0R7xt4%O-t?KT&e_V& zE}oD&?(QK@GnX1XXMEh1Fw(zHwL{Hdx5oGbsrPyBcn<-t+YyWLqt_E>@%xiN%y8b< zl~#6u+o7-1(tBn-$r8H*^5s7aalCXy+)JBwH_#xi|{oU!Y} z>YsdveBdhU3}u%!ptf8LsGY6FOB}6a&6BlFbT?VFx>1=TyIz3S>Ags_8}HxlQLpy3 z88Q{^9LYM0SV8!YJBkLxI&rx>8&-k9>bQsZQ`wV_Y4h3O|9*v>D6GU>pe>I$Q-)}JkQ z>L#Dm7mF5;sNRqMJtR3NdIjmRL?hqnhfXHmNCU=t-r@ye>RP>Wt=W( zFse53R3PE?@#U1Xm`|k>f|pMQuE~@E8j=)Ub#BU|>_arc#^=(obeU2N@9xX@=$zec zb$AzlZ&uD8PKOWp(NIWs<43x1E3*wiKdyv|8CHdYWXd4^HYyrk2 zh4~n|gtxjPCOQI6|4p=5gkE4r``en zy)C18c{Gqbd%Vo+Zcecz4$CIrXGz<}9KH*U%;Tp+YDTXAZX$>*4f!KC?%KeSW?x(3 z2r0UI?{J7O<$;o9Gid(zLtx|wC2cb%-?HRRof#r~C1iUpbN)!(?Br8iUjGz(0n(29 z4Lho}JN@wfoz!@)$ohf6Kx-ixO+o1s7eOw$b%738%%Z&QN(T3hxDb+7Rj^S}npHegLioT4m0=nZFcKP8^lv86U0kH{z|ieA_@QB&<3oLdwzHPNZ81vyq@#3U0YTG4VtJ@s zg|-v!+aposlN;pktOEbbq<>UIf5n0%k*!a80s|g-@m+idjz0^OS>yH9fl1QZoCqzA z@dOGbJ;2}P3b{fd_d}i{u0L5|1kpuENly~(B#Ir=6Q>xoc4zXW09IGAuEB5dnb=lB z2^RN7Y;pT@*nfEm(I-?;e*Bi+dwWr{b%%qF#}_5aPeQymWE?(ooboH(MmoF*!W74q7zuv%$>a=v6SVaJcAgk++nlS{=H! z)nDAmr*df{LMh;1=PL)#j6J2@N?n-R*2zg3QhX(p?D+*xLyTieUhAlI>sRI3_N~he z#o(V~)-z&z!*pqvN?wm!6KbhQ6+wT}wz!EJo=jt|m$4l#^`IA<){)s`R=$T_oF2&? z8+-*eF1RgBLtkh_)jff$$zmvSI?*Qa^>*p?V;J%5snojaF>J6~*<--B7*{A6PI1$R2=nCwsfz_6Q zgCUlIoara{>o^w)rYyO48t0zx&Vu@;)BKcE9>+>{^%eYQq{^ZqtaSZJX{#n^yQq%# zIoHKUr9F&T%LmEPYbm{N#!oE8a{Gb?DcZ)V(v(1`gyTN$43Cb({)L&OVYSLn$WaB{ zackd24oyH};#SS@kC+GVwuZZhYR|npOnY&GF6*=X&4j;~%Sp*W0j{N5)~3`v818TT zCHJj)pjqn8^zCKy=<^U(`|-CKFNU2;W-e#FqF;YZ^StH>+9AlR+cGU{W;9lE2=Nd0 zjQjQ+JDO&$(3bl8WzC7#X6L8Pm5NCjA8(6|OHeiQUoz$vyk6fqKQs5W>kRX3;l8zv zhF0s<-;$Q7i9XH4Z6Bp^iE#;yxt08&-n8(Tx?aIi^G9DKTq5&jV+Fl_$DNSg59*MY zaj*|7XOURCTErc2JOk~MzoUw!_~)WRLk9nTuaL%!pdl#8CM@L@mvx~JG9sal)$%wu-(Av?$hPpdY4+l6(c$k0?3HJ&xo07Eh4j zjL01UkA_7i_FhxzDRH`LqDb1kBpM>a_++TWY~uO2RM^LY{5`1`X(u z`eXu(3lE9s?!X5ZLx_%($dI3*6Pp^9UTD3+m1PDF{QslrJ>%Kz|M&k84QkU%5u-KR ztJI!}RW7PETKZ|LYSk{WSInqdEeWEwSVgs^wKq|%y{Q!uCANshi0z;6|MB?U&%JZx ze7|1D@qA*`Yj~!@7TXm#=Rl5oRbo$s60ne`Mdd&{$v6i7x3<6&Z;~7QX=eWEymfv@M^TIv z|GxY6toiEeYYq=knpR|Mjpah1A7|Dmb>}Dz8g{;n0>EHQr?B5==Y2epz)fJWY>-kdZ0$-ZQJFwW>tzrv*t8K6%f2Y{lhOj za!F}gGwq;|FVDq%Ke|nuveyC-nd@GdFsC9H_N*piz{OJn10wjrKIoc;UR=i7g-`rh z|JuNqP}yl2QRLAQ{(5%g?ZdR4$i)xOOfSEfdX#wx-f7sPVDTk^A9uR@*c|?{tMwA( zM{EB1No^03`aL5J424=}$K(-*ENO2K#((+dpoA_c>Du&CKHF{Jc-v-&qF z-9=IeIu-6_fl5f9CD^em8?XG@Eu4Zk))Pi;xmT|C*p1!}(^8F8_Pn)lOE z9jiZz2=|1Sk}ikZ;a}Omb?jyi&5+1G9lu?`H9Q16vgWP4fcLr3YFVoh{Iei@swY1g zx5oj>r`2co^KCLpdM8-ChsD)LG`a15IU0XhHp84gN{VvJ^*Cv$Dl2Cbh73z}URjOi z!m`{*H&f`0{{;w~GzVjChJU*@Pk%j~WgETs=*ZtRS}a!~%Vpc&l>WzKS%frtu~3um zkAD7WglLL+U@qWrlDWXZ--5FH=ZX#QaeUYF)0W`Nh6TnuD<=rx!owzjlxZ75IH!^z zRWgX2VR_UOC5F&bAN>(0+6WuP)8h-$gi6^Ts?50Rz7`14>C^@}jPLAoNv*7EVyA0S z)LR4R|8+bn6(b9Ss*VN8OjF{{7a_BEN8nBW z!_Mp1TR+_HONS;%wxye|y3kgIiiqnMS9cE!Il|Xj`vZL2a({TiFScwiPvHDJ1R9eY zv&D%;-k)qmdzm_3`ATUNeKHq1)+Bv|`~(FoKBbuU@)GlUt~ps=WL^&oW(!ym9yp-c zZ)U*AbDD5+zdv*r3N;k^be%HwfI(~N$vt4GzA}g?aaE&ij9$R}X)0X}(S31@NAUQf zL+fO0kGV@`Di> ze<#uz`YZ6JSYlXfFni->15Y=X@4s^V+z<_zf8|z{;XAIi3CgEWo_N~LMv{2JA@Ka^ zn1SRt<>K;DsKH+h9dy3~_O4~tHfnuxgt5b}2dmvAvQVh~ygytuv?BiU@+`qD_u?<% zET<*V=lip1iF5D*@Y9-qi0kIXo2fs2#)B*BhIOg317owi^q~@@`*3NCy2N|2-h7-Z zF;o1u{8H39iTjbq8IkY>f)ebMM7s!vMc-r7O1E?|TCzof7t`bgn7K{55V? zjs|n@Tla~XFg;mdjB^VA7=OpvKu1`q*Jhg0Lqj!(d|luPKBUjrQ{Z9c`;}<1ThP0# zugoJQrD_VwHRlas)P2D@Oujph4OCfIc{+5oTb}D{W7B0I#{BLfp`aZFs zdYA1BY&5#?8AjKo+EB4TWtreGSkKi;VzS)7uF^og<0Sp!x@a8K-nngChmICN20Q&c zyq`0%mLSSuwi0sm`-Y9ENZVvi)dE(r^+#P_R$RuojfcOZez$?vx-GF|FHW{_&HCEd zui?G&ZIEONyq?Wy)dZJiQ>dF0!fc1@#dxpsoTt)|dCPwRZDFFCWR1D;00}cj zN^*x3GSS-3eFfg_wIAYWw|qS*Iw_W4N7Q_?V#IJo`A^7)D~Rq4A{c}S-wVY z7aywaA5k(rBLh>FNs-DO&0f&hg@19^Uj7Jl^vK-TZC}=Q{JcF!8{ST30Ju1)210XH+y zC-zT^;=G+L%_r$c0Az-cKYacjv+Di?K33NfY#oRhH@Yf!ja|QL!uk7F;Z3;=2Z6uP zdwK0|%4EE`-tn>zy&r1OPp#h-ou&KUIo8e7>V-iVi~>f}+lx^2Z^Qnu*s7f$*j^sY zt`p1;A0~chtyq3^KzGaHL3o#*&!qV(?Zc|Q#;+&1|6G516>^X7Mu|nYHG6w}*N5n* zOYsc5%pA*UHPozPfx-+S+wR5&cC4FHuL}Z;4FTRD0WMRq4xS(jsfC)y}OM%ch~TU=090#(FpF8@IQ1q^kBs57nNpGt|hO(Hvi9! zw!TpseCOon4T)iH?A?*tPM4L}R|dWOg`ih=-5k2Rk>57NOVe=U;KePsY*VAfD6k&E?j@a6BWx5}n={koUPpkLYIBD^q>NRvhopbD#;x2Av9L-F* zHa8{Z)%)N{Y7f98Ui(`YE$OPX9{$d!LAO>jI2B^ia-zA_U2a3VoAxpfwK zWrtn`eU3RtO{a@NnAue!#PziOK0klFh<#i{D5aQ&lmOtY`Y45a37Q2jPZX?VE=wi zK>^X1fMVlO@we$2OQ~{id~%b%QnBL5EU zk8P34q(Nm{`V6n`s4lpz(4*!G-e?KWJe|)$)KnY2$^`^xj!=BWjky7F)G)>SAKdAN zUrkb!oZtwM(=nwJ^ey02L@hj2K-!8*T`tL9EX|YYY<${*^P;iK>uaBqv|eH#KL+g<$N+>N|D4iAJ}Jfg`eBCGg4^zAvYWF+<>rCwxR zzEWOA0PBEyK7l>?3G+B-xt|)8eBF54P8FVO98PFmsdA877|~?`=cjEknStxqqw*OM zYxfaay`s~Kf4KSCKc&UTOx{83CO-5K2i%JOz&BfJwKq!ie;#LQW#_Mb6tVWZ;17eH(8O0R9b;@=vKJ_FXzQMoKJv_*iun8HwBj4j}qE);?J`m+S= z5({v@PY_{JyPiccdov#A8$y>Dt!eWCAL`1}r`oD?!FVc

3Mz+wLB?t+YAN>Ldur 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 literal 320372 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%0A`~P&ur2*i2NH3yF{!OP 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 From fe0c459e86d0c9200173c646383b214e8da6dc8b Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 11 Feb 2026 14:11:30 +0000 Subject: [PATCH 07/90] chore(version): version.json [skip ci] --- commit.txt | 2 +- packages/adapters/package.json | 4 ++-- packages/ai/package.json | 4 ++-- packages/dicomImageLoader/package.json | 2 +- packages/labelmap-interpolation/package.json | 4 ++-- packages/nifti-volume-loader/package.json | 2 +- packages/polymorphic-segmentation/package.json | 4 ++-- packages/tools/package.json | 2 +- version.json | 4 ++-- version.txt | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/commit.txt b/commit.txt index a868ceed24..b8c34daf45 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -6a47a441e0032a1e26d676d3605362f27d89032e \ No newline at end of file +4a6cd35c906c96a4480d9c1aa79a6267ad8f08bd \ No newline at end of file diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 6a668eb2b9..fa4bb1acf2 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.33", - "@cornerstonejs/tools": "4.15.33" + "@cornerstonejs/core": "4.16.0", + "@cornerstonejs/tools": "4.16.0" } } diff --git a/packages/ai/package.json b/packages/ai/package.json index cbcde75902..dea1313b87 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.33", - "@cornerstonejs/tools": "4.15.33" + "@cornerstonejs/core": "4.16.0", + "@cornerstonejs/tools": "4.16.0" } } diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 5615f24eed..504152eb36 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.33", + "@cornerstonejs/core": "4.16.0", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 0cd67ee6a7..8787da7ff0 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.33", - "@cornerstonejs/tools": "4.15.33", + "@cornerstonejs/core": "4.16.0", + "@cornerstonejs/tools": "4.16.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 10e286bf71..ca22c2aefc 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.33" + "@cornerstonejs/core": "4.16.0" }, "contributors": [ { diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 8ced98f9b9..e826381ace 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.33", - "@cornerstonejs/tools": "4.15.33", + "@cornerstonejs/core": "4.16.0", + "@cornerstonejs/tools": "4.16.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/tools/package.json b/packages/tools/package.json index 19a6b402c2..3e80d0c17c 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.15.33", + "@cornerstonejs/core": "4.16.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/version.json b/version.json index a86fcb52c2..7be6555cf5 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.15.33", - "commit": "6a47a441e0032a1e26d676d3605362f27d89032e" + "version": "4.16.0", + "commit": "4a6cd35c906c96a4480d9c1aa79a6267ad8f08bd" } \ No newline at end of file diff --git a/version.txt b/version.txt index e897729ad1..2c9aebff95 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.15.33 \ No newline at end of file +4.16.0 \ No newline at end of file From e8d0177ac9d64b0347e4994122c1f3d664826d1a Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 11 Feb 2026 14:11:48 +0000 Subject: [PATCH 08/90] chore(version): Update package versions [skip ci] --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 2 +- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 2 +- 18 files changed, 51 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 675e0ac258..709792c0d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +### Features + +- **MPR:** add reformat orientation ([#2540](https://github.com/cornerstonejs/cornerstone3D/issues/2540)) ([4a6cd35](https://github.com/cornerstonejs/cornerstone3D/commit/4a6cd35c906c96a4480d9c1aa79a6267ad8f08bd)) + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package root diff --git a/lerna.json b/lerna.json index 1235029270..ed9d2ef8f6 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.15.33", + "version": "4.16.0", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 7e2a0118c2..43bd7f5c50 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index fa4bb1acf2..cafa923428 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.15.33", + "version": "4.16.0", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 9cb204cd05..99ed65da51 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index dea1313b87..5fd57d25b1 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.15.33", + "version": "4.16.0", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 39bde2d009..01cd66dd7f 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +### Features + +- **MPR:** add reformat orientation ([#2540](https://github.com/cornerstonejs/cornerstone3D/issues/2540)) ([4a6cd35](https://github.com/cornerstonejs/cornerstone3D/commit/4a6cd35c906c96a4480d9c1aa79a6267ad8f08bd)) + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index eb107c6ad7..482edcee08 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.15.33", + "version": "4.16.0", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index b7ec189803..c0978dc4e4 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 504152eb36..454bf50d50 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.15.33", + "version": "4.16.0", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index e58202ff09..459fa9ef50 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 8787da7ff0..9c693fcc78 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.15.33", + "version": "4.16.0", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 82eb9c22a8..b0c86af8ae 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index ca22c2aefc..1ec4416b26 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.15.33", + "version": "4.16.0", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 7184f355f7..b112ea7b68 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index e826381ace..28376426e9 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.15.33", + "version": "4.16.0", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 85d295f1fd..e6f5916678 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) + +### Features + +- **MPR:** add reformat orientation ([#2540](https://github.com/cornerstonejs/cornerstone3D/issues/2540)) ([4a6cd35](https://github.com/cornerstonejs/cornerstone3D/commit/4a6cd35c906c96a4480d9c1aa79a6267ad8f08bd)) + ## [4.15.33](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.32...v4.15.33) (2026-02-10) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 3e80d0c17c..8666cafd70 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.15.33", + "version": "4.16.0", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", From bf073a3ddf452e523e8ee06ce6a5fef81dab09f6 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 11 Feb 2026 14:12:03 +0000 Subject: [PATCH 09/90] chore: update generated version file [skip ci] --- packages/adapters/src/version.ts | 2 +- packages/ai/src/version.ts | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/src/version.ts | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 61bcbd557f..a387dc570d 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.15.33'; +export const version = '4.16.0'; From b66a5f133de850960c6cc5e676fd8f50fa84823d Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 11 Feb 2026 17:00:50 -0500 Subject: [PATCH 10/90] fix: CS3D version commits to single version (#2612) --- publish-version.mjs | 58 +++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/publish-version.mjs b/publish-version.mjs index faa708cdce..2521cb022b 100644 --- a/publish-version.mjs +++ b/publish-version.mjs @@ -111,19 +111,14 @@ async function run() { // Maybe we need to hook the netlify deploy preview // await execa('yarn', ['run', 'build']); - console.log('Committing and pushing changes...'); - await execa('git', ['add', '-A']); - await execa('git', [ - 'commit', - '--no-verify', - '-m', - 'chore(version): version.json [skip ci]', - ]); - await execa('git', ['push', 'origin', branchName]); - console.log('Setting the version using lerna...'); - // add a message to the commit to indicate that the version was set using lerna + // Stage all changes (version.json, peer dependency updates, .npmrc deletion) + // before lerna runs so they're included in lerna's commit + await execa('git', ['add', '-A']); + + // Run lerna version without pushing + // lerna will update package.json files and create a commit await execa('npx', [ 'lerna', 'version', @@ -132,26 +127,47 @@ async function run() { '--exact', '--force-publish', '--message', - 'chore(version): Update package versions [skip ci]', + `chore(version): Update package versions to ${nextVersion} [skip ci]`, '--conventional-commits', '--create-release', 'github', + '--no-push', ]); - console.log('Version set using lerna'); - + // Generate version files for each package for (const pkg of packages) { await execa('node', ['./scripts/generate-version.js', pkg]); } - await execa('git', ['add', '.']); - await execa('git', [ - 'commit', - '--no-verify', - '-m', - 'chore: update generated version file [skip ci]', - ]); + // Stage any files that need to be included in the amended commit. Lerna commits the package.json + // files it modifies, but may not include other files that were staged before it ran (like + // version.json or .npmrc deletion) or generated version files. Since we're amending the commit to + // combine all version-related changes into a single commit, we need to ensure these files are included. + await execa('git', ['add', '-A']); + + // Amend the last commit to include all changes. The commit message is already set by lerna + // and is the same, so we use --no-edit to keep the existing message. + // This combines the version.json commit and package version updates into one commit + await execa('git', ['commit', '--amend', '--no-edit']); + + // Lerna created a local tag (e.g. v4.16.0) pointing to the pre-amend commit. + // Move the tag to the amended commit so the release tag matches what we push. + const tagName = `v${nextVersion}`; + await execa('git', ['tag', '-f', tagName]); + + console.log('Pushing changes...'); + + // Note: Force push is not necessary here because: + // 1. Lerna is called with --no-push, so the commit created by lerna is never pushed to remote + // 2. We amend the commit locally before pushing, so it's a new commit from the remote's perspective + // 3. This script runs on a single branch locally, so there's no history rewrite on the remote + // A regular push is sufficient since we're pushing a commit that doesn't exist on the remote yet await execa('git', ['push', 'origin', branchName]); + + console.log('Pushing tag...'); + await execa('git', ['push', 'origin', tagName]); + + console.log('Version set using lerna'); } async function unlinkFile(filePath) { From 134a7dec787f739df7a29d3a264875c51e94c6ce Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 11 Feb 2026 22:05:06 +0000 Subject: [PATCH 11/90] chore(version): Update package versions to 4.16.1 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 71 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 709792c0d2..c2d4b1412f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +### Bug Fixes + +- CS3D version commits to single version ([#2612](https://github.com/cornerstonejs/cornerstone3D/issues/2612)) ([68b475b](https://github.com/cornerstonejs/cornerstone3D/commit/68b475b3eca38236ac124c78b37b72217cfbd6a6)) + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) ### Features diff --git a/commit.txt b/commit.txt index b8c34daf45..8e7bcd0d51 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -4a6cd35c906c96a4480d9c1aa79a6267ad8f08bd \ No newline at end of file +68b475b3eca38236ac124c78b37b72217cfbd6a6 \ No newline at end of file diff --git a/lerna.json b/lerna.json index ed9d2ef8f6..def7a94fd2 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.16.0", + "version": "4.16.1", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 43bd7f5c50..3c73b10ed9 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/adapters + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index cafa923428..e71b8e2c35 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.16.0", + "version": "4.16.1", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.0", - "@cornerstonejs/tools": "4.16.0" + "@cornerstonejs/core": "4.16.1", + "@cornerstonejs/tools": "4.16.1" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 99ed65da51..f553d280ed 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/ai + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 5fd57d25b1..26a4684e71 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.16.0", + "version": "4.16.1", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.0", - "@cornerstonejs/tools": "4.16.0" + "@cornerstonejs/core": "4.16.1", + "@cornerstonejs/tools": "4.16.1" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 01cd66dd7f..0461fd7724 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/core + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) ### Features diff --git a/packages/core/package.json b/packages/core/package.json index 482edcee08..8688110df1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.16.0", + "version": "4.16.1", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index c0978dc4e4..16878b75ed 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 454bf50d50..7b83727609 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.16.0", + "version": "4.16.1", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.0", + "@cornerstonejs/core": "4.16.1", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 459fa9ef50..1d43e1ce52 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 9c693fcc78..0f6aa573e0 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.16.0", + "version": "4.16.1", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.0", - "@cornerstonejs/tools": "4.16.0", + "@cornerstonejs/core": "4.16.1", + "@cornerstonejs/tools": "4.16.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index b0c86af8ae..b5bff9f576 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 1ec4416b26..7a37613ec9 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.16.0", + "version": "4.16.1", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.0" + "@cornerstonejs/core": "4.16.1" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index b112ea7b68..9d1dd5bc53 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 28376426e9..9cd57ebfc3 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.16.0", + "version": "4.16.1", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.0", - "@cornerstonejs/tools": "4.16.0", + "@cornerstonejs/core": "4.16.1", + "@cornerstonejs/tools": "4.16.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index e6f5916678..6881559391 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) + +**Note:** Version bump only for package @cornerstonejs/tools + # [4.16.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.15.33...v4.16.0) (2026-02-11) ### Features diff --git a/packages/tools/package.json b/packages/tools/package.json index 8666cafd70..c651b76b3f 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.16.0", + "version": "4.16.1", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.0", + "@cornerstonejs/core": "4.16.1", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index a387dc570d..c454ea4d55 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.0'; +export const version = '4.16.1'; diff --git a/version.json b/version.json index 7be6555cf5..eadb1a81c8 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.16.0", - "commit": "4a6cd35c906c96a4480d9c1aa79a6267ad8f08bd" + "version": "4.16.1", + "commit": "68b475b3eca38236ac124c78b37b72217cfbd6a6" } \ No newline at end of file diff --git a/version.txt b/version.txt index 2c9aebff95..99463916eb 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.16.0 \ No newline at end of file +4.16.1 \ No newline at end of file From 34d077f4b96eb41218bcc33779484c38d26dd045 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 09:53:02 -0500 Subject: [PATCH 12/90] chore(deps-dev): bump webpack from 5.81.0 to 5.105.0 (#2603) --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Boccanfuso --- bun.lock | 68 ++++-- package.json | 2 +- packages/docs/bun.lock | 105 +++++++-- packages/docs/package.json | 3 +- packages/docs/yarn.lock | 164 ++++++++++---- yarn.lock | 449 ++++++++++++++++++------------------- 6 files changed, 483 insertions(+), 308 deletions(-) diff --git a/bun.lock b/bun.lock index 94d68ba4c4..58be74d147 100644 --- a/bun.lock +++ b/bun.lock @@ -107,7 +107,7 @@ "typescript": "5.5.4", "unzipper": "0.10.14", "url-loader": "4.1.1", - "webpack": "5.81.0", + "webpack": "5.105.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.2", @@ -124,7 +124,7 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -139,7 +139,7 @@ }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -157,7 +157,7 @@ }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -167,7 +167,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -186,7 +186,7 @@ }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", @@ -199,7 +199,7 @@ }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "nifti-reader-js": "0.6.9", }, @@ -209,7 +209,7 @@ }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, @@ -221,7 +221,7 @@ }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.15.31", + "version": "4.16.1", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", @@ -1026,7 +1026,7 @@ "@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="], - "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/express": ["@types/express@4.17.21", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ=="], @@ -1176,7 +1176,7 @@ "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], - "acorn-import-assertions": ["acorn-import-assertions@1.9.0", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA=="], + "acorn-import-phases": ["acorn-import-phases@1.0.4", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], @@ -1272,6 +1272,8 @@ "base64id": ["base64id@2.0.0", "", {}, "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.9.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg=="], + "batch": ["batch@0.6.1", "", {}, "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="], "before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="], @@ -1722,7 +1724,7 @@ "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-module-lexer": ["es-module-lexer@1.6.0", "", {}, "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ=="], + "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], @@ -2302,7 +2304,7 @@ "load-json-file": ["load-json-file@6.2.0", "", { "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^5.0.0", "strip-bom": "^4.0.0", "type-fest": "^0.6.0" } }, "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ=="], - "loader-runner": ["loader-runner@4.3.0", "", {}, "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="], + "loader-runner": ["loader-runner@4.3.1", "", {}, "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="], "loader-utils": ["loader-utils@2.0.4", "", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="], @@ -3146,7 +3148,7 @@ "terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], - "terser-webpack-plugin": ["terser-webpack-plugin@5.3.14", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw=="], + "terser-webpack-plugin": ["terser-webpack-plugin@5.3.16", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q=="], "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], @@ -3302,7 +3304,7 @@ "wasm-feature-detect": ["wasm-feature-detect@1.8.0", "", {}, "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ=="], - "watchpack": ["watchpack@2.4.2", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw=="], + "watchpack": ["watchpack@2.5.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg=="], "wbuf": ["wbuf@1.7.3", "", { "dependencies": { "minimalistic-assert": "^1.0.0" } }, "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA=="], @@ -3312,7 +3314,7 @@ "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - "webpack": ["webpack@5.81.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", "@webassemblyjs/ast": "^1.11.5", "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.13.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.2", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-AAjaJ9S4hYCVODKLQTgG5p5e11hiMawBwV2v8MYLE0C/6UAGLuAF4n1qa9GOwdxnicaP+5k6M5HrLmD4+gIB8Q=="], + "webpack": ["webpack@5.105.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw=="], "webpack-bundle-analyzer": ["webpack-bundle-analyzer@4.10.2", "", { "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" } }, "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw=="], @@ -3324,7 +3326,7 @@ "webpack-merge": ["webpack-merge@5.8.0", "", { "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" } }, "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q=="], - "webpack-sources": ["webpack-sources@3.2.3", "", {}, "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="], + "webpack-sources": ["webpack-sources@3.3.3", "", {}, "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg=="], "websocket-driver": ["websocket-driver@0.7.4", "", { "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg=="], @@ -3588,6 +3590,8 @@ "@oxc-parser/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@rollup/pluginutils/@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + "@rspack/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], "@rushstack/node-core-library/ajv": ["ajv@8.13.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.4.1" } }, "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA=="], @@ -3602,6 +3606,10 @@ "@types/connect-history-api-fallback/@types/express-serve-static-core": ["@types/express-serve-static-core@5.0.6", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA=="], + "@types/eslint/@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + + "@types/eslint-scope/@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + "@yarnpkg/parsers/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], "@zkochan/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -4138,6 +4146,10 @@ "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "terser-webpack-plugin/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "terser-webpack-plugin/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + "test-exclude/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "test-exclude/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], @@ -4164,7 +4176,15 @@ "utif/pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], - "webpack/schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], + "webpack/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "webpack/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + + "webpack/enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="], + + "webpack/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + + "webpack/tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], "webpack-bundle-analyzer/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], @@ -4706,6 +4726,8 @@ "tar/fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + "terser-webpack-plugin/schema-utils/ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], + "ts-loader/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "typedoc/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], @@ -4718,9 +4740,13 @@ "webpack-dev-server/open/is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], - "webpack/schema-utils/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + "webpack/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="], - "webpack/schema-utils/ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], + "webpack/browserslist/node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "webpack/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + + "webpack/schema-utils/ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], "worker-loader/schema-utils/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], @@ -4966,8 +4992,6 @@ "webpack-dev-server/open/default-browser/default-browser-id": ["default-browser-id@5.0.0", "", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], - "webpack/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - "worker-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], diff --git a/package.json b/package.json index bb7238ba45..c942877b56 100644 --- a/package.json +++ b/package.json @@ -169,7 +169,7 @@ "typescript": "5.5.4", "unzipper": "0.10.14", "url-loader": "4.1.1", - "webpack": "5.81.0", + "webpack": "5.105.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.2", diff --git a/packages/docs/bun.lock b/packages/docs/bun.lock index 67389336a0..b828bc15c7 100644 --- a/packages/docs/bun.lock +++ b/packages/docs/bun.lock @@ -1,6 +1,5 @@ { "lockfileVersion": 1, - "configVersion": 0, "workspaces": { "": { "name": "docs", @@ -40,9 +39,11 @@ }, }, "overrides": { + "lodash": "4.17.23", "mdast-util-to-hast": "13.2.1", "node-forge": "1.3.2", "qs": "6.14.1", + "webpack": "5.105.0", }, "packages": { "@algolia/autocomplete-core": ["@algolia/autocomplete-core@1.17.9", "", { "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", "@algolia/autocomplete-shared": "1.17.9" } }, "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ=="], @@ -651,7 +652,7 @@ "@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="], - "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -771,7 +772,9 @@ "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], - "acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "acorn-import-phases": ["acorn-import-phases@1.0.4", "", { "peerDependencies": { "acorn": "^8.14.0" } }, "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], @@ -857,6 +860,8 @@ "bare-url": ["bare-url@2.3.2", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.9.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg=="], + "basic-ftp": ["basic-ftp@5.0.5", "", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], "batch": ["batch@0.6.1", "", {}, "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="], @@ -1151,7 +1156,7 @@ "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], - "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], + "enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="], "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], @@ -1163,7 +1168,7 @@ "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-module-lexer": ["es-module-lexer@1.6.0", "", {}, "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ=="], + "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], @@ -1637,13 +1642,13 @@ "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], - "loader-runner": ["loader-runner@4.3.0", "", {}, "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="], + "loader-runner": ["loader-runner@4.3.1", "", {}, "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="], "loader-utils": ["loader-utils@2.0.4", "", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="], "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], @@ -2443,7 +2448,7 @@ "terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], - "terser-webpack-plugin": ["terser-webpack-plugin@5.3.14", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw=="], + "terser-webpack-plugin": ["terser-webpack-plugin@5.3.16", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q=="], "text-decoder": ["text-decoder@1.2.3", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], @@ -2555,7 +2560,7 @@ "vfile-message": ["vfile-message@4.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw=="], - "watchpack": ["watchpack@2.4.2", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw=="], + "watchpack": ["watchpack@2.5.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg=="], "wbuf": ["wbuf@1.7.3", "", { "dependencies": { "minimalistic-assert": "^1.0.0" } }, "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA=="], @@ -2563,7 +2568,7 @@ "webdriver-bidi-protocol": ["webdriver-bidi-protocol@0.3.8", "", {}, "sha512-21Yi2GhGntMc671vNBCjiAeEVknXjVRoyu+k+9xOMShu+ZQfpGQwnBqbNz/Sv4GXZ6JmutlPAi2nIJcrymAWuQ=="], - "webpack": ["webpack@5.99.5", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg=="], + "webpack": ["webpack@5.105.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw=="], "webpack-bundle-analyzer": ["webpack-bundle-analyzer@4.10.2", "", { "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" } }, "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw=="], @@ -2679,6 +2684,8 @@ "@docusaurus/bundler/copy-webpack-plugin": ["copy-webpack-plugin@11.0.0", "", { "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", "globby": "^13.1.1", "normalize-path": "^3.0.0", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ=="], + "@docusaurus/bundler/terser-webpack-plugin": ["terser-webpack-plugin@5.3.14", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw=="], + "@docusaurus/core/react-router-dom": ["react-router-dom@5.3.4", "", { "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, "peerDependencies": { "react": ">=15" } }, "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ=="], "@docusaurus/theme-classic/@mdx-js/react": ["@mdx-js/react@3.1.0", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ=="], @@ -2697,6 +2704,8 @@ "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "@mdx-js/mdx/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "@mdx-js/mdx/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], @@ -2709,8 +2718,16 @@ "@svgr/plugin-svgo/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], + "@types/eslint/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "@types/eslint-scope/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "@types/estree-jsx/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + "acorn-walk/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + "ajv-formats/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], @@ -2785,12 +2802,24 @@ "duplexify/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "enhanced-resolve/tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + + "esast-util-from-js/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + "escodegen/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + "estree-util-attach-comments/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "estree-util-scope/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "estree-util-to-js/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + "estree-util-value-to-estree/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "estree-walker/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], @@ -2839,6 +2868,10 @@ "gray-matter/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], + "hast-util-to-estree/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "hast-util-to-jsx-runtime/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "hast-util-to-parse5/property-information": ["property-information@6.5.0", "", {}, "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig=="], "hpack.js/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], @@ -2913,18 +2946,26 @@ "micromark-extension-gfm-task-list-item/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "micromark-extension-mdx-expression/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "micromark-extension-mdx-expression/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], "micromark-extension-mdx-expression/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], "micromark-extension-mdx-expression/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "micromark-extension-mdx-jsx/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "micromark-extension-mdx-jsx/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], "micromark-extension-mdx-jsx/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], "micromark-extension-mdx-jsx/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "micromark-extension-mdxjs/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + + "micromark-extension-mdxjs-esm/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "micromark-extension-mdxjs-esm/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], "micromark-extension-mdxjs-esm/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], @@ -2937,6 +2978,8 @@ "micromark-factory-label/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "micromark-factory-mdx-expression/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "micromark-factory-mdx-expression/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], "micromark-factory-mdx-expression/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], @@ -2971,6 +3014,8 @@ "micromark-util-decode-string/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "micromark-util-events-to-acorn/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "micromark-util-events-to-acorn/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], "micromark-util-normalize-identifier/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], @@ -3033,8 +3078,16 @@ "readable-stream/isarray": ["isarray@0.0.1", "", {}, "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="], + "recma-build-jsx/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "recma-parse/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + + "recma-stringify/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "regjsparser/jsesc": ["jsesc@3.0.2", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g=="], + "rehype-recma/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], + "renderkid/css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="], "renderkid/htmlparser2": ["htmlparser2@6.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="], @@ -3071,9 +3124,11 @@ "svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + "terser/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "terser-webpack-plugin/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], + "terser-webpack-plugin/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], "terser-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], @@ -3085,9 +3140,15 @@ "update-notifier/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], - "webpack/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], + "webpack/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + + "webpack/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + + "webpack/tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], + + "webpack/webpack-sources": ["webpack-sources@3.3.3", "", {}, "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg=="], - "webpack/webpack-sources": ["webpack-sources@3.2.3", "", {}, "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="], + "webpack-bundle-analyzer/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], "webpack-bundle-analyzer/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], @@ -3143,6 +3204,10 @@ "@docusaurus/bundler/copy-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + "@docusaurus/bundler/terser-webpack-plugin/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], + + "@docusaurus/bundler/terser-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], @@ -3295,6 +3360,14 @@ "webpack-dev-server/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "webpack/browserslist/caniuse-lite": ["caniuse-lite@1.0.30001769", "", {}, "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg=="], + + "webpack/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="], + + "webpack/browserslist/node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "webpack/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + "webpack/schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "webpack/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], @@ -3313,6 +3386,10 @@ "@docusaurus/bundler/copy-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "@docusaurus/bundler/terser-webpack-plugin/schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + + "@docusaurus/bundler/terser-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "@puppeteer/browsers/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "babel-loader/find-cache-dir/pkg-dir/find-up": ["find-up@6.3.0", "", { "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" } }, "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw=="], @@ -3357,6 +3434,8 @@ "@docusaurus/bundler/copy-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "@docusaurus/bundler/terser-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "babel-loader/find-cache-dir/pkg-dir/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], "babel-loader/find-cache-dir/pkg-dir/find-up/path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], diff --git a/packages/docs/package.json b/packages/docs/package.json index 7d12ac3dfc..c354aaa13d 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -87,6 +87,7 @@ "node-forge": "1.3.2", "qs": "6.14.1", "mdast-util-to-hast": "13.2.1", - "lodash": "4.17.23" + "lodash": "4.17.23", + "webpack": "5.105.0" } } diff --git a/packages/docs/yarn.lock b/packages/docs/yarn.lock index 43abcc0b3e..e18f6a67e2 100644 --- a/packages/docs/yarn.lock +++ b/packages/docs/yarn.lock @@ -2727,11 +2727,16 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6": +"@types/estree@*", "@types/estree@^1.0.0": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== +"@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": version "5.0.6" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8" @@ -2830,7 +2835,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -3157,6 +3162,11 @@ accepts@~1.3.4, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-import-phases@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== + acorn-jsx@^5.0.0: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -3169,11 +3179,16 @@ acorn-walk@^8.0.0: dependencies: acorn "^8.11.0" -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.2: +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.8.2: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + address@^1.0.1, address@^1.1.2: version "1.2.2" resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" @@ -3506,6 +3521,11 @@ bare-url@^2.2.2: dependencies: bare-path "^3.0.0" +baseline-browser-mapping@^2.9.0: + version "2.9.19" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488" + integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== + basic-ftp@^5.0.2: version "5.0.5" resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" @@ -3622,6 +3642,17 @@ browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.23.0, browserslist@^4 node-releases "^2.0.19" update-browserslist-db "^1.1.1" +browserslist@^4.28.1: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + dependencies: + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" + buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -3745,6 +3776,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001688, caniuse-lite@^1.0.30001702: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz#902c3f896f4b2968031c3a546ab2ef8b465a2c8f" integrity sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug== +caniuse-lite@^1.0.30001759: + version "1.0.30001769" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz#1ad91594fad7dc233777c2781879ab5409f7d9c2" + integrity sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg== + ccount@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" @@ -4717,6 +4753,11 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== +electron-to-chromium@^1.5.263: + version "1.5.286" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e" + integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A== + electron-to-chromium@^1.5.73: version "1.5.120" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.120.tgz#ccfdd28e9795fb8c2221cefa2c9a071501c86247" @@ -4769,13 +4810,13 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.17.1: - version "5.18.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" - integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== +enhanced-resolve@^5.19.0: + version "5.19.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c" + integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.0" entities@^2.0.0: version "2.2.0" @@ -4809,10 +4850,10 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" - integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" @@ -6722,10 +6763,10 @@ linkify-it@^5.0.0: dependencies: uc.micro "^2.0.0" -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.4.2" @@ -7783,6 +7824,11 @@ node-releases@^2.0.19: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + noms@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" @@ -9671,6 +9717,16 @@ schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.3.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +schema-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -10299,11 +10355,16 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: +tapable@^2.0.0, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tapable@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== + tar-fs@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.1.1.tgz#4f164e59fb60f103d472360731e8c6bb4a7fe9ef" @@ -10324,7 +10385,18 @@ tar-stream@^3.1.5: fast-fifo "^1.2.0" streamx "^2.15.0" -terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9: +terser-webpack-plugin@^5.3.16: + version "5.3.16" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330" + integrity sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + jest-worker "^27.4.5" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" + +terser-webpack-plugin@^5.3.9: version "5.3.14" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== @@ -10615,6 +10687,14 @@ update-browserslist-db@^1.1.1: escalade "^3.2.0" picocolors "^1.1.1" +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + update-notifier@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" @@ -10715,10 +10795,10 @@ vfile@^6.0.0, vfile@^6.0.1: "@types/unist" "^3.0.0" vfile-message "^4.0.0" -watchpack@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== +watchpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" + integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -10839,39 +10919,41 @@ webpack-sources@^2.2.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== +webpack-sources@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== -webpack@^5.88.1, webpack@^5.95.0: - version "5.98.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.98.0.tgz#44ae19a8f2ba97537978246072fb89d10d1fbd17" - integrity sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA== +webpack@5.105.0, webpack@^5.88.1, webpack@^5.95.0: + version "5.105.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a" + integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw== dependencies: "@types/eslint-scope" "^3.7.7" - "@types/estree" "^1.0.6" + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" "@webassemblyjs/ast" "^1.14.1" "@webassemblyjs/wasm-edit" "^1.14.1" "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.14.0" - browserslist "^4.24.0" + acorn "^8.15.0" + acorn-import-phases "^1.0.3" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.1" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.19.0" + es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^4.3.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.11" - watchpack "^2.4.1" - webpack-sources "^3.2.3" + schema-utils "^4.3.3" + tapable "^2.3.0" + terser-webpack-plugin "^5.3.16" + watchpack "^2.5.1" + webpack-sources "^3.3.3" webpackbar@^6.0.1: version "6.0.1" diff --git a/yarn.lock b/yarn.lock index 8f7c1c5e83..4d7ede3452 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2214,7 +2214,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -3593,7 +3593,7 @@ resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.40.0.tgz#765f0c77080058faafd6b24de8ccebf573c1464c" integrity sha512-MD2JJ25S4tnjnhjWyalMS6K6p0h+zQV6+Ylm+aGbiS8tSn/aHLSGNzBgduj6FB4zH0ax2GRMGYi/8G1uOxhXWA== -"@types/eslint-scope@^3.7.3": +"@types/eslint-scope@^3.7.7": version "3.7.7" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== @@ -3609,10 +3609,10 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.19.5" @@ -3724,7 +3724,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -3939,125 +3939,125 @@ multiformats "9.9.0" uint8arrays "^3.1.1" -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.11.5": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" - integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== -"@webassemblyjs/helper-buffer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" - integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-wasm-section@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" - integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" - integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-opt" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - "@webassemblyjs/wast-printer" "1.12.1" - -"@webassemblyjs/wasm-gen@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" - integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" - integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" - integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" - integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== - dependencies: - "@webassemblyjs/ast" "1.12.1" +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" "@webgpu/types@0.1.56": @@ -4131,10 +4131,10 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-phases@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-jsx@5.3.2: version "5.3.2" @@ -4153,10 +4153,10 @@ acorn@8.14.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== -acorn@^8.0.4, acorn@^8.11.0, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== +acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1, acorn@^8.8.2: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== actor@^2.3.1: version "2.3.1" @@ -4600,6 +4600,11 @@ base64id@2.0.0, base64id@~2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +baseline-browser-mapping@^2.9.0: + version "2.9.19" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488" + integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -4735,25 +4740,16 @@ browser-stdout@^1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.9, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== +browserslist@^4.0.0, browserslist@^4.21.9, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.4, browserslist@^4.25.3, browserslist@^4.28.1: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" - update-browserslist-db "^1.1.0" - -browserslist@^4.24.0, browserslist@^4.24.4, browserslist@^4.25.3: - version "4.25.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.4.tgz#ebdd0e1d1cf3911834bab3a6cd7b917d9babf5af" - integrity sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg== - dependencies: - caniuse-lite "^1.0.30001737" - electron-to-chromium "^1.5.211" - node-releases "^2.0.19" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" bser@2.1.1: version "2.1.1" @@ -4948,7 +4944,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@1.0.30001767, caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001737: +caniuse-lite@1.0.30001767, caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001759: version "1.0.30001767" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz#0279c498e862efb067938bba0a0aabafe8d0b730" integrity sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ== @@ -6410,15 +6406,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.211: - version "1.5.217" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.217.tgz#71285850356ef48bc08275b26f0f355721e0f17d" - integrity sha512-Pludfu5iBxp9XzNl0qq2G87hdD17ZV7h5T4n6rQXDi3nCyloBV3jreE9+8GC6g4X/5yxqVgXEURpcLtM0WS4jA== - -electron-to-chromium@^1.5.4: - version "1.5.7" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.7.tgz#425d2a7f76ecfa564fdca1040d11fb1979851f3c" - integrity sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw== +electron-to-chromium@^1.5.263: + version "1.5.286" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e" + integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A== emittery@^0.13.1: version "0.13.1" @@ -6485,13 +6476,13 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.17.1" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.13.0: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.19.0: + version "5.19.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c" + integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.0" enquirer@~2.3.6: version "2.3.6" @@ -6561,10 +6552,10 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^1.2.1: - version "1.5.4" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" - integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" @@ -6588,7 +6579,7 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -escalade@^3.1.1, escalade@^3.1.2: +escalade@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -9503,10 +9494,10 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== loader-utils@^1.1.0: version "1.4.2" @@ -10344,15 +10335,10 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - -node-releases@^2.0.19: - version "2.0.20" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.20.tgz#e26bb79dbdd1e64a146df389c699014c611cbc27" - integrity sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== nopt@^7.0.0, nopt@^7.2.1: version "7.2.1" @@ -12574,7 +12560,7 @@ schema-utils@^2.7.0: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: +schema-utils@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -12583,10 +12569,10 @@ schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0, schema-utils@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== +schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -12664,7 +12650,7 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: +serialize-javascript@^6.0.0, serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== @@ -13409,10 +13395,10 @@ table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tapable@^2.0.0, tapable@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== tar-fs@2.1.1, tar-fs@2.1.4, tar-fs@^2.0.0: version "2.1.4" @@ -13480,18 +13466,18 @@ tempy@^3.0.0: type-fest "^2.12.2" unique-string "^3.0.0" -terser-webpack-plugin@^5.3.7: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== +terser-webpack-plugin@^5.3.16: + version "5.3.16" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330" + integrity sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q== dependencies: - "@jridgewell/trace-mapping" "^0.3.20" + "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" -terser@^5.10.0, terser@^5.26.0: +terser@^5.10.0: version "5.31.6" resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1" integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg== @@ -13501,6 +13487,16 @@ terser@^5.10.0, terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" +terser@^5.31.1: + version "5.46.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.0.tgz#1b81e560d584bbdd74a8ede87b4d9477b0ff9695" + integrity sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.15.0" + commander "^2.20.0" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -13984,18 +13980,10 @@ upath@2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== - dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" - -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -14119,10 +14107,10 @@ wasm-feature-detect@^1.6.1: resolved "https://registry.yarnpkg.com/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz#4e9f55b0a64d801f372fbb0324ed11ad3abd0c78" integrity sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ== -watchpack@^2.4.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== +watchpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" + integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -14263,40 +14251,41 @@ webpack-merge@^5.7.3: flat "^5.0.2" wildcard "^2.0.0" -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@5.81.0: - version "5.81.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.81.0.tgz#27a2e8466c8b4820d800a8d90f06ef98294f9956" - integrity sha512-AAjaJ9S4hYCVODKLQTgG5p5e11hiMawBwV2v8MYLE0C/6UAGLuAF4n1qa9GOwdxnicaP+5k6M5HrLmD4+gIB8Q== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" +webpack-sources@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== + +webpack@5.105.0: + version "5.105.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a" + integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.15.0" + acorn-import-phases "^1.0.3" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.13.0" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.19.0" + es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.2" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" + schema-utils "^4.3.3" + tapable "^2.3.0" + terser-webpack-plugin "^5.3.16" + watchpack "^2.5.1" + webpack-sources "^3.3.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" From 3d5a5f2215922fab5fbbc070e20bfbffd46c60d3 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 17 Feb 2026 14:56:58 +0000 Subject: [PATCH 13/90] chore(version): Update package versions to 4.16.2 [skip ci] --- CHANGELOG.md | 4 ++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 69 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2d4b1412f..d07d991b26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package root + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 8e7bcd0d51..408d2ade06 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -68b475b3eca38236ac124c78b37b72217cfbd6a6 \ No newline at end of file +d77f3b9cef78c58742629bdbb0423432f3595c61 \ No newline at end of file diff --git a/lerna.json b/lerna.json index def7a94fd2..d40b60d303 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.16.1", + "version": "4.16.2", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 3c73b10ed9..64c7f88dba 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index e71b8e2c35..09177d339c 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.16.1", + "version": "4.16.2", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.1", - "@cornerstonejs/tools": "4.16.1" + "@cornerstonejs/core": "4.16.2", + "@cornerstonejs/tools": "4.16.2" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index f553d280ed..21279630f1 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 26a4684e71..db53e3a894 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.16.1", + "version": "4.16.2", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.1", - "@cornerstonejs/tools": "4.16.1" + "@cornerstonejs/core": "4.16.2", + "@cornerstonejs/tools": "4.16.2" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 0461fd7724..1acb8897c6 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 8688110df1..d983c24f0f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.16.1", + "version": "4.16.2", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 16878b75ed..dbf4ffe75e 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 7b83727609..081ff973ec 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.16.1", + "version": "4.16.2", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.1", + "@cornerstonejs/core": "4.16.2", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 1d43e1ce52..d8c3c730d3 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 0f6aa573e0..e52ef2a257 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.16.1", + "version": "4.16.2", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.1", - "@cornerstonejs/tools": "4.16.1", + "@cornerstonejs/core": "4.16.2", + "@cornerstonejs/tools": "4.16.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index b5bff9f576..34d23d02af 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 7a37613ec9..07b53aa9c6 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.16.1", + "version": "4.16.2", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.1" + "@cornerstonejs/core": "4.16.2" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 9d1dd5bc53..50d6138419 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 9cd57ebfc3..dbad13b830 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.16.1", + "version": "4.16.2", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.1", - "@cornerstonejs/tools": "4.16.1", + "@cornerstonejs/core": "4.16.2", + "@cornerstonejs/tools": "4.16.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 6881559391..c4dde817f8 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.16.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.0...v4.16.1) (2026-02-11) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index c651b76b3f..122201b16a 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.16.1", + "version": "4.16.2", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.1", + "@cornerstonejs/core": "4.16.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index c454ea4d55..d34b126d04 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.1'; +export const version = '4.16.2'; diff --git a/version.json b/version.json index eadb1a81c8..aed4a195b2 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.16.1", - "commit": "68b475b3eca38236ac124c78b37b72217cfbd6a6" + "version": "4.16.2", + "commit": "d77f3b9cef78c58742629bdbb0423432f3595c61" } \ No newline at end of file diff --git a/version.txt b/version.txt index 99463916eb..418b826bd1 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.16.1 \ No newline at end of file +4.16.2 \ No newline at end of file From a5c6d51e556d672ef37e2badbce7078cbd6ae096 Mon Sep 17 00:00:00 2001 From: rodrigobasilio2022 <114958722+rodrigobasilio2022@users.noreply.github.com> Date: Tue, 17 Feb 2026 20:14:17 -0300 Subject: [PATCH 14/90] fix palette color image loading (#2610) * refactor the solution given * fix fetch color tables * important refactors to optimize worker functionality * refactor fetch palette data * fix clearly wrong test values * refactor as reviewer suggestions * fix: Convert 16 bit declared as 8 palette color data * fix: or condition on setting 16 bit palette data --------- Co-authored-by: Bill Wallace --- .../convertPALETTECOLOR.ts | 135 +++++++++--------- .../fetchLUTForInstance.ts | 44 ++++++ .../colorSpaceConverters/fetchPaletteData.ts | 33 +++++ .../imageLoader/colorSpaceConverters/index.ts | 10 +- .../src/imageLoader/convertColorSpace.ts | 4 +- .../src/imageLoader/createImage.ts | 21 ++- .../dicomImageLoader/src/imageLoader/index.ts | 9 +- packages/dicomImageLoader/src/index.ts | 9 +- .../testImages/TestPattern_Palette.ts | 4 +- .../testImages/TestPattern_Palette_16.ts | 4 +- 10 files changed, 193 insertions(+), 80 deletions(-) create mode 100644 packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchLUTForInstance.ts create mode 100644 packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchPaletteData.ts diff --git a/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.ts b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.ts index 7d6c7b2c2c..84b7fa5ad7 100644 --- a/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.ts +++ b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.ts @@ -1,5 +1,6 @@ import type { ByteArray } from 'dicom-parser'; -import { metaData, type Types } from '@cornerstonejs/core'; +import type { Types } from '@cornerstonejs/core'; +import { fetchLUTForInstance } from './fetchLUTForInstance'; function convertLUTto8Bit(lut: number[], shift: number) { const numEntries = lut.length; @@ -12,33 +13,16 @@ function convertLUTto8Bit(lut: number[], shift: number) { return cleanedLUT; } -function fetchPaletteData(imageFrame, color, fallback) { - const data = imageFrame[`${color}PaletteColorLookupTableData`]; - if (data) { - return Promise.resolve(data); - } - - const result = metaData.get('imagePixelModule', imageFrame.imageId); - - if (result && typeof result.then === 'function') { - return result.then((module) => - module ? module[`${color}PaletteColorLookupTableData`] : fallback - ); - } else { - return Promise.resolve( - result ? result[`${color}PaletteColorLookupTableData`] : fallback - ); - } -} - /** - * Convert pixel data with PALETTE COLOR Photometric Interpretation to RGBA + * Convert pixel data with PALETTE COLOR Photometric Interpretation to RGB/RGBA + * Note: Palette bulkdata must be loaded on the imageFrame before calling this function * - * @param imageFrame - The ImageFrame to convert + * @param imageFrame - The ImageFrame to convert (must have palette data loaded) * @param colorBuffer - The buffer to write the converted pixel data to + * @param useRGBA - Whether to output RGBA (true) or RGB (false) * @returns */ -export default function ( +export default function convertPaletteColor( imageFrame: Types.IImageFrame, colorBuffer: ByteArray, useRGBA: boolean @@ -46,50 +30,29 @@ export default function ( const numPixels = imageFrame.columns * imageFrame.rows; const pixelData = imageFrame.pixelData; - Promise.all([ - fetchPaletteData(imageFrame, 'red', null), - fetchPaletteData(imageFrame, 'green', null), - fetchPaletteData(imageFrame, 'blue', null), - ]).then(([rData, gData, bData]) => { - if (!rData || !gData || !bData) { - throw new Error( - 'The image does not have a complete color palette. R, G, and B palette data are required.' - ); - } + const rData = imageFrame.redPaletteColorLookupTableData; + const gData = imageFrame.greenPaletteColorLookupTableData; + const bData = imageFrame.bluePaletteColorLookupTableData; - const len = rData.length; - let palIndex = 0; - let bufferIndex = 0; - - const start = imageFrame.redPaletteColorLookupTableDescriptor[1]; - const shift = - imageFrame.redPaletteColorLookupTableDescriptor[2] === 8 ? 0 : 8; - - const rDataCleaned = convertLUTto8Bit(rData, shift); - const gDataCleaned = convertLUTto8Bit(gData, shift); - const bDataCleaned = convertLUTto8Bit(bData, shift); - - if (useRGBA) { - for (let i = 0; i < numPixels; ++i) { - let value = pixelData[palIndex++]; - - if (value < start) { - value = 0; - } else if (value > start + len - 1) { - value = len - 1; - } else { - value -= start; - } - - colorBuffer[bufferIndex++] = rDataCleaned[value]; - colorBuffer[bufferIndex++] = gDataCleaned[value]; - colorBuffer[bufferIndex++] = bDataCleaned[value]; - colorBuffer[bufferIndex++] = 255; - } + if (!rData || !gData || !bData) { + throw new Error( + 'The image does not have a complete color palette. R, G, and B palette data are required.' + ); + } - return; - } + const len = rData.length; + let palIndex = 0; + let bufferIndex = 0; + + const start = imageFrame.redPaletteColorLookupTableDescriptor[1]; + const bitsStored = imageFrame.redPaletteColorLookupTableDescriptor[2]; + const shift = bitsStored > 8 || rData.some((num) => num > 255) ? 8 : 0; + const rDataCleaned = convertLUTto8Bit(rData, shift); + const gDataCleaned = convertLUTto8Bit(gData, shift); + const bDataCleaned = convertLUTto8Bit(bData, shift); + + if (useRGBA) { for (let i = 0; i < numPixels; ++i) { let value = pixelData[palIndex++]; @@ -104,6 +67,48 @@ export default function ( colorBuffer[bufferIndex++] = rDataCleaned[value]; colorBuffer[bufferIndex++] = gDataCleaned[value]; colorBuffer[bufferIndex++] = bDataCleaned[value]; + colorBuffer[bufferIndex++] = 255; + } + + return; + } + + for (let i = 0; i < numPixels; ++i) { + let value = pixelData[palIndex++]; + + if (value < start) { + value = 0; + } else if (value > start + len - 1) { + value = len - 1; + } else { + value -= start; } - }); + + colorBuffer[bufferIndex++] = rDataCleaned[value]; + colorBuffer[bufferIndex++] = gDataCleaned[value]; + colorBuffer[bufferIndex++] = bDataCleaned[value]; + } +} + +/** + * Convert pixel data with PALETTE COLOR Photometric Interpretation to RGB/RGBA + * with automatic fetching of palette color lookup tables if not already loaded. + * This is useful for users who want to convert palette color frames without + * manually fetching the palette data first. + * + * @param imageFrame - The ImageFrame to convert + * @param colorBuffer - The buffer to write the converted pixel data to + * @param useRGBA - Whether to output RGBA (true) or RGB (false) + * @returns Promise that resolves when conversion is complete + */ +export async function convertPaletteColorWithFetch( + imageFrame: Types.IImageFrame, + colorBuffer: ByteArray, + useRGBA: boolean +): Promise { + // Fetch LUT data if needed (palette, modality, VOI) + await fetchLUTForInstance(imageFrame); + + // Call the synchronous conversion function + convertPaletteColor(imageFrame, colorBuffer, useRGBA); } diff --git a/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchLUTForInstance.ts b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchLUTForInstance.ts new file mode 100644 index 0000000000..1c4e714667 --- /dev/null +++ b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchLUTForInstance.ts @@ -0,0 +1,44 @@ +import type { Types } from '@cornerstonejs/core'; +import { metaData } from '@cornerstonejs/core'; +import { fetchPaletteData } from './fetchPaletteData'; + +/** + * Fetches all necessary LUT data (palette, modality, VOI) for an image instance if not already loaded. + * This function only returns a promise if there is actual LUT data to fetch from metadata. + * TODO : Extend this to modality and VOI LUT fetching as needed. + * + * @param imageFrame - The ImageFrame to fetch LUT data for + * @returns Promise that resolves when all LUT data is fetched, or void if no fetching needed + */ +export async function fetchLUTForInstance( + imageFrame: Types.IImageFrame +): Promise | null { + const fetchPromises = []; + + // Check if palette color LUTs need to be fetched + const needsPaletteLUT = + !imageFrame.redPaletteColorLookupTableData || + !imageFrame.greenPaletteColorLookupTableData || + !imageFrame.bluePaletteColorLookupTableData; + + if (needsPaletteLUT) { + // Fetch palette data if not already loaded + const palettePromises = Promise.all([ + fetchPaletteData(imageFrame, 'red', null), + fetchPaletteData(imageFrame, 'green', null), + fetchPaletteData(imageFrame, 'blue', null), + ]).then(([redData, greenData, blueData]) => { + // Attach palette data to imageFrame + imageFrame.redPaletteColorLookupTableData = redData; + imageFrame.greenPaletteColorLookupTableData = greenData; + imageFrame.bluePaletteColorLookupTableData = blueData; + }); + + fetchPromises.push(palettePromises); + } + + // Only await if there are promises to fetch + if (fetchPromises.length > 0) { + await Promise.all(fetchPromises); + } +} diff --git a/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchPaletteData.ts b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchPaletteData.ts new file mode 100644 index 0000000000..6a33d91ca9 --- /dev/null +++ b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/fetchPaletteData.ts @@ -0,0 +1,33 @@ +import type { Types } from '@cornerstonejs/core'; +import { metaData } from '@cornerstonejs/core'; + +/** + * Fetches the palette color lookup table data for a given color (red, green, or blue) from the image frame. + * If the data is not present on the image frame, it attempts to fetch it from the metadata store. + * @param imageFrame - The image frame containing palette information + * @param color - The color channel to fetch ('red', 'green', or 'blue') + * @param fallback - Value to return if palette data is not found + * @returns Promise resolving to the palette color lookup table data or fallback value + */ +export function fetchPaletteData( + imageFrame: Types.IImageFrame, + color: 'red' | 'green' | 'blue', + fallback +) { + const data = imageFrame[`${color}PaletteColorLookupTableData`]; + if (data) { + return Promise.resolve(data); + } + + const result = metaData.get('imagePixelModule', imageFrame.imageId); + + if (result && typeof result.then === 'function') { + return result.then((module) => + module ? module[`${color}PaletteColorLookupTableData`] : fallback + ); + } else { + return Promise.resolve( + result ? result[`${color}PaletteColorLookupTableData`] : fallback + ); + } +} diff --git a/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/index.ts b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/index.ts index d36621a1ef..811081284a 100644 --- a/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/index.ts +++ b/packages/dicomImageLoader/src/imageLoader/colorSpaceConverters/index.ts @@ -3,7 +3,11 @@ import { default as convertRGBColorByPlane } from './convertRGBColorByPlane'; import { default as convertYBRFullByPixel } from './convertYBRFullByPixel'; import { default as convertYBRFullByPlane } from './convertYBRFullByPlane'; import { default as convertYBRFull422ByPixel } from './convertYBRFull422ByPixel'; -import { default as convertPALETTECOLOR } from './convertPALETTECOLOR'; +import { + default as convertPaletteColor, + convertPaletteColorWithFetch, +} from './convertPALETTECOLOR'; +import { fetchLUTForInstance } from './fetchLUTForInstance'; export { convertRGBColorByPixel, @@ -11,5 +15,7 @@ export { convertYBRFullByPixel, convertYBRFullByPlane, convertYBRFull422ByPixel, - convertPALETTECOLOR, + convertPaletteColor, + convertPaletteColorWithFetch, + fetchLUTForInstance, }; diff --git a/packages/dicomImageLoader/src/imageLoader/convertColorSpace.ts b/packages/dicomImageLoader/src/imageLoader/convertColorSpace.ts index c2ec14b51f..5acd04563a 100644 --- a/packages/dicomImageLoader/src/imageLoader/convertColorSpace.ts +++ b/packages/dicomImageLoader/src/imageLoader/convertColorSpace.ts @@ -4,7 +4,7 @@ import { convertYBRFullByPixel, convertYBRFull422ByPixel, convertYBRFullByPlane, - convertPALETTECOLOR, + convertPaletteColor, } from './colorSpaceConverters/index'; function convertRGB(imageFrame, colorBuffer, useRGBA) { @@ -39,7 +39,7 @@ export default function convertColorSpace(imageFrame, colorBuffer, useRGBA) { // for those cases. convertRGBColorByPixel(imageFrame.pixelData, colorBuffer, useRGBA); } else if (imageFrame.photometricInterpretation === 'PALETTE COLOR') { - convertPALETTECOLOR(imageFrame, colorBuffer, useRGBA); + convertPaletteColor(imageFrame, colorBuffer, useRGBA); } else if (imageFrame.photometricInterpretation === 'YBR_FULL_422') { convertYBRFull422ByPixel(imageFrame.pixelData, colorBuffer, useRGBA); } else if (imageFrame.photometricInterpretation === 'YBR_FULL') { diff --git a/packages/dicomImageLoader/src/imageLoader/createImage.ts b/packages/dicomImageLoader/src/imageLoader/createImage.ts index 746ce2c06d..62d46cf315 100644 --- a/packages/dicomImageLoader/src/imageLoader/createImage.ts +++ b/packages/dicomImageLoader/src/imageLoader/createImage.ts @@ -18,10 +18,11 @@ import isColorImageFn from '../shared/isColorImage'; import removeAFromRGBA from './removeAFromRGBA'; import isModalityLUTForDisplay from './isModalityLutForDisplay'; import setPixelDataType from './setPixelDataType'; +import { fetchPaletteData } from './colorSpaceConverters/fetchPaletteData'; let lastImageIdDrawn = ''; -function createImage( +async function createImage( imageId: string, pixelData: ByteArray, transferSyntax: string, @@ -51,6 +52,16 @@ function createImage( options.allowFloatRendering = canRenderFloatTextures(); + let redData, greenData, blueData; + // For PALETTE COLOR images, ensure palette bulkdata is loaded before decoding + if (imageFrame.photometricInterpretation === 'PALETTE COLOR') { + [redData, greenData, blueData] = await Promise.all([ + fetchPaletteData(imageFrame, 'red', null), + fetchPaletteData(imageFrame, 'green', null), + fetchPaletteData(imageFrame, 'blue', null), + ]); + } + // Get the scaling parameters from the metadata if (options.preScale.enabled) { const scalingParameters = getScalingParameters(metaData, imageId); @@ -164,6 +175,14 @@ function createImage( metaData.get(MetadataModules.CALIBRATION, imageId) || {}; const { rows, columns } = imageFrame; + // For PALETTE COLOR images, assign palette bulkdata after decoding + // to avoid copying unnecessary memory to/from the worker + if (imageFrame.photometricInterpretation === 'PALETTE COLOR') { + imageFrame.redPaletteColorLookupTableData = redData; + imageFrame.greenPaletteColorLookupTableData = greenData; + imageFrame.bluePaletteColorLookupTableData = blueData; + } + if (isColorImage) { if (isColorConversionRequired(imageFrame)) { canvas.height = imageFrame.rows; diff --git a/packages/dicomImageLoader/src/imageLoader/index.ts b/packages/dicomImageLoader/src/imageLoader/index.ts index 68f062752e..d51ff6abaa 100644 --- a/packages/dicomImageLoader/src/imageLoader/index.ts +++ b/packages/dicomImageLoader/src/imageLoader/index.ts @@ -3,7 +3,8 @@ import { convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, - convertPALETTECOLOR, + convertPaletteColor, + convertPaletteColorWithFetch, } from './colorSpaceConverters/index'; import { default as wadouri } from './wadouri/index'; @@ -29,7 +30,8 @@ const cornerstoneDICOMImageLoader = { convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, - convertPALETTECOLOR, + convertPaletteColor, + convertPaletteColorWithFetch, wadouri, wadors, init, @@ -54,7 +56,8 @@ export { convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, - convertPALETTECOLOR, + convertPaletteColorWithFetch, + convertPaletteColor, wadouri, wadors, init, diff --git a/packages/dicomImageLoader/src/index.ts b/packages/dicomImageLoader/src/index.ts index bdb67a2a53..00efdbc4a8 100644 --- a/packages/dicomImageLoader/src/index.ts +++ b/packages/dicomImageLoader/src/index.ts @@ -3,7 +3,8 @@ import { convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, - convertPALETTECOLOR, + convertPaletteColor, + convertPaletteColorWithFetch, } from './imageLoader/colorSpaceConverters/index'; import { default as wadouri } from './imageLoader/wadouri/index'; @@ -32,7 +33,8 @@ const cornerstoneDICOMImageLoader = { convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, - convertPALETTECOLOR, + convertPaletteColor, + convertPaletteColorWithFetch, wadouri, wadors, init, @@ -57,7 +59,8 @@ export { convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, - convertPALETTECOLOR, + convertPaletteColor, + convertPaletteColorWithFetch, wadouri, wadors, init, diff --git a/packages/dicomImageLoader/testImages/TestPattern_Palette.ts b/packages/dicomImageLoader/testImages/TestPattern_Palette.ts index c6e5a1c8b7..26b37c321d 100644 --- a/packages/dicomImageLoader/testImages/TestPattern_Palette.ts +++ b/packages/dicomImageLoader/testImages/TestPattern_Palette.ts @@ -34,7 +34,7 @@ const EXPECTED_IMAGE: Types.IImage = { imageData: { data: jasmine.any(Uint8ClampedArray) }, // @ts-expect-error jasmine matcher imageId: jasmine.any(String), - largestPixelValue: 0, + largestPixelValue: 255, photometricInterpretation: 'PALETTE COLOR', // @ts-expect-error jasmine matcher pixelData: jasmine.any(Uint8ClampedArray), @@ -52,7 +52,7 @@ const EXPECTED_IMAGE: Types.IImage = { imageId: jasmine.any(String), intercept: 0, invert: false, - maxPixelValue: 0, + maxPixelValue: 255, minPixelValue: 0, numberOfComponents: 3, preScale: undefined, diff --git a/packages/dicomImageLoader/testImages/TestPattern_Palette_16.ts b/packages/dicomImageLoader/testImages/TestPattern_Palette_16.ts index bbc73476a1..db0d05db7b 100644 --- a/packages/dicomImageLoader/testImages/TestPattern_Palette_16.ts +++ b/packages/dicomImageLoader/testImages/TestPattern_Palette_16.ts @@ -34,7 +34,7 @@ const EXPECTED_IMAGE: Types.IImage = { imageData: { data: jasmine.any(Uint8ClampedArray) }, // @ts-expect-error jasmine matcher imageId: jasmine.any(String), - largestPixelValue: 0, + largestPixelValue: 255, photometricInterpretation: 'PALETTE COLOR', // @ts-expect-error jasmine matcher pixelData: jasmine.any(Uint8ClampedArray), @@ -52,7 +52,7 @@ const EXPECTED_IMAGE: Types.IImage = { imageId: jasmine.any(String), intercept: 0, invert: false, - maxPixelValue: 0, + maxPixelValue: 255, minPixelValue: 0, numberOfComponents: 3, preScale: undefined, From 393338d4397985ace2a98739d3c0fea93a13fd74 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 17 Feb 2026 23:18:00 +0000 Subject: [PATCH 15/90] chore(version): Update package versions to 4.16.3 [skip ci] --- CHANGELOG.md | 4 ++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 69 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d07d991b26..73be12b6f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package root + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package root diff --git a/commit.txt b/commit.txt index 408d2ade06..55dce4d8b4 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -d77f3b9cef78c58742629bdbb0423432f3595c61 \ No newline at end of file +c92964cfb88c2f526aecd0c99f946c4e9ac1a8ce \ No newline at end of file diff --git a/lerna.json b/lerna.json index d40b60d303..3f9ff55c6d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.16.2", + "version": "4.16.3", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 64c7f88dba..da0535d966 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 09177d339c..75678d1247 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.16.2", + "version": "4.16.3", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.2", - "@cornerstonejs/tools": "4.16.2" + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 21279630f1..be03523c15 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index db53e3a894..942b89ef57 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.16.2", + "version": "4.16.3", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.2", - "@cornerstonejs/tools": "4.16.2" + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 1acb8897c6..85f2f9867d 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index d983c24f0f..b97d3430ae 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.16.2", + "version": "4.16.3", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index dbf4ffe75e..67158e653a 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 081ff973ec..5239438a80 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.16.2", + "version": "4.16.3", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.2", + "@cornerstonejs/core": "4.16.3", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index d8c3c730d3..6b04b0f829 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index e52ef2a257..8802349366 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.16.2", + "version": "4.16.3", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.2", - "@cornerstonejs/tools": "4.16.2", + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 34d23d02af..aba1035955 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 07b53aa9c6..5b58a51bd2 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.16.2", + "version": "4.16.3", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.2" + "@cornerstonejs/core": "4.16.3" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 50d6138419..f6013b82ac 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index dbad13b830..d83c5d1a3d 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.16.2", + "version": "4.16.3", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.2", - "@cornerstonejs/tools": "4.16.2", + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index c4dde817f8..77a75b4291 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.16.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.1...v4.16.2) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 122201b16a..4b24b3e89a 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.16.2", + "version": "4.16.3", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.2", + "@cornerstonejs/core": "4.16.3", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index d34b126d04..743a409fc1 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.2'; +export const version = '4.16.3'; diff --git a/version.json b/version.json index aed4a195b2..6259f79be7 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.16.2", - "commit": "d77f3b9cef78c58742629bdbb0423432f3595c61" + "version": "4.16.3", + "commit": "c92964cfb88c2f526aecd0c99f946c4e9ac1a8ce" } \ No newline at end of file diff --git a/version.txt b/version.txt index 418b826bd1..5b33ac5264 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.16.2 \ No newline at end of file +4.16.3 \ No newline at end of file From ee0b1eef1a8646ff630e9ce49cb38e48fa076213 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Wed, 18 Feb 2026 13:31:53 -0500 Subject: [PATCH 16/90] fix(security): Bump tar to 7.5.9 and lerna to 9.0.4 to fix CVE-2026-26960 (#2618) --- .circleci/config.yml | 3 - bun.lock | 701 +++++++++------ package.json | 5 +- yarn.lock | 1970 ++++++++++++++++++++++++++---------------- 4 files changed, 1678 insertions(+), 1001 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f7e1acdad0..2b77f9d3ae 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,9 +38,6 @@ jobs: # Define ignored vulnerabilities with comments IGNORED_VULNS=( "GHSA-5j98-mcp5-4vw2" # CVE-2025-64756 - glob is not used on the command line - "GHSA-8qq5-rm4j-mr97" # CVE-2026-23745 - limited to build/dev environments - "GHSA-r6q2-hw4h-h46w" # CVE-2026-23950 - limited to build/dev environments - "GHSA-34x7-hfp2-rc4v" # CVE-2026-24842 - limited to build/dev environments ) # Build ignore flags diff --git a/bun.lock b/bun.lock index 58be74d147..f188876bd1 100644 --- a/bun.lock +++ b/bun.lock @@ -76,7 +76,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "5.0.1", - "lerna": "8.2.1", + "lerna": "9.0.4", "lint-staged": "13.3.0", "mocha": "10.8.2", "nyc": "17.1.0", @@ -124,7 +124,7 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -133,13 +133,13 @@ "ndarray": "1.0.19", }, "peerDependencies": { - "@cornerstonejs/core": "4.15.31", - "@cornerstonejs/tools": "4.15.31", + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3", }, }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -151,13 +151,13 @@ "onnxruntime-web": "1.17.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.15.31", - "@cornerstonejs/tools": "4.15.31", + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3", }, }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -167,7 +167,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -180,48 +180,48 @@ "uuid": "9.0.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.15.31", + "@cornerstonejs/core": "4.16.3", "dicom-parser": "1.8.21", }, }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", }, "peerDependencies": { - "@cornerstonejs/core": "4.15.31", - "@cornerstonejs/tools": "4.15.31", + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3", "@kitware/vtk.js": "34.15.1", }, }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "nifti-reader-js": "0.6.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.15.31", + "@cornerstonejs/core": "4.16.3", }, }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.15.31", - "@cornerstonejs/tools": "4.15.31", + "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/tools": "4.16.3", "@kitware/vtk.js": "34.15.1", }, }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.16.1", + "version": "4.16.3", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", @@ -231,7 +231,7 @@ "canvas": "3.2.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.15.31", + "@cornerstonejs/core": "4.16.3", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", @@ -252,6 +252,7 @@ "lodash": "4.17.23", "node-forge": "1.3.2", "qs": "6.14.1", + "tar": "7.5.9", "tar-fs": "2.1.4", "ws": "8.18.3", }, @@ -608,6 +609,38 @@ "@icr/polyseg-wasm": ["@icr/polyseg-wasm@0.4.0", "", {}, "sha512-3sZmiwG8I0NaqPle0L7+V/ZexiR7IjIUFkUsaOoFI9rNuBGyyMMmxAxnCmqcDFtBDk9h+JEYJf6e3NnqlHi/HQ=="], + "@inquirer/ansi": ["@inquirer/ansi@1.0.2", "", {}, "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ=="], + + "@inquirer/checkbox": ["@inquirer/checkbox@4.3.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA=="], + + "@inquirer/confirm": ["@inquirer/confirm@5.1.21", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ=="], + + "@inquirer/core": ["@inquirer/core@10.3.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A=="], + + "@inquirer/editor": ["@inquirer/editor@4.2.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/external-editor": "^1.0.3", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ=="], + + "@inquirer/expand": ["@inquirer/expand@4.0.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew=="], + + "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], + + "@inquirer/figures": ["@inquirer/figures@1.0.15", "", {}, "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g=="], + + "@inquirer/input": ["@inquirer/input@4.3.1", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g=="], + + "@inquirer/number": ["@inquirer/number@3.0.23", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg=="], + + "@inquirer/password": ["@inquirer/password@4.0.23", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA=="], + + "@inquirer/prompts": ["@inquirer/prompts@7.10.1", "", { "dependencies": { "@inquirer/checkbox": "^4.3.2", "@inquirer/confirm": "^5.1.21", "@inquirer/editor": "^4.2.23", "@inquirer/expand": "^4.0.23", "@inquirer/input": "^4.3.1", "@inquirer/number": "^3.0.23", "@inquirer/password": "^4.0.23", "@inquirer/rawlist": "^4.1.11", "@inquirer/search": "^3.2.2", "@inquirer/select": "^4.4.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg=="], + + "@inquirer/rawlist": ["@inquirer/rawlist@4.1.11", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw=="], + + "@inquirer/search": ["@inquirer/search@3.2.2", "", { "dependencies": { "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA=="], + + "@inquirer/select": ["@inquirer/select@4.4.2", "", { "dependencies": { "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w=="], + + "@inquirer/type": ["@inquirer/type@3.0.10", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA=="], + "@ipld/car": ["@ipld/car@5.4.0", "", { "dependencies": { "@ipld/dag-cbor": "^9.0.7", "cborg": "^4.0.5", "multiformats": "^13.0.0", "varint": "^6.0.0" } }, "sha512-FiGxOhTUh3fn/kkA+YvNYQjA/T8T5DcKG0NZwAi3aXrizN1qm99HzdYTccEwcX/rUCtI8wTUCKDNPBLUb7pBIQ=="], "@ipld/dag-cbor": ["@ipld/dag-cbor@9.2.2", "", { "dependencies": { "cborg": "^4.0.0", "multiformats": "^13.1.0" } }, "sha512-uIEOuruCqKTP50OBWwgz4Js2+LhiBQaxc57cnP71f45b1mHEAo1OCR1Zn/TbvSW/mV1x+JqhacIktkKyaYqhCw=="], @@ -618,8 +651,14 @@ "@ipld/unixfs": ["@ipld/unixfs@3.0.0", "", { "dependencies": { "@ipld/dag-pb": "^4.0.0", "@multiformats/murmur3": "^2.1.3", "@perma/map": "^1.0.2", "actor": "^2.3.1", "multiformats": "^13.0.1", "protobufjs": "^7.1.2", "rabin-rs": "^2.1.0" } }, "sha512-Tj3/BPOlnemcZQ2ETIZAO8hqAs9KNzWyX5J9+JCL9jDwvYwjxeYjqJ3v+9DusNvTBmJhZnGVP6ijUHrsuOLp+g=="], + "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], + + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.1", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ=="], + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@isaacs/string-locale-compare": ["@isaacs/string-locale-compare@1.1.0", "", {}, "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ=="], "@istanbuljs/load-nyc-config": ["@istanbuljs/load-nyc-config@1.1.0", "", { "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" } }, "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="], @@ -636,6 +675,8 @@ "@jest/core": ["@jest/core@29.7.0", "", { "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^29.7.0", "jest-config": "^29.7.0", "jest-haste-map": "^29.7.0", "jest-message-util": "^29.7.0", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", "jest-resolve-dependencies": "^29.7.0", "jest-runner": "^29.7.0", "jest-runtime": "^29.7.0", "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg=="], + "@jest/diff-sequences": ["@jest/diff-sequences@30.0.1", "", {}, "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw=="], + "@jest/environment": ["@jest/environment@30.2.0", "", { "dependencies": { "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0" } }, "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g=="], "@jest/environment-jsdom-abstract": ["@jest/environment-jsdom-abstract@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/jsdom": "^21.1.7", "@types/node": "*", "jest-mock": "30.2.0", "jest-util": "30.2.0" }, "peerDependencies": { "canvas": "^3.0.0", "jsdom": "*" }, "optionalPeers": ["canvas"] }, "sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ=="], @@ -646,6 +687,8 @@ "@jest/fake-timers": ["@jest/fake-timers@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-util": "30.2.0" } }, "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw=="], + "@jest/get-type": ["@jest/get-type@30.1.0", "", {}, "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA=="], + "@jest/globals": ["@jest/globals@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", "jest-mock": "^29.7.0" } }, "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ=="], "@jest/pattern": ["@jest/pattern@30.0.1", "", { "dependencies": { "@types/node": "*", "jest-regex-util": "30.0.1" } }, "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA=="], @@ -688,7 +731,7 @@ "@leichtgewicht/ip-codec": ["@leichtgewicht/ip-codec@2.0.5", "", {}, "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="], - "@lerna/create": ["@lerna/create@8.2.1", "", { "dependencies": { "@npmcli/arborist": "7.5.4", "@npmcli/package-json": "5.2.0", "@npmcli/run-script": "8.1.0", "@nx/devkit": ">=17.1.2 < 21", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "20.1.2", "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", "clone-deep": "4.0.1", "cmd-shim": "6.0.3", "color-support": "1.1.3", "columnify": "1.6.0", "console-control-strings": "^1.1.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", "cosmiconfig": "9.0.0", "dedent": "1.5.3", "execa": "5.0.0", "fs-extra": "^11.2.0", "get-stream": "6.0.0", "git-url-parse": "14.0.0", "glob-parent": "6.0.2", "globby": "11.1.0", "graceful-fs": "4.2.11", "has-unicode": "2.0.1", "ini": "^1.3.8", "init-package-json": "6.0.3", "inquirer": "^8.2.4", "is-ci": "3.0.1", "is-stream": "2.0.0", "js-yaml": "4.1.0", "libnpmpublish": "9.0.9", "load-json-file": "6.2.0", "lodash": "^4.17.21", "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", "npm-package-arg": "11.0.2", "npm-packlist": "8.0.2", "npm-registry-fetch": "^17.1.0", "nx": ">=17.1.2 < 21", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", "p-reduce": "^2.1.0", "pacote": "^18.0.6", "pify": "5.0.0", "read-cmd-shim": "4.0.0", "resolve-from": "5.0.0", "rimraf": "^4.4.1", "semver": "^7.3.4", "set-blocking": "^2.0.0", "signal-exit": "3.0.7", "slash": "^3.0.0", "ssri": "^10.0.6", "string-width": "^4.2.3", "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", "upath": "2.0.1", "uuid": "^10.0.0", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "5.0.1", "wide-align": "1.1.5", "write-file-atomic": "5.0.1", "write-pkg": "4.0.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" } }, "sha512-Cz2u/fwc03D1EE6VFZCLMmI8FIUtGmxHQ3ECeNblsxv9i0YSKWe4Xm18sjO1xltG/K5ByiH8/HMeY9dlyAv22A=="], + "@lerna/create": ["@lerna/create@9.0.4", "", { "dependencies": { "@npmcli/arborist": "9.1.6", "@npmcli/package-json": "7.0.2", "@npmcli/run-script": "10.0.3", "@nx/devkit": ">=21.5.2 < 23.0.0", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "20.1.2", "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", "cmd-shim": "6.0.3", "color-support": "1.1.3", "columnify": "1.6.0", "console-control-strings": "^1.1.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", "cosmiconfig": "9.0.0", "dedent": "1.5.3", "execa": "5.0.0", "fs-extra": "^11.2.0", "get-stream": "6.0.0", "git-url-parse": "14.0.0", "glob-parent": "6.0.2", "has-unicode": "2.0.1", "ini": "^1.3.8", "init-package-json": "8.2.2", "inquirer": "12.9.6", "is-ci": "3.0.1", "is-stream": "2.0.0", "js-yaml": "4.1.1", "libnpmpublish": "11.1.2", "load-json-file": "6.2.0", "make-dir": "4.0.0", "make-fetch-happen": "15.0.2", "minimatch": "3.0.5", "multimatch": "5.0.0", "npm-package-arg": "13.0.1", "npm-packlist": "10.0.3", "npm-registry-fetch": "19.1.0", "nx": ">=21.5.3 < 23.0.0", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", "p-reduce": "^2.1.0", "pacote": "21.0.1", "pify": "5.0.0", "read-cmd-shim": "4.0.0", "resolve-from": "5.0.0", "rimraf": "^6.1.2", "semver": "7.7.2", "set-blocking": "^2.0.0", "signal-exit": "3.0.7", "slash": "^3.0.0", "ssri": "12.0.0", "string-width": "^4.2.3", "tar": "7.5.7", "temp-dir": "1.0.0", "through": "2.3.8", "tinyglobby": "0.2.12", "upath": "2.0.1", "uuid": "^11.1.0", "validate-npm-package-license": "3.0.4", "validate-npm-package-name": "6.0.2", "wide-align": "1.1.5", "write-file-atomic": "5.0.1", "write-pkg": "4.0.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" } }, "sha512-WxedGD98G8/a6HztCXNWquaM0x17oSvfvuqDsLxNNX1qXGyrzmMUmd1mQikF/47uy80X6qyWdaRtaAHlwkvEUA=="], "@microsoft/api-extractor": ["@microsoft/api-extractor@7.49.2", "", { "dependencies": { "@microsoft/api-extractor-model": "7.30.3", "@microsoft/tsdoc": "~0.15.1", "@microsoft/tsdoc-config": "~0.17.1", "@rushstack/node-core-library": "5.11.0", "@rushstack/rig-package": "0.5.3", "@rushstack/terminal": "0.14.6", "@rushstack/ts-command-line": "4.23.4", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.7.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-DI/WnvhbkHcucxxc4ys00ejCiViFls5EKPrEfe4NV3GGpVkoM5ZXF61HZNSGA8IG0oEV4KfTqIa59Rc3wdMopw=="], @@ -726,55 +769,55 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@npmcli/agent": ["@npmcli/agent@2.2.2", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og=="], + "@npmcli/agent": ["@npmcli/agent@4.0.0", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA=="], - "@npmcli/arborist": ["@npmcli/arborist@7.5.4", "", { "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^3.1.1", "@npmcli/installed-package-contents": "^2.1.0", "@npmcli/map-workspaces": "^3.0.2", "@npmcli/metavuln-calculator": "^7.1.1", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.1.0", "@npmcli/query": "^3.1.0", "@npmcli/redact": "^2.0.0", "@npmcli/run-script": "^8.1.0", "bin-links": "^4.0.4", "cacache": "^18.0.3", "common-ancestor-path": "^1.0.1", "hosted-git-info": "^7.0.2", "json-parse-even-better-errors": "^3.0.2", "json-stringify-nice": "^1.1.4", "lru-cache": "^10.2.2", "minimatch": "^9.0.4", "nopt": "^7.2.1", "npm-install-checks": "^6.2.0", "npm-package-arg": "^11.0.2", "npm-pick-manifest": "^9.0.1", "npm-registry-fetch": "^17.0.1", "pacote": "^18.0.6", "parse-conflict-json": "^3.0.0", "proc-log": "^4.2.0", "proggy": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "ssri": "^10.0.6", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" }, "bin": { "arborist": "bin/index.js" } }, "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g=="], + "@npmcli/arborist": ["@npmcli/arborist@9.1.6", "", { "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^4.0.0", "@npmcli/installed-package-contents": "^3.0.0", "@npmcli/map-workspaces": "^5.0.0", "@npmcli/metavuln-calculator": "^9.0.2", "@npmcli/name-from-folder": "^3.0.0", "@npmcli/node-gyp": "^4.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/query": "^4.0.0", "@npmcli/redact": "^3.0.0", "@npmcli/run-script": "^10.0.0", "bin-links": "^5.0.0", "cacache": "^20.0.1", "common-ancestor-path": "^1.0.1", "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", "lru-cache": "^11.2.1", "minimatch": "^10.0.3", "nopt": "^8.0.0", "npm-install-checks": "^7.1.0", "npm-package-arg": "^13.0.0", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "pacote": "^21.0.2", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "proggy": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "semver": "^7.3.7", "ssri": "^12.0.0", "treeverse": "^3.0.0", "walk-up-path": "^4.0.0" }, "bin": { "arborist": "bin/index.js" } }, "sha512-c5Pr3EG8UP5ollkJy2x+UdEQC5sEHe3H9whYn6hb2HJimAKS4zmoJkx5acCiR/g4P38RnCSMlsYQyyHnKYeLvQ=="], - "@npmcli/fs": ["@npmcli/fs@3.1.1", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg=="], + "@npmcli/fs": ["@npmcli/fs@4.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q=="], - "@npmcli/git": ["@npmcli/git@5.0.8", "", { "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "ini": "^4.1.3", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^4.0.0" } }, "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ=="], + "@npmcli/git": ["@npmcli/git@7.0.1", "", { "dependencies": { "@npmcli/promise-spawn": "^9.0.0", "ini": "^6.0.0", "lru-cache": "^11.2.1", "npm-pick-manifest": "^11.0.1", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^6.0.0" } }, "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA=="], - "@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@2.1.0", "", { "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" }, "bin": { "installed-package-contents": "bin/index.js" } }, "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w=="], + "@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@3.0.0", "", { "dependencies": { "npm-bundled": "^4.0.0", "npm-normalize-package-bin": "^4.0.0" }, "bin": { "installed-package-contents": "bin/index.js" } }, "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q=="], - "@npmcli/map-workspaces": ["@npmcli/map-workspaces@3.0.6", "", { "dependencies": { "@npmcli/name-from-folder": "^2.0.0", "glob": "^10.2.2", "minimatch": "^9.0.0", "read-package-json-fast": "^3.0.0" } }, "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA=="], + "@npmcli/map-workspaces": ["@npmcli/map-workspaces@5.0.3", "", { "dependencies": { "@npmcli/name-from-folder": "^4.0.0", "@npmcli/package-json": "^7.0.0", "glob": "^13.0.0", "minimatch": "^10.0.3" } }, "sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw=="], - "@npmcli/metavuln-calculator": ["@npmcli/metavuln-calculator@7.1.1", "", { "dependencies": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", "pacote": "^18.0.0", "proc-log": "^4.1.0", "semver": "^7.3.5" } }, "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g=="], + "@npmcli/metavuln-calculator": ["@npmcli/metavuln-calculator@9.0.3", "", { "dependencies": { "cacache": "^20.0.0", "json-parse-even-better-errors": "^5.0.0", "pacote": "^21.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5" } }, "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg=="], - "@npmcli/name-from-folder": ["@npmcli/name-from-folder@2.0.0", "", {}, "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg=="], + "@npmcli/name-from-folder": ["@npmcli/name-from-folder@3.0.0", "", {}, "sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA=="], - "@npmcli/node-gyp": ["@npmcli/node-gyp@3.0.0", "", {}, "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA=="], + "@npmcli/node-gyp": ["@npmcli/node-gyp@4.0.0", "", {}, "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA=="], - "@npmcli/package-json": ["@npmcli/package-json@5.2.0", "", { "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", "proc-log": "^4.0.0", "semver": "^7.5.3" } }, "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ=="], + "@npmcli/package-json": ["@npmcli/package-json@7.0.2", "", { "dependencies": { "@npmcli/git": "^7.0.0", "glob": "^11.0.3", "hosted-git-info": "^9.0.0", "json-parse-even-better-errors": "^5.0.0", "proc-log": "^6.0.0", "semver": "^7.5.3", "validate-npm-package-license": "^3.0.4" } }, "sha512-0ylN3U5htO1SJTmy2YI78PZZjLkKUGg7EKgukb2CRi0kzyoDr0cfjHAzi7kozVhj2V3SxN1oyKqZ2NSo40z00g=="], - "@npmcli/promise-spawn": ["@npmcli/promise-spawn@7.0.2", "", { "dependencies": { "which": "^4.0.0" } }, "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ=="], + "@npmcli/promise-spawn": ["@npmcli/promise-spawn@9.0.1", "", { "dependencies": { "which": "^6.0.0" } }, "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q=="], - "@npmcli/query": ["@npmcli/query@3.1.0", "", { "dependencies": { "postcss-selector-parser": "^6.0.10" } }, "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ=="], + "@npmcli/query": ["@npmcli/query@4.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" } }, "sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw=="], - "@npmcli/redact": ["@npmcli/redact@2.0.1", "", {}, "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw=="], + "@npmcli/redact": ["@npmcli/redact@3.2.2", "", {}, "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg=="], - "@npmcli/run-script": ["@npmcli/run-script@8.1.0", "", { "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", "proc-log": "^4.0.0", "which": "^4.0.0" } }, "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg=="], + "@npmcli/run-script": ["@npmcli/run-script@10.0.3", "", { "dependencies": { "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "node-gyp": "^12.1.0", "proc-log": "^6.0.0", "which": "^6.0.0" } }, "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw=="], - "@nx/devkit": ["@nx/devkit@20.6.0", "", { "dependencies": { "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { "nx": ">= 19 <= 21" } }, "sha512-w2GkzXSE3OFnQrE0jTmc4Uf2P92kmiHAmNCtppyJ97M2nEBodecf8p3Ghp6jZj0TjGqeJQv7hKOB/HzAnRl+KQ=="], + "@nx/devkit": ["@nx/devkit@22.5.1", "", { "dependencies": { "@zkochan/js-yaml": "0.0.7", "ejs": "^3.1.7", "enquirer": "~2.3.6", "minimatch": "10.1.1", "semver": "^7.6.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { "nx": ">= 21 <= 23 || ^22.0.0-0" } }, "sha512-1ZJ8pCB+6EWC8X6q8tfBweg92WzFAwliBhtBkOPP8Li8GQq71ulPWRdY4lDd5pH3Ea1zKqhOtBKWdOlyDPOKYA=="], - "@nx/nx-darwin-arm64": ["@nx/nx-darwin-arm64@20.6.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qJcXeZvMpYVxTA35wZ24+MR2PO+0wd4sEB4fuS4pNFo/TqOlwKgK2LUFk+sU1xZjdcUkk9Cf3w4o0ySg5tgJcQ=="], + "@nx/nx-darwin-arm64": ["@nx/nx-darwin-arm64@22.5.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DuvOwhXPO6l9W7/zM4/BaAbGTIXFyHVcbbCD1c7HfgZ3VfJPmcE7H4+TuQH0cigHHtpg/eGqV100NQbd7N4zwg=="], - "@nx/nx-darwin-x64": ["@nx/nx-darwin-x64@20.6.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-JDh/glX95yyMdEsf81KkhuM56FbHC56ZC4VC5x2b6biEMyWEP4G18eUZPhrAkpTDHsiKmwefOiJfXzscR8y74g=="], + "@nx/nx-darwin-x64": ["@nx/nx-darwin-x64@22.5.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-81Lb7+rp3Qltpgy33Kc1qxk+8IWqZLhqvdLdRFSVV1FN1pPSJDFKyPjCn9oMpRryNPSJ8DgZDpfIaVVyP85rUw=="], - "@nx/nx-freebsd-x64": ["@nx/nx-freebsd-x64@20.6.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KQNNEk6bNAfbW3vYdzBKrOKPrX3wFaME5LQfE0Be0c4GrGo8zO3yxHGEDZeM2W7muR+xRx8j9P3NUOAR9h7RpQ=="], + "@nx/nx-freebsd-x64": ["@nx/nx-freebsd-x64@22.5.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Ig8yQN3lSz9R+Zf3NQWcvEnIzwDX4NSeaFtEliPnC3OHlQXGNXbOUfkExa0U0UUgyxa4rgnCgefmwuc12H9q2Q=="], - "@nx/nx-linux-arm-gnueabihf": ["@nx/nx-linux-arm-gnueabihf@20.6.0", "", { "os": "linux", "cpu": "arm" }, "sha512-a/FsFaNLa+dXwSxkg7K88m3VJ6fK16oCLqMX6QNSuTcXsdcSWYPoMkjsuiYXPOjLQjozukOWMjDswUeuMqrehA=="], + "@nx/nx-linux-arm-gnueabihf": ["@nx/nx-linux-arm-gnueabihf@22.5.1", "", { "os": "linux", "cpu": "arm" }, "sha512-C7tGoLnR9MjKLJsLMF2VsKcDChPiygAsw6dSVgU4B650H7sBWmkEHM/QjvyRvkcZuoQBDamS/eVs/UaJu9wNhA=="], - "@nx/nx-linux-arm64-gnu": ["@nx/nx-linux-arm64-gnu@20.6.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-M3vVf9eLQPYog0/I+TZT5IMjOp1wtkQXPJzZbnqMIerTMLlHSRYkuwox2Qc8C1EmvMm100MDZU440/doOK7Jig=="], + "@nx/nx-linux-arm64-gnu": ["@nx/nx-linux-arm64-gnu@22.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-GNxei+lwhzhrO9m+nNkibgxLhbkYKyFXPSRpOKLwv9VavNzJn5UmLfKJyhjNQPBOSYuNhiVPbU1Ja/qOBcozYw=="], - "@nx/nx-linux-arm64-musl": ["@nx/nx-linux-arm64-musl@20.6.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-GGce7WhJp6LSclwCK2fGgztD+hKslqDA01SCUPrXOiJ8UGp1goUDXvMZoDxeldcxt3ptIeazb5VW3hTE9WSXYA=="], + "@nx/nx-linux-arm64-musl": ["@nx/nx-linux-arm64-musl@22.5.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-VDJtdJP2nCgS8ommbfWFAKjoZCE51VH7tZyIfh8RFI5fxwoB3Pk6d6f6cmNHI/1t98YI3V7Onuf3Y9KBkYtyfQ=="], - "@nx/nx-linux-x64-gnu": ["@nx/nx-linux-x64-gnu@20.6.0", "", { "os": "linux", "cpu": "x64" }, "sha512-9bpu3xPCCnwn++Wdpnh5BTDjqCNs/C7dSBWMUM5GMyRcnZUVjwAboevmLGXEOqL5kW6MvXgRqiYgv6vSjNHsrw=="], + "@nx/nx-linux-x64-gnu": ["@nx/nx-linux-x64-gnu@22.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-BZ/i+KTplEJmE8ZHKgPGD513Zl86DuSGyRAvbDZ7Qf19Tei7Of6vxW+ypvVDIwmDbyXfe13u54M5gDt8iiqFGQ=="], - "@nx/nx-linux-x64-musl": ["@nx/nx-linux-x64-musl@20.6.0", "", { "os": "linux", "cpu": "x64" }, "sha512-oWuEJyQeJvGGvmjYRMLkX8nazYuDytNn6gORCQCNpI6h4svQ8SgPLfgmAHFXmqjsIULTE5RuGc0X06lT+fDATw=="], + "@nx/nx-linux-x64-musl": ["@nx/nx-linux-x64-musl@22.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-e0VdiV6fe88Dbhill2gUjYAD9jMhHjYsafGOPR+/uaGMAYPoI1jKur6uPGY+ik6fvwvDFFl0VT2+HACKVn7RoA=="], - "@nx/nx-win32-arm64-msvc": ["@nx/nx-win32-arm64-msvc@20.6.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-MgYRBYDbdyLAA+/cF5dao9kvk2zvwS6i8PMZA1Jj9ltVwPOz30Qj5gx0PmwsOlAV784aG4OX26Wa/XlXwZqjXg=="], + "@nx/nx-win32-arm64-msvc": ["@nx/nx-win32-arm64-msvc@22.5.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-3vWZO9y7uHKeyepcU55pE8VQTKGome3mLdicvx1TCoKKl0cA3bTR341Jdo2Zl4Waa2ENk7pGQbLWRQ3ZkaA92A=="], - "@nx/nx-win32-x64-msvc": ["@nx/nx-win32-x64-msvc@20.6.0", "", { "os": "win32", "cpu": "x64" }, "sha512-xfCaefdf1dHQxqN8OLfiA8Cq9b8F1HqVnpWYVB6zoD/TCsmRhV8KLbUlnv2n4AK+ZYu7H1AgAFF9lC4vDeeoTQ=="], + "@nx/nx-win32-x64-msvc": ["@nx/nx-win32-x64-msvc@22.5.1", "", { "os": "win32", "cpu": "x64" }, "sha512-4e5LduuhpBx96JgD1J3fHUGCwC+/lL+tvXp3UVtjh/AOdINGsyI+scinT3uaI9vcB5GKBcybTxbBZzwcH50w9g=="], "@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="], @@ -950,17 +993,17 @@ "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - "@sigstore/bundle": ["@sigstore/bundle@2.3.2", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.3.2" } }, "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA=="], + "@sigstore/bundle": ["@sigstore/bundle@4.0.0", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A=="], - "@sigstore/core": ["@sigstore/core@1.1.0", "", {}, "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg=="], + "@sigstore/core": ["@sigstore/core@3.1.0", "", {}, "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A=="], - "@sigstore/protobuf-specs": ["@sigstore/protobuf-specs@0.3.3", "", {}, "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ=="], + "@sigstore/protobuf-specs": ["@sigstore/protobuf-specs@0.5.0", "", {}, "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA=="], - "@sigstore/sign": ["@sigstore/sign@2.3.2", "", { "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", "@sigstore/protobuf-specs": "^0.3.2", "make-fetch-happen": "^13.0.1", "proc-log": "^4.2.0", "promise-retry": "^2.0.1" } }, "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA=="], + "@sigstore/sign": ["@sigstore/sign@4.1.0", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", "@sigstore/protobuf-specs": "^0.5.0", "make-fetch-happen": "^15.0.3", "proc-log": "^6.1.0", "promise-retry": "^2.0.1" } }, "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg=="], - "@sigstore/tuf": ["@sigstore/tuf@2.3.4", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.3.2", "tuf-js": "^2.2.1" } }, "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw=="], + "@sigstore/tuf": ["@sigstore/tuf@4.0.1", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.5.0", "tuf-js": "^4.1.0" } }, "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw=="], - "@sigstore/verify": ["@sigstore/verify@1.2.1", "", { "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.1.0", "@sigstore/protobuf-specs": "^0.3.2" } }, "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g=="], + "@sigstore/verify": ["@sigstore/verify@3.1.0", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag=="], "@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="], @@ -988,7 +1031,7 @@ "@tufjs/canonical-json": ["@tufjs/canonical-json@2.0.0", "", {}, "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA=="], - "@tufjs/models": ["@tufjs/models@2.0.1", "", { "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^9.0.4" } }, "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg=="], + "@tufjs/models": ["@tufjs/models@4.1.0", "", { "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^10.1.1" } }, "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], @@ -1168,7 +1211,7 @@ "JSONStream": ["JSONStream@1.3.5", "", { "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "./bin.js" } }, "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ=="], - "abbrev": ["abbrev@2.0.0", "", {}, "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ=="], + "abbrev": ["abbrev@3.0.1", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="], "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], @@ -1282,7 +1325,7 @@ "big.js": ["big.js@5.2.2", "", {}, "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="], - "bin-links": ["bin-links@4.0.4", "", { "dependencies": { "cmd-shim": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", "read-cmd-shim": "^4.0.0", "write-file-atomic": "^5.0.0" } }, "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA=="], + "bin-links": ["bin-links@5.0.0", "", { "dependencies": { "cmd-shim": "^7.0.0", "npm-normalize-package-bin": "^4.0.0", "proc-log": "^5.0.0", "read-cmd-shim": "^5.0.0", "write-file-atomic": "^6.0.0" } }, "sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA=="], "binary": ["binary@0.3.0", "", { "dependencies": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" } }, "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg=="], @@ -1334,7 +1377,7 @@ "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "cacache": ["cacache@18.0.4", "", { "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" } }, "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ=="], + "cacache": ["cacache@20.0.3", "", { "dependencies": { "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", "glob": "^13.0.0", "lru-cache": "^11.1.0", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^13.0.0", "unique-filename": "^5.0.0" } }, "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw=="], "caching-transform": ["caching-transform@4.0.0", "", { "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" } }, "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA=="], @@ -1366,13 +1409,13 @@ "char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], - "chardet": ["chardet@0.7.0", "", {}, "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="], + "chardet": ["chardet@2.1.1", "", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="], "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], @@ -1392,7 +1435,7 @@ "cli-truncate": ["cli-truncate@3.1.0", "", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" } }, "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA=="], - "cli-width": ["cli-width@3.0.0", "", {}, "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="], + "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], @@ -1778,8 +1821,6 @@ "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], - "external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="], - "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], @@ -1800,6 +1841,8 @@ "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "fflate": ["fflate@0.7.3", "", {}, "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw=="], "figures": ["figures@3.2.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="], @@ -1946,7 +1989,7 @@ "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], - "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], + "hosted-git-info": ["hosted-git-info@9.0.2", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg=="], "hpack.js": ["hpack.js@2.1.6", "", { "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" } }, "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ=="], @@ -1992,7 +2035,7 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "ignore-walk": ["ignore-walk@6.0.5", "", { "dependencies": { "minimatch": "^9.0.0" } }, "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A=="], + "ignore-walk": ["ignore-walk@8.0.0", "", { "dependencies": { "minimatch": "^10.0.3" } }, "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A=="], "image-type": ["image-type@4.1.0", "", { "dependencies": { "file-type": "^10.10.0" } }, "sha512-CFJMJ8QK8lJvRlTCEgarL4ro6hfDQKif2HjSvYCdQZESaIPV4v9imrf7BQHK+sQeTeNeMpWciR9hyC/g8ybXEg=="], @@ -2012,9 +2055,9 @@ "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - "init-package-json": ["init-package-json@6.0.3", "", { "dependencies": { "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", "read": "^3.0.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" } }, "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w=="], + "init-package-json": ["init-package-json@8.2.2", "", { "dependencies": { "@npmcli/package-json": "^7.0.0", "npm-package-arg": "^13.0.0", "promzard": "^2.0.0", "read": "^4.0.0", "semver": "^7.7.2", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^6.0.2" } }, "sha512-pXVMn67Jdw2hPKLCuJZj62NC9B2OIDd1R3JwZXTHXuEnfN3Uq5kJbKOSld6YEU+KOGfMD82EzxFTYz5o0SSJoA=="], - "inquirer": ["inquirer@8.2.6", "", { "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", "ora": "^5.4.1", "run-async": "^2.4.0", "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^6.0.1" } }, "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg=="], + "inquirer": ["inquirer@12.9.6", "", { "dependencies": { "@inquirer/ansi": "^1.0.0", "@inquirer/core": "^10.2.2", "@inquirer/prompts": "^7.8.6", "@inquirer/type": "^3.0.8", "mute-stream": "^2.0.0", "run-async": "^4.0.5", "rxjs": "^7.8.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw=="], "interface-blockstore": ["interface-blockstore@5.3.1", "", { "dependencies": { "interface-store": "^6.0.0", "multiformats": "^13.2.3" } }, "sha512-nhgrQnz6yUQEqxTFLhlOBurQOy5lWlwCpgFmZ3GTObTVTQS9RZjK/JTozY6ty9uz2lZs7VFJSqwjWAltorJ4Vw=="], @@ -2060,8 +2103,6 @@ "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], - "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], - "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], "is-natural-number": ["is-natural-number@4.0.1", "", {}, "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ=="], @@ -2164,7 +2205,7 @@ "jest-config": ["jest-config@29.7.0", "", { "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", "@jest/types": "^29.6.3", "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "jest-circus": "^29.7.0", "jest-environment-node": "^29.7.0", "jest-get-type": "^29.6.3", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", "jest-runner": "^29.7.0", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "ts-node"] }, "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ=="], - "jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="], + "jest-diff": ["jest-diff@30.2.0", "", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "pretty-format": "30.2.0" } }, "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A=="], "jest-docblock": ["jest-docblock@29.7.0", "", { "dependencies": { "detect-newline": "^3.0.0" } }, "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g=="], @@ -2220,7 +2261,7 @@ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], @@ -2280,15 +2321,15 @@ "lerc": ["lerc@3.0.0", "", {}, "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="], - "lerna": ["lerna@8.2.1", "", { "dependencies": { "@lerna/create": "8.2.1", "@npmcli/arborist": "7.5.4", "@npmcli/package-json": "5.2.0", "@npmcli/run-script": "8.1.0", "@nx/devkit": ">=17.1.2 < 21", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "20.1.2", "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", "clone-deep": "4.0.1", "cmd-shim": "6.0.3", "color-support": "1.1.3", "columnify": "1.6.0", "console-control-strings": "^1.1.0", "conventional-changelog-angular": "7.0.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", "cosmiconfig": "9.0.0", "dedent": "1.5.3", "envinfo": "7.13.0", "execa": "5.0.0", "fs-extra": "^11.2.0", "get-port": "5.1.1", "get-stream": "6.0.0", "git-url-parse": "14.0.0", "glob-parent": "6.0.2", "globby": "11.1.0", "graceful-fs": "4.2.11", "has-unicode": "2.0.1", "import-local": "3.1.0", "ini": "^1.3.8", "init-package-json": "6.0.3", "inquirer": "^8.2.4", "is-ci": "3.0.1", "is-stream": "2.0.0", "jest-diff": ">=29.4.3 < 30", "js-yaml": "4.1.0", "libnpmaccess": "8.0.6", "libnpmpublish": "9.0.9", "load-json-file": "6.2.0", "lodash": "^4.17.21", "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", "npm-package-arg": "11.0.2", "npm-packlist": "8.0.2", "npm-registry-fetch": "^17.1.0", "nx": ">=17.1.2 < 21", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", "p-queue": "6.6.2", "p-reduce": "2.1.0", "p-waterfall": "2.1.1", "pacote": "^18.0.6", "pify": "5.0.0", "read-cmd-shim": "4.0.0", "resolve-from": "5.0.0", "rimraf": "^4.4.1", "semver": "^7.3.8", "set-blocking": "^2.0.0", "signal-exit": "3.0.7", "slash": "3.0.0", "ssri": "^10.0.6", "string-width": "^4.2.3", "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", "typescript": ">=3 < 6", "upath": "2.0.1", "uuid": "^10.0.0", "validate-npm-package-license": "3.0.4", "validate-npm-package-name": "5.0.1", "wide-align": "1.1.5", "write-file-atomic": "5.0.1", "write-pkg": "4.0.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" }, "bin": { "lerna": "dist/cli.js" } }, "sha512-Xwjv9/4ixp7fpBWhtvp7dz4NoQT8DEf7hzibHKCgu/8kmZUHeXsTn+TKspHqhI+p4YDmdkDnkg8xmymz73kVOg=="], + "lerna": ["lerna@9.0.4", "", { "dependencies": { "@lerna/create": "9.0.4", "@npmcli/arborist": "9.1.6", "@npmcli/package-json": "7.0.2", "@npmcli/run-script": "10.0.3", "@nx/devkit": ">=21.5.2 < 23.0.0", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "20.1.2", "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", "cmd-shim": "6.0.3", "color-support": "1.1.3", "columnify": "1.6.0", "console-control-strings": "^1.1.0", "conventional-changelog-angular": "7.0.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", "cosmiconfig": "9.0.0", "dedent": "1.5.3", "envinfo": "7.13.0", "execa": "5.0.0", "fs-extra": "^11.2.0", "get-port": "5.1.1", "get-stream": "6.0.0", "git-url-parse": "14.0.0", "glob-parent": "6.0.2", "has-unicode": "2.0.1", "import-local": "3.1.0", "ini": "^1.3.8", "init-package-json": "8.2.2", "inquirer": "12.9.6", "is-ci": "3.0.1", "is-stream": "2.0.0", "jest-diff": ">=30.0.0 < 31", "js-yaml": "4.1.1", "libnpmaccess": "10.0.3", "libnpmpublish": "11.1.2", "load-json-file": "6.2.0", "make-dir": "4.0.0", "make-fetch-happen": "15.0.2", "minimatch": "3.0.5", "multimatch": "5.0.0", "npm-package-arg": "13.0.1", "npm-packlist": "10.0.3", "npm-registry-fetch": "19.1.0", "nx": ">=21.5.3 < 23.0.0", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", "p-queue": "6.6.2", "p-reduce": "2.1.0", "p-waterfall": "2.1.1", "pacote": "21.0.1", "pify": "5.0.0", "read-cmd-shim": "4.0.0", "resolve-from": "5.0.0", "rimraf": "^6.1.2", "semver": "7.7.2", "set-blocking": "^2.0.0", "signal-exit": "3.0.7", "slash": "3.0.0", "ssri": "12.0.0", "string-width": "^4.2.3", "tar": "7.5.7", "temp-dir": "1.0.0", "through": "2.3.8", "tinyglobby": "0.2.12", "typescript": ">=3 < 6", "upath": "2.0.1", "uuid": "^11.1.0", "validate-npm-package-license": "3.0.4", "validate-npm-package-name": "6.0.2", "wide-align": "1.1.5", "write-file-atomic": "5.0.1", "write-pkg": "4.0.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" }, "bin": { "lerna": "dist/cli.js" } }, "sha512-wKy9TOkkdCWPWET0R5o7mh7J0KuNNjxE0g+qTruNAt5ffWwy54wfWiJtWyDSMOrcGDt6gtisDBTKniOqK/sJvw=="], "lerp": ["lerp@1.0.3", "", {}, "sha512-70Rh4rCkJDvwWiTsyZ1HmJGvnyfFah4m6iTux29XmasRiZPDBpT9Cfa4ai73+uLZxnlKruUS62jj2lb11wURiA=="], "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], - "libnpmaccess": ["libnpmaccess@8.0.6", "", { "dependencies": { "npm-package-arg": "^11.0.2", "npm-registry-fetch": "^17.0.1" } }, "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw=="], + "libnpmaccess": ["libnpmaccess@10.0.3", "", { "dependencies": { "npm-package-arg": "^13.0.0", "npm-registry-fetch": "^19.0.0" } }, "sha512-JPHTfWJxIK+NVPdNMNGnkz4XGX56iijPbe0qFWbdt68HL+kIvSzh+euBL8npLZvl2fpaxo+1eZSdoG15f5YdIQ=="], - "libnpmpublish": ["libnpmpublish@9.0.9", "", { "dependencies": { "ci-info": "^4.0.0", "normalize-package-data": "^6.0.1", "npm-package-arg": "^11.0.2", "npm-registry-fetch": "^17.0.1", "proc-log": "^4.2.0", "semver": "^7.3.7", "sigstore": "^2.2.0", "ssri": "^10.0.6" } }, "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg=="], + "libnpmpublish": ["libnpmpublish@11.1.2", "", { "dependencies": { "@npmcli/package-json": "^7.0.0", "ci-info": "^4.0.0", "npm-package-arg": "^13.0.0", "npm-registry-fetch": "^19.0.0", "proc-log": "^5.0.0", "semver": "^7.3.7", "sigstore": "^4.0.0", "ssri": "^12.0.0" } }, "sha512-tNcU3cLH7toloAzhOOrBDhjzgbxpyuYvkf+BPPnnJCdc5EIcdJ8JcT+SglvCQKKyZ6m9dVXtCVlJcA6csxKdEA=="], "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], @@ -2350,7 +2391,7 @@ "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], - "make-fetch-happen": ["make-fetch-happen@13.0.1", "", { "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", "http-cache-semantics": "^4.1.1", "is-lambda": "^1.0.1", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" } }, "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA=="], + "make-fetch-happen": ["make-fetch-happen@15.0.2", "", { "dependencies": { "@npmcli/agent": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "ssri": "^12.0.0" } }, "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ=="], "makeerror": ["makeerror@1.0.12", "", { "dependencies": { "tmpl": "1.0.5" } }, "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg=="], @@ -2412,7 +2453,7 @@ "minipass-collect": ["minipass-collect@2.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw=="], - "minipass-fetch": ["minipass-fetch@3.0.5", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg=="], + "minipass-fetch": ["minipass-fetch@4.0.1", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^3.0.1" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ=="], "minipass-flush": ["minipass-flush@1.0.5", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw=="], @@ -2420,7 +2461,7 @@ "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], - "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], + "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], @@ -2446,7 +2487,7 @@ "murmurhash3js-revisited": ["murmurhash3js-revisited@3.0.0", "", {}, "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g=="], - "mute-stream": ["mute-stream@0.0.8", "", {}, "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="], + "mute-stream": ["mute-stream@2.0.0", "", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], "nanoid": ["nanoid@3.3.10", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg=="], @@ -2456,7 +2497,7 @@ "ndarray": ["ndarray@1.0.19", "", { "dependencies": { "iota-array": "^1.0.0", "is-buffer": "^1.0.2" } }, "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ=="], - "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], @@ -2472,7 +2513,7 @@ "node-forge": ["node-forge@1.3.2", "", {}, "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw=="], - "node-gyp": ["node-gyp@10.3.1", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "glob": "^10.3.10", "graceful-fs": "^4.2.6", "make-fetch-happen": "^13.0.0", "nopt": "^7.0.0", "proc-log": "^4.1.0", "semver": "^7.3.5", "tar": "^6.2.1", "which": "^4.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ=="], + "node-gyp": ["node-gyp@12.2.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "make-fetch-happen": "^15.0.0", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ=="], "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], @@ -2482,27 +2523,27 @@ "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], - "nopt": ["nopt@7.2.1", "", { "dependencies": { "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w=="], + "nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="], - "normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="], + "normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], - "npm-bundled": ["npm-bundled@3.0.1", "", { "dependencies": { "npm-normalize-package-bin": "^3.0.0" } }, "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ=="], + "npm-bundled": ["npm-bundled@4.0.0", "", { "dependencies": { "npm-normalize-package-bin": "^4.0.0" } }, "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA=="], - "npm-install-checks": ["npm-install-checks@6.3.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw=="], + "npm-install-checks": ["npm-install-checks@7.1.2", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ=="], - "npm-normalize-package-bin": ["npm-normalize-package-bin@3.0.1", "", {}, "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ=="], + "npm-normalize-package-bin": ["npm-normalize-package-bin@4.0.0", "", {}, "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w=="], - "npm-package-arg": ["npm-package-arg@11.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" } }, "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw=="], + "npm-package-arg": ["npm-package-arg@13.0.1", "", { "dependencies": { "hosted-git-info": "^9.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^6.0.0" } }, "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag=="], - "npm-packlist": ["npm-packlist@8.0.2", "", { "dependencies": { "ignore-walk": "^6.0.4" } }, "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA=="], + "npm-packlist": ["npm-packlist@10.0.3", "", { "dependencies": { "ignore-walk": "^8.0.0", "proc-log": "^6.0.0" } }, "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg=="], - "npm-pick-manifest": ["npm-pick-manifest@9.1.0", "", { "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", "npm-package-arg": "^11.0.0", "semver": "^7.3.5" } }, "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA=="], + "npm-pick-manifest": ["npm-pick-manifest@11.0.3", "", { "dependencies": { "npm-install-checks": "^8.0.0", "npm-normalize-package-bin": "^5.0.0", "npm-package-arg": "^13.0.0", "semver": "^7.3.5" } }, "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ=="], - "npm-registry-fetch": ["npm-registry-fetch@17.1.0", "", { "dependencies": { "@npmcli/redact": "^2.0.0", "jsonparse": "^1.3.1", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", "proc-log": "^4.0.0" } }, "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA=="], + "npm-registry-fetch": ["npm-registry-fetch@19.1.0", "", { "dependencies": { "@npmcli/redact": "^3.0.0", "jsonparse": "^1.3.1", "make-fetch-happen": "^15.0.0", "minipass": "^7.0.2", "minipass-fetch": "^4.0.0", "minizlib": "^3.0.1", "npm-package-arg": "^13.0.0", "proc-log": "^5.0.0" } }, "sha512-xyZLfs7TxPu/WKjHUs0jZOPinzBAI32kEUel6za0vH+JUTnFZ5zbHI1ZoGZRDm6oMjADtrli6FxtMlk/5ABPNw=="], "npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="], @@ -2510,7 +2551,7 @@ "nwsapi": ["nwsapi@2.2.18", "", {}, "sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA=="], - "nx": ["nx@20.6.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.2", "@zkochan/js-yaml": "0.0.7", "axios": "^1.8.3", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", "dotenv": "~16.4.5", "dotenv-expand": "~11.0.6", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", "front-matter": "^4.0.2", "ignore": "^5.0.4", "jest-diff": "^29.4.1", "jsonc-parser": "3.2.0", "lines-and-columns": "2.0.3", "minimatch": "9.0.3", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", "ora": "5.3.0", "resolve.exports": "2.0.3", "semver": "^7.5.3", "string-width": "^4.2.3", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", "yaml": "^2.6.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "20.6.0", "@nx/nx-darwin-x64": "20.6.0", "@nx/nx-freebsd-x64": "20.6.0", "@nx/nx-linux-arm-gnueabihf": "20.6.0", "@nx/nx-linux-arm64-gnu": "20.6.0", "@nx/nx-linux-arm64-musl": "20.6.0", "@nx/nx-linux-x64-gnu": "20.6.0", "@nx/nx-linux-x64-musl": "20.6.0", "@nx/nx-win32-arm64-msvc": "20.6.0", "@nx/nx-win32-x64-msvc": "20.6.0" }, "peerDependencies": { "@swc-node/register": "^1.8.0", "@swc/core": "^1.3.85" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "bin/nx.js", "nx-cloud": "bin/nx-cloud.js" } }, "sha512-2b9YeQPXShw62KeOHfZ/0FqeHx28GK15uoIh7jfNg0hzVnvLVSJrThUjWHY0a8F4km+B4VKeKO8a3KtdN2cwig=="], + "nx": ["nx@22.5.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.2", "@zkochan/js-yaml": "0.0.7", "axios": "^1.12.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", "dotenv": "~16.4.5", "dotenv-expand": "~11.0.6", "ejs": "^3.1.7", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", "front-matter": "^4.0.2", "ignore": "^7.0.5", "jest-diff": "^30.0.2", "jsonc-parser": "3.2.0", "lines-and-columns": "2.0.3", "minimatch": "10.1.1", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", "ora": "5.3.0", "picocolors": "^1.1.0", "resolve.exports": "2.0.3", "semver": "^7.6.3", "string-width": "^4.2.3", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tree-kill": "^1.2.2", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", "yaml": "^2.6.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "optionalDependencies": { "@nx/nx-darwin-arm64": "22.5.1", "@nx/nx-darwin-x64": "22.5.1", "@nx/nx-freebsd-x64": "22.5.1", "@nx/nx-linux-arm-gnueabihf": "22.5.1", "@nx/nx-linux-arm64-gnu": "22.5.1", "@nx/nx-linux-arm64-musl": "22.5.1", "@nx/nx-linux-x64-gnu": "22.5.1", "@nx/nx-linux-x64-musl": "22.5.1", "@nx/nx-win32-arm64-msvc": "22.5.1", "@nx/nx-win32-x64-msvc": "22.5.1" }, "peerDependencies": { "@swc-node/register": "1.11.1", "@swc/core": "1.15.8" }, "optionalPeers": ["@swc-node/register", "@swc/core"], "bin": { "nx": "bin/nx.js", "nx-cloud": "bin/nx-cloud.js" } }, "sha512-KIQqOSdoshkav9JuoH/+Vp42niA5MTRtACupe+q8CaB7bHiLsWr5nctQVC7ul3NauAmsoqNWH7t5CIi8KgrPIQ=="], "nyc": ["nyc@17.1.0", "", { "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "caching-transform": "^4.0.0", "convert-source-map": "^1.7.0", "decamelize": "^1.2.0", "find-cache-dir": "^3.2.0", "find-up": "^4.1.0", "foreground-child": "^3.3.0", "get-package-type": "^0.1.0", "glob": "^7.1.6", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-hook": "^3.0.0", "istanbul-lib-instrument": "^6.0.2", "istanbul-lib-processinfo": "^2.0.2", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", "make-dir": "^3.0.0", "node-preload": "^0.2.1", "p-map": "^3.0.0", "process-on-spawn": "^1.0.0", "resolve-from": "^5.0.0", "rimraf": "^3.0.0", "signal-exit": "^3.0.2", "spawn-wrap": "^2.0.0", "test-exclude": "^6.0.0", "yargs": "^15.0.2" }, "bin": { "nyc": "bin/nyc.js" } }, "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ=="], @@ -2544,8 +2585,6 @@ "ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], - "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], - "oxc-parser": ["oxc-parser@0.74.0", "", { "dependencies": { "@oxc-project/types": "^0.74.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm64": "0.74.0", "@oxc-parser/binding-darwin-arm64": "0.74.0", "@oxc-parser/binding-darwin-x64": "0.74.0", "@oxc-parser/binding-freebsd-x64": "0.74.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.74.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.74.0", "@oxc-parser/binding-linux-arm64-gnu": "0.74.0", "@oxc-parser/binding-linux-arm64-musl": "0.74.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.74.0", "@oxc-parser/binding-linux-s390x-gnu": "0.74.0", "@oxc-parser/binding-linux-x64-gnu": "0.74.0", "@oxc-parser/binding-linux-x64-musl": "0.74.0", "@oxc-parser/binding-wasm32-wasi": "0.74.0", "@oxc-parser/binding-win32-arm64-msvc": "0.74.0", "@oxc-parser/binding-win32-x64-msvc": "0.74.0" } }, "sha512-2tDN/ttU8WE6oFh8EzKNam7KE7ZXSG5uXmvX85iNzxdJfMssDWcj3gpYzZi1E04XuE7m3v1dVWl/8BE886vPGw=="], "oxlint": ["oxlint@1.9.0", "", { "optionalDependencies": { "@oxlint/darwin-arm64": "1.9.0", "@oxlint/darwin-x64": "1.9.0", "@oxlint/linux-arm64-gnu": "1.9.0", "@oxlint/linux-arm64-musl": "1.9.0", "@oxlint/linux-x64-gnu": "1.9.0", "@oxlint/linux-x64-musl": "1.9.0", "@oxlint/win32-arm64": "1.9.0", "@oxlint/win32-x64": "1.9.0" }, "bin": { "oxlint": "bin/oxlint", "oxc_language_server": "bin/oxc_language_server" } }, "sha512-vvqpkRt7UA1F1DoOJGYO2+T52L6jV4RxS+9hFVCPQ0X+hcNVtbl/TxQuwjobBw8Yw2U8Rb9d8VLJxa8eRSqpQQ=="], @@ -2580,7 +2619,7 @@ "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - "pacote": ["pacote@18.0.6", "", { "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", "npm-registry-fetch": "^17.0.0", "proc-log": "^4.0.0", "promise-retry": "^2.0.1", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "bin/index.js" } }, "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A=="], + "pacote": ["pacote@21.0.1", "", { "dependencies": { "@npmcli/git": "^6.0.0", "@npmcli/installed-package-contents": "^3.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^8.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^13.0.0", "npm-packlist": "^10.0.1", "npm-pick-manifest": "^10.0.0", "npm-registry-fetch": "^19.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "sigstore": "^4.0.0", "ssri": "^12.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" } }, "sha512-LHGIUQUrcDIJUej53KJz1BPvUuHrItrR2yrnN0Kl9657cJ0ZT6QJHk9wWPBnQZhYT5KLyZWrk9jaYc2aKDu4yw=="], "pako": ["pako@2.1.0", "", {}, "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="], @@ -2588,7 +2627,7 @@ "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - "parse-conflict-json": ["parse-conflict-json@3.0.1", "", { "dependencies": { "json-parse-even-better-errors": "^3.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" } }, "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw=="], + "parse-conflict-json": ["parse-conflict-json@4.0.0", "", { "dependencies": { "json-parse-even-better-errors": "^4.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" } }, "sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ=="], "parse-headers": ["parse-headers@2.0.5", "", {}, "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="], @@ -2792,7 +2831,7 @@ "pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], - "proc-log": ["proc-log@4.2.0", "", {}, "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA=="], + "proc-log": ["proc-log@5.0.0", "", {}, "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ=="], "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], @@ -2800,7 +2839,7 @@ "process-on-spawn": ["process-on-spawn@1.1.0", "", { "dependencies": { "fromentries": "^1.2.0" } }, "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q=="], - "proggy": ["proggy@2.0.0", "", {}, "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A=="], + "proggy": ["proggy@3.0.0", "", {}, "sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q=="], "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], @@ -2810,13 +2849,11 @@ "promise-call-limit": ["promise-call-limit@3.0.2", "", {}, "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw=="], - "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], - "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], - "promzard": ["promzard@1.0.2", "", { "dependencies": { "read": "^3.0.1" } }, "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ=="], + "promzard": ["promzard@2.0.0", "", { "dependencies": { "read": "^4.0.0" } }, "sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg=="], "protobufjs": ["protobufjs@7.4.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw=="], @@ -2864,14 +2901,12 @@ "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], - "read": ["read@3.0.1", "", { "dependencies": { "mute-stream": "^1.0.0" } }, "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw=="], + "read": ["read@4.1.0", "", { "dependencies": { "mute-stream": "^2.0.0" } }, "sha512-uRfX6K+f+R8OOrYScaM3ixPY4erg69f8DN6pgTvMcA9iRc8iDhwrA4m3Yu8YYKsXJgVvum+m8PkRboZwwuLzYA=="], "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], "read-cmd-shim": ["read-cmd-shim@4.0.0", "", {}, "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q=="], - "read-package-json-fast": ["read-package-json-fast@3.0.2", "", { "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" } }, "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw=="], - "read-pkg": ["read-pkg@3.0.0", "", { "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA=="], "read-pkg-up": ["read-pkg-up@3.0.0", "", { "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" } }, "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw=="], @@ -2942,7 +2977,7 @@ "run-applescript": ["run-applescript@5.0.0", "", { "dependencies": { "execa": "^5.0.0" } }, "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg=="], - "run-async": ["run-async@2.4.1", "", {}, "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="], + "run-async": ["run-async@4.0.6", "", {}, "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ=="], "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], @@ -3010,7 +3045,7 @@ "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "sigstore": ["sigstore@2.3.1", "", { "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", "@sigstore/protobuf-specs": "^0.3.2", "@sigstore/sign": "^2.3.2", "@sigstore/tuf": "^2.3.4", "@sigstore/verify": "^1.2.1" } }, "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ=="], + "sigstore": ["sigstore@4.1.0", "", { "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.1.0", "@sigstore/protobuf-specs": "^0.5.0", "@sigstore/sign": "^4.1.0", "@sigstore/tuf": "^4.0.1", "@sigstore/verify": "^3.1.0" } }, "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA=="], "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], @@ -3072,7 +3107,7 @@ "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "ssri": ["ssri@10.0.6", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ=="], + "ssri": ["ssri@12.0.0", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ=="], "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], @@ -3106,8 +3141,6 @@ "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "strong-log-transformer": ["strong-log-transformer@2.1.0", "", { "dependencies": { "duplexer": "^0.1.1", "minimist": "^1.2.0", "through": "^2.3.4" }, "bin": { "sl-log-transformer": "bin/sl-log-transformer.js" } }, "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA=="], - "strtok3": ["strtok3@7.1.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^5.1.3" } }, "sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg=="], "style-loader": ["style-loader@3.3.4", "", { "peerDependencies": { "webpack": "^5.0.0" } }, "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w=="], @@ -3136,7 +3169,7 @@ "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], - "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], + "tar": ["tar@7.5.9", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg=="], "tar-fs": ["tar-fs@2.1.4", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="], @@ -3164,6 +3197,8 @@ "tiny-emitter": ["tiny-emitter@2.1.0", "", {}, "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="], + "tinyglobby": ["tinyglobby@0.2.12", "", { "dependencies": { "fdir": "^6.4.3", "picomatch": "^4.0.2" } }, "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww=="], + "titleize": ["titleize@3.0.0", "", {}, "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ=="], "tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], @@ -3192,6 +3227,8 @@ "tree-dump": ["tree-dump@1.0.2", "", { "peerDependencies": { "tslib": "2" } }, "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ=="], + "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], + "treeverse": ["treeverse@3.0.0", "", {}, "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ=="], "trim-newlines": ["trim-newlines@4.1.1", "", {}, "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ=="], @@ -3204,7 +3241,7 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "tuf-js": ["tuf-js@2.2.1", "", { "dependencies": { "@tufjs/models": "2.0.1", "debug": "^4.3.4", "make-fetch-happen": "^13.0.1" } }, "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA=="], + "tuf-js": ["tuf-js@4.1.0", "", { "dependencies": { "@tufjs/models": "4.1.0", "debug": "^4.4.3", "make-fetch-happen": "^15.0.1" } }, "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ=="], "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], @@ -3248,9 +3285,9 @@ "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.1.0", "", {}, "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w=="], - "unique-filename": ["unique-filename@3.0.0", "", { "dependencies": { "unique-slug": "^4.0.0" } }, "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g=="], + "unique-filename": ["unique-filename@5.0.0", "", { "dependencies": { "unique-slug": "^6.0.0" } }, "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg=="], - "unique-slug": ["unique-slug@4.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ=="], + "unique-slug": ["unique-slug@6.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw=="], "unique-string": ["unique-string@3.0.0", "", { "dependencies": { "crypto-random-string": "^4.0.0" } }, "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ=="], @@ -3288,7 +3325,7 @@ "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], - "validate-npm-package-name": ["validate-npm-package-name@5.0.1", "", {}, "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ=="], + "validate-npm-package-name": ["validate-npm-package-name@6.0.2", "", {}, "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ=="], "varint": ["varint@6.0.0", "", {}, "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="], @@ -3298,7 +3335,7 @@ "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], - "walk-up-path": ["walk-up-path@3.0.1", "", {}, "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA=="], + "walk-up-path": ["walk-up-path@4.0.0", "", {}, "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A=="], "walker": ["walker@1.0.8", "", { "dependencies": { "makeerror": "1.0.12" } }, "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ=="], @@ -3354,7 +3391,7 @@ "workerpool": ["workerpool@6.5.1", "", {}, "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA=="], - "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -3388,7 +3425,7 @@ "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], "yaml": ["yaml@2.3.1", "", {}, "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ=="], @@ -3404,6 +3441,8 @@ "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], + "zstddec": ["zstddec@0.1.0", "", {}, "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg=="], "@asamuzakjp/css-color/@csstools/css-calc": ["@csstools/css-calc@2.1.4", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ=="], @@ -3482,12 +3521,16 @@ "@csstools/postcss-is-pseudo-class/@csstools/selector-specificity": ["@csstools/selector-specificity@2.2.0", "", { "peerDependencies": { "postcss-selector-parser": "^6.0.10" } }, "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw=="], + "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "@inquirer/core/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + + "@inquirer/external-editor/iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "@istanbuljs/load-nyc-config/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], @@ -3542,15 +3585,15 @@ "@lerna/create/get-stream": ["get-stream@6.0.0", "", {}, "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg=="], - "@lerna/create/globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "@lerna/create/is-stream": ["is-stream@2.0.0", "", {}, "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="], "@lerna/create/minimatch": ["minimatch@3.0.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw=="], - "@lerna/create/rimraf": ["rimraf@4.4.1", "", { "dependencies": { "glob": "^9.2.0" }, "bin": { "rimraf": "dist/cjs/src/bin.js" } }, "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og=="], + "@lerna/create/rimraf": ["rimraf@6.1.3", "", { "dependencies": { "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA=="], + + "@lerna/create/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - "@lerna/create/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + "@lerna/create/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], "@microsoft/api-extractor/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], @@ -3560,33 +3603,65 @@ "@npmcli/agent/agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], - "@npmcli/agent/https-proxy-agent": ["https-proxy-agent@7.0.5", "", { "dependencies": { "agent-base": "^7.0.2", "debug": "4" } }, "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw=="], + "@npmcli/agent/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "@npmcli/agent/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "@npmcli/arborist/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "@npmcli/arborist/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], + + "@npmcli/arborist/pacote": ["pacote@21.3.1", "", { "dependencies": { "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^13.0.0", "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" } }, "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg=="], + + "@npmcli/arborist/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "@npmcli/fs/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "@npmcli/git/ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="], + + "@npmcli/git/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "@npmcli/git/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "@npmcli/git/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "@npmcli/git/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], + + "@npmcli/map-workspaces/@npmcli/name-from-folder": ["@npmcli/name-from-folder@4.0.0", "", {}, "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg=="], - "@npmcli/agent/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@npmcli/map-workspaces/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], - "@npmcli/arborist/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], + "@npmcli/map-workspaces/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], - "@npmcli/arborist/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@npmcli/metavuln-calculator/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="], - "@npmcli/arborist/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@npmcli/metavuln-calculator/pacote": ["pacote@21.3.1", "", { "dependencies": { "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^13.0.0", "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" } }, "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg=="], - "@npmcli/git/ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], + "@npmcli/metavuln-calculator/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], - "@npmcli/git/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@npmcli/metavuln-calculator/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - "@npmcli/git/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + "@npmcli/package-json/glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], - "@npmcli/map-workspaces/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@npmcli/package-json/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="], - "@npmcli/metavuln-calculator/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], + "@npmcli/package-json/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], - "@npmcli/package-json/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], + "@npmcli/package-json/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - "@npmcli/promise-spawn/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + "@npmcli/promise-spawn/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], - "@npmcli/run-script/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + "@npmcli/query/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], - "@nx/devkit/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "@npmcli/run-script/@npmcli/node-gyp": ["@npmcli/node-gyp@5.0.0", "", {}, "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ=="], + + "@npmcli/run-script/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "@npmcli/run-script/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], + + "@nx/devkit/minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], + + "@nx/devkit/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], "@oxc-parser/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], @@ -3600,9 +3675,13 @@ "@rushstack/node-core-library/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], + "@sigstore/sign/make-fetch-happen": ["make-fetch-happen@15.0.3", "", { "dependencies": { "@npmcli/agent": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "ssri": "^13.0.0" } }, "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw=="], + + "@sigstore/sign/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + "@sinonjs/samsam/type-detect": ["type-detect@4.1.0", "", {}, "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw=="], - "@tufjs/models/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@tufjs/models/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], "@types/connect-history-api-fallback/@types/express-serve-static-core": ["@types/express-serve-static-core@5.0.6", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA=="], @@ -3626,13 +3705,27 @@ "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "bin-links/cmd-shim": ["cmd-shim@7.0.0", "", {}, "sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw=="], + + "bin-links/read-cmd-shim": ["read-cmd-shim@5.0.0", "", {}, "sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw=="], + + "bin-links/write-file-atomic": ["write-file-atomic@6.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ=="], + "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "cacache/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "cacache/@npmcli/fs": ["@npmcli/fs@5.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og=="], + + "cacache/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], + + "cacache/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "cacache/p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], + + "cacache/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], "caching-transform/make-dir": ["make-dir@3.1.0", "", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], @@ -3658,6 +3751,8 @@ "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "compression/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + "compression/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], "concat/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -3668,14 +3763,14 @@ "content-disposition/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "conventional-changelog-core/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "conventional-changelog-writer/meow": ["meow@8.1.2", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q=="], "conventional-commits-parser/meow": ["meow@8.1.2", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q=="], "conventional-recommended-bump/meow": ["meow@8.1.2", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q=="], + "cosmiconfig/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "crypto-random-string/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="], @@ -3742,8 +3837,6 @@ "express/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "external-editor/tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], - "extract-zip/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -3790,7 +3883,7 @@ "hasha/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], - "hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "hosted-git-info/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], "html-minifier-terser/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], @@ -3802,12 +3895,14 @@ "http-proxy-middleware/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "ignore-walk/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "ignore-walk/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], "image-type/file-type": ["file-type@10.11.0", "", {}, "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw=="], "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + "init-package-json/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "ip-address/sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], "ipfs-unixfs-exporter/p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], @@ -3838,6 +3933,8 @@ "jest-config/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "jest-diff/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + "jest-environment-node/@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], "jest-environment-node/@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], @@ -3850,6 +3947,8 @@ "jest-junit/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "jest-matcher-utils/jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="], + "jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "jest-mock/@jest/types": ["@jest/types@30.2.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], @@ -3870,6 +3969,8 @@ "jest-runtime/jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], + "jest-snapshot/jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="], + "jest-util/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "jest-validate/camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], @@ -3904,22 +4005,24 @@ "lerna/get-stream": ["get-stream@6.0.0", "", {}, "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg=="], - "lerna/globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "lerna/import-local": ["import-local@3.1.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg=="], "lerna/is-stream": ["is-stream@2.0.0", "", {}, "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="], "lerna/minimatch": ["minimatch@3.0.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw=="], - "lerna/rimraf": ["rimraf@4.4.1", "", { "dependencies": { "glob": "^9.2.0" }, "bin": { "rimraf": "dist/cjs/src/bin.js" } }, "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og=="], + "lerna/rimraf": ["rimraf@6.1.3", "", { "dependencies": { "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA=="], + + "lerna/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], "lerna/typescript": ["typescript@5.7.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg=="], - "lerna/uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="], + "lerna/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], "libnpmpublish/ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], + "libnpmpublish/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "lint-staged/chalk": ["chalk@5.3.0", "", {}, "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="], "lint-staged/commander": ["commander@11.0.0", "", {}, "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ=="], @@ -3930,8 +4033,6 @@ "listr2/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - "listr2/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "log-update/ansi-escapes": ["ansi-escapes@5.0.0", "", { "dependencies": { "type-fest": "^1.0.2" } }, "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA=="], "log-update/cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="], @@ -3940,8 +4041,6 @@ "log-update/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "log-update/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -3968,10 +4067,10 @@ "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "mocha/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], + "mocha/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "mocha/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], "mocha/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], @@ -3982,13 +4081,37 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "node-gyp/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], + "node-gyp/make-fetch-happen": ["make-fetch-happen@15.0.3", "", { "dependencies": { "@npmcli/agent": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "ssri": "^13.0.0" } }, "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw=="], + + "node-gyp/nopt": ["nopt@9.0.0", "", { "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw=="], + + "node-gyp/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "node-gyp/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "node-gyp/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], + + "normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], + + "npm-install-checks/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "npm-package-arg/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "npm-packlist/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "npm-pick-manifest/npm-install-checks": ["npm-install-checks@8.0.0", "", { "dependencies": { "semver": "^7.1.1" } }, "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA=="], + + "npm-pick-manifest/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], + + "npm-pick-manifest/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], "nx/cli-spinners": ["cli-spinners@2.6.1", "", {}, "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="], - "nx/minimatch": ["minimatch@9.0.3", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg=="], + "nx/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "nx/minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], "nx/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], @@ -3996,7 +4119,9 @@ "nx/ora": ["ora@5.3.0", "", { "dependencies": { "bl": "^4.0.3", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "log-symbols": "^4.0.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g=="], - "nx/yaml": ["yaml@2.7.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA=="], + "nx/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "nx/yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], "nyc/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], @@ -4010,7 +4135,13 @@ "nyc/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], - "parse-conflict-json/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], + "pacote/@npmcli/git": ["@npmcli/git@6.0.3", "", { "dependencies": { "@npmcli/promise-spawn": "^8.0.0", "ini": "^5.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^10.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^5.0.0" } }, "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ=="], + + "pacote/@npmcli/promise-spawn": ["@npmcli/promise-spawn@8.0.3", "", { "dependencies": { "which": "^5.0.0" } }, "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg=="], + + "pacote/npm-pick-manifest": ["npm-pick-manifest@10.0.0", "", { "dependencies": { "npm-install-checks": "^7.1.0", "npm-normalize-package-bin": "^4.0.0", "npm-package-arg": "^12.0.0", "semver": "^7.3.5" } }, "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ=="], + + "parse-conflict-json/json-parse-even-better-errors": ["json-parse-even-better-errors@4.0.0", "", {}, "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA=="], "parse-json/lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], @@ -4038,12 +4169,8 @@ "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - "read/mute-stream": ["mute-stream@1.0.0", "", {}, "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA=="], - "read-cache/pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], - "read-package-json-fast/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], - "read-pkg/load-json-file": ["load-json-file@4.0.0", "", { "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw=="], "read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], @@ -4132,10 +4259,6 @@ "svgo/css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="], - "tar/fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], - - "tar/minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], - "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], "tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], @@ -4164,6 +4287,10 @@ "tsconfig-paths/strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "tuf-js/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "tuf-js/make-fetch-happen": ["make-fetch-happen@15.0.3", "", { "dependencies": { "@npmcli/agent": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "ssri": "^13.0.0" } }, "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw=="], + "tunnel-agent/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], "typedoc/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -4200,7 +4327,11 @@ "worker-loader/schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], - "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + + "wrap-ansi/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -4282,12 +4413,12 @@ "@babel/plugin-transform-object-super/@babel/helper-replace-supers/@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.25.9", "", { "dependencies": { "@babel/types": "^7.25.9" } }, "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ=="], + "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - "@istanbuljs/load-nyc-config/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "@itk-wasm/morphological-contour-interpolation/itk-wasm/chalk": ["chalk@5.3.0", "", {}, "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="], @@ -4344,21 +4475,37 @@ "@lerna/create/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "@lerna/create/rimraf/glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="], + "@lerna/create/rimraf/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], "@microsoft/api-extractor/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "@npmcli/arborist/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@npmcli/arborist/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + + "@npmcli/arborist/pacote/@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@4.0.0", "", { "dependencies": { "npm-bundled": "^5.0.0", "npm-normalize-package-bin": "^5.0.0" }, "bin": { "installed-package-contents": "bin/index.js" } }, "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA=="], + + "@npmcli/arborist/pacote/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "@npmcli/arborist/pacote/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], + + "@npmcli/git/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], + + "@npmcli/map-workspaces/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], + + "@npmcli/map-workspaces/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + + "@npmcli/metavuln-calculator/pacote/@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@4.0.0", "", { "dependencies": { "npm-bundled": "^5.0.0", "npm-normalize-package-bin": "^5.0.0" }, "bin": { "installed-package-contents": "bin/index.js" } }, "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA=="], + + "@npmcli/metavuln-calculator/pacote/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], - "@npmcli/git/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + "@npmcli/package-json/glob/jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], - "@npmcli/map-workspaces/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@npmcli/package-json/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], - "@npmcli/promise-spawn/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + "@npmcli/package-json/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], - "@npmcli/run-script/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + "@npmcli/promise-spawn/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], - "@nx/devkit/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@npmcli/run-script/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], "@oxc-parser/binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], @@ -4374,14 +4521,26 @@ "@rushstack/node-core-library/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "@tufjs/models/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@sigstore/sign/make-fetch-happen/minipass-fetch": ["minipass-fetch@5.0.1", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", "minizlib": "^3.0.1" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw=="], + + "@sigstore/sign/make-fetch-happen/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], + + "@tufjs/models/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], "babel-jest/babel-plugin-istanbul/istanbul-lib-instrument": ["istanbul-lib-instrument@5.2.1", "", { "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg=="], + "bin-links/write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "cacache/@npmcli/fs/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "cacache/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], + + "cacache/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], + "caching-transform/make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "cli-truncate/slice-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], @@ -4400,12 +4559,8 @@ "connect/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "conventional-changelog-core/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "conventional-changelog-writer/meow/camelcase-keys": ["camelcase-keys@6.2.2", "", { "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg=="], - "conventional-changelog-writer/meow/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "conventional-changelog-writer/meow/read-pkg-up": ["read-pkg-up@7.0.1", "", { "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" } }, "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="], "conventional-changelog-writer/meow/redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], @@ -4418,8 +4573,6 @@ "conventional-commits-parser/meow/camelcase-keys": ["camelcase-keys@6.2.2", "", { "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg=="], - "conventional-commits-parser/meow/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "conventional-commits-parser/meow/read-pkg-up": ["read-pkg-up@7.0.1", "", { "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" } }, "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="], "conventional-commits-parser/meow/redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], @@ -4432,8 +4585,6 @@ "conventional-recommended-bump/meow/camelcase-keys": ["camelcase-keys@6.2.2", "", { "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg=="], - "conventional-recommended-bump/meow/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "conventional-recommended-bump/meow/read-pkg-up": ["read-pkg-up@7.0.1", "", { "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" } }, "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="], "conventional-recommended-bump/meow/redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], @@ -4444,6 +4595,8 @@ "conventional-recommended-bump/meow/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], + "cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], "decompress-tar/tar-stream/bl": ["bl@1.2.3", "", { "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww=="], @@ -4482,8 +4635,6 @@ "git-raw-commits/meow/camelcase-keys": ["camelcase-keys@6.2.2", "", { "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg=="], - "git-raw-commits/meow/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "git-raw-commits/meow/read-pkg-up": ["read-pkg-up@7.0.1", "", { "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" } }, "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="], "git-raw-commits/meow/redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], @@ -4496,8 +4647,6 @@ "git-semver-tags/meow/camelcase-keys": ["camelcase-keys@6.2.2", "", { "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg=="], - "git-semver-tags/meow/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "git-semver-tags/meow/read-pkg-up": ["read-pkg-up@7.0.1", "", { "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" } }, "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg=="], "git-semver-tags/meow/redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], @@ -4512,7 +4661,7 @@ "http-proxy-middleware/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "ignore-walk/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "ignore-walk/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], "ipfs-unixfs-exporter/p-queue/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], @@ -4540,6 +4689,8 @@ "jest-config/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "jest-diff/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + "jest-environment-node/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], "jest-haste-map/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -4584,16 +4735,10 @@ "lerna/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "lerna/rimraf/glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="], + "lerna/rimraf/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], "lint-staged/debug/ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], - "listr2/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - - "listr2/wrap-ansi/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - - "listr2/wrap-ansi/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "log-update/ansi-escapes/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="], "log-update/cli-cursor/restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], @@ -4604,10 +4749,6 @@ "log-update/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "log-update/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - - "log-update/wrap-ansi/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "meow/normalize-package-data/hosted-git-info": ["hosted-git-info@5.2.1", "", { "dependencies": { "lru-cache": "^7.5.1" } }, "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw=="], "meow/read-pkg-up/find-up": ["find-up@6.3.0", "", { "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" } }, "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw=="], @@ -4616,6 +4757,14 @@ "meow/read-pkg-up/type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], + "minipass-flush/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "minipass-pipeline/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "minipass-sized/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "mocha/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "mocha/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "mocha/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], @@ -4624,9 +4773,15 @@ "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - "node-gyp/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + "node-gyp/make-fetch-happen/minipass-fetch": ["minipass-fetch@5.0.1", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", "minizlib": "^3.0.1" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw=="], + + "node-gyp/make-fetch-happen/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], - "nx/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "node-gyp/nopt/abbrev": ["abbrev@4.0.0", "", {}, "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA=="], + + "node-gyp/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], + + "normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], "nx/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], @@ -4644,8 +4799,24 @@ "nyc/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "pacote/@npmcli/git/ini": ["ini@5.0.0", "", {}, "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw=="], + + "pacote/@npmcli/git/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "pacote/@npmcli/git/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "pacote/@npmcli/git/which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="], + + "pacote/@npmcli/promise-spawn/which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="], + + "pacote/npm-pick-manifest/npm-package-arg": ["npm-package-arg@12.0.2", "", { "dependencies": { "hosted-git-info": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^6.0.0" } }, "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA=="], + + "pacote/npm-pick-manifest/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "pkg-dir/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "postcss-loader/cosmiconfig/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "puppeteer/debug/ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], "read-pkg-up/find-up/locate-path": ["locate-path@2.0.0", "", { "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA=="], @@ -4704,12 +4875,12 @@ "streamroller/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + "stylelint/cosmiconfig/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "stylelint/meow/camelcase-keys": ["camelcase-keys@7.0.2", "", { "dependencies": { "camelcase": "^6.3.0", "map-obj": "^4.1.0", "quick-lru": "^5.1.1", "type-fest": "^1.2.1" } }, "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg=="], "stylelint/meow/decamelize": ["decamelize@5.0.1", "", {}, "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA=="], - "stylelint/meow/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "stylelint/meow/read-pkg-up": ["read-pkg-up@8.0.0", "", { "dependencies": { "find-up": "^5.0.0", "read-pkg": "^6.0.0", "type-fest": "^1.0.1" } }, "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ=="], "stylelint/meow/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="], @@ -4724,12 +4895,16 @@ "tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "tar/fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "terser-webpack-plugin/schema-utils/ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], "ts-loader/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "tuf-js/make-fetch-happen/minipass-fetch": ["minipass-fetch@5.0.1", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", "minizlib": "^3.0.1" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw=="], + + "tuf-js/make-fetch-happen/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + + "tuf-js/make-fetch-happen/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], + "typedoc/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "url-loader/schema-utils/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], @@ -4752,6 +4927,10 @@ "worker-loader/schema-utils/ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + "write-json-file/make-dir/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], @@ -4810,36 +4989,54 @@ "@lerna/create/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "@lerna/create/rimraf/glob/minimatch": ["minimatch@8.0.4", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA=="], + "@lerna/create/rimraf/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], + + "@lerna/create/rimraf/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], + + "@microsoft/api-extractor/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "@npmcli/arborist/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], + + "@npmcli/arborist/pacote/@npmcli/installed-package-contents/npm-bundled": ["npm-bundled@5.0.0", "", { "dependencies": { "npm-normalize-package-bin": "^5.0.0" } }, "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw=="], + + "@npmcli/arborist/pacote/@npmcli/installed-package-contents/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], + + "@npmcli/map-workspaces/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], - "@lerna/create/rimraf/glob/minipass": ["minipass@4.2.8", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="], + "@npmcli/map-workspaces/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], - "@npmcli/arborist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@npmcli/metavuln-calculator/pacote/@npmcli/installed-package-contents/npm-bundled": ["npm-bundled@5.0.0", "", { "dependencies": { "npm-normalize-package-bin": "^5.0.0" } }, "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw=="], - "@npmcli/map-workspaces/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@npmcli/metavuln-calculator/pacote/@npmcli/installed-package-contents/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], - "@nx/devkit/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@npmcli/package-json/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="], + + "@npmcli/package-json/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + + "@npmcli/package-json/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], "@oxc-parser/binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], "@rspack/binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@tufjs/models/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@rushstack/node-core-library/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "@sigstore/sign/make-fetch-happen/minipass-fetch/minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="], + + "@tufjs/models/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "babel-jest/babel-plugin-istanbul/istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "bl/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "cacache/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "concat-stream/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "conventional-changelog-core/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "conventional-changelog-writer/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "conventional-changelog-writer/meow/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "conventional-changelog-writer/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], "conventional-changelog-writer/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], @@ -4850,8 +5047,6 @@ "conventional-commits-parser/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "conventional-commits-parser/meow/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "conventional-commits-parser/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], "conventional-commits-parser/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], @@ -4862,8 +5057,6 @@ "conventional-recommended-bump/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "conventional-recommended-bump/meow/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "conventional-recommended-bump/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], "conventional-recommended-bump/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], @@ -4884,12 +5077,12 @@ "fstream/rimraf/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "get-pkg-repo/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "get-pkg-repo/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "git-raw-commits/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "git-raw-commits/meow/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "git-raw-commits/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], "git-raw-commits/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], @@ -4900,8 +5093,6 @@ "git-semver-tags/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "git-semver-tags/meow/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "git-semver-tags/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], "git-semver-tags/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], @@ -4912,7 +5103,7 @@ "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "ignore-walk/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "ignore-walk/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "itk-wasm/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], @@ -4920,6 +5111,8 @@ "jest-circus/@jest/environment/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "jest-diff/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + "jest-mock/@jest/types/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], "jest-runner/@jest/environment/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], @@ -4930,18 +5123,12 @@ "lerna/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "lerna/rimraf/glob/minimatch": ["minimatch@8.0.4", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA=="], - - "lerna/rimraf/glob/minipass": ["minipass@4.2.8", "", {}, "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="], - - "listr2/wrap-ansi/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "lerna/rimraf/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], - "listr2/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + "lerna/rimraf/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], "log-update/cli-cursor/restore-cursor/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "log-update/wrap-ansi/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "meow/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], "meow/read-pkg-up/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], @@ -4954,12 +5141,24 @@ "mocha/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "nx/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "node-gyp/make-fetch-happen/minipass-fetch/minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="], + + "normalize-package-data/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], "nyc/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "nyc/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + + "pacote/@npmcli/git/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + + "pacote/@npmcli/promise-spawn/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], + + "pacote/npm-pick-manifest/npm-package-arg/hosted-git-info": ["hosted-git-info@8.1.0", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw=="], + "pkg-dir/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "postcss-loader/cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "read-pkg-up/find-up/locate-path/p-locate": ["p-locate@2.0.0", "", { "dependencies": { "p-limit": "^1.1.0" } }, "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg=="], "read-pkg-up/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], @@ -4972,18 +5171,20 @@ "stream-browserify/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "stylelint/cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "stylelint/meow/camelcase-keys/camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], "stylelint/meow/camelcase-keys/quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], - "stylelint/meow/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "stylelint/meow/read-pkg-up/read-pkg": ["read-pkg@6.0.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", "parse-json": "^5.2.0", "type-fest": "^1.0.1" } }, "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q=="], "svgo/css-select/domutils/dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], "tar-stream/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "tuf-js/make-fetch-happen/minipass-fetch/minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="], + "typedoc/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "url-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], @@ -5000,9 +5201,13 @@ "@jest/fake-timers/jest-message-util/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], - "@lerna/create/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@lerna/create/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + + "@lerna/create/rimraf/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + + "@npmcli/package-json/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], - "conventional-changelog-writer/meow/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "conventional-changelog-writer/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], @@ -5010,16 +5215,12 @@ "conventional-changelog-writer/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], - "conventional-commits-parser/meow/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "conventional-commits-parser/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "conventional-commits-parser/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], "conventional-commits-parser/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], - "conventional-recommended-bump/meow/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "conventional-recommended-bump/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "conventional-recommended-bump/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], @@ -5028,16 +5229,12 @@ "get-pkg-repo/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "git-raw-commits/meow/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "git-raw-commits/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "git-raw-commits/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], "git-raw-commits/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], - "git-semver-tags/meow/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "git-semver-tags/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "git-semver-tags/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], @@ -5048,7 +5245,9 @@ "karma/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "lerna/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "lerna/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + + "lerna/rimraf/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], "log-update/cli-cursor/restore-cursor/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], @@ -5060,17 +5259,19 @@ "nyc/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "nyc/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "pacote/npm-pick-manifest/npm-package-arg/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@1.3.0", "", { "dependencies": { "p-try": "^1.0.0" } }, "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="], - "stylelint/meow/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "webpack-dev-server/open/default-browser/bundle-name/run-applescript": ["run-applescript@7.0.0", "", {}, "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A=="], "@itk-wasm/morphological-contour-interpolation/itk-wasm/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@lerna/create/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@lerna/create/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "conventional-changelog-writer/meow/read-pkg-up/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], @@ -5102,7 +5303,7 @@ "git-semver-tags/meow/read-pkg-up/read-pkg/normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "lerna/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "lerna/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], @@ -5121,5 +5322,7 @@ "git-semver-tags/meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "meow/read-pkg-up/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.2.0", "", {}, "sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw=="], + + "meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], } } diff --git a/package.json b/package.json index c942877b56..f9268c8a91 100644 --- a/package.json +++ b/package.json @@ -138,7 +138,7 @@ "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "5.0.1", - "lerna": "8.2.1", + "lerna": "9.0.4", "lint-staged": "13.3.0", "mocha": "10.8.2", "nyc": "17.1.0", @@ -201,6 +201,7 @@ "body-parser": "1.20.3", "ws": "8.18.3", "qs": "6.14.1", - "lodash": "4.17.23" + "lodash": "4.17.23", + "tar": "7.5.9" } } diff --git a/yarn.lock b/yarn.lock index 4d7ede3452..28036edcdc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1801,6 +1801,151 @@ resolved "https://registry.yarnpkg.com/@icr/polyseg-wasm/-/polyseg-wasm-0.4.0.tgz#755e23d07c3d8d8fca1113278c803c1ef0185da0" integrity sha512-3sZmiwG8I0NaqPle0L7+V/ZexiR7IjIUFkUsaOoFI9rNuBGyyMMmxAxnCmqcDFtBDk9h+JEYJf6e3NnqlHi/HQ== +"@inquirer/ansi@^1.0.0", "@inquirer/ansi@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.2.tgz#674a4c4d81ad460695cb2a1fc69d78cd187f337e" + integrity sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ== + +"@inquirer/checkbox@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.2.tgz#e1483e6519d6ffef97281a54d2a5baa0d81b3f3b" + integrity sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/confirm@^5.1.21": + version "5.1.21" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.21.tgz#610c4acd7797d94890a6e2dde2c98eb1e891dd12" + integrity sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/core@^10.2.2", "@inquirer/core@^10.3.2": + version "10.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.2.tgz#535979ff3ff4fe1e7cc4f83e2320504c743b7e20" + integrity sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.3" + +"@inquirer/editor@^4.2.23": + version "4.2.23" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.23.tgz#fe046a3bfdae931262de98c1052437d794322e0b" + integrity sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/external-editor" "^1.0.3" + "@inquirer/type" "^3.0.10" + +"@inquirer/expand@^4.0.23": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.23.tgz#a38b5f32226d75717c370bdfed792313b92bdc05" + integrity sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/external-editor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== + dependencies: + chardet "^2.1.1" + iconv-lite "^0.7.0" + +"@inquirer/figures@^1.0.15": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a" + integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== + +"@inquirer/input@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.3.1.tgz#778683b4c4c4d95d05d4b05c4a854964b73565b4" + integrity sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/number@^3.0.23": + version "3.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.23.tgz#3fdec2540d642093fd7526818fd8d4bdc7335094" + integrity sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/password@^4.0.23": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.23.tgz#b9f5187c8c92fd7aa9eceb9d8f2ead0d7e7b000d" + integrity sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/prompts@^7.8.6": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.10.1.tgz#e1436c0484cf04c22548c74e2cd239e989d5f847" + integrity sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg== + dependencies: + "@inquirer/checkbox" "^4.3.2" + "@inquirer/confirm" "^5.1.21" + "@inquirer/editor" "^4.2.23" + "@inquirer/expand" "^4.0.23" + "@inquirer/input" "^4.3.1" + "@inquirer/number" "^3.0.23" + "@inquirer/password" "^4.0.23" + "@inquirer/rawlist" "^4.1.11" + "@inquirer/search" "^3.2.2" + "@inquirer/select" "^4.4.2" + +"@inquirer/rawlist@^4.1.11": + version "4.1.11" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.11.tgz#313c8c3ffccb7d41e990c606465726b4a898a033" + integrity sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/search@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.2.tgz#4cc6fd574dcd434e4399badc37c742c3fd534ac8" + integrity sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/select@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.2.tgz#2ac8fca960913f18f1d1b35323ed8fcd27d89323" + integrity sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/type@^3.0.10", "@inquirer/type@^3.0.8": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.10.tgz#11ed564ec78432a200ea2601a212d24af8150d50" + integrity sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA== + "@ipld/car@^5.1.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ipld/car/-/car-5.4.0.tgz#c81087fdfe02039e72b0da558b7505f56e4997e4" @@ -1847,6 +1992,18 @@ protobufjs "^7.1.2" rabin-rs "^2.1.0" +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz#0ef5a92d91f2fff2a37646ce54da9e5f599f6eff" + integrity sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1859,6 +2016,18 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" +"@isaacs/cliui@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-9.0.0.tgz#4d0a3f127058043bf2e7ee169eaf30ed901302f3" + integrity sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg== + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" @@ -1952,6 +2121,11 @@ slash "^3.0.0" strip-ansi "^6.0.0" +"@jest/diff-sequences@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz#0ededeae4d071f5c8ffe3678d15f3a1be09156be" + integrity sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw== + "@jest/environment-jsdom-abstract@30.2.0": version "30.2.0" resolved "https://registry.yarnpkg.com/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.2.0.tgz#1313f9b3b509c31298c241203161b36622865181" @@ -2024,6 +2198,11 @@ jest-mock "^29.7.0" jest-util "^29.7.0" +"@jest/get-type@30.1.0": + version "30.1.0" + resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc" + integrity sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA== + "@jest/globals@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" @@ -2289,21 +2468,20 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== -"@lerna/create@8.2.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.2.1.tgz#b9c34b9fbd75035418244e33cf197523a2e10a6e" - integrity sha512-Cz2u/fwc03D1EE6VFZCLMmI8FIUtGmxHQ3ECeNblsxv9i0YSKWe4Xm18sjO1xltG/K5ByiH8/HMeY9dlyAv22A== +"@lerna/create@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-9.0.4.tgz#099aeb3ddc6455632fcc7468d47c16b01224e7e3" + integrity sha512-WxedGD98G8/a6HztCXNWquaM0x17oSvfvuqDsLxNNX1qXGyrzmMUmd1mQikF/47uy80X6qyWdaRtaAHlwkvEUA== dependencies: - "@npmcli/arborist" "7.5.4" - "@npmcli/package-json" "5.2.0" - "@npmcli/run-script" "8.1.0" - "@nx/devkit" ">=17.1.2 < 21" + "@npmcli/arborist" "9.1.6" + "@npmcli/package-json" "7.0.2" + "@npmcli/run-script" "10.0.3" + "@nx/devkit" ">=21.5.2 < 23.0.0" "@octokit/plugin-enterprise-rest" "6.0.1" "@octokit/rest" "20.1.2" aproba "2.0.0" byte-size "8.1.1" chalk "4.1.0" - clone-deep "4.0.1" cmd-shim "6.0.3" color-support "1.1.3" columnify "1.6.0" @@ -2317,48 +2495,46 @@ get-stream "6.0.0" git-url-parse "14.0.0" glob-parent "6.0.2" - globby "11.1.0" - graceful-fs "4.2.11" has-unicode "2.0.1" ini "^1.3.8" - init-package-json "6.0.3" - inquirer "^8.2.4" + init-package-json "8.2.2" + inquirer "12.9.6" is-ci "3.0.1" is-stream "2.0.0" - js-yaml "4.1.0" - libnpmpublish "9.0.9" + js-yaml "4.1.1" + libnpmpublish "11.1.2" load-json-file "6.2.0" - lodash "^4.17.21" make-dir "4.0.0" + make-fetch-happen "15.0.2" minimatch "3.0.5" multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "11.0.2" - npm-packlist "8.0.2" - npm-registry-fetch "^17.1.0" - nx ">=17.1.2 < 21" + npm-package-arg "13.0.1" + npm-packlist "10.0.3" + npm-registry-fetch "19.1.0" + nx ">=21.5.3 < 23.0.0" p-map "4.0.0" p-map-series "2.1.0" p-queue "6.6.2" p-reduce "^2.1.0" - pacote "^18.0.6" + pacote "21.0.1" pify "5.0.0" read-cmd-shim "4.0.0" resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.4" + rimraf "^6.1.2" + semver "7.7.2" set-blocking "^2.0.0" signal-exit "3.0.7" slash "^3.0.0" - ssri "^10.0.6" + ssri "12.0.0" string-width "^4.2.3" - strong-log-transformer "2.1.0" - tar "6.2.1" + tar "7.5.7" temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" upath "2.0.1" - uuid "^10.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "5.0.1" + uuid "^11.1.0" + validate-npm-package-license "3.0.4" + validate-npm-package-name "6.0.2" wide-align "1.1.5" write-file-atomic "5.0.1" write-pkg "4.0.0" @@ -2531,239 +2707,286 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/agent@^2.0.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" - integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== +"@npmcli/agent@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-4.0.0.tgz#2bb2b1c0a170940511554a7986ae2a8be9fedcce" + integrity sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA== dependencies: agent-base "^7.1.0" http-proxy-agent "^7.0.0" https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" + lru-cache "^11.2.1" socks-proxy-agent "^8.0.3" -"@npmcli/arborist@7.5.4": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b" - integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g== +"@npmcli/arborist@9.1.6": + version "9.1.6" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-9.1.6.tgz#b21141b7e48606050844b2231ec83fd16b7ea0f6" + integrity sha512-c5Pr3EG8UP5ollkJy2x+UdEQC5sEHe3H9whYn6hb2HJimAKS4zmoJkx5acCiR/g4P38RnCSMlsYQyyHnKYeLvQ== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.1" - "@npmcli/installed-package-contents" "^2.1.0" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^7.1.1" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.1.0" - "@npmcli/query" "^3.1.0" - "@npmcli/redact" "^2.0.0" - "@npmcli/run-script" "^8.1.0" - bin-links "^4.0.4" - cacache "^18.0.3" + "@npmcli/fs" "^4.0.0" + "@npmcli/installed-package-contents" "^3.0.0" + "@npmcli/map-workspaces" "^5.0.0" + "@npmcli/metavuln-calculator" "^9.0.2" + "@npmcli/name-from-folder" "^3.0.0" + "@npmcli/node-gyp" "^4.0.0" + "@npmcli/package-json" "^7.0.0" + "@npmcli/query" "^4.0.0" + "@npmcli/redact" "^3.0.0" + "@npmcli/run-script" "^10.0.0" + bin-links "^5.0.0" + cacache "^20.0.1" common-ancestor-path "^1.0.1" - hosted-git-info "^7.0.2" - json-parse-even-better-errors "^3.0.2" + hosted-git-info "^9.0.0" json-stringify-nice "^1.1.4" - lru-cache "^10.2.2" - minimatch "^9.0.4" - nopt "^7.2.1" - npm-install-checks "^6.2.0" - npm-package-arg "^11.0.2" - npm-pick-manifest "^9.0.1" - npm-registry-fetch "^17.0.1" - pacote "^18.0.6" - parse-conflict-json "^3.0.0" - proc-log "^4.2.0" - proggy "^2.0.0" + lru-cache "^11.2.1" + minimatch "^10.0.3" + nopt "^8.0.0" + npm-install-checks "^7.1.0" + npm-package-arg "^13.0.0" + npm-pick-manifest "^11.0.1" + npm-registry-fetch "^19.0.0" + pacote "^21.0.2" + parse-conflict-json "^4.0.0" + proc-log "^5.0.0" + proggy "^3.0.0" promise-all-reject-late "^1.0.0" promise-call-limit "^3.0.1" - read-package-json-fast "^3.0.2" semver "^7.3.7" - ssri "^10.0.6" + ssri "^12.0.0" treeverse "^3.0.0" - walk-up-path "^3.0.1" + walk-up-path "^4.0.0" -"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" - integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== +"@npmcli/fs@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-4.0.0.tgz#a1eb1aeddefd2a4a347eca0fab30bc62c0e1c0f2" + integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== dependencies: semver "^7.3.5" -"@npmcli/git@^5.0.0": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" - integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== +"@npmcli/fs@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-5.0.0.tgz#674619771907342b3d1ac197aaf1deeb657e3539" + integrity sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og== dependencies: - "@npmcli/promise-spawn" "^7.0.0" - ini "^4.1.3" + semver "^7.3.5" + +"@npmcli/git@^6.0.0": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-6.0.3.tgz#966cbb228514372877de5244db285b199836f3aa" + integrity sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ== + dependencies: + "@npmcli/promise-spawn" "^8.0.0" + ini "^5.0.0" lru-cache "^10.0.1" - npm-pick-manifest "^9.0.0" - proc-log "^4.0.0" - promise-inflight "^1.0.1" + npm-pick-manifest "^10.0.0" + proc-log "^5.0.0" promise-retry "^2.0.1" semver "^7.3.5" - which "^4.0.0" + which "^5.0.0" -"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17" - integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w== +"@npmcli/git@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-7.0.1.tgz#d1f6462af0e9901536e447beea922bc20dcc5762" + integrity sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA== + dependencies: + "@npmcli/promise-spawn" "^9.0.0" + ini "^6.0.0" + lru-cache "^11.2.1" + npm-pick-manifest "^11.0.1" + proc-log "^6.0.0" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^6.0.0" + +"@npmcli/installed-package-contents@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz#2c1170ff4f70f68af125e2842e1853a93223e4d1" + integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" + npm-bundled "^4.0.0" + npm-normalize-package-bin "^4.0.0" -"@npmcli/map-workspaces@^3.0.2": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" - integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== +"@npmcli/installed-package-contents@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz#18e5070704cfe0278f9ae48038558b6efd438426" + integrity sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA== dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - read-package-json-fast "^3.0.0" + npm-bundled "^5.0.0" + npm-normalize-package-bin "^5.0.0" -"@npmcli/metavuln-calculator@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf" - integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g== +"@npmcli/map-workspaces@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz#5b887ec0b535a2ba64d1d338867326a2b9c041d1" + integrity sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw== dependencies: - cacache "^18.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^18.0.0" - proc-log "^4.1.0" - semver "^7.3.5" + "@npmcli/name-from-folder" "^4.0.0" + "@npmcli/package-json" "^7.0.0" + glob "^13.0.0" + minimatch "^10.0.3" -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== +"@npmcli/metavuln-calculator@^9.0.2": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz#57b330f3fb8ca34db2782ad5349ea4384bed9c96" + integrity sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg== + dependencies: + cacache "^20.0.0" + json-parse-even-better-errors "^5.0.0" + pacote "^21.0.0" + proc-log "^6.0.0" + semver "^7.3.5" -"@npmcli/node-gyp@^3.0.0": +"@npmcli/name-from-folder@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz#ed49b18d16b954149f31240e16630cfec511cd57" + integrity sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA== -"@npmcli/package-json@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad" - integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^4.0.0" +"@npmcli/name-from-folder@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz#b4d516ae4fab5ed4e8e8032abff3488703fc24a3" + integrity sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg== + +"@npmcli/node-gyp@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz#01f900bae62f0f27f9a5a127b40d443ddfb9d4c6" + integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== + +"@npmcli/node-gyp@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz#35475a58b5d791764a7252231197a14deefe8e47" + integrity sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ== + +"@npmcli/package-json@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.2.tgz#9ac89c08d6a637bd0db8a73717d53ec45d87fa5c" + integrity sha512-0ylN3U5htO1SJTmy2YI78PZZjLkKUGg7EKgukb2CRi0kzyoDr0cfjHAzi7kozVhj2V3SxN1oyKqZ2NSo40z00g== + dependencies: + "@npmcli/git" "^7.0.0" + glob "^11.0.3" + hosted-git-info "^9.0.0" + json-parse-even-better-errors "^5.0.0" + proc-log "^6.0.0" semver "^7.5.3" + validate-npm-package-license "^3.0.4" -"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" - integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^4.0.0" +"@npmcli/package-json@^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.4.tgz#f4178e5d90b888f3bdf666915706f613c2d870d7" + integrity sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ== + dependencies: + "@npmcli/git" "^7.0.0" + glob "^13.0.0" + hosted-git-info "^9.0.0" + json-parse-even-better-errors "^5.0.0" + proc-log "^6.0.0" semver "^7.5.3" + validate-npm-package-license "^3.0.4" -"@npmcli/promise-spawn@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" - integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== +"@npmcli/promise-spawn@^8.0.0": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz#08c5e4c1cab7ff848e442e4b19bbf0ee699d133f" + integrity sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg== dependencies: - which "^4.0.0" + which "^5.0.0" -"@npmcli/query@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c" - integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ== +"@npmcli/promise-spawn@^9.0.0": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz#20e80cbdd2f24ad263a15de3ebbb1673cb82005b" + integrity sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q== dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/redact@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762" - integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw== + which "^6.0.0" -"@npmcli/run-script@8.1.0", "@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc" - integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg== +"@npmcli/query@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-4.0.1.tgz#f8a538807f2d0059c0bee7f4a1f712b73ae47603" + integrity sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw== dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^5.0.0" - "@npmcli/promise-spawn" "^7.0.0" - node-gyp "^10.0.0" - proc-log "^4.0.0" - which "^4.0.0" + postcss-selector-parser "^7.0.0" -"@nx/devkit@>=17.1.2 < 21": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-20.0.8.tgz#566491b9bc66c799977ea187e51cdae4f04e1b58" - integrity sha512-MRUGgWSMzYtdwtolvWL5EZlX+7xYgu7JIXf1+3rmZU5adMmlqWKrIbyvDf53XocQlT8oxx/xXTEFHhIymGTQCg== +"@npmcli/redact@^3.0.0": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-3.2.2.tgz#4a6745e0ae269120ad223780ce374d6c59ae34cd" + integrity sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg== + +"@npmcli/redact@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-4.0.0.tgz#c91121e02b7559a997614a2c1057cd7fc67608c4" + integrity sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q== + +"@npmcli/run-script@10.0.3", "@npmcli/run-script@^10.0.0": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-10.0.3.tgz#85c16cd893e44cad5edded441b002d8a1d3a8a8e" + integrity sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw== + dependencies: + "@npmcli/node-gyp" "^5.0.0" + "@npmcli/package-json" "^7.0.0" + "@npmcli/promise-spawn" "^9.0.0" + node-gyp "^12.1.0" + proc-log "^6.0.0" + which "^6.0.0" + +"@nx/devkit@>=21.5.2 < 23.0.0": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-22.5.1.tgz#eb6994be392dd2de05d6aecd4ffb96596ccd6793" + integrity sha512-1ZJ8pCB+6EWC8X6q8tfBweg92WzFAwliBhtBkOPP8Li8GQq71ulPWRdY4lDd5pH3Ea1zKqhOtBKWdOlyDPOKYA== dependencies: + "@zkochan/js-yaml" "0.0.7" ejs "^3.1.7" enquirer "~2.3.6" - ignore "^5.0.4" - minimatch "9.0.3" - semver "^7.5.3" - tmp "~0.2.1" + minimatch "10.1.1" + semver "^7.6.3" tslib "^2.3.0" yargs-parser "21.1.1" -"@nx/nx-darwin-arm64@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.0.8.tgz#3cf3b86e987c892ac7dd425f207184c4b96f2295" - integrity sha512-tDoafq5YUyOwxR1Y796WXA6j49OLJRO7TA/Fym52SSuD3AULbgo3/X5XeY6oL2PWM044CuUVrp3V4cIDUtyJpA== - -"@nx/nx-darwin-x64@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-20.0.8.tgz#fcedd3a8bce6b0d93e178e20271ed06073c8104e" - integrity sha512-bvfZ6VhSvOpPV00veaJDO1a4X+f0dn8S1A73/2ThbGZrZLAQIFrA8v+ysax+bfCGRHNdtlAL+f7TG2buh/4BRg== - -"@nx/nx-freebsd-x64@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.0.8.tgz#da5c83d4c10eb7294e278a3755456eb4746822fe" - integrity sha512-AdOme0o/pTFy+TutIOAamuGTqbh6nOLrkNEX8f4ogfDRH+k/WvjRQ4z4ne58wf/2EVXua4jKTIEipIZAP/Ad1w== - -"@nx/nx-linux-arm-gnueabihf@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.0.8.tgz#8936c502826f8413359ca7fc61b7551b5959f432" - integrity sha512-PYf7Z30A1TCZq9HVUP6JjT3ghTLYkaBpR6vDwiGWUV/exuNmhUgfYW6TiTpiSArXwnAgSIbaoGe537iEvYzA7A== - -"@nx/nx-linux-arm64-gnu@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.0.8.tgz#cfaf46fd74c7c3cdc6a9d394124c269a798d7711" - integrity sha512-3VpvhjmNR78HVxGzpWiwqZsG5sNvLUv2Qfohtxyc3561o8VU41R9Onf/LJmbbZvmdDaPvvXQp3rs0OXT4i7T1g== - -"@nx/nx-linux-arm64-musl@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.0.8.tgz#65e16e524fbee9cdabdea8faeabe8145fdd2bbc1" - integrity sha512-3Z7fTJGG8h4VCHhD8Ix0zr6eFMfa1y3YDlzm8Clxu4Enzz0pEsUrT+ph6qrsArnIyUgiCowSi8+xgHFg7V/F1Q== - -"@nx/nx-linux-x64-gnu@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.0.8.tgz#76a2781efb38082d8304ecff04ab01403e571952" - integrity sha512-Uttl1RHzWpjZgdzowCUNjC6/b3YhZR31wyXWgVF4PDWpDVgy4EigGc19tdrvv8pUVKQFuj0uaSTPUklguN7c3A== - -"@nx/nx-linux-x64-musl@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.0.8.tgz#362da13320acc884255028b0d1f67e8eb083dd22" - integrity sha512-llc6ywSPaOWQzEzD73USyAXd/y3Slu+GHS02IsQqZeA23EIOEzhvEeeeKgs4F8LKuFW/TpV6T5IhvSHw9/mvBg== - -"@nx/nx-win32-arm64-msvc@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.0.8.tgz#82aeabb01929a54b741634a0b29b1c8c1d99f361" - integrity sha512-GhPVVNrL0QcQ3B6r0P0Dta3TIesJz7uso7iI5rCZ/oOGa02UsT4NkQBpIhxYQZ4TnHYNy84g4rHtYHrSlpDlEw== - -"@nx/nx-win32-x64-msvc@20.0.8": - version "20.0.8" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.0.8.tgz#ff8a261246d5488b073f4ec5b8cdb9b13cf7711c" - integrity sha512-yLlcgM0zFdmsExdLv8O2g5FWQ6d2vyN5OynKV+F5BrWHC4LvrqyYJ99y++5bLFoEi19RYIK6sLnzGIRSF6dHGg== +"@nx/nx-darwin-arm64@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.5.1.tgz#993368d5859ea4c2bbb855c5649e2c4aa9b1b840" + integrity sha512-DuvOwhXPO6l9W7/zM4/BaAbGTIXFyHVcbbCD1c7HfgZ3VfJPmcE7H4+TuQH0cigHHtpg/eGqV100NQbd7N4zwg== + +"@nx/nx-darwin-x64@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-22.5.1.tgz#8087825d28c5bab20657e79ca2ce616a46bffa11" + integrity sha512-81Lb7+rp3Qltpgy33Kc1qxk+8IWqZLhqvdLdRFSVV1FN1pPSJDFKyPjCn9oMpRryNPSJ8DgZDpfIaVVyP85rUw== + +"@nx/nx-freebsd-x64@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.5.1.tgz#48de3848c73c3fedcd4bfa8a27be5e761ab2f34b" + integrity sha512-Ig8yQN3lSz9R+Zf3NQWcvEnIzwDX4NSeaFtEliPnC3OHlQXGNXbOUfkExa0U0UUgyxa4rgnCgefmwuc12H9q2Q== + +"@nx/nx-linux-arm-gnueabihf@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.5.1.tgz#97898f52376cba43ea92b75b896fa42852537911" + integrity sha512-C7tGoLnR9MjKLJsLMF2VsKcDChPiygAsw6dSVgU4B650H7sBWmkEHM/QjvyRvkcZuoQBDamS/eVs/UaJu9wNhA== + +"@nx/nx-linux-arm64-gnu@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.5.1.tgz#d0f333112216febbbbed6ef72ae4806791276020" + integrity sha512-GNxei+lwhzhrO9m+nNkibgxLhbkYKyFXPSRpOKLwv9VavNzJn5UmLfKJyhjNQPBOSYuNhiVPbU1Ja/qOBcozYw== + +"@nx/nx-linux-arm64-musl@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.5.1.tgz#9ee7c3d7d180afc1307b3b92ad5f6d1a4177e182" + integrity sha512-VDJtdJP2nCgS8ommbfWFAKjoZCE51VH7tZyIfh8RFI5fxwoB3Pk6d6f6cmNHI/1t98YI3V7Onuf3Y9KBkYtyfQ== + +"@nx/nx-linux-x64-gnu@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.5.1.tgz#7e432d2b1c7ed439e8791f215060d8191edaa05f" + integrity sha512-BZ/i+KTplEJmE8ZHKgPGD513Zl86DuSGyRAvbDZ7Qf19Tei7Of6vxW+ypvVDIwmDbyXfe13u54M5gDt8iiqFGQ== + +"@nx/nx-linux-x64-musl@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.5.1.tgz#a3e218c3d3a36ac4b00d705d08d6c4a62b93702d" + integrity sha512-e0VdiV6fe88Dbhill2gUjYAD9jMhHjYsafGOPR+/uaGMAYPoI1jKur6uPGY+ik6fvwvDFFl0VT2+HACKVn7RoA== + +"@nx/nx-win32-arm64-msvc@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.5.1.tgz#916775bfa1eacb2d402cbb6fd2c8584a4fe58956" + integrity sha512-3vWZO9y7uHKeyepcU55pE8VQTKGome3mLdicvx1TCoKKl0cA3bTR341Jdo2Zl4Waa2ENk7pGQbLWRQ3ZkaA92A== + +"@nx/nx-win32-x64-msvc@22.5.1": + version "22.5.1" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.5.1.tgz#dcd432ab7dfea2fab308fd6410f190da3301cf28" + integrity sha512-4e5LduuhpBx96JgD1J3fHUGCwC+/lL+tvXp3UVtjh/AOdINGsyI+scinT3uaI9vcB5GKBcybTxbBZzwcH50w9g== "@octokit/auth-token@^4.0.0": version "4.0.0" @@ -3344,51 +3567,51 @@ resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== -"@sigstore/bundle@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" - integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== +"@sigstore/bundle@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-4.0.0.tgz#854eda43eb6a59352037e49000177c8904572f83" + integrity sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A== dependencies: - "@sigstore/protobuf-specs" "^0.3.2" + "@sigstore/protobuf-specs" "^0.5.0" -"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" - integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== +"@sigstore/core@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-3.1.0.tgz#b418de73f56333ad9e369b915173d8c98e9b96d5" + integrity sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A== -"@sigstore/protobuf-specs@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz#5becf88e494a920f548d0163e2978f81b44b7d6f" - integrity sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw== +"@sigstore/protobuf-specs@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz#e5f029edcb3a4329853a09b603011e61043eb005" + integrity sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA== -"@sigstore/sign@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" - integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - make-fetch-happen "^13.0.1" - proc-log "^4.2.0" +"@sigstore/sign@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-4.1.0.tgz#63df15a137337b29f463a1d1c51e1f7d4c1db2f1" + integrity sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg== + dependencies: + "@sigstore/bundle" "^4.0.0" + "@sigstore/core" "^3.1.0" + "@sigstore/protobuf-specs" "^0.5.0" + make-fetch-happen "^15.0.3" + proc-log "^6.1.0" promise-retry "^2.0.1" -"@sigstore/tuf@^2.3.4": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" - integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== +"@sigstore/tuf@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-4.0.1.tgz#9b080390936d79ea3b6a893b64baf3123e92d6d3" + integrity sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw== dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - tuf-js "^2.2.1" + "@sigstore/protobuf-specs" "^0.5.0" + tuf-js "^4.1.0" -"@sigstore/verify@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" - integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== +"@sigstore/verify@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-3.1.0.tgz#4046d4186421db779501fe87fa5acaa5d4d21b08" + integrity sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag== dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.1.0" - "@sigstore/protobuf-specs" "^0.3.2" + "@sigstore/bundle" "^4.0.0" + "@sigstore/core" "^3.1.0" + "@sigstore/protobuf-specs" "^0.5.0" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -3474,13 +3697,13 @@ resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== -"@tufjs/models@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" - integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== +"@tufjs/models@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-4.1.0.tgz#494b39cf5e2f6855d80031246dd236d8086069b3" + integrity sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww== dependencies: "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.4" + minimatch "^10.1.1" "@tybys/wasm-util@^0.10.0": version "0.10.0" @@ -4095,10 +4318,10 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -"@yarnpkg/parsers@3.0.0-rc.46": - version "3.0.0-rc.46" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" - integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== +"@yarnpkg/parsers@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.2.tgz#48a1517a0f49124827f4c37c284a689c607b2f32" + integrity sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA== dependencies: js-yaml "^3.10.0" tslib "^2.4.0" @@ -4118,10 +4341,15 @@ JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== +abbrev@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" + integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg== + +abbrev@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-4.0.0.tgz#ec933f0e27b6cd60e89b5c6b2a304af42209bb05" + integrity sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" @@ -4457,7 +4685,7 @@ autoprefixer@^10.4.14: picocolors "^1.0.1" postcss-value-parser "^4.2.0" -axios@1.13.5, axios@^1.4.0, axios@^1.6.2, axios@^1.7.4: +axios@1.13.5, axios@^1.12.0, axios@^1.4.0, axios@^1.6.2: version "1.13.5" resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43" integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q== @@ -4590,6 +4818,11 @@ balanced-match@^2.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== +balanced-match@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.3.tgz#6337a2f23e0604a30481423432f99eac603599f9" + integrity sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g== + base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -4625,15 +4858,16 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bin-links@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63" - integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA== +bin-links@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-5.0.0.tgz#2b0605b62dd5e1ddab3b92a3c4e24221cae06cca" + integrity sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA== dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" + cmd-shim "^7.0.0" + npm-normalize-package-bin "^4.0.0" + proc-log "^5.0.0" + read-cmd-shim "^5.0.0" + write-file-atomic "^6.0.0" binary-extensions@^2.0.0: version "2.3.0" @@ -4728,6 +4962,13 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" +brace-expansion@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.2.tgz#b6c16d0791087af6c2bc463f52a8142046c06b6f" + integrity sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw== + dependencies: + balanced-match "^4.0.2" + braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" @@ -4833,23 +5074,22 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^18.0.0, cacache@^18.0.3: - version "18.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" - integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== +cacache@^20.0.0, cacache@^20.0.1: + version "20.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-20.0.3.tgz#bd65205d5e6d86e02bbfaf8e4ce6008f1b81d119" + integrity sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw== dependencies: - "@npmcli/fs" "^3.1.0" + "@npmcli/fs" "^5.0.0" fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" + glob "^13.0.0" + lru-cache "^11.1.0" minipass "^7.0.3" minipass-collect "^2.0.1" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" + p-map "^7.0.2" + ssri "^13.0.0" + unique-filename "^5.0.0" caching-transform@^4.0.0: version "4.0.0" @@ -5002,7 +5242,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -5015,10 +5255,10 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== check-error@^2.1.1: version "2.1.1" @@ -5045,10 +5285,10 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== chrome-trace-event@^1.0.2: version "1.0.4" @@ -5126,10 +5366,10 @@ cli-truncate@^3.1.0: slice-ansi "^5.0.0" string-width "^5.0.0" -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== cliui@^6.0.0: version "6.0.0" @@ -5158,7 +5398,7 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@4.0.1, clone-deep@^4.0.1: +clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== @@ -5172,11 +5412,16 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -cmd-shim@6.0.3, cmd-shim@^6.0.0: +cmd-shim@6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033" integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA== +cmd-shim@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-7.0.0.tgz#23bcbf69fff52172f7e7c02374e18fb215826d95" + integrity sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -5915,6 +6160,13 @@ debug@^4.4.1: dependencies: ms "^2.1.3" +debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -6379,7 +6631,7 @@ duplexer2@~0.1.4: dependencies: readable-stream "^2.0.2" -duplexer@^0.1.1, duplexer@^0.1.2: +duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== @@ -6799,15 +7051,6 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extract-zip@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -6878,6 +7121,11 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +fdir@^6.4.3, fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + fflate@*: version "0.8.2" resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" @@ -6888,7 +7136,7 @@ fflate@0.7.3: resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.3.tgz#288b034ff0e9c380eaa2feff48c787b8371b7fa5" integrity sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw== -figures@3.2.0, figures@^3.0.0: +figures@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -7081,7 +7329,7 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" -foreground-child@^3.3.0: +foreground-child@^3.3.0, foreground-child@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== @@ -7173,13 +7421,6 @@ fs-extra@~11.3.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs-minipass@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" @@ -7407,7 +7648,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^10.2.2, glob@^10.3.10, glob@^10.3.4: +glob@^10.3.4: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -7419,6 +7660,27 @@ glob@^10.2.2, glob@^10.3.10, glob@^10.3.4: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" +glob@^11.0.3: + version "11.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.1.0.tgz#4f826576e4eb99c7dad383793d2f9f08f67e50a6" + integrity sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw== + dependencies: + foreground-child "^3.3.1" + jackspeak "^4.1.1" + minimatch "^10.1.1" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + +glob@^13.0.0, glob@^13.0.3: + version "13.0.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.5.tgz#a48f760c6312b1a19d2950fcb577384221c4ec00" + integrity sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw== + dependencies: + minimatch "^10.2.1" + minipass "^7.1.2" + path-scurry "^2.0.0" + glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -7442,16 +7704,6 @@ glob@^8.1.0: minimatch "^5.0.1" once "^1.3.0" -glob@^9.2.0: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -7480,7 +7732,7 @@ globalthis@1.0.3: dependencies: define-properties "^1.1.3" -globby@11.1.0, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -7531,7 +7783,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@4.2.11, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -7661,13 +7913,20 @@ hosted-git-info@^5.0.0: dependencies: lru-cache "^7.5.1" -hosted-git-info@^7.0.0, hosted-git-info@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" - integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== +hosted-git-info@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-8.1.0.tgz#153cd84c03c6721481e16a5709eb74b1a0ab2ed0" + integrity sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw== dependencies: lru-cache "^10.0.1" +hosted-git-info@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada" + integrity sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg== + dependencies: + lru-cache "^11.1.0" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -7837,7 +8096,7 @@ hyperdyperid@^1.2.0: resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -7851,6 +8110,13 @@ iconv-lite@0.6.3, iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" + integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -7861,18 +8127,23 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^6.0.4: - version "6.0.5" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd" - integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A== +ignore-walk@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-8.0.0.tgz#380c173badc3a18c57ff33440753f0052f572b14" + integrity sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A== dependencies: - minimatch "^9.0.0" + minimatch "^10.0.3" -ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + image-type@^4.1: version "4.1.0" resolved "https://registry.yarnpkg.com/image-type/-/image-type-4.1.0.tgz#72a88d64ff5021371ed67b9a466442100be57cd1" @@ -7947,44 +8218,41 @@ ini@^1.3.2, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" - integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== +ini@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-5.0.0.tgz#a7a4615339843d9a8ccc2d85c9d81cf93ffbc638" + integrity sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw== -init-package-json@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-6.0.3.tgz#2552fba75b6eed2495dc97f44183e2e5a5bcf8b0" - integrity sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w== - dependencies: - "@npmcli/package-json" "^5.0.0" - npm-package-arg "^11.0.0" - promzard "^1.0.0" - read "^3.0.1" - semver "^7.3.5" +ini@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-6.0.0.tgz#efc7642b276f6a37d22fdf56ef50889d7146bf30" + integrity sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ== + +init-package-json@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-8.2.2.tgz#5fd08928995c3a4b6ed780be1edad56e62bfa41e" + integrity sha512-pXVMn67Jdw2hPKLCuJZj62NC9B2OIDd1R3JwZXTHXuEnfN3Uq5kJbKOSld6YEU+KOGfMD82EzxFTYz5o0SSJoA== + dependencies: + "@npmcli/package-json" "^7.0.0" + npm-package-arg "^13.0.0" + promzard "^2.0.0" + read "^4.0.0" + semver "^7.7.2" validate-npm-package-license "^3.0.4" - validate-npm-package-name "^5.0.0" + validate-npm-package-name "^6.0.2" -inquirer@^8.2.4: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== +inquirer@12.9.6: + version "12.9.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-12.9.6.tgz#178a07f5678ea8d9c4b5288e5a47c40e57d6868f" + integrity sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw== dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" + "@inquirer/ansi" "^1.0.0" + "@inquirer/core" "^10.2.2" + "@inquirer/prompts" "^7.8.6" + "@inquirer/type" "^3.0.8" + mute-stream "^2.0.0" + run-async "^4.0.5" + rxjs "^7.8.2" interface-blockstore@^5.3.0: version "5.3.1" @@ -8171,11 +8439,6 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -8335,6 +8598,11 @@ isexe@^3.1.1: resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== +isexe@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-4.0.0.tgz#48f6576af8e87a18feb796b7ed5e2e5903b43dca" + integrity sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw== + isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" @@ -8525,6 +8793,13 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jackspeak@^4.1.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.2.3.tgz#27ef80f33b93412037c3bea4f8eddf80e1931483" + integrity sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg== + dependencies: + "@isaacs/cliui" "^9.0.0" + jake@^10.8.5: version "10.9.2" resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" @@ -8641,7 +8916,17 @@ jest-config@^29.7.0: slash "^3.0.0" strip-json-comments "^3.1.1" -"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: +"jest-diff@>=30.0.0 < 31", jest-diff@^30.0.2: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.2.0.tgz#e3ec3a6ea5c5747f605c9e874f83d756cba36825" + integrity sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A== + dependencies: + "@jest/diff-sequences" "30.0.1" + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + pretty-format "30.2.0" + +jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== @@ -9025,10 +9310,10 @@ js-yaml@3.14.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" @@ -9040,6 +9325,13 @@ js-yaml@^3.10.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" @@ -9101,10 +9393,15 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" - integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== +json-parse-even-better-errors@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" + integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== + +json-parse-even-better-errors@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz#93c89f529f022e5dadc233409324f0167b1e903e" + integrity sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ== json-schema-traverse@^0.4.1: version "0.4.1" @@ -9296,22 +9593,21 @@ lerc@^3.0.0: resolved "https://registry.yarnpkg.com/lerc/-/lerc-3.0.0.tgz#36f36fbd4ba46f0abf4833799fff2e7d6865f5cb" integrity sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww== -lerna@8.2.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.2.1.tgz#30ddc192130dc50cff68951c1e63a74a391c178d" - integrity sha512-Xwjv9/4ixp7fpBWhtvp7dz4NoQT8DEf7hzibHKCgu/8kmZUHeXsTn+TKspHqhI+p4YDmdkDnkg8xmymz73kVOg== - dependencies: - "@lerna/create" "8.2.1" - "@npmcli/arborist" "7.5.4" - "@npmcli/package-json" "5.2.0" - "@npmcli/run-script" "8.1.0" - "@nx/devkit" ">=17.1.2 < 21" +lerna@9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-9.0.4.tgz#b76364caf63f941895a34ca0adc59273a1b9df8f" + integrity sha512-wKy9TOkkdCWPWET0R5o7mh7J0KuNNjxE0g+qTruNAt5ffWwy54wfWiJtWyDSMOrcGDt6gtisDBTKniOqK/sJvw== + dependencies: + "@lerna/create" "9.0.4" + "@npmcli/arborist" "9.1.6" + "@npmcli/package-json" "7.0.2" + "@npmcli/run-script" "10.0.3" + "@nx/devkit" ">=21.5.2 < 23.0.0" "@octokit/plugin-enterprise-rest" "6.0.1" "@octokit/rest" "20.1.2" aproba "2.0.0" byte-size "8.1.1" chalk "4.1.0" - clone-deep "4.0.1" cmd-shim "6.0.3" color-support "1.1.3" columnify "1.6.0" @@ -9328,54 +9624,52 @@ lerna@8.2.1: get-stream "6.0.0" git-url-parse "14.0.0" glob-parent "6.0.2" - globby "11.1.0" - graceful-fs "4.2.11" has-unicode "2.0.1" import-local "3.1.0" ini "^1.3.8" - init-package-json "6.0.3" - inquirer "^8.2.4" + init-package-json "8.2.2" + inquirer "12.9.6" is-ci "3.0.1" is-stream "2.0.0" - jest-diff ">=29.4.3 < 30" - js-yaml "4.1.0" - libnpmaccess "8.0.6" - libnpmpublish "9.0.9" + jest-diff ">=30.0.0 < 31" + js-yaml "4.1.1" + libnpmaccess "10.0.3" + libnpmpublish "11.1.2" load-json-file "6.2.0" - lodash "^4.17.21" make-dir "4.0.0" + make-fetch-happen "15.0.2" minimatch "3.0.5" multimatch "5.0.0" - node-fetch "2.6.7" - npm-package-arg "11.0.2" - npm-packlist "8.0.2" - npm-registry-fetch "^17.1.0" - nx ">=17.1.2 < 21" + npm-package-arg "13.0.1" + npm-packlist "10.0.3" + npm-registry-fetch "19.1.0" + nx ">=21.5.3 < 23.0.0" p-map "4.0.0" p-map-series "2.1.0" p-pipe "3.1.0" p-queue "6.6.2" p-reduce "2.1.0" p-waterfall "2.1.1" - pacote "^18.0.6" + pacote "21.0.1" pify "5.0.0" read-cmd-shim "4.0.0" resolve-from "5.0.0" - rimraf "^4.4.1" - semver "^7.3.8" + rimraf "^6.1.2" + semver "7.7.2" set-blocking "^2.0.0" signal-exit "3.0.7" slash "3.0.0" - ssri "^10.0.6" + ssri "12.0.0" string-width "^4.2.3" - strong-log-transformer "2.1.0" - tar "6.2.1" + tar "7.5.7" temp-dir "1.0.0" + through "2.3.8" + tinyglobby "0.2.12" typescript ">=3 < 6" upath "2.0.1" - uuid "^10.0.0" + uuid "^11.1.0" validate-npm-package-license "3.0.4" - validate-npm-package-name "5.0.1" + validate-npm-package-name "6.0.2" wide-align "1.1.5" write-file-atomic "5.0.1" write-pkg "4.0.0" @@ -9392,27 +9686,27 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -libnpmaccess@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-8.0.6.tgz#73be4c236258babc0a0bca6d3b6a93a6adf937cf" - integrity sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw== +libnpmaccess@10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-10.0.3.tgz#856dc29fd35050159dff0039337aab503367586b" + integrity sha512-JPHTfWJxIK+NVPdNMNGnkz4XGX56iijPbe0qFWbdt68HL+kIvSzh+euBL8npLZvl2fpaxo+1eZSdoG15f5YdIQ== dependencies: - npm-package-arg "^11.0.2" - npm-registry-fetch "^17.0.1" + npm-package-arg "^13.0.0" + npm-registry-fetch "^19.0.0" -libnpmpublish@9.0.9: - version "9.0.9" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-9.0.9.tgz#e737378c09f09738377d2a276734be35cffb85e2" - integrity sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg== +libnpmpublish@11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-11.1.2.tgz#dfe4bb533b852ad28852654c072315e2d653c235" + integrity sha512-tNcU3cLH7toloAzhOOrBDhjzgbxpyuYvkf+BPPnnJCdc5EIcdJ8JcT+SglvCQKKyZ6m9dVXtCVlJcA6csxKdEA== dependencies: + "@npmcli/package-json" "^7.0.0" ci-info "^4.0.0" - normalize-package-data "^6.0.1" - npm-package-arg "^11.0.2" - npm-registry-fetch "^17.0.1" - proc-log "^4.2.0" + npm-package-arg "^13.0.0" + npm-registry-fetch "^19.0.0" + proc-log "^5.0.0" semver "^7.3.7" - sigstore "^2.2.0" - ssri "^10.0.6" + sigstore "^4.0.0" + ssri "^12.0.0" lilconfig@2.1.0: version "2.1.0" @@ -9643,11 +9937,16 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2, lru-cache@^10.4.3: +lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^11.0.0, lru-cache@^11.1.0, lru-cache@^11.2.1: + version "11.2.6" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.6.tgz#356bf8a29e88a7a2945507b31f6429a65a192c58" + integrity sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -9706,23 +10005,39 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" - integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== +make-fetch-happen@15.0.2: + version "15.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz#4fd4e6263e0f26852cd73cae04ff2b2e433caa76" + integrity sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ== dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" + "@npmcli/agent" "^4.0.0" + cacache "^20.0.1" http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" minipass "^7.0.2" - minipass-fetch "^3.0.0" + minipass-fetch "^4.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - proc-log "^4.2.0" + negotiator "^1.0.0" + proc-log "^5.0.0" promise-retry "^2.0.1" - ssri "^10.0.0" + ssri "^12.0.0" + +make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.1, make-fetch-happen@^15.0.3: + version "15.0.3" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz#1578d72885f2b3f9e5daa120b36a14fc31a84610" + integrity sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw== + dependencies: + "@npmcli/agent" "^4.0.0" + cacache "^20.0.1" + http-cache-semantics "^4.1.1" + minipass "^7.0.2" + minipass-fetch "^5.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^1.0.0" + proc-log "^6.0.0" + promise-retry "^2.0.1" + ssri "^13.0.0" makeerror@1.0.12: version "1.0.12" @@ -9969,6 +10284,13 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +minimatch@10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + minimatch@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" @@ -9976,12 +10298,12 @@ minimatch@3.0.5: dependencies: brace-expansion "^1.1.7" -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^10.0.3, minimatch@^10.1.1, minimatch@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.1.tgz#9d82835834cdc85d5084dd055e9a4685fa56e5f0" + integrity sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^5.0.2" minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" @@ -9997,14 +10319,7 @@ minimatch@^5.0.1, minimatch@^5.1.6: dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: +minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -10039,14 +10354,25 @@ minipass-collect@^2.0.1: dependencies: minipass "^7.0.3" -minipass-fetch@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" - integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== +minipass-fetch@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-4.0.1.tgz#f2d717d5a418ad0b1a7274f9b913515d3e78f9e5" + integrity sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ== dependencies: minipass "^7.0.3" minipass-sized "^1.0.3" - minizlib "^2.1.2" + minizlib "^3.0.1" + optionalDependencies: + encoding "^0.1.13" + +minipass-fetch@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-5.0.1.tgz#c8d62dc0393f9d4bc156421f7fb10321cd54a697" + integrity sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw== + dependencies: + minipass "^7.0.3" + minipass-sized "^2.0.0" + minizlib "^3.0.1" optionalDependencies: encoding "^0.1.13" @@ -10071,6 +10397,13 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" +minipass-sized@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-2.0.0.tgz#2228ee97e3f74f6b22ba6d1319addb7621534306" + integrity sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA== + dependencies: + minipass "^7.1.2" + minipass@^3.0.0: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" @@ -10078,28 +10411,17 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== +minizlib@^3.0.1, minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== dependencies: - minipass "^3.0.0" - yallist "^4.0.0" + minipass "^7.1.2" mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" @@ -10113,7 +10435,7 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: dependencies: minimist "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -10215,15 +10537,10 @@ murmurhash3js-revisited@^3.0.0: resolved "https://registry.yarnpkg.com/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz#6bd36e25de8f73394222adc6e41fa3fac08a5869" integrity sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== nanoid@^3.3.7: version "3.3.8" @@ -10253,11 +10570,16 @@ ndarray@1.0.19, ndarray@^1.0.19: iota-array "^1.0.0" is-buffer "^1.0.2" -negotiator@0.6.3, negotiator@^0.6.3: +negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -10302,21 +10624,21 @@ node-forge@1.3.2, node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.2.tgz#d0d2659a26eef778bf84d73e7f55c08144ee7750" integrity sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw== -node-gyp@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.2.0.tgz#80101c4aa4f7ab225f13fcc8daaaac4eb1a8dd86" - integrity sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw== +node-gyp@^12.1.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.2.0.tgz#ff73f6f509e33d8b7e768f889ffc9738ad117b07" + integrity sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" - glob "^10.3.10" graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^4.1.0" + make-fetch-happen "^15.0.0" + nopt "^9.0.0" + proc-log "^6.0.0" semver "^7.3.5" - tar "^6.2.1" - which "^4.0.0" + tar "^7.5.4" + tinyglobby "^0.2.12" + which "^6.0.0" node-int64@^0.4.0: version "0.4.0" @@ -10340,12 +10662,19 @@ node-releases@^2.0.27: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== -nopt@^7.0.0, nopt@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" - integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== +nopt@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.1.0.tgz#b11d38caf0f8643ce885818518064127f602eae3" + integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A== + dependencies: + abbrev "^3.0.0" + +nopt@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-9.0.0.tgz#6bff0836b2964d24508b6b41b5a9a49c4f4a1f96" + integrity sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw== dependencies: - abbrev "^2.0.0" + abbrev "^4.0.0" normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -10377,15 +10706,6 @@ normalize-package-data@^4.0.1: semver "^7.3.5" validate-npm-package-license "^3.0.4" -normalize-package-data@^6.0.0, normalize-package-data@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" - integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== - dependencies: - hosted-git-info "^7.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -10396,75 +10716,129 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== -npm-bundled@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25" - integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ== +npm-bundled@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-4.0.0.tgz#f5b983f053fe7c61566cf07241fab2d4e9d513d3" + integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== dependencies: - npm-normalize-package-bin "^3.0.0" + npm-normalize-package-bin "^4.0.0" -npm-install-checks@^6.0.0, npm-install-checks@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== +npm-bundled@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-5.0.0.tgz#5025d847cfd06c7b8d9432df01695d0133d9ee80" + integrity sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw== + dependencies: + npm-normalize-package-bin "^5.0.0" + +npm-install-checks@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-7.1.2.tgz#e338d333930ee18e0fb0be6bd8b67af98be3d2fa" + integrity sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ== dependencies: semver "^7.1.1" -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== +npm-install-checks@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-8.0.0.tgz#f5d18e909bb8318d85093e9d8f36ac427c1cbe30" + integrity sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" + integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== + +npm-normalize-package-bin@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz#2b207ff260f2e525ddce93356614e2f736728f89" + integrity sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag== -npm-package-arg@11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.2.tgz#1ef8006c4a9e9204ddde403035f7ff7d718251ca" - integrity sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw== +npm-package-arg@13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.1.tgz#372dc8d4e5ca50e11ba59175d0ccf5dd167d4104" + integrity sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag== dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" + hosted-git-info "^9.0.0" + proc-log "^5.0.0" semver "^7.3.5" - validate-npm-package-name "^5.0.0" + validate-npm-package-name "^6.0.0" -npm-package-arg@^11.0.0, npm-package-arg@^11.0.2: - version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" - integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== +npm-package-arg@^12.0.0: + version "12.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-12.0.2.tgz#3b1e04ebe651cc45028e298664e8c15ce9c0ca40" + integrity sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA== dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" + hosted-git-info "^8.0.0" + proc-log "^5.0.0" semver "^7.3.5" - validate-npm-package-name "^5.0.0" + validate-npm-package-name "^6.0.0" -npm-packlist@8.0.2, npm-packlist@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478" - integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA== +npm-package-arg@^13.0.0: + version "13.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.2.tgz#72a80f2afe8329860e63854489415e9e9a2f78a7" + integrity sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA== dependencies: - ignore-walk "^6.0.4" + hosted-git-info "^9.0.0" + proc-log "^6.0.0" + semver "^7.3.5" + validate-npm-package-name "^7.0.0" -npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" - integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== +npm-packlist@10.0.3, npm-packlist@^10.0.1: + version "10.0.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.3.tgz#e22c039357faf81a75d1b0cdf53dd113f2bed9c7" + integrity sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg== + dependencies: + ignore-walk "^8.0.0" + proc-log "^6.0.0" + +npm-pick-manifest@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz#6cc120c6473ceea56dfead500f00735b2b892851" + integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^11.0.0" + npm-install-checks "^7.1.0" + npm-normalize-package-bin "^4.0.0" + npm-package-arg "^12.0.0" semver "^7.3.5" -npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1, npm-registry-fetch@^17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1" - integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA== +npm-pick-manifest@^11.0.1: + version "11.0.3" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz#76cf6593a351849006c36b38a7326798e2a76d13" + integrity sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ== + dependencies: + npm-install-checks "^8.0.0" + npm-normalize-package-bin "^5.0.0" + npm-package-arg "^13.0.0" + semver "^7.3.5" + +npm-registry-fetch@19.1.0: + version "19.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.1.0.tgz#e84f64263f79c92695a7344d92f93726de5e0707" + integrity sha512-xyZLfs7TxPu/WKjHUs0jZOPinzBAI32kEUel6za0vH+JUTnFZ5zbHI1ZoGZRDm6oMjADtrli6FxtMlk/5ABPNw== + dependencies: + "@npmcli/redact" "^3.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^15.0.0" + minipass "^7.0.2" + minipass-fetch "^4.0.0" + minizlib "^3.0.1" + npm-package-arg "^13.0.0" + proc-log "^5.0.0" + +npm-registry-fetch@^19.0.0: + version "19.1.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz#51e96d21f409a9bc4f96af218a8603e884459024" + integrity sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw== dependencies: - "@npmcli/redact" "^2.0.0" + "@npmcli/redact" "^4.0.0" jsonparse "^1.3.1" - make-fetch-happen "^13.0.0" + make-fetch-happen "^15.0.0" minipass "^7.0.2" - minipass-fetch "^3.0.0" - minizlib "^2.1.2" - npm-package-arg "^11.0.0" - proc-log "^4.0.0" + minipass-fetch "^5.0.0" + minizlib "^3.0.1" + npm-package-arg "^13.0.0" + proc-log "^6.0.0" npm-run-path@^4.0.1: version "4.0.1" @@ -10492,54 +10866,58 @@ nwsapi@^2.2.16: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.22.tgz#109f9530cda6c156d6a713cdf5939e9f0de98b9d" integrity sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ== -"nx@>=17.1.2 < 21": - version "20.0.8" - resolved "https://registry.yarnpkg.com/nx/-/nx-20.0.8.tgz#92101c015f74aa61c0be43ec5c48c6c032db1d1b" - integrity sha512-cMtb+u5Eji7Xm9xMHZkRXMcO8GH6FFqS2+nMgtLUZ/+ZmquEgoV8mbsKVw1u1sJ6osOpWAu9OwXcilwtvSOoBw== +"nx@>=21.5.3 < 23.0.0": + version "22.5.1" + resolved "https://registry.yarnpkg.com/nx/-/nx-22.5.1.tgz#29109d3434e974e0027822673770bef886efaec1" + integrity sha512-KIQqOSdoshkav9JuoH/+Vp42niA5MTRtACupe+q8CaB7bHiLsWr5nctQVC7ul3NauAmsoqNWH7t5CIi8KgrPIQ== dependencies: "@napi-rs/wasm-runtime" "0.2.4" "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "3.0.0-rc.46" + "@yarnpkg/parsers" "3.0.2" "@zkochan/js-yaml" "0.0.7" - axios "^1.7.4" - chalk "^4.1.0" + axios "^1.12.0" cli-cursor "3.1.0" cli-spinners "2.6.1" cliui "^8.0.1" dotenv "~16.4.5" dotenv-expand "~11.0.6" + ejs "^3.1.7" enquirer "~2.3.6" figures "3.2.0" flat "^5.0.2" front-matter "^4.0.2" - ignore "^5.0.4" - jest-diff "^29.4.1" + ignore "^7.0.5" + jest-diff "^30.0.2" jsonc-parser "3.2.0" lines-and-columns "2.0.3" - minimatch "9.0.3" + minimatch "10.1.1" node-machine-id "1.1.12" npm-run-path "^4.0.1" open "^8.4.0" ora "5.3.0" - semver "^7.5.3" + picocolors "^1.1.0" + resolve.exports "2.0.3" + semver "^7.6.3" string-width "^4.2.3" tar-stream "~2.2.0" tmp "~0.2.1" + tree-kill "^1.2.2" tsconfig-paths "^4.1.2" tslib "^2.3.0" + yaml "^2.6.0" yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "20.0.8" - "@nx/nx-darwin-x64" "20.0.8" - "@nx/nx-freebsd-x64" "20.0.8" - "@nx/nx-linux-arm-gnueabihf" "20.0.8" - "@nx/nx-linux-arm64-gnu" "20.0.8" - "@nx/nx-linux-arm64-musl" "20.0.8" - "@nx/nx-linux-x64-gnu" "20.0.8" - "@nx/nx-linux-x64-musl" "20.0.8" - "@nx/nx-win32-arm64-msvc" "20.0.8" - "@nx/nx-win32-x64-msvc" "20.0.8" + "@nx/nx-darwin-arm64" "22.5.1" + "@nx/nx-darwin-x64" "22.5.1" + "@nx/nx-freebsd-x64" "22.5.1" + "@nx/nx-linux-arm-gnueabihf" "22.5.1" + "@nx/nx-linux-arm64-gnu" "22.5.1" + "@nx/nx-linux-arm64-musl" "22.5.1" + "@nx/nx-linux-x64-gnu" "22.5.1" + "@nx/nx-linux-x64-musl" "22.5.1" + "@nx/nx-win32-arm64-msvc" "22.5.1" + "@nx/nx-win32-x64-msvc" "22.5.1" nyc@17.1.0: version "17.1.0" @@ -10736,11 +11114,6 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - oxc-parser@0.74.0: version "0.74.0" resolved "https://registry.yarnpkg.com/oxc-parser/-/oxc-parser-0.74.0.tgz#309e406adb3d2e6ceae4695c4255d379ec70229d" @@ -10849,7 +11222,7 @@ p-map-series@2.1.0: resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== -p-map@4.0.0, p-map@^4.0.0: +p-map@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== @@ -10868,6 +11241,11 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" +p-map@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" + integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== + p-pipe@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" @@ -10947,28 +11325,56 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== -pacote@^18.0.0, pacote@^18.0.6: - version "18.0.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7" - integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A== - dependencies: - "@npmcli/git" "^5.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/package-json" "^5.1.0" - "@npmcli/promise-spawn" "^7.0.0" - "@npmcli/run-script" "^8.0.0" - cacache "^18.0.0" +package-json-from-dist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pacote@21.0.1: + version "21.0.1" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.0.1.tgz#e3497c6b0380bad21d840ce3c9c1f53b9ae40315" + integrity sha512-LHGIUQUrcDIJUej53KJz1BPvUuHrItrR2yrnN0Kl9657cJ0ZT6QJHk9wWPBnQZhYT5KLyZWrk9jaYc2aKDu4yw== + dependencies: + "@npmcli/git" "^6.0.0" + "@npmcli/installed-package-contents" "^3.0.0" + "@npmcli/package-json" "^7.0.0" + "@npmcli/promise-spawn" "^8.0.0" + "@npmcli/run-script" "^10.0.0" + cacache "^20.0.0" fs-minipass "^3.0.0" minipass "^7.0.2" - npm-package-arg "^11.0.0" - npm-packlist "^8.0.0" - npm-pick-manifest "^9.0.0" - npm-registry-fetch "^17.0.0" - proc-log "^4.0.0" + npm-package-arg "^13.0.0" + npm-packlist "^10.0.1" + npm-pick-manifest "^10.0.0" + npm-registry-fetch "^19.0.0" + proc-log "^5.0.0" promise-retry "^2.0.1" - sigstore "^2.2.0" - ssri "^10.0.0" - tar "^6.1.11" + sigstore "^4.0.0" + ssri "^12.0.0" + tar "^7.4.3" + +pacote@^21.0.0, pacote@^21.0.2: + version "21.3.1" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.3.1.tgz#a46ce2432c2bd2581594e24ab7f5a86027fe4528" + integrity sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg== + dependencies: + "@npmcli/git" "^7.0.0" + "@npmcli/installed-package-contents" "^4.0.0" + "@npmcli/package-json" "^7.0.0" + "@npmcli/promise-spawn" "^9.0.0" + "@npmcli/run-script" "^10.0.0" + cacache "^20.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^13.0.0" + npm-packlist "^10.0.1" + npm-pick-manifest "^11.0.1" + npm-registry-fetch "^19.0.0" + proc-log "^6.0.0" + promise-retry "^2.0.1" + sigstore "^4.0.0" + ssri "^13.0.0" + tar "^7.4.3" pako@2.1.0, pako@^2.0.4: version "2.1.0" @@ -10995,12 +11401,12 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== +parse-conflict-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz#996b1edfc0c727583b56c7644dbb3258fc9e9e4b" + integrity sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ== dependencies: - json-parse-even-better-errors "^3.0.0" + json-parse-even-better-errors "^4.0.0" just-diff "^6.0.0" just-diff-apply "^5.2.0" @@ -11113,7 +11519,7 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.11.1, path-scurry@^1.6.1: +path-scurry@^1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== @@ -11121,6 +11527,14 @@ path-scurry@^1.11.1, path-scurry@^1.6.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-scurry@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10" + integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-to-regexp@0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" @@ -11165,7 +11579,7 @@ picocolors@^1.0.0, picocolors@^1.0.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== -picocolors@^1.1.1: +picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -11175,7 +11589,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: +picomatch@^4.0.2, picomatch@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== @@ -11747,6 +12161,14 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-select cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-svgo@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" @@ -11834,10 +12256,15 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" - integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== +proc-log@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" + integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== + +proc-log@^6.0.0, proc-log@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215" + integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ== process-nextick-args@~2.0.0: version "2.0.1" @@ -11851,10 +12278,10 @@ process-on-spawn@^1.0.0: dependencies: fromentries "^1.2.0" -proggy@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1" - integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A== +proggy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proggy/-/proggy-3.0.0.tgz#874e91fed27fe00a511758e83216a6b65148bd6c" + integrity sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q== progress-events@^1.0.1: version "1.0.1" @@ -11876,11 +12303,6 @@ promise-call-limit@^3.0.1: resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -11897,12 +12319,12 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -promzard@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.2.tgz#2226e7c6508b1da3471008ae17066a7c3251e660" - integrity sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ== +promzard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-2.0.0.tgz#03ad0e4db706544dfdd4f459281f13484fc10c49" + integrity sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg== dependencies: - read "^3.0.1" + read "^4.0.0" protobufjs@^7.1.2, protobufjs@^7.2.4: version "7.4.0" @@ -12093,18 +12515,15 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-cmd-shim@4.0.0, read-cmd-shim@^4.0.0: +read-cmd-shim@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" +read-cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz#6e5450492187a0749f6c80dcbef0debc1117acca" + integrity sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw== read-pkg-up@^3.0.0: version "3.0.0" @@ -12180,12 +12599,12 @@ read-pkg@^7.1.0: parse-json "^5.2.0" type-fest "^2.0.0" -read@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read/-/read-3.0.1.tgz#926808f0f7c83fa95f1ef33c0e2c09dbb28fd192" - integrity sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw== +read@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-4.1.0.tgz#d97c2556b009b47b16b5bb82311d477cc7503548" + integrity sha512-uRfX6K+f+R8OOrYScaM3ixPY4erg69f8DN6pgTvMcA9iRc8iDhwrA4m3Yu8YYKsXJgVvum+m8PkRboZwwuLzYA== dependencies: - mute-stream "^1.0.0" + mute-stream "^2.0.0" readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" @@ -12394,6 +12813,11 @@ resolve-protobuf-schema@^2.1.0: dependencies: protocol-buffers-schema "^3.3.1" +resolve.exports@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + resolve.exports@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" @@ -12467,12 +12891,13 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.4.1.tgz#bd33364f67021c5b79e93d7f4fa0568c7c21b755" - integrity sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og== +rimraf@^6.1.2: + version "6.1.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.1.3.tgz#afbee236b3bd2be331d4e7ce4493bac1718981af" + integrity sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA== dependencies: - glob "^9.2.0" + glob "^13.0.3" + package-json-from-dist "^1.0.1" rollup@3.29.5: version "3.29.5" @@ -12498,10 +12923,10 @@ run-applescript@^7.0.0: resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-async@^4.0.5: + version "4.0.6" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-4.0.6.tgz#d53b86acb71f42650fe23de2b3c1b6b6b34b9294" + integrity sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ== run-parallel@^1.1.9: version "1.2.0" @@ -12510,10 +12935,10 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== +rxjs@^7.8.2: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== dependencies: tslib "^2.1.0" @@ -12614,16 +13039,26 @@ semver@7.7.1: resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== +semver@7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@^7.6.3, semver@^7.7.2: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== + semver@~7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" @@ -12793,22 +13228,22 @@ signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -sigstore@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" - integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== +sigstore@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-4.1.0.tgz#d34b92a544a05e003a2430209d26d8dfafd805a0" + integrity sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA== dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - "@sigstore/sign" "^2.3.2" - "@sigstore/tuf" "^2.3.4" - "@sigstore/verify" "^1.2.1" + "@sigstore/bundle" "^4.0.0" + "@sigstore/core" "^3.1.0" + "@sigstore/protobuf-specs" "^0.5.0" + "@sigstore/sign" "^4.1.0" + "@sigstore/tuf" "^4.0.1" + "@sigstore/verify" "^3.1.0" simple-concat@^1.0.0: version "1.0.1" @@ -13074,10 +13509,17 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^10.0.0, ssri@^10.0.6: - version "10.0.6" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" - integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== +ssri@12.0.0, ssri@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-12.0.0.tgz#bcb4258417c702472f8191981d3c8a771fee6832" + integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ== + dependencies: + minipass "^7.0.3" + +ssri@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-13.0.1.tgz#2d8946614d33f4d0c84946bb370dce7a9379fd18" + integrity sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ== dependencies: minipass "^7.0.3" @@ -13241,15 +13683,6 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strong-log-transformer@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - strtok3@^7.0.0: version "7.1.1" resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-7.1.1.tgz#f548fd9dc59d0a76d5567ff8c16be31221f29dfc" @@ -13434,17 +13867,16 @@ tar-stream@^2.1.4, tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@6.2.1, tar@^6.1.11, tar@^6.1.13, tar@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" +tar@7.5.7, tar@7.5.9, tar@^6.1.13, tar@^7.4.3, tar@^7.5.4: + version "7.5.9" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.9.tgz#817ac12a54bc4362c51340875b8985d7dc9724b8" + integrity sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" temp-dir@1.0.0: version "1.0.0" @@ -13524,7 +13956,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: +through@2, through@2.3.8, "through@>=2.2.7 <3", through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -13539,6 +13971,22 @@ tiny-emitter@^2.1.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== +tinyglobby@0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + +tinyglobby@^0.2.12: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + titleize@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" @@ -13556,13 +14004,6 @@ tldts@^6.1.32: dependencies: tldts-core "^6.1.86" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmp@^0.2.1, tmp@~0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" @@ -13637,6 +14078,11 @@ tree-dump@^1.0.1: resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.2.tgz#c460d5921caeb197bde71d0e9a7b479848c5b8ac" integrity sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ== +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + treeverse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" @@ -13701,14 +14147,14 @@ tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== -tuf-js@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" - integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== +tuf-js@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-4.1.0.tgz#ae4ef9afa456fcb4af103dc50a43bc031f066603" + integrity sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ== dependencies: - "@tufjs/models" "2.0.1" - debug "^4.3.4" - make-fetch-happen "^13.0.1" + "@tufjs/models" "4.1.0" + debug "^4.4.3" + make-fetch-happen "^15.0.1" tunnel-agent@^0.6.0: version "0.6.0" @@ -13913,17 +14359,17 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== +unique-filename@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-5.0.0.tgz#8b17bbde1a7ca322dd1a1d23fe17c2b798c43f8f" + integrity sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg== dependencies: - unique-slug "^4.0.0" + unique-slug "^6.0.0" -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== +unique-slug@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-6.0.0.tgz#f46fd688a9bd972fd356c23d95812a3a4862ed88" + integrity sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw== dependencies: imurmurhash "^0.1.4" @@ -14031,10 +14477,10 @@ uuid@9.0.1, uuid@^9.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== +uuid@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== uuid@^8.3.2: version "8.3.2" @@ -14063,10 +14509,15 @@ validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validat spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@5.0.1, validate-npm-package-name@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" - integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== +validate-npm-package-name@6.0.2, validate-npm-package-name@^6.0.0, validate-npm-package-name@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz#4e8d2c4d939975a73dd1b7a65e8f08d44c85df96" + integrity sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ== + +validate-npm-package-name@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz#e57c3d721a4c8bbff454a246e7f7da811559ea0d" + integrity sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A== varint@^6.0.0: version "6.0.0" @@ -14090,10 +14541,10 @@ w3c-xmlserializer@^5.0.0: dependencies: xml-name-validator "^5.0.0" -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== +walk-up-path@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-4.0.0.tgz#590666dcf8146e2d72318164f1f2ac6ef51d4198" + integrity sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A== walker@^1.0.8: version "1.0.8" @@ -14353,13 +14804,20 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== +which@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6" + integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== dependencies: isexe "^3.1.1" +which@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-6.0.1.tgz#021642443a198fb93b784a5606721cb18cfcbfce" + integrity sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg== + dependencies: + isexe "^4.0.0" + wide-align@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -14399,7 +14857,7 @@ workerpool@^6.5.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: +wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== @@ -14431,7 +14889,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@5.0.1, write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: +write-file-atomic@5.0.1, write-file-atomic@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== @@ -14466,6 +14924,14 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" +write-file-atomic@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-6.0.0.tgz#e9c89c8191b3ef0606bc79fb92681aa1aa16fa93" + integrity sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" @@ -14566,12 +15032,17 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + yaml@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== -yaml@^2.8.1: +yaml@^2.6.0, yaml@^2.8.1: version "2.8.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== @@ -14670,6 +15141,11 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== +yoctocolors-cjs@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + zstddec@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.1.0.tgz#7050f3f0e0c3978562d0c566b3e5a427d2bad7ec" From 5b4a1ffa6e2f4db8a54b887d96ba4c80ea135f7f Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 18 Feb 2026 18:35:45 +0000 Subject: [PATCH 17/90] chore(version): Update package versions to 4.16.4 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 71 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73be12b6f6..49f58e409b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +### Bug Fixes + +- **security:** Bump tar to 7.5.9 and lerna to 9.0.4 to fix CVE-2026-26960 ([#2618](https://github.com/cornerstonejs/cornerstone3D/issues/2618)) ([811c326](https://github.com/cornerstonejs/cornerstone3D/commit/811c3264d86dfea0f6b7d62d68b0a8e2791fde0b)) + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package root diff --git a/commit.txt b/commit.txt index 55dce4d8b4..547ae176cd 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -c92964cfb88c2f526aecd0c99f946c4e9ac1a8ce \ No newline at end of file +811c3264d86dfea0f6b7d62d68b0a8e2791fde0b \ No newline at end of file diff --git a/lerna.json b/lerna.json index 3f9ff55c6d..20415d2818 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.16.3", + "version": "4.16.4", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index da0535d966..aab0dd066e 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 75678d1247..47e2e23686 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.16.3", + "version": "4.16.4", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3" + "@cornerstonejs/core": "4.16.4", + "@cornerstonejs/tools": "4.16.4" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index be03523c15..6437f951f6 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 942b89ef57..c3c337c890 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.16.3", + "version": "4.16.4", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3" + "@cornerstonejs/core": "4.16.4", + "@cornerstonejs/tools": "4.16.4" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 85f2f9867d..630359d54c 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index b97d3430ae..14d1b1ce03 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.16.3", + "version": "4.16.4", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 67158e653a..4f936d89c4 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 5239438a80..96c769c683 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.16.3", + "version": "4.16.4", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/core": "4.16.4", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 6b04b0f829..f79ca4d9f5 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 8802349366..27553858ee 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.16.3", + "version": "4.16.4", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3", + "@cornerstonejs/core": "4.16.4", + "@cornerstonejs/tools": "4.16.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index aba1035955..0b2abb30ca 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 5b58a51bd2..477ae39f9f 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.16.3", + "version": "4.16.4", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3" + "@cornerstonejs/core": "4.16.4" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index f6013b82ac..4ae9a34a4f 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index d83c5d1a3d..3a0ce69a1b 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.16.3", + "version": "4.16.4", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3", + "@cornerstonejs/core": "4.16.4", + "@cornerstonejs/tools": "4.16.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 77a75b4291..b7b91a652d 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.16.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.2...v4.16.3) (2026-02-17) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 4b24b3e89a..bcc7868441 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.16.3", + "version": "4.16.4", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/core": "4.16.4", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 743a409fc1..1837fe41e7 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.3'; +export const version = '4.16.4'; diff --git a/version.json b/version.json index 6259f79be7..a251a798f5 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.16.3", - "commit": "c92964cfb88c2f526aecd0c99f946c4e9ac1a8ce" + "version": "4.16.4", + "commit": "811c3264d86dfea0f6b7d62d68b0a8e2791fde0b" } \ No newline at end of file diff --git a/version.txt b/version.txt index 5b33ac5264..2bd63a3b4f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.16.3 \ No newline at end of file +4.16.4 \ No newline at end of file From 6873a993fd2b3784c610387dc634d126ad8d86ce Mon Sep 17 00:00:00 2001 From: TFRadicalImaging <115191433+TFRadicalImaging@users.noreply.github.com> Date: Wed, 18 Feb 2026 18:46:21 -0300 Subject: [PATCH 18/90] feat(tools): implement orthogonalT and lineSegment modes for PlanarFreehandROI open U-shape contours (#2615) * feat(tools): implement orthogonalT and lineSegment modes for PlanarFreehandROI open U-shape contours Add two new rendering modes for the open U-shaped contour T-overlay: - 'orthogonalT': computes the T-line endpoint as the perpendicular ray-contour intersection from the chord midpoint, instead of the farthest point. Useful for LA cardiac workflows where the T must be perpendicular to the chord. - 'lineSegment': draws only the dashed chord connecting endpoints without any T-line, closing the contour visually. Also adds optional shaded fill for the enclosed region (contour + chord) when fillOpacity > 0, and centralizes variant dispatch into a single resolveVectorToPeak function to eliminate duplicated branching across drawLoop, openContourEditLoop, and renderMethods. * fix(tools): address PR review for PlanarFreehandROI U-shape modes - Use vec2.sub instead of create+set for chord vector - Replace double-loop ray intersection with single-pass dot-product approach for orthogonalT peak finding - Return null with console.warn instead of falling back to farthestT when no orthogonal intersection is found - Add 'none' option to U-shape dropdown to remove U-shape rendering - Auto-apply U-shape mode on dropdown change, remove separate button - Apply configured U-shape mode to newly drawn open contours - Add fill opacity dropdown using tool configuration - Read fillOpacity from tool config in renderMethods * refactor(tools): use vec2.dot for orthogonal T dot product calculation * Move open u shaped to utils helper --------- Co-authored-by: Bill Wallace --- .../examples/planarFreehandROITool/index.ts | 42 +++---- .../planarFreehandROITool/drawLoop.ts | 22 ++-- .../findOpenUShapedContourVectorToPeak.ts | 116 +++++++++++++++++- .../openContourEditLoop.ts | 9 +- .../planarFreehandROITool/renderMethods.ts | 95 +++++++++----- .../addFillOpacityDropdownToToolbar.ts | 50 ++++++++ .../helpers/addUShapeModeDropdownToToolbar.ts | 80 ++++++++++++ utils/demo/helpers/index.js | 4 + 8 files changed, 347 insertions(+), 71 deletions(-) create mode 100644 utils/demo/helpers/addFillOpacityDropdownToToolbar.ts create mode 100644 utils/demo/helpers/addUShapeModeDropdownToToolbar.ts diff --git a/packages/tools/examples/planarFreehandROITool/index.ts b/packages/tools/examples/planarFreehandROITool/index.ts index badfef917d..80cc8b5fa5 100644 --- a/packages/tools/examples/planarFreehandROITool/index.ts +++ b/packages/tools/examples/planarFreehandROITool/index.ts @@ -4,13 +4,14 @@ import { Enums, volumeLoader, getRenderingEngine, - getEnabledElement, } from '@cornerstonejs/core'; import { initDemo, createImageIdsAndCacheMetaData, setTitleAndDescription, addButtonToToolbar, + addFillOpacityDropdownToToolbar, + addUShapeModeDropdownToToolbar, createInfoSection, } from '../../../../utils/demo/helpers'; import * as cornerstoneTools from '@cornerstonejs/tools'; @@ -27,20 +28,17 @@ const { ZoomTool, ToolGroupManager, Enums: csToolsEnums, - annotation, } = cornerstoneTools; const { ViewportType } = Enums; const { MouseBindings } = csToolsEnums; -const { selection } = annotation; -const defaultFrameOfReferenceSpecificAnnotationManager = - annotation.state.getAnnotationManager(); // Define a unique id for the volume const volumeName = 'CT_VOLUME_ID'; // Id of the volume less loader prefix const volumeLoaderScheme = 'cornerstoneStreamingImageVolume'; // Loader id which defines which volume loader to use const volumeId = `${volumeLoaderScheme}:${volumeName}`; // VolumeId with loader id + volume id const renderingEngineId = 'myRenderingEngine'; +const toolGroupId = 'STACK_TOOL_GROUP_ID'; const viewportIds = ['CT_STACK', 'CT_VOLUME_SAGITTAL']; @@ -117,26 +115,20 @@ createInfoSection(content, { 'The two open ends will be drawn with a dotted line, and the midpoint of the line to the tip of the horseshoe shall be calculated and displayed.' ); -addButtonToToolbar({ - title: 'Render selected open contour with joined ends and midpoint line', - onClick: () => { - const annotationUIDs = selection.getAnnotationsSelected(); - - if (annotationUIDs && annotationUIDs.length) { - const annotationUID = annotationUIDs[0]; - const annotation = - defaultFrameOfReferenceSpecificAnnotationManager.getAnnotation( - annotationUID - ); - - annotation.data.isOpenUShapeContour = true; - - // Render the image to see it was selected - const renderingEngine = getRenderingEngine(renderingEngineId); +addUShapeModeDropdownToToolbar({ + toolGroupId, + toolNames: [PlanarFreehandROITool.toolName], + renderingEngineId, + viewportIds, + getRenderingEngine, +}); - renderingEngine.renderViewports(viewportIds); - } - }, +addFillOpacityDropdownToToolbar({ + toolGroupId, + toolNames: [PlanarFreehandROITool.toolName], + renderingEngineId, + viewportIds, + getRenderingEngine, }); let shouldInterpolate = false; @@ -189,8 +181,6 @@ function addToggleCalculateStatsButton(toolGroup) { } // ============================= // -const toolGroupId = 'STACK_TOOL_GROUP_ID'; - /** * Runs the demo */ diff --git a/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts b/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts index cd57342bfd..78d3d28c12 100644 --- a/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts +++ b/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts @@ -18,7 +18,7 @@ import { triggerContourAnnotationCompleted, } from '../../../stateManagement/annotation/helpers/state'; import type { PlanarFreehandROIAnnotation } from '../../../types/ToolSpecificAnnotationTypes'; -import findOpenUShapedContourVectorToPeak from './findOpenUShapedContourVectorToPeak'; +import { resolveVectorToPeak } from './findOpenUShapedContourVectorToPeak'; import { polyline } from '../../../utilities/math'; import { removeAnnotation } from '../../../stateManagement/annotation/annotationState'; import { ContourWindingDirection } from '../../../types/ContourAnnotation'; @@ -361,14 +361,22 @@ function completeDrawOpenContour( worldPoints[worldPoints.length - 1], ]; - // If the annotation is an open U-shaped annotation, find the annotation vector - // to the farthest point from the mid point of the closure + // Apply configured U-shape mode if the annotation doesn't already have one. if ( - annotation.data.isOpenUShapeContour === true || - annotation.data.isOpenUShapeContour === 'farthestT' + !annotation.data.isOpenUShapeContour && + this.configuration?.openUShapeContour ) { - annotation.data.openUShapeContourVectorToPeak = - findOpenUShapedContourVectorToPeak(canvasPoints, viewport); + annotation.data.isOpenUShapeContour = this.configuration.openUShapeContour; + } + + // If the annotation is an open U-shaped annotation, find the annotation vector + // to the peak point (variant-dependent). + if (annotation.data.isOpenUShapeContour) { + annotation.data.openUShapeContourVectorToPeak = resolveVectorToPeak( + canvasPoints, + viewport, + annotation.data.isOpenUShapeContour + ); } if (!textBox.hasMoved) { diff --git a/packages/tools/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts b/packages/tools/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts index 46bf01442d..ae19ff3824 100644 --- a/packages/tools/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts +++ b/packages/tools/src/tools/annotation/planarFreehandROITool/findOpenUShapedContourVectorToPeak.ts @@ -63,14 +63,124 @@ export default function findOpenUShapedContourVectorToPeak( return toFurthestWorld; } -export function findOpenUShapedContourVectorToPeakOnRender( +/** + * Resolves the correct peak-finding function based on the U-shape variant + * and returns the vector to the peak. Returns null for variants that don't + * need a peak (e.g. 'lineSegment'). + */ +export function resolveVectorToPeak( + canvasPoints: Types.Point2[], + viewport: Types.IStackViewport | Types.IVolumeViewport, + variant: PlanarFreehandROIAnnotation['data']['isOpenUShapeContour'] +): Types.Point3[] | null { + if (variant === 'orthogonalT') { + return findOpenUShapedContourVectorToPeakOrthogonal(canvasPoints, viewport); + } + + if (variant === 'lineSegment') { + return null; + } + + // true, 'farthestT', or any other truthy value + if (variant) { + return findOpenUShapedContourVectorToPeak(canvasPoints, viewport); + } + + return null; +} + +/** + * OnRender variant of resolveVectorToPeak — reads the variant and polyline + * from the annotation itself. + */ +export function resolveVectorToPeakOnRender( enabledElement: Types.IEnabledElement, annotation: PlanarFreehandROIAnnotation -): Types.Point3[] { +): Types.Point3[] | null { const { viewport } = enabledElement; const canvasPoints = annotation.data.contour.polyline.map( viewport.worldToCanvas ); - return findOpenUShapedContourVectorToPeak(canvasPoints, viewport); + return resolveVectorToPeak( + canvasPoints, + viewport, + annotation.data.isOpenUShapeContour + ); +} + +/** + * Finds the intersection of the perpendicular from the chord midpoint with the + * contour surface. The T-line is orthogonal to the chord connecting the two + * endpoints of the open contour. + */ +function findOpenUShapedContourVectorToPeakOrthogonal( + canvasPoints: Types.Point2[], + viewport: Types.IStackViewport | Types.IVolumeViewport +): Types.Point3[] | null { + // Find chord from first to last point. + const first = canvasPoints[0]; + const last = canvasPoints[canvasPoints.length - 1]; + + const firstToLastUnitVector = vec2.sub(vec2.create(), last, first); + vec2.normalize(firstToLastUnitVector, firstToLastUnitVector); + + // The chord direction is used for the dot-product test: a point is + // orthogonal to the chord when its displacement from the center has + // zero dot product with the chord direction. + const chordDir: Types.Point2 = [ + firstToLastUnitVector[0] as number, + firstToLastUnitVector[1] as number, + ]; + + // Find the center of the chord. + const centerOfFirstToLast: Types.Point2 = [ + (first[0] + last[0]) / 2, + (first[1] + last[1]) / 2, + ]; + + // Single-pass: walk the contour and look for where the dot product of + // (point - center) with the chord direction changes sign — that's where + // the perpendicular from the midpoint crosses the contour. Interpolate + // between the two bracketing points for a precise intersection. + const delta = vec2.create(); + let prevDp: number | null = null; + let prevPoint: Types.Point2 | null = null; + let orthogonalPoint: Types.Point2 | null = null; + + for (const p of canvasPoints) { + vec2.sub(delta, p, centerOfFirstToLast); + const dp = vec2.dot(chordDir, delta); + + if (prevDp !== null && prevDp * dp < 0) { + // Sign change — interpolate between prevPoint and p + const t = Math.abs(prevDp) / (Math.abs(prevDp) + Math.abs(dp)); + orthogonalPoint = [ + prevPoint[0] + t * (p[0] - prevPoint[0]), + prevPoint[1] + t * (p[1] - prevPoint[1]), + ]; + break; + } + + if (Math.abs(dp) < 1e-10) { + orthogonalPoint = p; + break; + } + + prevDp = dp; + prevPoint = p; + } + + if (!orthogonalPoint) { + console.warn('No orthogonal intersection found for open U-shaped contour'); + return null; + } + + const toOrthogonal: [Types.Point2, Types.Point2] = [ + orthogonalPoint, + centerOfFirstToLast, + ]; + const toOrthogonalWorld = toOrthogonal.map(viewport.canvasToWorld); + + return toOrthogonalWorld; } diff --git a/packages/tools/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts b/packages/tools/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts index 68e3b45fdc..9635b4782c 100644 --- a/packages/tools/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts +++ b/packages/tools/src/tools/annotation/planarFreehandROITool/openContourEditLoop.ts @@ -16,7 +16,7 @@ import { } from '../../../utilities/planarFreehandROITool/smoothPoints'; import triggerAnnotationRenderForViewportIds from '../../../utilities/triggerAnnotationRenderForViewportIds'; import updateContourPolyline from '../../../utilities/contours/updateContourPolyline'; -import findOpenUShapedContourVectorToPeak from './findOpenUShapedContourVectorToPeak'; +import { resolveVectorToPeak } from './findOpenUShapedContourVectorToPeak'; import { triggerAnnotationModified } from '../../../stateManagement/annotation/helpers/state'; const { addCanvasPointsToArray, getSubPixelSpacingAndXYDirections } = polyline; @@ -595,8 +595,11 @@ function completeOpenContourEdit(element: HTMLDivElement) { // If the annotation is an open U-shaped annotation, find the annotation vector. if (annotation.data.isOpenUShapeContour) { - annotation.data.openUShapeContourVectorToPeak = - findOpenUShapedContourVectorToPeak(fusedCanvasPoints, viewport); + annotation.data.openUShapeContourVectorToPeak = resolveVectorToPeak( + fusedCanvasPoints, + viewport, + annotation.data.isOpenUShapeContour + ); } triggerAnnotationModified(annotation, element); diff --git a/packages/tools/src/tools/annotation/planarFreehandROITool/renderMethods.ts b/packages/tools/src/tools/annotation/planarFreehandROITool/renderMethods.ts index d452db62ec..cd1da35bc9 100644 --- a/packages/tools/src/tools/annotation/planarFreehandROITool/renderMethods.ts +++ b/packages/tools/src/tools/annotation/planarFreehandROITool/renderMethods.ts @@ -5,7 +5,7 @@ import { drawPath as drawPathSvg, } from '../../../drawingSvg'; import { polyline } from '../../../utilities/math'; -import { findOpenUShapedContourVectorToPeakOnRender } from './findOpenUShapedContourVectorToPeak'; +import { resolveVectorToPeakOnRender } from './findOpenUShapedContourVectorToPeak'; import type { PlanarFreehandROIAnnotation } from '../../../types/ToolSpecificAnnotationTypes'; import type { StyleSpecifier } from '../../../types/AnnotationStyle'; import type { SVGDrawingHelper } from '../../../types'; @@ -43,7 +43,10 @@ function _getRenderingOptions( width: lineWidth, lineDash, fillColor, - fillOpacity, + fillOpacity: + this.configuration?.fillOpacity !== undefined + ? this.configuration.fillOpacity + : fillOpacity, closePath: isClosedContour, }; @@ -68,10 +71,12 @@ function renderContour( } else { // If its an open contour, check i its a U-shaped contour if (annotation.data.isOpenUShapeContour) { - calculateUShapeContourVectorToPeakIfNotPresent( - enabledElement, - annotation - ); + if (annotation.data.isOpenUShapeContour !== 'lineSegment') { + calculateUShapeContourVectorToPeakIfNotPresent( + enabledElement, + annotation + ); + } this.renderOpenUShapedContour( enabledElement, @@ -93,10 +98,10 @@ function calculateUShapeContourVectorToPeakIfNotPresent( annotation: PlanarFreehandROIAnnotation ): void { if (!annotation.data.openUShapeContourVectorToPeak) { - // Annotation just been set to be an open U-shaped contour. - // calculate its peak vector here. - annotation.data.openUShapeContourVectorToPeak = - findOpenUShapedContourVectorToPeakOnRender(enabledElement, annotation); + annotation.data.openUShapeContourVectorToPeak = resolveVectorToPeakOnRender( + enabledElement, + annotation + ); } } @@ -229,19 +234,17 @@ function renderOpenUShapedContour( this.renderOpenContour(enabledElement, svgDrawingHelper, annotation); + const isLineSegmentOnly = + annotation.data.isOpenUShapeContour === 'lineSegment'; + // prevent rendering u shape in case openUShapeContourVectorToPeak is not set yet - if (!openUShapeContourVectorToPeak) { + if (!isLineSegmentOnly && !openUShapeContourVectorToPeak) { return; } const firstCanvasPoint = viewport.worldToCanvas(polyline[0]); const lastCanvasPoint = viewport.worldToCanvas(polyline[polyline.length - 1]); - const openUShapeContourVectorToPeakCanvas = [ - viewport.worldToCanvas(openUShapeContourVectorToPeak[0]), - viewport.worldToCanvas(openUShapeContourVectorToPeak[1]), - ]; - const options = this._getRenderingOptions(enabledElement, annotation); // Join first and last points @@ -258,22 +261,50 @@ function renderOpenUShapedContour( } ); - // Render midpoint to open contour surface line - drawPolylineSvg( - svgDrawingHelper, - annotation.annotationUID, - 'midpoint-to-open-contour', - [ - openUShapeContourVectorToPeakCanvas[0], - openUShapeContourVectorToPeakCanvas[1], - ], - { - color: options.color, - width: options.width, - closePath: false, - lineDash: '2,2', - } - ); + // Render midpoint to open contour surface line (skip for lineSegment mode) + if (!isLineSegmentOnly) { + const openUShapeContourVectorToPeakCanvas = [ + viewport.worldToCanvas(openUShapeContourVectorToPeak[0]), + viewport.worldToCanvas(openUShapeContourVectorToPeak[1]), + ]; + + drawPolylineSvg( + svgDrawingHelper, + annotation.annotationUID, + 'midpoint-to-open-contour', + [ + openUShapeContourVectorToPeakCanvas[0], + openUShapeContourVectorToPeakCanvas[1], + ], + { + color: options.color, + width: options.width, + closePath: false, + lineDash: '2,2', + } + ); + } + + // Render optional shaded fill for the enclosed region (contour + chord) + if (options.fillOpacity > 0) { + const canvasPolyline = polyline.map((worldPos) => + viewport.worldToCanvas(worldPos) + ); + + drawPathSvg( + svgDrawingHelper, + annotation.annotationUID, + 'u-shape-fill', + [[...canvasPolyline, firstCanvasPoint]], + { + color: options.fillColor || options.color, + fillColor: options.fillColor || options.color, + fillOpacity: options.fillOpacity, + closePath: true, + width: 0, + } + ); + } } /** diff --git a/utils/demo/helpers/addFillOpacityDropdownToToolbar.ts b/utils/demo/helpers/addFillOpacityDropdownToToolbar.ts new file mode 100644 index 0000000000..921772438c --- /dev/null +++ b/utils/demo/helpers/addFillOpacityDropdownToToolbar.ts @@ -0,0 +1,50 @@ +import { ToolGroupManager } from '@cornerstonejs/tools'; +import addDropdownToToolbar from './addDropdownToToolbar'; + +interface AddFillOpacityDropdownToToolbarOptions { + toolGroupId: string; + toolNames: string[]; + renderingEngineId: string; + viewportIds: string[]; + getRenderingEngine: (id: string) => { renderViewports: (ids: string[]) => void }; +} + +/** + * Adds a Fill Opacity dropdown to the toolbar for contour-based annotation tools. + */ +export default function addFillOpacityDropdownToToolbar( + options: AddFillOpacityDropdownToToolbarOptions +): void { + const { + toolGroupId, + toolNames, + renderingEngineId, + viewportIds, + getRenderingEngine, + } = options; + + addDropdownToToolbar({ + labelText: 'Fill Opacity', + options: { + values: ['0', '0.2', '0.5', '0.8'], + defaultValue: '0', + }, + onSelectedValueChange: (value) => { + const toolGroup = ToolGroupManager.getToolGroup(toolGroupId); + + if (toolGroup) { + const fillOpacity = parseFloat(value as string); + for (const toolName of toolNames) { + toolGroup.setToolConfiguration(toolName, { + fillOpacity, + }); + } + } + + const renderingEngine = getRenderingEngine(renderingEngineId); + if (renderingEngine) { + renderingEngine.renderViewports(viewportIds); + } + }, + }); +} diff --git a/utils/demo/helpers/addUShapeModeDropdownToToolbar.ts b/utils/demo/helpers/addUShapeModeDropdownToToolbar.ts new file mode 100644 index 0000000000..ebbc8da843 --- /dev/null +++ b/utils/demo/helpers/addUShapeModeDropdownToToolbar.ts @@ -0,0 +1,80 @@ +import { ToolGroupManager, annotation } from '@cornerstonejs/tools'; +import addDropdownToToolbar from './addDropdownToToolbar'; + +interface AddUShapeModeDropdownToToolbarOptions { + toolGroupId: string; + toolNames: string[]; + renderingEngineId: string; + viewportIds: string[]; + getRenderingEngine: (id: string) => { renderViewports: (ids: string[]) => void }; +} + +/** + * Adds a U-Shape Mode dropdown to the toolbar for tools that support open contours + * (e.g. PlanarFreehandROITool). For tools that don't support open contours, the + * configuration is applied but has no visible effect. + */ +export default function addUShapeModeDropdownToToolbar( + options: AddUShapeModeDropdownToToolbarOptions +): void { + const { + toolGroupId, + toolNames, + renderingEngineId, + viewportIds, + getRenderingEngine, + } = options; + + const defaultFrameOfReferenceSpecificAnnotationManager = + annotation.state.getAnnotationManager(); + const { selection } = annotation; + + addDropdownToToolbar({ + labelText: 'U-Shape Mode', + options: { + values: ['none', 'farthestT', 'orthogonalT', 'lineSegment'], + defaultValue: 'none', + }, + onSelectedValueChange: (value) => { + let mode: boolean | string = false; + + if (value === 'farthestT') { + mode = true; + } else if (value !== 'none') { + mode = value as string; + } + + const toolGroup = ToolGroupManager.getToolGroup(toolGroupId); + + if (toolGroup) { + for (const toolName of toolNames) { + toolGroup.setToolConfiguration(toolName, { + openUShapeContour: mode, + }); + } + } + + // Also apply to currently selected annotation (PlanarFreehandROI specific) + const annotationUIDs = selection.getAnnotationsSelected(); + + if (annotationUIDs && annotationUIDs.length) { + const annotationUID = annotationUIDs[0]; + const ann = + defaultFrameOfReferenceSpecificAnnotationManager.getAnnotation( + annotationUID + ); + + if (ann?.data && 'openUShapeContourVectorToPeak' in ann.data) { + ann.data.openUShapeContourVectorToPeak = null; + (ann.data as { isOpenUShapeContour?: boolean | string }).isOpenUShapeContour = + mode; + + const renderingEngine = getRenderingEngine(renderingEngineId); + if (renderingEngine) { + renderingEngine.renderViewports(viewportIds); + } + } + } + }, + }); +} diff --git a/utils/demo/helpers/index.js b/utils/demo/helpers/index.js index 220bf30626..935a94e340 100644 --- a/utils/demo/helpers/index.js +++ b/utils/demo/helpers/index.js @@ -2,6 +2,8 @@ import addBrushSizeSlider from './addBrushSizeSlider'; import addButtonToToolbar from './addButtonToToolbar'; import addCheckboxToToolbar from './addCheckboxToToolbar'; import addDropdownToToolbar from './addDropdownToToolbar'; +import addFillOpacityDropdownToToolbar from './addFillOpacityDropdownToToolbar'; +import addUShapeModeDropdownToToolbar from './addUShapeModeDropdownToToolbar'; import addInputToToolbar from './addInputToToolbar'; import addLabelToToolbar from './addLabelToToolbar'; import addManipulationBindings from './addManipulationBindings'; @@ -42,6 +44,8 @@ export { addButtonToToolbar, addCheckboxToToolbar, addDropdownToToolbar, + addFillOpacityDropdownToToolbar, + addUShapeModeDropdownToToolbar, addInputToToolbar, addLabelToToolbar, addManipulationBindings, From 02b836e2bff3feff2279adcc98f625dad9c8eed3 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 18 Feb 2026 21:49:57 +0000 Subject: [PATCH 19/90] chore(version): Update package versions to 4.17.0 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49f58e409b..2eb66bf04a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +### Features + +- **tools:** implement orthogonalT and lineSegment modes for PlanarFreehandROI open U-shape contours ([#2615](https://github.com/cornerstonejs/cornerstone3D/issues/2615)) ([de1a72a](https://github.com/cornerstonejs/cornerstone3D/commit/de1a72a0a0da368e87666cdc61ed605058ec982a)) + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 547ae176cd..f8aeff30a9 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -811c3264d86dfea0f6b7d62d68b0a8e2791fde0b \ No newline at end of file +de1a72a0a0da368e87666cdc61ed605058ec982a \ No newline at end of file diff --git a/lerna.json b/lerna.json index 20415d2818..586d61d2bb 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.16.4", + "version": "4.17.0", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index aab0dd066e..17723a283b 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 47e2e23686..bd0a17af78 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.16.4", + "version": "4.17.0", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.4", - "@cornerstonejs/tools": "4.16.4" + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 6437f951f6..33083773a5 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index c3c337c890..7d6dbbfdbf 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.16.4", + "version": "4.17.0", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.4", - "@cornerstonejs/tools": "4.16.4" + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 630359d54c..a7a362c720 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 14d1b1ce03..b09678dd84 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.16.4", + "version": "4.17.0", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 4f936d89c4..3300e7406f 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 96c769c683..2191de454a 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.16.4", + "version": "4.17.0", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.4", + "@cornerstonejs/core": "4.17.0", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index f79ca4d9f5..ea06ce67ec 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 27553858ee..d6defc439c 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.16.4", + "version": "4.17.0", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.4", - "@cornerstonejs/tools": "4.16.4", + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 0b2abb30ca..2f2440a76e 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 477ae39f9f..31f036725f 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.16.4", + "version": "4.17.0", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.4" + "@cornerstonejs/core": "4.17.0" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 4ae9a34a4f..f1ffe9b037 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 3a0ce69a1b..500b740fee 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.16.4", + "version": "4.17.0", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.4", - "@cornerstonejs/tools": "4.16.4", + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index b7b91a652d..bd7e2afc6d 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) + +### Features + +- **tools:** implement orthogonalT and lineSegment modes for PlanarFreehandROI open U-shape contours ([#2615](https://github.com/cornerstonejs/cornerstone3D/issues/2615)) ([de1a72a](https://github.com/cornerstonejs/cornerstone3D/commit/de1a72a0a0da368e87666cdc61ed605058ec982a)) + ## [4.16.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.3...v4.16.4) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index bcc7868441..c55331a195 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.16.4", + "version": "4.17.0", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.16.4", + "@cornerstonejs/core": "4.17.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 1837fe41e7..d31d0ab0f8 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.16.4'; +export const version = '4.17.0'; diff --git a/version.json b/version.json index a251a798f5..996d5138f4 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.16.4", - "commit": "811c3264d86dfea0f6b7d62d68b0a8e2791fde0b" + "version": "4.17.0", + "commit": "de1a72a0a0da368e87666cdc61ed605058ec982a" } \ No newline at end of file diff --git a/version.txt b/version.txt index 2bd63a3b4f..8643e72279 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.16.4 \ No newline at end of file +4.17.0 \ No newline at end of file From d94b9e59d4c680703b7c3c9aa2853b6daffa6213 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:11:55 -0500 Subject: [PATCH 20/90] fix(security): Changes in response to CVE-2026-26996 (#2622) * fix(security): Various dependency updates as a result of CVE-2026-26996. Ultimately the vulnerability was ignored because it is only exposed in itk-wasm via CLI and it is limited to build/dev environments. --- .circleci/config.yml | 13 +- babel.config.js | 1 - bun.lock | 1313 +++++++++++++++++---------- package.json | 21 +- yarn.lock | 2042 +++++++++++++++++++++++------------------- 5 files changed, 1973 insertions(+), 1417 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2b77f9d3ae..fbeadeb064 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,6 @@ defaults: &defaults environment: TERM: xterm # Enable colors in term - commands: install_bun: steps: @@ -37,7 +36,9 @@ jobs: # Define ignored vulnerabilities with comments IGNORED_VULNS=( - "GHSA-5j98-mcp5-4vw2" # CVE-2025-64756 - glob is not used on the command line + "GHSA-5j98-mcp5-4vw2" # CVE-2025-64756 - CS3D's use of glob is strictly for building and CI/CD purposes + "GHSA-3ppc-4f35-3m26" # CVE-2026-26996 - CS3D's use of minimatch via glob is safe because it does NOT use the CLI + # CVE-2026-26996 - CS3D's other uses of minimatch are strictly for building and CI/CD purposes ) # Build ignore flags @@ -73,7 +74,7 @@ jobs: - persist_to_workspace: root: ~/repo paths: - - "." + - '.' BUILD: <<: *defaults @@ -111,7 +112,7 @@ jobs: no\n" > ~/.ssh/config - add_ssh_keys: fingerprints: - - "7e:0f:5b:bb:e3:7a:2e:2f:b4:85:bd:66:09:69:cb:f2" + - '7e:0f:5b:bb:e3:7a:2e:2f:b4:85:bd:66:09:69:cb:f2' - run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc - run: git config --global user.email "contact@ohif.org" - run: git config --global user.name "ohif-bot" @@ -121,8 +122,7 @@ jobs: bun ./publish-version.mjs - run: name: Again set the NPM registry (was deleted in the version script) - command: - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/repo/.npmrc + command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/repo/.npmrc - run: name: publish package dist command: | @@ -160,5 +160,4 @@ workflows: - NPM_PUBLISH: requires: - BUILD - # VS Code Extension Version: 1.5.1 diff --git a/babel.config.js b/babel.config.js index daaa969b98..324e79147e 100644 --- a/babel.config.js +++ b/babel.config.js @@ -10,7 +10,6 @@ module.exports = (api) => { '@babel/preset-typescript', ], plugins: [ - 'babel-plugin-istanbul', '@babel/plugin-proposal-class-properties', '@babel/plugin-transform-runtime', '@babel/plugin-transform-typescript', diff --git a/bun.lock b/bun.lock index f188876bd1..a390b1b915 100644 --- a/bun.lock +++ b/bun.lock @@ -17,7 +17,7 @@ "@babel/runtime-corejs3": "7.26.10", "@cornerstonejs/calculate-suv": "1.0.3", "@istanbuljs/nyc-config-typescript": "1.0.2", - "@microsoft/api-extractor": "7.49.2", + "@microsoft/api-extractor": "7.57.1", "@microsoft/tsdoc": "0.15.1", "@playwright/test": "1.56.1", "@prettier/plugin-oxc": "0.0.4", @@ -41,7 +41,7 @@ "ajv": "8.17.1", "autoprefixer": "10.4.21", "babel-loader": "9.1.2", - "babel-plugin-istanbul": "7.0.0", + "babel-plugin-istanbul": "7.0.1", "babel-plugin-transform-import-meta": "2.3.2", "chai": "5.2.0", "clean-webpack-plugin": "4.0.0", @@ -55,7 +55,7 @@ "cssnano": "6.1.2", "dicomweb-client": "0.11.2", "docdash": "1.2.0", - "dpdm": "3.14.0", + "dpdm": "4.0.1", "execa": "7.2.0", "exports-loader": "3.1.0", "file-loader": "6.2.0", @@ -63,8 +63,8 @@ "fs-extra": "10.1.0", "html-webpack-plugin": "5.6.3", "husky": "9.1.7", - "jasmine": "4.6.0", - "jest": "29.7.0", + "jasmine": "6.0.0", + "jest": "30.2.0", "jest-canvas-mock": "2.5.2", "jest-environment-jsdom": "30.2.0", "jest-junit": "16.0.0", @@ -73,12 +73,10 @@ "karma-coverage": "2.2.1", "karma-jasmine": "5.1.0", "karma-junit-reporter": "2.0.1", - "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "5.0.1", "lerna": "9.0.4", "lint-staged": "13.3.0", - "mocha": "10.8.2", "nyc": "17.1.0", "open-cli": "7.2.0", "oxlint": "1.9.0", @@ -94,8 +92,8 @@ "rollup": "3.29.5", "semver": "7.7.1", "shader-loader": "1.3.1", - "shelljs": "0.8.5", - "shx": "0.3.4", + "shelljs": "0.10.0", + "shx": "0.4.0", "sinon": "21.0.0", "source-map-support": "0.5.21", "style-loader": "3.3.4", @@ -103,9 +101,7 @@ "stylelint-config-recommended": "12.0.0", "ts-loader": "9.5.1", "ts-node": "10.9.2", - "typedoc": "0.28.15", "typescript": "5.5.4", - "unzipper": "0.10.14", "url-loader": "4.1.1", "webpack": "5.105.0", "webpack-bundle-analyzer": "4.10.2", @@ -124,7 +120,7 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -133,13 +129,13 @@ "ndarray": "1.0.19", }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3", + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0", }, }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -151,13 +147,13 @@ "onnxruntime-web": "1.17.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3", + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0", }, }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -167,7 +163,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -180,48 +176,48 @@ "uuid": "9.0.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/core": "4.17.0", "dicom-parser": "1.8.21", }, }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3", + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0", "@kitware/vtk.js": "34.15.1", }, }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "nifti-reader-js": "0.6.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/core": "4.17.0", }, }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", - "@cornerstonejs/tools": "4.16.3", + "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/tools": "4.17.0", "@kitware/vtk.js": "34.15.1", }, }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.16.3", + "version": "4.17.0", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", @@ -231,7 +227,7 @@ "canvas": "3.2.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.16.3", + "@cornerstonejs/core": "4.17.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", @@ -252,6 +248,7 @@ "lodash": "4.17.23", "node-forge": "1.3.2", "qs": "6.14.1", + "shelljs": "0.10.0", "tar": "7.5.9", "tar-fs": "2.1.4", "ws": "8.18.3", @@ -603,8 +600,6 @@ "@externals/dicom-microscopy-viewer": ["@externals/dicom-microscopy-viewer@workspace:addOns/externals/dicom-microscopy-viewer"], - "@gerrit0/mini-shiki": ["@gerrit0/mini-shiki@3.20.0", "", { "dependencies": { "@shikijs/engine-oniguruma": "^3.20.0", "@shikijs/langs": "^3.20.0", "@shikijs/themes": "^3.20.0", "@shikijs/types": "^3.20.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-Wa57i+bMpK6PGJZ1f2myxo3iO+K/kZikcyvH8NIqNNZhQUbDav7V9LQmWOXhf946mz5c1NZ19WMsGYiDKTryzQ=="], - "@hutson/parse-repository-url": ["@hutson/parse-repository-url@3.0.2", "", {}, "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q=="], "@icr/polyseg-wasm": ["@icr/polyseg-wasm@0.4.0", "", {}, "sha512-3sZmiwG8I0NaqPle0L7+V/ZexiR7IjIUFkUsaOoFI9rNuBGyyMMmxAxnCmqcDFtBDk9h+JEYJf6e3NnqlHi/HQ=="], @@ -655,7 +650,7 @@ "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.1", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ=="], - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + "@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="], "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], @@ -671,9 +666,11 @@ "@itk-wasm/morphological-contour-interpolation": ["@itk-wasm/morphological-contour-interpolation@1.1.0", "", { "dependencies": { "itk-wasm": "1.0.0-b.173" } }, "sha512-n6JIyDcSCCjlpfCW8mnTTzwPTE8U1QT87hNmyAknxdpGR4dfAzIutuKNrwgvr9UiKEBcit0X3HNx9dkzDwcIcw=="], - "@jest/console": ["@jest/console@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", "slash": "^3.0.0" } }, "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg=="], + "@jasminejs/reporters": ["@jasminejs/reporters@1.0.0", "", {}, "sha512-rM3GG4vx2H1Gp5kYCTr9aKlOEJFd43pzpiMAiy5b1+FUc2ub4e6bS6yCi/WQNDzAa5MVp9++dwcoEtcIfoEnhA=="], + + "@jest/console": ["@jest/console@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "slash": "^3.0.0" } }, "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ=="], - "@jest/core": ["@jest/core@29.7.0", "", { "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^29.7.0", "jest-config": "^29.7.0", "jest-haste-map": "^29.7.0", "jest-message-util": "^29.7.0", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", "jest-resolve-dependencies": "^29.7.0", "jest-runner": "^29.7.0", "jest-runtime": "^29.7.0", "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg=="], + "@jest/core": ["@jest/core@30.2.0", "", { "dependencies": { "@jest/console": "30.2.0", "@jest/pattern": "30.0.1", "@jest/reporters": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-changed-files": "30.2.0", "jest-config": "30.2.0", "jest-haste-map": "30.2.0", "jest-message-util": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-resolve-dependencies": "30.2.0", "jest-runner": "30.2.0", "jest-runtime": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0", "jest-watcher": "30.2.0", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ=="], "@jest/diff-sequences": ["@jest/diff-sequences@30.0.1", "", {}, "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw=="], @@ -681,7 +678,7 @@ "@jest/environment-jsdom-abstract": ["@jest/environment-jsdom-abstract@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/jsdom": "^21.1.7", "@types/node": "*", "jest-mock": "30.2.0", "jest-util": "30.2.0" }, "peerDependencies": { "canvas": "^3.0.0", "jsdom": "*" }, "optionalPeers": ["canvas"] }, "sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ=="], - "@jest/expect": ["@jest/expect@29.7.0", "", { "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" } }, "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ=="], + "@jest/expect": ["@jest/expect@30.2.0", "", { "dependencies": { "expect": "30.2.0", "jest-snapshot": "30.2.0" } }, "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA=="], "@jest/expect-utils": ["@jest/expect-utils@29.7.0", "", { "dependencies": { "jest-get-type": "^29.6.3" } }, "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA=="], @@ -689,26 +686,30 @@ "@jest/get-type": ["@jest/get-type@30.1.0", "", {}, "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA=="], - "@jest/globals": ["@jest/globals@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", "jest-mock": "^29.7.0" } }, "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ=="], + "@jest/globals": ["@jest/globals@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/expect": "30.2.0", "@jest/types": "30.2.0", "jest-mock": "30.2.0" } }, "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw=="], "@jest/pattern": ["@jest/pattern@30.0.1", "", { "dependencies": { "@types/node": "*", "jest-regex-util": "30.0.1" } }, "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA=="], - "@jest/reporters": ["@jest/reporters@29.7.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", "v8-to-istanbul": "^9.0.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg=="], + "@jest/reporters": ["@jest/reporters@30.2.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "jest-worker": "30.2.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ=="], "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], - "@jest/source-map": ["@jest/source-map@29.6.3", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" } }, "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw=="], + "@jest/snapshot-utils": ["@jest/snapshot-utils@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" } }, "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug=="], - "@jest/test-result": ["@jest/test-result@29.7.0", "", { "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA=="], + "@jest/source-map": ["@jest/source-map@30.0.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "callsites": "^3.1.0", "graceful-fs": "^4.2.11" } }, "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg=="], - "@jest/test-sequencer": ["@jest/test-sequencer@29.7.0", "", { "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "slash": "^3.0.0" } }, "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw=="], + "@jest/test-result": ["@jest/test-result@30.2.0", "", { "dependencies": { "@jest/console": "30.2.0", "@jest/types": "30.2.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg=="], - "@jest/transform": ["@jest/transform@29.7.0", "", { "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "jest-regex-util": "^29.6.3", "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", "write-file-atomic": "^4.0.2" } }, "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw=="], + "@jest/test-sequencer": ["@jest/test-sequencer@30.2.0", "", { "dependencies": { "@jest/test-result": "30.2.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "slash": "^3.0.0" } }, "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q=="], - "@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], + "@jest/transform": ["@jest/transform@30.2.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-regex-util": "30.0.1", "jest-util": "30.2.0", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA=="], + + "@jest/types": ["@jest/types@30.2.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], @@ -733,13 +734,13 @@ "@lerna/create": ["@lerna/create@9.0.4", "", { "dependencies": { "@npmcli/arborist": "9.1.6", "@npmcli/package-json": "7.0.2", "@npmcli/run-script": "10.0.3", "@nx/devkit": ">=21.5.2 < 23.0.0", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "20.1.2", "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", "cmd-shim": "6.0.3", "color-support": "1.1.3", "columnify": "1.6.0", "console-control-strings": "^1.1.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", "cosmiconfig": "9.0.0", "dedent": "1.5.3", "execa": "5.0.0", "fs-extra": "^11.2.0", "get-stream": "6.0.0", "git-url-parse": "14.0.0", "glob-parent": "6.0.2", "has-unicode": "2.0.1", "ini": "^1.3.8", "init-package-json": "8.2.2", "inquirer": "12.9.6", "is-ci": "3.0.1", "is-stream": "2.0.0", "js-yaml": "4.1.1", "libnpmpublish": "11.1.2", "load-json-file": "6.2.0", "make-dir": "4.0.0", "make-fetch-happen": "15.0.2", "minimatch": "3.0.5", "multimatch": "5.0.0", "npm-package-arg": "13.0.1", "npm-packlist": "10.0.3", "npm-registry-fetch": "19.1.0", "nx": ">=21.5.3 < 23.0.0", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", "p-reduce": "^2.1.0", "pacote": "21.0.1", "pify": "5.0.0", "read-cmd-shim": "4.0.0", "resolve-from": "5.0.0", "rimraf": "^6.1.2", "semver": "7.7.2", "set-blocking": "^2.0.0", "signal-exit": "3.0.7", "slash": "^3.0.0", "ssri": "12.0.0", "string-width": "^4.2.3", "tar": "7.5.7", "temp-dir": "1.0.0", "through": "2.3.8", "tinyglobby": "0.2.12", "upath": "2.0.1", "uuid": "^11.1.0", "validate-npm-package-license": "3.0.4", "validate-npm-package-name": "6.0.2", "wide-align": "1.1.5", "write-file-atomic": "5.0.1", "write-pkg": "4.0.0", "yargs": "17.7.2", "yargs-parser": "21.1.1" } }, "sha512-WxedGD98G8/a6HztCXNWquaM0x17oSvfvuqDsLxNNX1qXGyrzmMUmd1mQikF/47uy80X6qyWdaRtaAHlwkvEUA=="], - "@microsoft/api-extractor": ["@microsoft/api-extractor@7.49.2", "", { "dependencies": { "@microsoft/api-extractor-model": "7.30.3", "@microsoft/tsdoc": "~0.15.1", "@microsoft/tsdoc-config": "~0.17.1", "@rushstack/node-core-library": "5.11.0", "@rushstack/rig-package": "0.5.3", "@rushstack/terminal": "0.14.6", "@rushstack/ts-command-line": "4.23.4", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.7.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-DI/WnvhbkHcucxxc4ys00ejCiViFls5EKPrEfe4NV3GGpVkoM5ZXF61HZNSGA8IG0oEV4KfTqIa59Rc3wdMopw=="], + "@microsoft/api-extractor": ["@microsoft/api-extractor@7.57.1", "", { "dependencies": { "@microsoft/api-extractor-model": "7.33.1", "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.0", "@rushstack/node-core-library": "5.20.1", "@rushstack/rig-package": "0.7.1", "@rushstack/terminal": "0.22.1", "@rushstack/ts-command-line": "5.3.1", "diff": "~8.0.2", "lodash": "~4.17.23", "minimatch": "10.1.2", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.8.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-rTHuqQeI38kNgUoWNlCNrAJWgRA7s48DNZcMyPkQvTzb33EQL/a0FA8S1IAXh9133NG4/cJ19trXtBZSwZndsw=="], - "@microsoft/api-extractor-model": ["@microsoft/api-extractor-model@7.30.3", "", { "dependencies": { "@microsoft/tsdoc": "~0.15.1", "@microsoft/tsdoc-config": "~0.17.1", "@rushstack/node-core-library": "5.11.0" } }, "sha512-yEAvq0F78MmStXdqz9TTT4PZ05Xu5R8nqgwI5xmUmQjWBQ9E6R2n8HB/iZMRciG4rf9iwI2mtuQwIzDXBvHn1w=="], + "@microsoft/api-extractor-model": ["@microsoft/api-extractor-model@7.33.1", "", { "dependencies": { "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.0", "@rushstack/node-core-library": "5.20.1" } }, "sha512-KX0LI6xzI0gcBOXXmr5mnnbdhsK2W93pqvJo8OgJgWvRRh+wMEp0Ccj38h1XKeJ29E1tuAZKSUOfHUQ1WA8fZg=="], "@microsoft/tsdoc": ["@microsoft/tsdoc@0.15.1", "", {}, "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw=="], - "@microsoft/tsdoc-config": ["@microsoft/tsdoc-config@0.17.1", "", { "dependencies": { "@microsoft/tsdoc": "0.15.1", "ajv": "~8.12.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw=="], + "@microsoft/tsdoc-config": ["@microsoft/tsdoc-config@0.18.0", "", { "dependencies": { "@microsoft/tsdoc": "0.16.0", "ajv": "~8.12.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw=="], "@module-federation/error-codes": ["@module-federation/error-codes@0.21.2", "", {}, "sha512-mGbPAAApgjmQUl4J7WAt20aV04a26TyS21GDEpOGXFEQG5FqmZnSJ6FqB8K19HgTKioBT1+fF/Ctl5bGGao/EA=="], @@ -907,6 +908,8 @@ "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], + "@playwright/test": ["@playwright/test@1.56.1", "", { "dependencies": { "playwright": "1.56.1" }, "bin": { "playwright": "cli.js" } }, "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg=="], "@polka/url": ["@polka/url@1.0.0-next.28", "", {}, "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw=="], @@ -975,23 +978,15 @@ "@rspack/lite-tapable": ["@rspack/lite-tapable@1.0.1", "", {}, "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w=="], - "@rushstack/node-core-library": ["@rushstack/node-core-library@5.11.0", "", { "dependencies": { "ajv": "~8.13.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", "semver": "~7.5.4" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-I8+VzG9A0F3nH2rLpPd7hF8F7l5Xb7D+ldrWVZYegXM6CsKkvWc670RlgK3WX8/AseZfXA/vVrh0bpXe2Y2UDQ=="], - - "@rushstack/rig-package": ["@rushstack/rig-package@0.5.3", "", { "dependencies": { "resolve": "~1.22.1", "strip-json-comments": "~3.1.1" } }, "sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow=="], - - "@rushstack/terminal": ["@rushstack/terminal@0.14.6", "", { "dependencies": { "@rushstack/node-core-library": "5.11.0", "supports-color": "~8.1.1" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-4nMUy4h0u5PGXVG71kEA9uYI3l8GjVqewoHOFONiM6fuqS51ORdaJZ5ZXB2VZEGUyfg1TOTSy88MF2cdAy+lqA=="], - - "@rushstack/ts-command-line": ["@rushstack/ts-command-line@4.23.4", "", { "dependencies": { "@rushstack/terminal": "0.14.6", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" } }, "sha512-pqmzDJCm0TS8VyeqnzcJ7ncwXgiLDQ6LVmXXfqv2nPL6VIz+UpyTpNVfZRJpyyJ+UDxqob1vIj2liaUfBjv8/A=="], + "@rushstack/node-core-library": ["@rushstack/node-core-library@5.20.1", "", { "dependencies": { "ajv": "~8.13.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", "semver": "~7.5.4" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-QvxZyh+RsTJ77JpQkS9K9lJujh6lj5WyMxieT0bdACtwqxEkGB9zCuSMX5UlXRweaIgSpu1ztdHmhV07fKUpMg=="], - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ=="], + "@rushstack/problem-matcher": ["@rushstack/problem-matcher@0.2.1", "", { "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog=="], - "@shikijs/langs": ["@shikijs/langs@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0" } }, "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA=="], + "@rushstack/rig-package": ["@rushstack/rig-package@0.7.1", "", { "dependencies": { "resolve": "~1.22.1", "strip-json-comments": "~3.1.1" } }, "sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA=="], - "@shikijs/themes": ["@shikijs/themes@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0" } }, "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ=="], + "@rushstack/terminal": ["@rushstack/terminal@0.22.1", "", { "dependencies": { "@rushstack/node-core-library": "5.20.1", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-Mdtu0VN7v31O5Zcno8ZZH5kQHF13Ez7WN9Aio7nFJVcR36i4bkERionYrWgBDQJ0JdVPLKGecZER/xRU5IvGLw=="], - "@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], - - "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + "@rushstack/ts-command-line": ["@rushstack/ts-command-line@5.3.1", "", { "dependencies": { "@rushstack/terminal": "0.22.1", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" } }, "sha512-mid/JIZSJafwy3x9e4v0wVLuAqSSYYErEHV0HXPALYLSBN13YNkR5caOk0hf97lSRKrxhtvQjGaDKSEelR3sMg=="], "@sigstore/bundle": ["@sigstore/bundle@4.0.0", "", { "dependencies": { "@sigstore/protobuf-specs": "^0.5.0" } }, "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A=="], @@ -1077,10 +1072,6 @@ "@types/glob": ["@types/glob@7.2.0", "", { "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA=="], - "@types/graceful-fs": ["@types/graceful-fs@4.1.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ=="], - - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], - "@types/html-minifier-terser": ["@types/html-minifier-terser@6.1.0", "", {}, "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg=="], "@types/http-errors": ["@types/http-errors@2.0.4", "", {}, "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="], @@ -1147,8 +1138,6 @@ "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], - "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@types/webxr": ["@types/webxr@0.5.21", "", {}, "sha512-geZIAtLzjGmgY2JUi6VxXdCrTb99A7yP49lxLr2Nm/uIK0PkkxcEi4OGhoGDO4pxCf3JwGz2GiJL2Ej4K2bKaA=="], "@types/ws": ["@types/ws@8.18.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw=="], @@ -1159,6 +1148,46 @@ "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], + + "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], + + "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="], + + "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="], + + "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="], + + "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="], + + "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="], + + "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="], + + "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="], + + "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="], + + "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="], + + "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="], + + "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="], + + "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="], + + "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="], + + "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="], + + "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="], + + "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="], + + "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], + "@web3-storage/car-block-validator": ["@web3-storage/car-block-validator@1.2.2", "", { "dependencies": { "@multiformats/blake2": "^2.0.2", "@multiformats/murmur3": "^2.1.8", "@multiformats/sha3": "^3.0.2", "multiformats": "^13.3.1", "uint8arrays": "^5.1.0" } }, "sha512-lR9l+ZszhTid5HfZE8ohnGf2RJp2kaBOnoejmsACs3iTNiy+3K09dnPm8MhgBE9RCIgPBKM0CCWXO9l+I6jrKA=="], "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], @@ -1289,13 +1318,13 @@ "axios": ["axios@1.13.5", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q=="], - "babel-jest": ["babel-jest@29.7.0", "", { "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg=="], + "babel-jest": ["babel-jest@30.2.0", "", { "dependencies": { "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.1", "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw=="], "babel-loader": ["babel-loader@9.1.2", "", { "dependencies": { "find-cache-dir": "^3.3.2", "schema-utils": "^4.0.0" }, "peerDependencies": { "@babel/core": "^7.12.0", "webpack": ">=5" } }, "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA=="], - "babel-plugin-istanbul": ["babel-plugin-istanbul@7.0.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" } }, "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw=="], + "babel-plugin-istanbul": ["babel-plugin-istanbul@7.0.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" } }, "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA=="], - "babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@29.6.3", "", { "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg=="], + "babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@30.2.0", "", { "dependencies": { "@types/babel__core": "^7.20.5" } }, "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA=="], "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.12", "", { "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og=="], @@ -1305,9 +1334,9 @@ "babel-plugin-transform-import-meta": ["babel-plugin-transform-import-meta@2.3.2", "", { "dependencies": { "@babel/template": "^7.25.9", "tslib": "^2.8.1" }, "peerDependencies": { "@babel/core": "^7.10.0" } }, "sha512-902o4GiQqI1GqAXfD5rEoz0PJamUfJ3VllpdWaNsFTwdaNjFSFHawvBO+cp5K2j+g2h3bZ4lnM1Xb6yFYGihtA=="], - "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.1.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw=="], + "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.2.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg=="], - "babel-preset-jest": ["babel-preset-jest@29.6.3", "", { "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA=="], + "babel-preset-jest": ["babel-preset-jest@30.2.0", "", { "dependencies": { "babel-plugin-jest-hoist": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ=="], "balanced-match": ["balanced-match@2.0.0", "", {}, "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA=="], @@ -1327,16 +1356,12 @@ "bin-links": ["bin-links@5.0.0", "", { "dependencies": { "cmd-shim": "^7.0.0", "npm-normalize-package-bin": "^4.0.0", "proc-log": "^5.0.0", "read-cmd-shim": "^5.0.0", "write-file-atomic": "^6.0.0" } }, "sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA=="], - "binary": ["binary@0.3.0", "", { "dependencies": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" } }, "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg=="], - "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], "blakejs": ["blakejs@1.2.1", "", {}, "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="], - "bluebird": ["bluebird@3.4.7", "", {}, "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="], - "body-parser": ["body-parser@1.20.3", "", { "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } }, "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g=="], "bonjour-service": ["bonjour-service@1.3.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA=="], @@ -1349,8 +1374,6 @@ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "browser-stdout": ["browser-stdout@1.3.1", "", {}, "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="], - "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], "bser": ["bser@2.1.1", "", { "dependencies": { "node-int64": "^0.4.0" } }, "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="], @@ -1367,10 +1390,6 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - "buffer-indexof-polyfill": ["buffer-indexof-polyfill@1.0.2", "", {}, "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="], - - "buffers": ["buffers@0.1.1", "", {}, "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ=="], - "bundle-name": ["bundle-name@3.0.0", "", { "dependencies": { "run-applescript": "^5.0.0" } }, "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw=="], "byte-size": ["byte-size@8.1.1", "", {}, "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg=="], @@ -1403,9 +1422,7 @@ "chai": ["chai@5.2.0", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw=="], - "chainsaw": ["chainsaw@0.1.0", "", { "dependencies": { "traverse": ">=0.3.0 <0.4" } }, "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ=="], - - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], @@ -1419,9 +1436,9 @@ "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], - "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + "ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], - "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], + "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], @@ -1429,15 +1446,15 @@ "clean-webpack-plugin": ["clean-webpack-plugin@4.0.0", "", { "dependencies": { "del": "^4.1.1" }, "peerDependencies": { "webpack": ">=4.0.0 <6.0.0" } }, "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w=="], - "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "cli-spinners": ["cli-spinners@3.4.0", "", {}, "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw=="], "cli-truncate": ["cli-truncate@3.1.0", "", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" } }, "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA=="], "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], @@ -1535,8 +1552,6 @@ "coverage-istanbul-loader": ["coverage-istanbul-loader@3.0.5", "", { "dependencies": { "@jsdevtools/coverage-istanbul-loader": "3.0.5" } }, "sha512-xsw2phF0VNqUPk47V/vHXkdcTyl0tkMSmaZfLrTOhoPhPMXFelNju7utl5s7I93KXzipqDEK0YwofQSSflPz8A=="], - "create-jest": ["create-jest@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-config": "^29.7.0", "jest-util": "^29.7.0", "prompts": "^2.0.1" }, "bin": { "create-jest": "bin/create-jest.js" } }, "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q=="], - "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], "cross-env": ["cross-env@7.0.3", "", { "dependencies": { "cross-spawn": "^7.0.1" }, "bin": { "cross-env": "src/bin/cross-env.js", "cross-env-shell": "src/bin/cross-env-shell.js" } }, "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw=="], @@ -1683,7 +1698,7 @@ "dicomweb-client": ["dicomweb-client@0.11.2", "", {}, "sha512-HsjQtmw4XY35ZyrhW5WY7P5ZgGIrY1M1jfLeq2IKANDIqfWoE4QW496VcsbuX4qnTNoeHBauei73vU0WwMYrYg=="], - "diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], + "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], @@ -1713,14 +1728,12 @@ "dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], - "dpdm": ["dpdm@3.14.0", "", { "dependencies": { "chalk": "^4.1.2", "fs-extra": "^11.1.1", "glob": "^10.3.4", "ora": "^5.4.1", "tslib": "^2.6.2", "typescript": "^5.2.2", "yargs": "^17.7.2" }, "bin": { "dpdm": "lib/bin/dpdm.js" } }, "sha512-YJzsFSyEtj88q5eTELg3UWU7TVZkG1dpbF4JDQ3t1b07xuzXmdoGeSz9TKOke1mUuOpWlk4q+pBh+aHzD6GBTg=="], + "dpdm": ["dpdm@4.0.1", "", { "dependencies": { "chalk": "^5.6.2", "fs-extra": "^11.3.3", "glob": "^13.0.0", "ora": "^9.1.0", "tslib": "^2.8.1", "typescript": "^5.9.3", "yargs": "^18.0.0" }, "bin": { "dpdm": "lib/bin/dpdm.js" } }, "sha512-9NutC+V6A/4GHgqsqRTMQNDlhipK3lyPWBJ8zIVT8lTncy71d1BzR7sbCO0Dv2zTZ4XSxvbEfMyd0NDDLU0+fw=="], "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], "duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], - "duplexer2": ["duplexer2@0.1.4", "", { "dependencies": { "readable-stream": "^2.0.2" } }, "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA=="], - "earcut": ["earcut@3.0.2", "", {}, "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ=="], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], @@ -1805,10 +1818,10 @@ "execa": ["execa@7.2.0", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", "human-signals": "^4.3.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^3.0.7", "strip-final-newline": "^3.0.0" } }, "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA=="], - "exit": ["exit@0.1.2", "", {}, "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ=="], - "exit-hook": ["exit-hook@4.0.0", "", {}, "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ=="], + "exit-x": ["exit-x@0.2.2", "", {}, "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ=="], + "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], "expect": ["expect@29.7.0", "", { "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw=="], @@ -1863,7 +1876,7 @@ "find-cache-dir": ["find-cache-dir@3.3.2", "", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="], - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + "find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], "flat": ["flat@5.0.2", "", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], @@ -1899,8 +1912,6 @@ "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "fstream": ["fstream@1.0.12", "", { "dependencies": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" } }, "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg=="], - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], @@ -1909,6 +1920,8 @@ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], "get-package-type": ["get-package-type@0.1.0", "", {}, "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="], @@ -1939,7 +1952,7 @@ "gl-matrix": ["gl-matrix@3.4.3", "", {}, "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA=="], - "glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + "glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], @@ -2065,7 +2078,7 @@ "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], - "interpret": ["interpret@1.4.0", "", {}, "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="], + "interpret": ["interpret@3.1.1", "", {}, "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ=="], "iota-array": ["iota-array@1.0.0", "", {}, "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA=="], @@ -2101,7 +2114,7 @@ "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], - "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], + "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], @@ -2119,7 +2132,7 @@ "is-path-inside": ["is-path-inside@2.1.0", "", { "dependencies": { "path-is-inside": "^1.0.2" } }, "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg=="], - "is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], + "is-plain-obj": ["is-plain-obj@3.0.0", "", {}, "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA=="], "is-plain-object": ["is-plain-object@5.0.0", "", {}, "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="], @@ -2135,7 +2148,7 @@ "is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], - "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], "is-windows": ["is-windows@1.0.2", "", {}, "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="], @@ -2183,45 +2196,45 @@ "itk-wasm": ["itk-wasm@1.0.0-b.165", "", { "dependencies": { "@itk-wasm/dam": "^1.1.1", "@thewtex/zstddec": "^0.2.0", "@types/emscripten": "^1.39.10", "axios": "^1.6.2", "comlink": "^4.4.1", "commander": "^11.1.0", "fs-extra": "^11.2.0", "glob": "^8.1.0", "markdown-table": "^3.0.3", "mime-types": "^2.1.35", "wasm-feature-detect": "^1.6.1" }, "bin": { "itk-wasm": "src/itk-wasm-cli.js" } }, "sha512-Rq0+AL2BuRqcFh9r3h69pB3nt84tw/gTxnI6GjIOYw5Bfah9qO+C8hRJpD8aWNBa5o3wNHRAMVlp0pt/L4K8gg=="], - "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], "jake": ["jake@10.9.2", "", { "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.4", "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" } }, "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA=="], - "jasmine": ["jasmine@4.6.0", "", { "dependencies": { "glob": "^7.1.6", "jasmine-core": "^4.6.0" }, "bin": { "jasmine": "bin/jasmine.js" } }, "sha512-iq7HQ5M8ydNUspjd9vbFW9Lu+6lQ1QLDIqjl0WysEllF5EJZy8XaUyNlhCJVwOx2YFzqTtARWbS56F/f0PzRFw=="], + "jasmine": ["jasmine@6.0.0", "", { "dependencies": { "@jasminejs/reporters": "^1.0.0", "glob": "^10.2.2 || ^11.0.3 || ^12.0.0 || ^13.0.0", "jasmine-core": "~6.0.0" }, "bin": { "jasmine": "bin/jasmine.js" } }, "sha512-eSPL6LPWT39WwvHSEEbRXuSvioXMTheNhIPaeUT1OPmSprDZwj4S29884DkTx6/tyiOWTWB1N+LdW2ZSg74aEA=="], - "jasmine-core": ["jasmine-core@4.6.1", "", {}, "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ=="], + "jasmine-core": ["jasmine-core@6.0.1", "", {}, "sha512-gUtzV5ASR0MLBwDNqri4kBsgKNCcRQd9qOlNw/w/deavD0cl3JmWXXfH8JhKM4LTg6LPTt2IOQ4px3YYfgh2Xg=="], "javascript-natural-sort": ["javascript-natural-sort@0.7.1", "", {}, "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw=="], - "jest": ["jest@29.7.0", "", { "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", "import-local": "^3.0.2", "jest-cli": "^29.7.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "bin/jest.js" } }, "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw=="], + "jest": ["jest@30.2.0", "", { "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", "import-local": "^3.2.0", "jest-cli": "30.2.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": "./bin/jest.js" }, "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A=="], "jest-canvas-mock": ["jest-canvas-mock@2.5.2", "", { "dependencies": { "cssfontparser": "^1.2.1", "moo-color": "^1.0.2" } }, "sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A=="], - "jest-changed-files": ["jest-changed-files@29.7.0", "", { "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", "p-limit": "^3.1.0" } }, "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w=="], + "jest-changed-files": ["jest-changed-files@30.2.0", "", { "dependencies": { "execa": "^5.1.1", "jest-util": "30.2.0", "p-limit": "^3.1.0" } }, "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ=="], - "jest-circus": ["jest-circus@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", "jest-each": "^29.7.0", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-runtime": "^29.7.0", "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", "p-limit": "^3.1.0", "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw=="], + "jest-circus": ["jest-circus@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/expect": "30.2.0", "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", "jest-each": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-runtime": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "p-limit": "^3.1.0", "pretty-format": "30.2.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg=="], - "jest-cli": ["jest-cli@29.7.0", "", { "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "chalk": "^4.0.0", "create-jest": "^29.7.0", "exit": "^0.1.2", "import-local": "^3.0.2", "jest-config": "^29.7.0", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "bin/jest.js" } }, "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg=="], + "jest-cli": ["jest-cli@30.2.0", "", { "dependencies": { "@jest/core": "30.2.0", "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", "jest-config": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0", "yargs": "^17.7.2" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "./bin/jest.js" } }, "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA=="], - "jest-config": ["jest-config@29.7.0", "", { "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", "@jest/types": "^29.6.3", "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "jest-circus": "^29.7.0", "jest-environment-node": "^29.7.0", "jest-get-type": "^29.6.3", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", "jest-runner": "^29.7.0", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "ts-node"] }, "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ=="], + "jest-config": ["jest-config@30.2.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", "@jest/test-sequencer": "30.2.0", "@jest/types": "30.2.0", "babel-jest": "30.2.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-circus": "30.2.0", "jest-docblock": "30.2.0", "jest-environment-node": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-runner": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "esbuild-register", "ts-node"] }, "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA=="], "jest-diff": ["jest-diff@30.2.0", "", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "pretty-format": "30.2.0" } }, "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A=="], - "jest-docblock": ["jest-docblock@29.7.0", "", { "dependencies": { "detect-newline": "^3.0.0" } }, "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g=="], + "jest-docblock": ["jest-docblock@30.2.0", "", { "dependencies": { "detect-newline": "^3.1.0" } }, "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA=="], - "jest-each": ["jest-each@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "jest-util": "^29.7.0", "pretty-format": "^29.7.0" } }, "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ=="], + "jest-each": ["jest-each@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.2.0", "chalk": "^4.1.2", "jest-util": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ=="], "jest-environment-jsdom": ["jest-environment-jsdom@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/environment-jsdom-abstract": "30.2.0", "@types/jsdom": "^21.1.7", "@types/node": "*", "jsdom": "^26.1.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-zbBTiqr2Vl78pKp/laGBREYzbZx9ZtqPjOK4++lL4BNDhxRnahg51HtoDrk9/VjIy9IthNEWdKVd7H5bqBhiWQ=="], - "jest-environment-node": ["jest-environment-node@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw=="], + "jest-environment-node": ["jest-environment-node@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0" } }, "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA=="], "jest-get-type": ["jest-get-type@29.6.3", "", {}, "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw=="], - "jest-haste-map": ["jest-haste-map@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.6.3", "jest-util": "^29.7.0", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA=="], + "jest-haste-map": ["jest-haste-map@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.2.0", "jest-worker": "30.2.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw=="], "jest-junit": ["jest-junit@16.0.0", "", { "dependencies": { "mkdirp": "^1.0.4", "strip-ansi": "^6.0.1", "uuid": "^8.3.2", "xml": "^1.0.1" } }, "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ=="], - "jest-leak-detector": ["jest-leak-detector@29.7.0", "", { "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw=="], + "jest-leak-detector": ["jest-leak-detector@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "pretty-format": "30.2.0" } }, "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ=="], "jest-matcher-utils": ["jest-matcher-utils@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g=="], @@ -2231,23 +2244,23 @@ "jest-pnp-resolver": ["jest-pnp-resolver@1.2.3", "", { "peerDependencies": { "jest-resolve": "*" }, "optionalPeers": ["jest-resolve"] }, "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w=="], - "jest-regex-util": ["jest-regex-util@29.6.3", "", {}, "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg=="], + "jest-regex-util": ["jest-regex-util@30.0.1", "", {}, "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA=="], - "jest-resolve": ["jest-resolve@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", "jest-util": "^29.7.0", "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA=="], + "jest-resolve": ["jest-resolve@30.2.0", "", { "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.2.0", "jest-validate": "30.2.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" } }, "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A=="], - "jest-resolve-dependencies": ["jest-resolve-dependencies@29.7.0", "", { "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" } }, "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA=="], + "jest-resolve-dependencies": ["jest-resolve-dependencies@30.2.0", "", { "dependencies": { "jest-regex-util": "30.0.1", "jest-snapshot": "30.2.0" } }, "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w=="], - "jest-runner": ["jest-runner@29.7.0", "", { "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", "@jest/test-result": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.7.0", "jest-environment-node": "^29.7.0", "jest-haste-map": "^29.7.0", "jest-leak-detector": "^29.7.0", "jest-message-util": "^29.7.0", "jest-resolve": "^29.7.0", "jest-runtime": "^29.7.0", "jest-util": "^29.7.0", "jest-watcher": "^29.7.0", "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ=="], + "jest-runner": ["jest-runner@30.2.0", "", { "dependencies": { "@jest/console": "30.2.0", "@jest/environment": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.2.0", "jest-environment-node": "30.2.0", "jest-haste-map": "30.2.0", "jest-leak-detector": "30.2.0", "jest-message-util": "30.2.0", "jest-resolve": "30.2.0", "jest-runtime": "30.2.0", "jest-util": "30.2.0", "jest-watcher": "30.2.0", "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ=="], - "jest-runtime": ["jest-runtime@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", "@jest/globals": "^29.7.0", "@jest/source-map": "^29.6.3", "@jest/test-result": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-regex-util": "^29.6.3", "jest-resolve": "^29.7.0", "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ=="], + "jest-runtime": ["jest-runtime@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/globals": "30.2.0", "@jest/source-map": "30.0.1", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg=="], - "jest-snapshot": ["jest-snapshot@29.7.0", "", { "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", "@jest/expect-utils": "^29.7.0", "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^29.7.0", "graceful-fs": "^4.2.9", "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", "natural-compare": "^1.4.0", "pretty-format": "^29.7.0", "semver": "^7.5.3" } }, "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw=="], + "jest-snapshot": ["jest-snapshot@30.2.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "@jest/snapshot-utils": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", "expect": "30.2.0", "graceful-fs": "^4.2.11", "jest-diff": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" } }, "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA=="], "jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], - "jest-validate": ["jest-validate@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "leven": "^3.1.0", "pretty-format": "^29.7.0" } }, "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw=="], + "jest-validate": ["jest-validate@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.2.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.2.0" } }, "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw=="], - "jest-watcher": ["jest-watcher@29.7.0", "", { "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", "jest-util": "^29.7.0", "string-length": "^4.0.1" } }, "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g=="], + "jest-watcher": ["jest-watcher@30.2.0", "", { "dependencies": { "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", "jest-util": "30.2.0", "string-length": "^4.0.2" } }, "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg=="], "jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], @@ -2303,8 +2316,6 @@ "karma-junit-reporter": ["karma-junit-reporter@2.0.1", "", { "dependencies": { "path-is-absolute": "^1.0.0", "xmlbuilder": "12.0.0" }, "peerDependencies": { "karma": ">=0.9" } }, "sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw=="], - "karma-mocha": ["karma-mocha@2.0.1", "", { "dependencies": { "minimist": "^1.2.3" } }, "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ=="], - "karma-spec-reporter": ["karma-spec-reporter@0.0.36", "", { "dependencies": { "colors": "1.4.0" }, "peerDependencies": { "karma": ">=0.9" } }, "sha512-11bvOl1x6ryKZph7kmbmMpbi8vsngEGxGOoeTlIcDaH3ab3j8aPJnZ+r+K/SS0sBSGy5VGkGYO2+hLct7hw/6w=="], "karma-webpack": ["karma-webpack@5.0.1", "", { "dependencies": { "glob": "^7.1.3", "minimatch": "^9.0.3", "webpack-merge": "^4.1.5" }, "peerDependencies": { "webpack": "^5.0.0" } }, "sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ=="], @@ -2313,8 +2324,6 @@ "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], - "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], - "known-css-properties": ["known-css-properties@0.29.0", "", {}, "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ=="], "launch-editor": ["launch-editor@2.10.0", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA=="], @@ -2335,12 +2344,8 @@ "lines-and-columns": ["lines-and-columns@2.0.3", "", {}, "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w=="], - "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], - "lint-staged": ["lint-staged@13.3.0", "", { "dependencies": { "chalk": "5.3.0", "commander": "11.0.0", "debug": "4.3.4", "execa": "7.2.0", "lilconfig": "2.1.0", "listr2": "6.6.1", "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", "yaml": "2.3.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ=="], - "listenercount": ["listenercount@1.0.1", "", {}, "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ=="], - "listr2": ["listr2@6.6.1", "", { "dependencies": { "cli-truncate": "^3.1.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^5.0.1", "rfdc": "^1.3.0", "wrap-ansi": "^8.1.0" }, "peerDependencies": { "enquirer": ">= 2.3.0 < 3" }, "optionalPeers": ["enquirer"] }, "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg=="], "load-json-file": ["load-json-file@6.2.0", "", { "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^5.0.0", "strip-bom": "^4.0.0", "type-fest": "^0.6.0" } }, "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ=="], @@ -2349,7 +2354,7 @@ "loader-utils": ["loader-utils@2.0.4", "", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], @@ -2369,7 +2374,7 @@ "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], - "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], + "log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="], "log-update": ["log-update@5.0.1", "", { "dependencies": { "ansi-escapes": "^5.0.0", "cli-cursor": "^4.0.0", "slice-ansi": "^5.0.0", "strip-ansi": "^7.0.1", "wrap-ansi": "^8.0.1" } }, "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw=="], @@ -2385,8 +2390,6 @@ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - "lunr": ["lunr@2.3.9", "", {}, "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="], - "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], @@ -2397,8 +2400,6 @@ "map-obj": ["map-obj@4.3.0", "", {}, "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ=="], - "markdown-it": ["markdown-it@14.1.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg=="], - "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], @@ -2409,8 +2410,6 @@ "mdn-data": ["mdn-data@2.0.30", "", {}, "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="], - "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], - "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], "memfs": ["memfs@4.17.0", "", { "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", "tree-dump": "^1.0.1", "tslib": "^2.0.0" } }, "sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg=="], @@ -2437,13 +2436,15 @@ "mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], - "minimatch": ["minimatch@3.0.8", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q=="], + "minimatch": ["minimatch@10.1.2", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.1" } }, "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -2467,8 +2468,6 @@ "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], - "mocha": ["mocha@10.8.2", "", { "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", "chokidar": "^3.5.3", "debug": "^4.3.5", "diff": "^5.2.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^8.1.0", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^5.1.6", "ms": "^2.1.3", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^6.5.1", "yargs": "^16.2.0", "yargs-parser": "^20.2.9", "yargs-unparser": "^2.0.0" }, "bin": { "mocha": "bin/mocha.js", "_mocha": "bin/_mocha" } }, "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg=="], - "modify-values": ["modify-values@1.0.1", "", {}, "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw=="], "moo-color": ["moo-color@1.0.3", "", { "dependencies": { "color-name": "^1.1.4" } }, "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ=="], @@ -2493,6 +2492,8 @@ "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], + "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], "ndarray": ["ndarray@1.0.19", "", { "dependencies": { "iota-array": "^1.0.0", "is-buffer": "^1.0.2" } }, "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ=="], @@ -2583,7 +2584,7 @@ "opener": ["opener@1.5.2", "", { "bin": { "opener": "bin/opener-bin.js" } }, "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="], - "ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + "ora": ["ora@9.3.0", "", { "dependencies": { "chalk": "^5.6.2", "cli-cursor": "^5.0.0", "cli-spinners": "^3.2.0", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", "stdin-discarder": "^0.3.1", "string-width": "^8.1.0" } }, "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw=="], "oxc-parser": ["oxc-parser@0.74.0", "", { "dependencies": { "@oxc-project/types": "^0.74.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm64": "0.74.0", "@oxc-parser/binding-darwin-arm64": "0.74.0", "@oxc-parser/binding-darwin-x64": "0.74.0", "@oxc-parser/binding-freebsd-x64": "0.74.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.74.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.74.0", "@oxc-parser/binding-linux-arm64-gnu": "0.74.0", "@oxc-parser/binding-linux-arm64-musl": "0.74.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.74.0", "@oxc-parser/binding-linux-s390x-gnu": "0.74.0", "@oxc-parser/binding-linux-x64-gnu": "0.74.0", "@oxc-parser/binding-linux-x64-musl": "0.74.0", "@oxc-parser/binding-wasm32-wasi": "0.74.0", "@oxc-parser/binding-win32-arm64-msvc": "0.74.0", "@oxc-parser/binding-win32-x64-msvc": "0.74.0" } }, "sha512-2tDN/ttU8WE6oFh8EzKNam7KE7ZXSG5uXmvX85iNzxdJfMssDWcj3gpYzZi1E04XuE7m3v1dVWl/8BE886vPGw=="], @@ -2595,7 +2596,7 @@ "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], @@ -2655,7 +2656,7 @@ "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], "path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], @@ -2681,7 +2682,7 @@ "pinkie-promise": ["pinkie-promise@2.0.1", "", { "dependencies": { "pinkie": "^2.0.0" } }, "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw=="], - "pirates": ["pirates@4.0.6", "", {}, "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="], + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], @@ -2851,8 +2852,6 @@ "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], - "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], - "promzard": ["promzard@2.0.0", "", { "dependencies": { "read": "^4.0.0" } }, "sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg=="], "protobufjs": ["protobufjs@7.4.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw=="], @@ -2871,11 +2870,9 @@ "punycode": ["punycode@1.4.1", "", {}, "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="], - "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], - "puppeteer": ["puppeteer@13.7.0", "", { "dependencies": { "cross-fetch": "3.1.5", "debug": "4.3.4", "devtools-protocol": "0.0.981744", "extract-zip": "2.0.1", "https-proxy-agent": "5.0.1", "pkg-dir": "4.2.0", "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", "tar-fs": "2.1.1", "unbzip2-stream": "1.4.3", "ws": "8.5.0" } }, "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA=="], - "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + "pure-rand": ["pure-rand@7.0.1", "", {}, "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ=="], "qjobs": ["qjobs@1.2.0", "", {}, "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg=="], @@ -2911,13 +2908,13 @@ "read-pkg-up": ["read-pkg-up@3.0.0", "", { "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" } }, "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw=="], - "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "readable-web-to-node-stream": ["readable-web-to-node-stream@3.0.4", "", { "dependencies": { "readable-stream": "^4.7.0" } }, "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw=="], "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - "rechoir": ["rechoir@0.6.2", "", { "dependencies": { "resolve": "^1.1.6" } }, "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw=="], + "rechoir": ["rechoir@0.8.0", "", { "dependencies": { "resolve": "^1.20.0" } }, "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ=="], "redent": ["redent@4.0.0", "", { "dependencies": { "indent-string": "^5.0.0", "strip-indent": "^4.0.0" } }, "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag=="], @@ -2961,7 +2958,7 @@ "resolve.exports": ["resolve.exports@2.0.3", "", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="], - "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], @@ -2985,7 +2982,7 @@ "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], - "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], @@ -3017,8 +3014,6 @@ "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], - "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], "shader-loader": ["shader-loader@1.3.1", "", { "dependencies": { "loader-utils": "^1.1.0" } }, "sha512-dt8F9K0x4rjmaFyHh7rNDfpt4LUiR64zhNIEwp2WbE99B3z4ALuvvmhftkElg93dUD6sTmv/aXa/z9SJiEddcA=="], @@ -3031,9 +3026,9 @@ "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="], - "shelljs": ["shelljs@0.8.5", "", { "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" }, "bin": { "shjs": "bin/shjs" } }, "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow=="], + "shelljs": ["shelljs@0.10.0", "", { "dependencies": { "execa": "^5.1.1", "fast-glob": "^3.3.2" } }, "sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw=="], - "shx": ["shx@0.3.4", "", { "dependencies": { "minimist": "^1.2.3", "shelljs": "^0.8.5" }, "bin": { "shx": "lib/cli.js" } }, "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g=="], + "shx": ["shx@0.4.0", "", { "dependencies": { "minimist": "^1.2.8", "shelljs": "^0.9.2" }, "bin": { "shx": "lib/cli.js" } }, "sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA=="], "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], @@ -3055,8 +3050,6 @@ "sirv": ["sirv@2.0.4", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ=="], - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], - "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], "slice-ansi": ["slice-ansi@4.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ=="], @@ -3113,6 +3106,8 @@ "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], + "stdin-discarder": ["stdin-discarder@0.3.1", "", {}, "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA=="], + "stream-browserify": ["stream-browserify@3.0.0", "", { "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" } }, "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA=="], "streamroller": ["streamroller@3.1.5", "", { "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", "fs-extra": "^8.1.0" } }, "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw=="], @@ -3125,7 +3120,7 @@ "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -3153,7 +3148,7 @@ "stylelint-config-recommended": ["stylelint-config-recommended@12.0.0", "", { "peerDependencies": { "stylelint": "^15.5.0" } }, "sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ=="], - "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], @@ -3165,6 +3160,8 @@ "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + "synckit": ["synckit@0.11.12", "", { "dependencies": { "@pkgr/core": "^0.2.9" } }, "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ=="], + "table": ["table@6.9.0", "", { "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1" } }, "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A=="], "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], @@ -3223,8 +3220,6 @@ "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], - "traverse": ["traverse@0.3.9", "", {}, "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="], - "tree-dump": ["tree-dump@1.0.2", "", { "peerDependencies": { "tslib": "2" } }, "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ=="], "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], @@ -3257,14 +3252,10 @@ "typedarray-to-buffer": ["typedarray-to-buffer@3.1.5", "", { "dependencies": { "is-typedarray": "^1.0.0" } }, "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q=="], - "typedoc": ["typedoc@0.28.15", "", { "dependencies": { "@gerrit0/mini-shiki": "^3.17.0", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", "yaml": "^2.8.1" }, "peerDependencies": { "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" }, "bin": { "typedoc": "bin/typedoc" } }, "sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg=="], - "typescript": ["typescript@5.5.4", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q=="], "ua-parser-js": ["ua-parser-js@0.7.40", "", { "bin": { "ua-parser-js": "script/cli.js" } }, "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ=="], - "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], - "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], "uint8-varint": ["uint8-varint@2.0.4", "", { "dependencies": { "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.0" } }, "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw=="], @@ -3297,9 +3288,9 @@ "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - "untildify": ["untildify@4.0.0", "", {}, "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="], + "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], - "unzipper": ["unzipper@0.10.14", "", { "dependencies": { "big-integer": "^1.6.17", "binary": "~0.3.0", "bluebird": "~3.4.1", "buffer-indexof-polyfill": "~1.0.0", "duplexer2": "~0.1.4", "fstream": "^1.0.12", "graceful-fs": "^4.2.2", "listenercount": "~1.0.1", "readable-stream": "~2.3.6", "setimmediate": "~1.0.4" } }, "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g=="], + "untildify": ["untildify@4.0.0", "", {}, "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw=="], "upath": ["upath@2.0.1", "", {}, "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w=="], @@ -3389,8 +3380,6 @@ "worker-loader": ["worker-loader@3.0.8", "", { "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g=="], - "workerpool": ["workerpool@6.5.1", "", {}, "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA=="], - "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -3429,18 +3418,18 @@ "yaml": ["yaml@2.3.1", "", {}, "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ=="], - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "yargs-unparser": ["yargs-unparser@2.0.0", "", { "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" } }, "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA=="], - "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], + "yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="], "zstddec": ["zstddec@0.1.0", "", {}, "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg=="], @@ -3527,45 +3516,69 @@ "@inquirer/external-editor/iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], - "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], - "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "@itk-wasm/morphological-contour-interpolation/itk-wasm": ["itk-wasm@1.0.0-b.173", "", { "dependencies": { "@itk-wasm/dam": "^1.1.1", "@thewtex/zstddec": "^0.2.0", "@types/emscripten": "^1.39.10", "axios": "^1.6.2", "chalk": "^5.3.0", "comlink": "^4.4.1", "commander": "^11.1.0", "fs-extra": "^11.2.0", "glob": "^8.1.0", "markdown-table": "^3.0.3", "mime-types": "^2.1.35", "wasm-feature-detect": "^1.6.1" }, "bin": { "itk-wasm": "src/itk-wasm-cli.js" } }, "sha512-SV2lfZ1mClWuSK/noaZgGj9jhroY4MZu19ci9pIucuyhoGdXrVSmWlPH/JYMDi9RP3BogmQwe9wfFc3X1dcEPg=="], - "@istanbuljs/load-nyc-config/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "@jest/console/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], + "@jest/console/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], - "@itk-wasm/morphological-contour-interpolation/itk-wasm": ["itk-wasm@1.0.0-b.173", "", { "dependencies": { "@itk-wasm/dam": "^1.1.1", "@thewtex/zstddec": "^0.2.0", "@types/emscripten": "^1.39.10", "axios": "^1.6.2", "chalk": "^5.3.0", "comlink": "^4.4.1", "commander": "^11.1.0", "fs-extra": "^11.2.0", "glob": "^8.1.0", "markdown-table": "^3.0.3", "mime-types": "^2.1.35", "wasm-feature-detect": "^1.6.1" }, "bin": { "itk-wasm": "src/itk-wasm-cli.js" } }, "sha512-SV2lfZ1mClWuSK/noaZgGj9jhroY4MZu19ci9pIucuyhoGdXrVSmWlPH/JYMDi9RP3BogmQwe9wfFc3X1dcEPg=="], + "@jest/console/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], - "@jest/core/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "@jest/core/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@jest/environment/@jest/types": ["@jest/types@30.2.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + "@jest/core/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], - "@jest/environment-jsdom-abstract/@jest/types": ["@jest/types@30.2.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + "@jest/core/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "@jest/core/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "@jest/core/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], "@jest/environment-jsdom-abstract/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], - "@jest/fake-timers/@jest/types": ["@jest/types@30.2.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + "@jest/expect/expect": ["expect@30.2.0", "", { "dependencies": { "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-util": "30.2.0" } }, "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw=="], "@jest/fake-timers/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], "@jest/fake-timers/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], - "@jest/globals/@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], + "@jest/reporters/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@jest/reporters/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/reporters/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + + "@jest/reporters/istanbul-lib-source-maps": ["istanbul-lib-source-maps@5.0.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0" } }, "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A=="], + + "@jest/reporters/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], - "@jest/globals/jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], + "@jest/reporters/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], - "@jest/pattern/jest-regex-util": ["jest-regex-util@30.0.1", "", {}, "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA=="], + "@jest/reporters/jest-worker": ["jest-worker@30.2.0", "", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g=="], - "@jest/reporters/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "@jest/snapshot-utils/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@jest/reporters/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], + "@jest/source-map/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@jest/transform/babel-plugin-istanbul": ["babel-plugin-istanbul@6.1.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" } }, "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA=="], + "@jest/transform/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + + "@jest/transform/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@jest/transform/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/transform/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], "@jest/transform/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "@jest/transform/write-file-atomic": ["write-file-atomic@4.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" } }, "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg=="], + "@jest/types/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "@jest/types/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jridgewell/remapping/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], "@jsdevtools/coverage-istanbul-loader/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], @@ -3595,9 +3608,17 @@ "@lerna/create/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "@lerna/create/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "@microsoft/api-extractor/@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], + "@microsoft/api-extractor/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], - "@microsoft/api-extractor/typescript": ["typescript@5.7.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg=="], + "@microsoft/api-extractor/typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], + + "@microsoft/api-extractor-model/@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], + + "@microsoft/tsdoc-config/@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], "@microsoft/tsdoc-config/ajv": ["ajv@8.12.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA=="], @@ -3629,8 +3650,6 @@ "@npmcli/map-workspaces/@npmcli/name-from-folder": ["@npmcli/name-from-folder@4.0.0", "", {}, "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg=="], - "@npmcli/map-workspaces/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], - "@npmcli/map-workspaces/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], "@npmcli/metavuln-calculator/json-parse-even-better-errors": ["json-parse-even-better-errors@5.0.0", "", {}, "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ=="], @@ -3675,6 +3694,8 @@ "@rushstack/node-core-library/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], + "@rushstack/terminal/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "@sigstore/sign/make-fetch-happen": ["make-fetch-happen@15.0.3", "", { "dependencies": { "@npmcli/agent": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "ssri": "^13.0.0" } }, "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw=="], "@sigstore/sign/proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], @@ -3689,6 +3710,8 @@ "@types/eslint-scope/@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + "@yarnpkg/parsers/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], "@zkochan/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -3701,7 +3724,7 @@ "axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], - "babel-jest/babel-plugin-istanbul": ["babel-plugin-istanbul@6.1.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" } }, "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA=="], + "babel-jest/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -3711,16 +3734,12 @@ "bin-links/write-file-atomic": ["write-file-atomic@6.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ=="], - "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "cacache/@npmcli/fs": ["@npmcli/fs@5.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og=="], - "cacache/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], - "cacache/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], "cacache/p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], @@ -3735,17 +3754,17 @@ "camelcase-keys/type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], - "chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "cli-truncate/slice-ansi": ["slice-ansi@5.0.0", "", { "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" } }, "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ=="], "cli-truncate/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "cliui/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "cliui/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], "clone-deep/is-plain-object": ["is-plain-object@2.0.4", "", { "dependencies": { "isobject": "^3.0.1" } }, "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="], @@ -3753,16 +3772,10 @@ "compression/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], - "compression/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "concat/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "concat-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "connect/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - "content-disposition/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "conventional-changelog-writer/meow": ["meow@8.1.2", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q=="], "conventional-commits-parser/meow": ["meow@8.1.2", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q=="], @@ -3819,9 +3832,9 @@ "dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], - "dpdm/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], + "dpdm/fs-extra": ["fs-extra@11.3.3", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg=="], - "dpdm/typescript": ["typescript@5.7.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg=="], + "dpdm/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], @@ -3835,8 +3848,6 @@ "express/finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], - "express/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "extract-zip/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -3863,8 +3874,6 @@ "front-matter/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], - "fstream/rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="], - "get-pkg-repo/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], "get-pkg-repo/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], @@ -3875,7 +3884,7 @@ "git-semver-tags/meow": ["meow@8.1.2", "", { "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q=="], - "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], "globby/slash": ["slash@4.0.0", "", {}, "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="], @@ -3885,14 +3894,14 @@ "hosted-git-info/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + "hpack.js/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "html-minifier-terser/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "htmlparser2/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], "http-proxy-agent/agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], - "http-proxy-middleware/is-plain-obj": ["is-plain-obj@3.0.0", "", {}, "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA=="], - "http-proxy-middleware/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "ignore-walk/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], @@ -3907,74 +3916,160 @@ "ipfs-unixfs-exporter/p-queue": ["p-queue@8.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" } }, "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw=="], + "is-ci/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + "is-inside-container/is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], "istanbul-lib-processinfo/p-map": ["p-map@3.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ=="], "istanbul-lib-processinfo/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "itk-wasm/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], "itk-wasm/fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], "itk-wasm/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], - "jake/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "jake/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "jasmine/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "jake/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "jest-changed-files/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "jest-circus/@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], + "jest-changed-files/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-circus/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-circus/dedent": ["dedent@1.7.1", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg=="], + + "jest-circus/jest-matcher-utils": ["jest-matcher-utils@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "jest-diff": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg=="], + + "jest-circus/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], + + "jest-circus/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-circus/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], - "jest-config/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "jest-cli/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-cli/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-cli/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "jest-config/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + + "jest-config/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-config/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + + "jest-config/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], "jest-config/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "jest-config/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "jest-diff/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-diff/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], - "jest-environment-node/@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], + "jest-each/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "jest-environment-node/@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], + "jest-each/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], - "jest-environment-node/jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], + "jest-each/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], - "jest-haste-map/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], + "jest-environment-node/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-haste-map/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-haste-map/jest-worker": ["jest-worker@30.2.0", "", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g=="], "jest-haste-map/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "jest-junit/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], + "jest-leak-detector/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "jest-matcher-utils/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "jest-matcher-utils/jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="], - "jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "jest-message-util/@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], + + "jest-message-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "jest-mock/@jest/types": ["@jest/types@30.2.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + "jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "jest-mock/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], - "jest-runner/@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], + "jest-resolve/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "jest-runner/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], + "jest-resolve/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-runner/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-runner/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], + + "jest-runner/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-runner/jest-worker": ["jest-worker@30.2.0", "", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g=="], "jest-runner/source-map-support": ["source-map-support@0.5.13", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="], - "jest-runtime/@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], + "jest-runtime/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-runtime/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + + "jest-runtime/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], + + "jest-runtime/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-snapshot/@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + + "jest-snapshot/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + + "jest-snapshot/@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], + + "jest-snapshot/@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], + + "jest-snapshot/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "jest-snapshot/@jest/expect-utils": ["@jest/expect-utils@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0" } }, "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA=="], + + "jest-snapshot/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "jest-runtime/@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], + "jest-snapshot/expect": ["expect@30.2.0", "", { "dependencies": { "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-util": "30.2.0" } }, "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw=="], - "jest-runtime/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "jest-snapshot/jest-matcher-utils": ["jest-matcher-utils@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "jest-diff": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg=="], - "jest-runtime/jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], + "jest-snapshot/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], - "jest-snapshot/jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="], + "jest-snapshot/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-snapshot/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "jest-snapshot/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + + "jest-util/@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], + + "jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-util/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], "jest-util/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "jest-validate/camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + "jest-validate/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-validate/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "jest-watcher/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-watcher/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "jsdom/https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], @@ -3991,6 +4086,8 @@ "karma-coverage/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "karma-jasmine/jasmine-core": ["jasmine-core@4.6.1", "", {}, "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ=="], + "karma-webpack/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "karma-webpack/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -4019,7 +4116,7 @@ "lerna/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - "libnpmpublish/ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], + "lerna/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], "libnpmpublish/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], @@ -4043,8 +4140,6 @@ "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "markdown-it/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "mathjs/fraction.js": ["fraction.js@4.3.4", "", {}, "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q=="], "meow/decamelize": ["decamelize@6.0.0", "", {}, "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA=="], @@ -4067,16 +4162,6 @@ "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "mocha/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], - - "mocha/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - - "mocha/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], - - "mocha/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], - - "mocha/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], - "multimatch/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], @@ -4107,8 +4192,12 @@ "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + "nx/cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + "nx/cli-spinners": ["cli-spinners@2.6.1", "", {}, "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="], + "nx/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "nx/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], "nx/minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], @@ -4123,9 +4212,9 @@ "nx/yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], - "nyc/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], + "nx/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - "nyc/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "nyc/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], "nyc/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], @@ -4135,6 +4224,10 @@ "nyc/yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], + "ora/string-width": ["string-width@8.2.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw=="], + + "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "pacote/@npmcli/git": ["@npmcli/git@6.0.3", "", { "dependencies": { "@npmcli/promise-spawn": "^8.0.0", "ini": "^5.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^10.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^5.0.0" } }, "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ=="], "pacote/@npmcli/promise-spawn": ["@npmcli/promise-spawn@8.0.3", "", { "dependencies": { "which": "^5.0.0" } }, "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg=="], @@ -4145,9 +4238,7 @@ "parse-json/lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "pkg-dir/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], @@ -4165,8 +4256,6 @@ "puppeteer/debug": ["debug@4.3.4", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="], - "randombytes/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], "read-cache/pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], @@ -4187,7 +4276,9 @@ "regjsparser/jsesc": ["jsesc@3.0.2", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g=="], - "restore-cursor/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + + "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], "rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], @@ -4209,12 +4300,10 @@ "shader-loader/loader-utils": ["loader-utils@1.4.2", "", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^1.0.1" } }, "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg=="], - "shelljs/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "shelljs/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "sinon/diff": ["diff@7.0.0", "", {}, "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw=="], - "sinon/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "slice-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "socket.io/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], @@ -4235,14 +4324,8 @@ "spawn-wrap/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "spdy-transport/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "split2/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], - "stream-browserify/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "streamroller/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], "stylelint/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], @@ -4253,16 +4336,12 @@ "stylelint/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], "svgo/css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="], "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], - "tar-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "tempy/temp-dir": ["temp-dir@3.0.0", "", {}, "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw=="], "tempy/type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], @@ -4277,8 +4356,12 @@ "test-exclude/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "through2/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "tr46/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + "ts-loader/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "ts-loader/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "ts-loader/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], @@ -4291,12 +4374,6 @@ "tuf-js/make-fetch-happen": ["make-fetch-happen@15.0.3", "", { "dependencies": { "@npmcli/agent": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "promise-retry": "^2.0.1", "ssri": "^13.0.0" } }, "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw=="], - "tunnel-agent/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "typedoc/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - - "typedoc/yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], - "uri-js/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "url-loader/schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], @@ -4315,14 +4392,8 @@ "webpack-bundle-analyzer/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - "webpack-cli/interpret": ["interpret@3.1.1", "", {}, "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ=="], - - "webpack-cli/rechoir": ["rechoir@0.8.0", "", { "dependencies": { "resolve": "^1.20.0" } }, "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ=="], - "webpack-dev-server/open": ["open@10.1.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "is-wsl": "^3.1.0" } }, "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw=="], - "websocket-driver/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "whatwg-encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "worker-loader/schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], @@ -4349,9 +4420,9 @@ "xmlbuilder2/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], - "yargs-unparser/camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + "yargs/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "yargs-unparser/decamelize": ["decamelize@4.0.0", "", {}, "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="], + "yargs/yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], "@babel/helper-annotate-as-pure/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], @@ -4415,12 +4486,6 @@ "@inquirer/core/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - - "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - - "@istanbuljs/load-nyc-config/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "@itk-wasm/morphological-contour-interpolation/itk-wasm/chalk": ["chalk@5.3.0", "", {}, "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="], "@itk-wasm/morphological-contour-interpolation/itk-wasm/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], @@ -4429,32 +4494,92 @@ "@itk-wasm/morphological-contour-interpolation/itk-wasm/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], + "@jest/console/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/console/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@jest/console/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "@jest/console/jest-message-util/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "@jest/core/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/core/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + "@jest/core/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@jest/environment-jsdom-abstract/@jest/types/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + "@jest/core/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "@jest/environment-jsdom-abstract/jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/expect/expect/@jest/expect-utils": ["@jest/expect-utils@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0" } }, "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA=="], - "@jest/environment-jsdom-abstract/jest-util/ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], + "@jest/expect/expect/jest-matcher-utils": ["jest-matcher-utils@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "jest-diff": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg=="], - "@jest/environment/@jest/types/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + "@jest/expect/expect/jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], - "@jest/fake-timers/@jest/types/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + "@jest/expect/expect/jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], "@jest/fake-timers/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + "@jest/fake-timers/jest-message-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@jest/fake-timers/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "@jest/fake-timers/jest-message-util/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], - "@jest/fake-timers/jest-util/ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], + "@jest/fake-timers/jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/reporters/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/reporters/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "@jest/reporters/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@jest/reporters/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "@jest/reporters/istanbul-lib-source-maps/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@jest/reporters/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "@jest/globals/@jest/environment/@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], + "@jest/reporters/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "@jest/reporters/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "@jest/reporters/jest-message-util/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], - "@jest/transform/babel-plugin-istanbul/istanbul-lib-instrument": ["istanbul-lib-instrument@5.2.1", "", { "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg=="], + "@jest/reporters/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "@jest/snapshot-utils/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/transform/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + + "@jest/transform/@babel/core/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "@jest/transform/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "@jest/transform/@babel/core/@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + + "@jest/transform/@babel/core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "@jest/transform/@babel/core/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "@jest/transform/@babel/core/@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "@jest/transform/@babel/core/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@jest/transform/@babel/core/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@jest/transform/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@jest/transform/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "@jest/transform/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@jest/types/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "@jest/types/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@jsdevtools/coverage-istanbul-loader/istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@jsdevtools/coverage-istanbul-loader/schema-utils/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], @@ -4463,8 +4588,6 @@ "@lerna/create/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "@lerna/create/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "@lerna/create/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "@lerna/create/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], @@ -4475,7 +4598,7 @@ "@lerna/create/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "@lerna/create/rimraf/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], + "@lerna/create/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], "@microsoft/api-extractor/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], @@ -4489,20 +4612,14 @@ "@npmcli/git/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], - "@npmcli/map-workspaces/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], - "@npmcli/map-workspaces/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], "@npmcli/metavuln-calculator/pacote/@npmcli/installed-package-contents": ["@npmcli/installed-package-contents@4.0.0", "", { "dependencies": { "npm-bundled": "^5.0.0", "npm-normalize-package-bin": "^5.0.0" }, "bin": { "installed-package-contents": "bin/index.js" } }, "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA=="], "@npmcli/metavuln-calculator/pacote/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], - "@npmcli/package-json/glob/jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], - "@npmcli/package-json/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], - "@npmcli/package-json/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], - "@npmcli/promise-spawn/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], "@npmcli/run-script/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], @@ -4527,19 +4644,19 @@ "@tufjs/models/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], - "babel-jest/babel-plugin-istanbul/istanbul-lib-instrument": ["istanbul-lib-instrument@5.2.1", "", { "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="], - "bin-links/write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/runtime": ["@emnapi/runtime@1.4.5", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg=="], - "bl/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="], - "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "babel-jest/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "cacache/@npmcli/fs/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], + "bin-links/write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "cacache/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], + "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "cacache/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], + "cacache/@npmcli/fs/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], "caching-transform/make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -4551,11 +4668,15 @@ "cli-truncate/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "cliui/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "cliui/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + + "cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - "concat-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "connect/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -4601,6 +4722,8 @@ "decompress-tar/tar-stream/bl": ["bl@1.2.3", "", { "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww=="], + "decompress-tar/tar-stream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "decompress/make-dir/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], "del/globby/array-union": ["array-union@1.0.2", "", { "dependencies": { "array-uniq": "^1.0.1" } }, "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng=="], @@ -4625,8 +4748,6 @@ "find-cache-dir/make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "fstream/rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - "get-pkg-repo/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], "get-pkg-repo/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], @@ -4657,7 +4778,11 @@ "git-semver-tags/meow/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], - "glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + + "hpack.js/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "hpack.js/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "http-proxy-middleware/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -4669,7 +4794,7 @@ "itk-wasm/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], - "jasmine/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "jake/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "jest-changed-files/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], @@ -4681,33 +4806,153 @@ "jest-changed-files/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "jest-circus/@jest/environment/@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], + "jest-changed-files/jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-circus/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-circus/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "jest-circus/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "jest-circus/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-cli/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-cli/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "jest-config/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + + "jest-config/@babel/core/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "jest-config/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], - "jest-circus/@jest/environment/jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], + "jest-config/@babel/core/@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], - "jest-config/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "jest-config/@babel/core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "jest-config/@babel/core/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "jest-config/@babel/core/@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "jest-config/@babel/core/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "jest-config/@babel/core/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "jest-config/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "jest-config/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-config/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "jest-config/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "jest-config/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], "jest-config/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "jest-config/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-diff/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "jest-diff/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], - "jest-environment-node/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "jest-each/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-each/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-environment-node/jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-haste-map/jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], "jest-haste-map/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "jest-leak-detector/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-matcher-utils/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "jest-mock/@jest/types/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + "jest-mock/jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-resolve/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-runner/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-runner/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "jest-runner/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "jest-runner/jest-message-util/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "jest-runner/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-runtime/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-runtime/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "jest-runtime/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "jest-runtime/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "jest-runtime/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "jest-runtime/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "jest-runtime/jest-message-util/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "jest-snapshot/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "jest-snapshot/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "jest-snapshot/@babel/core/@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + + "jest-snapshot/@babel/core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "jest-snapshot/@babel/core/@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "jest-snapshot/@babel/core/@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "jest-snapshot/@babel/core/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "jest-snapshot/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "jest-snapshot/@babel/generator/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "jest-snapshot/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "jest-snapshot/@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "jest-mock/jest-util/ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], + "jest-snapshot/@babel/plugin-syntax-jsx/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], - "jest-runner/@jest/environment/@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], + "jest-snapshot/@babel/plugin-syntax-typescript/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], - "jest-runner/@jest/environment/jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], + "jest-snapshot/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "jest-runtime/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "jest-snapshot/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - "jest-runtime/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "jest-snapshot/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-snapshot/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "jest-snapshot/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "jest-snapshot/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-validate/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-validate/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-watcher/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "jsdom/https-proxy-agent/agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], @@ -4723,8 +4968,6 @@ "lerna/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "lerna/chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "lerna/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "lerna/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], @@ -4735,7 +4978,7 @@ "lerna/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "lerna/rimraf/glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="], + "lerna/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], "lint-staged/debug/ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], @@ -4763,12 +5006,6 @@ "minipass-sized/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "mocha/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - - "mocha/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - - "mocha/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], - "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], @@ -4783,11 +5020,19 @@ "normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "nx/cli-cursor/restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + + "nx/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "nx/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + "nx/ora/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "nx/ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], - "nyc/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "nx/ora/is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], + + "nx/ora/log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], "nyc/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], @@ -4799,6 +5044,8 @@ "nyc/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "ora/string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + "pacote/@npmcli/git/ini": ["ini@5.0.0", "", {}, "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw=="], "pacote/@npmcli/git/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -4813,8 +5060,6 @@ "pacote/npm-pick-manifest/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], - "pkg-dir/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "postcss-loader/cosmiconfig/js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], "puppeteer/debug/ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], @@ -4833,7 +5078,7 @@ "read-pkg/path-type/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], - "restore-cursor/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "readable-web-to-node-stream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "rimraf/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], @@ -4861,15 +5106,17 @@ "shader-loader/loader-utils/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "shelljs/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "shelljs/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "spawn-wrap/make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "shelljs/execa/is-stream": ["is-stream@2.0.0", "", {}, "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="], - "spdy-transport/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "shelljs/execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - "split2/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "shelljs/execa/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "stream-browserify/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "shelljs/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + + "spawn-wrap/make-dir/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "streamroller/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], @@ -4893,10 +5140,14 @@ "svgo/css-select/domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], - "tar-stream/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "terser-webpack-plugin/schema-utils/ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], + "through2/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "through2/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "ts-loader/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "ts-loader/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "tuf-js/make-fetch-happen/minipass-fetch": ["minipass-fetch@5.0.1", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", "minizlib": "^3.0.1" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw=="], @@ -4905,8 +5156,6 @@ "tuf-js/make-fetch-happen/ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], - "typedoc/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "url-loader/schema-utils/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], "url-loader/schema-utils/ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], @@ -4933,6 +5182,10 @@ "write-json-file/make-dir/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "yargs/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "yargs/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], @@ -4965,33 +5218,81 @@ "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "@itk-wasm/morphological-contour-interpolation/itk-wasm/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], - "@jest/environment-jsdom-abstract/@jest/types/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + "@jest/console/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@jest/console/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@jest/environment/@jest/types/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + "@jest/console/jest-message-util/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], - "@jest/fake-timers/@jest/types/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + "@jest/core/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@jest/core/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "@jest/environment-jsdom-abstract/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/expect/expect/jest-matcher-utils/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/expect/expect/jest-matcher-utils/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "@jest/expect/expect/jest-message-util/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@jest/expect/expect/jest-message-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/expect/expect/jest-message-util/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "@jest/expect/expect/jest-message-util/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "@jest/expect/expect/jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "@jest/fake-timers/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@jest/fake-timers/jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@jest/fake-timers/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "@jest/fake-timers/jest-message-util/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], - "@jest/globals/@jest/environment/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "@jest/fake-timers/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/reporters/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@jest/reporters/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "@jest/reporters/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "@jest/reporters/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@jest/reporters/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@jest/transform/babel-plugin-istanbul/istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@jest/reporters/jest-message-util/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "@jest/transform/@babel/core/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@jest/transform/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + + "@jest/transform/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "@jest/transform/@babel/core/@babel/helper-module-transforms/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@jest/transform/@babel/core/@babel/traverse/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "@jest/transform/@babel/core/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@jest/transform/@babel/core/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], "@jsdevtools/coverage-istanbul-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "@lerna/create/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "@lerna/create/rimraf/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], - - "@lerna/create/rimraf/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], + "@lerna/create/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "@microsoft/api-extractor/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], @@ -5001,20 +5302,14 @@ "@npmcli/arborist/pacote/@npmcli/installed-package-contents/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], - "@npmcli/map-workspaces/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], - "@npmcli/map-workspaces/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "@npmcli/metavuln-calculator/pacote/@npmcli/installed-package-contents/npm-bundled": ["npm-bundled@5.0.0", "", { "dependencies": { "npm-normalize-package-bin": "^5.0.0" } }, "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw=="], "@npmcli/metavuln-calculator/pacote/@npmcli/installed-package-contents/npm-normalize-package-bin": ["npm-normalize-package-bin@5.0.0", "", {}, "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag=="], - "@npmcli/package-json/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="], - "@npmcli/package-json/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], - "@npmcli/package-json/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], - "@oxc-parser/binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], "@rspack/binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], @@ -5025,20 +5320,14 @@ "@tufjs/models/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], - "babel-jest/babel-plugin-istanbul/istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "bl/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - - "cacache/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="], "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "concat-stream/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "cliui/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "conventional-changelog-writer/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "conventional-changelog-writer/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - "conventional-changelog-writer/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], "conventional-changelog-writer/meow/read-pkg-up/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], @@ -5047,8 +5336,6 @@ "conventional-commits-parser/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "conventional-commits-parser/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - "conventional-commits-parser/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], "conventional-commits-parser/meow/read-pkg-up/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], @@ -5057,15 +5344,15 @@ "conventional-recommended-bump/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "conventional-recommended-bump/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - "conventional-recommended-bump/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], "conventional-recommended-bump/meow/read-pkg-up/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], "conventional-recommended-bump/meow/redent/strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], - "decompress-tar/tar-stream/bl/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "decompress-tar/tar-stream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "decompress-tar/tar-stream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "del/globby/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], @@ -5075,16 +5362,12 @@ "filelist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "fstream/rimraf/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "get-pkg-repo/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], "get-pkg-repo/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "git-raw-commits/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "git-raw-commits/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - "git-raw-commits/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], "git-raw-commits/meow/read-pkg-up/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], @@ -5093,15 +5376,13 @@ "git-semver-tags/meow/camelcase-keys/quick-lru": ["quick-lru@4.0.1", "", {}, "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g=="], - "git-semver-tags/meow/read-pkg-up/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - "git-semver-tags/meow/read-pkg-up/read-pkg": ["read-pkg@5.2.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" } }, "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg=="], "git-semver-tags/meow/read-pkg-up/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], "git-semver-tags/meow/redent/strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], - "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "ignore-walk/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], @@ -5109,13 +5390,97 @@ "jest-changed-files/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "jest-circus/@jest/environment/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "jest-changed-files/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-circus/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-circus/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "jest-circus/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "jest-cli/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "jest-config/@babel/core/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-config/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "jest-config/@babel/core/@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + + "jest-config/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "jest-config/@babel/core/@babel/helper-module-transforms/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-config/@babel/core/@babel/traverse/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "jest-config/@babel/core/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "jest-config/@babel/core/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-config/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "jest-config/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "jest-config/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "jest-config/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], "jest-diff/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], - "jest-mock/@jest/types/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + "jest-each/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "jest-environment-node/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "jest-runner/@jest/environment/@jest/fake-timers/@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "jest-haste-map/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-leak-detector/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "jest-mock/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-runner/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-runner/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "jest-runner/jest-message-util/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-runtime/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "jest-runtime/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "jest-runtime/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "jest-runtime/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-runtime/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "jest-runtime/jest-message-util/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "jest-snapshot/@babel/core/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + + "jest-snapshot/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "jest-snapshot/@babel/core/@babel/helper-module-transforms/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-snapshot/@babel/core/@babel/traverse/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "jest-snapshot/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "jest-snapshot/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "jest-snapshot/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "jest-validate/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], "karma-webpack/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -5123,9 +5488,7 @@ "lerna/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "lerna/rimraf/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], - - "lerna/rimraf/glob/path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], + "lerna/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "log-update/cli-cursor/restore-cursor/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], @@ -5137,39 +5500,39 @@ "meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@3.0.3", "", { "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA=="], - "mocha/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "mocha/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "node-gyp/make-fetch-happen/minipass-fetch/minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="], "normalize-package-data/hosted-git-info/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "nyc/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "nx/cli-cursor/restore-cursor/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "nx/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "nx/ora/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "nx/ora/log-symbols/is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], "nyc/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "ora/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], + "pacote/@npmcli/git/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], "pacote/@npmcli/promise-spawn/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], "pacote/npm-pick-manifest/npm-package-arg/hosted-git-info": ["hosted-git-info@8.1.0", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw=="], - "pkg-dir/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "postcss-loader/cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "read-pkg-up/find-up/locate-path/p-locate": ["p-locate@2.0.0", "", { "dependencies": { "p-limit": "^1.1.0" } }, "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg=="], "read-pkg-up/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], - "run-applescript/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - - "spdy-transport/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "readable-web-to-node-stream/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "split2/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "run-applescript/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "stream-browserify/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "shelljs/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], "stylelint/cosmiconfig/js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -5177,16 +5540,14 @@ "stylelint/meow/camelcase-keys/quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], + "stylelint/meow/read-pkg-up/find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + "stylelint/meow/read-pkg-up/read-pkg": ["read-pkg@6.0.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", "parse-json": "^5.2.0", "type-fest": "^1.0.1" } }, "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q=="], "svgo/css-select/domutils/dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - "tar-stream/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "tuf-js/make-fetch-happen/minipass-fetch/minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="], - "typedoc/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "url-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], "webpack-dev-server/open/default-browser/bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], @@ -5195,59 +5556,103 @@ "worker-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "@itk-wasm/morphological-contour-interpolation/itk-wasm/glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@jest/console/jest-message-util/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "@jest/expect/expect/jest-matcher-utils/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/expect/expect/jest-matcher-utils/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "@jest/expect/expect/jest-message-util/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@jest/expect/expect/jest-message-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@jest/expect/expect/jest-message-util/micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "@jest/expect/expect/jest-message-util/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "@jest/expect/expect/jest-util/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@jest/fake-timers/jest-message-util/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], - "@lerna/create/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + "@jest/reporters/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "@lerna/create/rimraf/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + "@jest/reporters/glob/jackspeak/@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], - "@npmcli/package-json/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], + "@jest/reporters/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "@jest/reporters/jest-message-util/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="], + + "@jest/transform/@babel/core/@babel/helper-compilation-targets/browserslist/node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], - "cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], + "@jest/transform/@babel/core/@babel/helper-compilation-targets/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - "conventional-changelog-writer/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "@lerna/create/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@npmcli/package-json/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], "conventional-changelog-writer/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], "conventional-changelog-writer/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], - "conventional-commits-parser/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "conventional-commits-parser/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], "conventional-commits-parser/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], - "conventional-recommended-bump/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "conventional-recommended-bump/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], "conventional-recommended-bump/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], "get-pkg-repo/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "git-raw-commits/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "git-raw-commits/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], "git-raw-commits/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], - "git-semver-tags/meow/read-pkg-up/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "git-semver-tags/meow/read-pkg-up/read-pkg/normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], "git-semver-tags/meow/read-pkg-up/read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], "itk-wasm/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "karma/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "jest-cli/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets/browserslist/node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "jest-config/@babel/core/@babel/helper-compilation-targets/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - "lerna/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + "jest-config/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "lerna/rimraf/glob/path-scurry/lru-cache": ["lru-cache@11.2.6", "", {}, "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ=="], + "jest-config/glob/jackspeak/@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "jest-config/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "jest-runner/jest-message-util/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "jest-runtime/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "jest-runtime/glob/jackspeak/@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "jest-runtime/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "jest-runtime/jest-message-util/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/browserslist/node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "jest-snapshot/@babel/core/@babel/helper-compilation-targets/browserslist/update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + + "karma/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "lerna/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "log-update/cli-cursor/restore-cursor/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], @@ -5255,71 +5660,63 @@ "meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], - "mocha/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "nyc/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "nx/cli-cursor/restore-cursor/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], "nyc/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "pacote/npm-pick-manifest/npm-package-arg/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], - "read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@1.3.0", "", { "dependencies": { "p-try": "^1.0.0" } }, "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="], + "stylelint/meow/read-pkg-up/find-up/locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "webpack-dev-server/open/default-browser/bundle-name/run-applescript": ["run-applescript@7.0.0", "", {}, "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A=="], "@itk-wasm/morphological-contour-interpolation/itk-wasm/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "@lerna/create/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], + "@jest/expect/expect/jest-matcher-utils/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], + + "@jest/expect/expect/jest-message-util/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g=="], - "conventional-changelog-writer/meow/read-pkg-up/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "@jest/reporters/glob/jackspeak/@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@jest/reporters/glob/jackspeak/@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "conventional-changelog-writer/meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], "conventional-changelog-writer/meow/read-pkg-up/read-pkg/normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "conventional-commits-parser/meow/read-pkg-up/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "conventional-commits-parser/meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], "conventional-commits-parser/meow/read-pkg-up/read-pkg/normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "conventional-recommended-bump/meow/read-pkg-up/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "conventional-recommended-bump/meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], "conventional-recommended-bump/meow/read-pkg-up/read-pkg/normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "git-raw-commits/meow/read-pkg-up/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "git-raw-commits/meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], "git-raw-commits/meow/read-pkg-up/read-pkg/normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "git-semver-tags/meow/read-pkg-up/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "git-semver-tags/meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], "git-semver-tags/meow/read-pkg-up/read-pkg/normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "lerna/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], + "jest-config/glob/jackspeak/@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - - "meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "jest-config/glob/jackspeak/@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "read-pkg-up/find-up/locate-path/p-locate/p-limit/p-try": ["p-try@1.0.0", "", {}, "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww=="], + "jest-runtime/glob/jackspeak/@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "conventional-changelog-writer/meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "jest-runtime/glob/jackspeak/@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "conventional-commits-parser/meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - "conventional-recommended-bump/meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "meow/read-pkg-up/read-pkg/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - "git-raw-commits/meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "read-pkg-up/find-up/locate-path/p-locate/p-limit/p-try": ["p-try@1.0.0", "", {}, "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww=="], - "git-semver-tags/meow/read-pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "stylelint/meow/read-pkg-up/find-up/locate-path/p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], "meow/read-pkg-up/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.2.0", "", {}, "sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw=="], diff --git a/package.json b/package.json index f9268c8a91..60d30e950d 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@babel/runtime-corejs3": "7.26.10", "@cornerstonejs/calculate-suv": "1.0.3", "@istanbuljs/nyc-config-typescript": "1.0.2", - "@microsoft/api-extractor": "7.49.2", + "@microsoft/api-extractor": "7.57.1", "@microsoft/tsdoc": "0.15.1", "@playwright/test": "1.56.1", "@prettier/plugin-oxc": "0.0.4", @@ -103,7 +103,7 @@ "ajv": "8.17.1", "autoprefixer": "10.4.21", "babel-loader": "9.1.2", - "babel-plugin-istanbul": "7.0.0", + "babel-plugin-istanbul": "7.0.1", "babel-plugin-transform-import-meta": "2.3.2", "chai": "5.2.0", "clean-webpack-plugin": "4.0.0", @@ -117,7 +117,7 @@ "cssnano": "6.1.2", "dicomweb-client": "0.11.2", "docdash": "1.2.0", - "dpdm": "3.14.0", + "dpdm": "4.0.1", "execa": "7.2.0", "exports-loader": "3.1.0", "file-loader": "6.2.0", @@ -125,8 +125,8 @@ "fs-extra": "10.1.0", "html-webpack-plugin": "5.6.3", "husky": "9.1.7", - "jasmine": "4.6.0", - "jest": "29.7.0", + "jasmine": "6.0.0", + "jest": "30.2.0", "jest-canvas-mock": "2.5.2", "jest-environment-jsdom": "30.2.0", "jest-junit": "16.0.0", @@ -135,12 +135,10 @@ "karma-coverage": "2.2.1", "karma-jasmine": "5.1.0", "karma-junit-reporter": "2.0.1", - "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "5.0.1", "lerna": "9.0.4", "lint-staged": "13.3.0", - "mocha": "10.8.2", "nyc": "17.1.0", "open-cli": "7.2.0", "oxlint": "1.9.0", @@ -156,8 +154,8 @@ "rollup": "3.29.5", "semver": "7.7.1", "shader-loader": "1.3.1", - "shelljs": "0.8.5", - "shx": "0.3.4", + "shelljs": "0.10.0", + "shx": "0.4.0", "sinon": "21.0.0", "source-map-support": "0.5.21", "style-loader": "3.3.4", @@ -165,9 +163,7 @@ "stylelint-config-recommended": "12.0.0", "ts-loader": "9.5.1", "ts-node": "10.9.2", - "typedoc": "0.28.15", "typescript": "5.5.4", - "unzipper": "0.10.14", "url-loader": "4.1.1", "webpack": "5.105.0", "webpack-bundle-analyzer": "4.10.2", @@ -202,6 +198,7 @@ "ws": "8.18.3", "qs": "6.14.1", "lodash": "4.17.23", - "tar": "7.5.9" + "tar": "7.5.9", + "shelljs": "0.10.0" } } diff --git a/yarn.lock b/yarn.lock index 28036edcdc..29e646e215 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,6 +56,15 @@ js-tokens "^4.0.0" picocolors "^1.1.1" +"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" @@ -66,6 +75,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== +"@babel/compat-data@^7.28.6": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== + "@babel/core@7.26.10": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" @@ -87,7 +101,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.7.5": +"@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.7.5": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== @@ -108,7 +122,28 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.7.2": +"@babel/core@^7.27.4": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== @@ -140,6 +175,17 @@ "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" +"@babel/generator@^7.27.5", "@babel/generator@^7.29.0": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== + dependencies: + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" @@ -176,6 +222,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== + dependencies: + "@babel/compat-data" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@7.28.3", "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.25.9", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": version "7.28.3" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz#3e747434ea007910c320c4d39a6b46f20f371d46" @@ -266,6 +323,14 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== + dependencies: + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + "@babel/helper-module-transforms@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" @@ -285,6 +350,15 @@ "@babel/helper-validator-identifier" "^7.27.1" "@babel/traverse" "^7.28.3" +"@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== + dependencies: + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" + "@babel/helper-optimise-call-expression@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" @@ -371,6 +445,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + "@babel/helper-validator-option@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" @@ -406,6 +485,14 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== + dependencies: + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" + "@babel/highlight@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" @@ -444,6 +531,13 @@ dependencies: "@babel/types" "^7.27.0" +"@babel/parser@^7.28.6", "@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + dependencies: + "@babel/types" "^7.29.0" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" @@ -584,13 +678,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -654,13 +741,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -1276,7 +1356,7 @@ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== -"@babel/template@^7.25.0", "@babel/template@^7.3.3": +"@babel/template@^7.25.0": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== @@ -1312,6 +1392,15 @@ "@babel/parser" "^7.27.0" "@babel/types" "^7.27.0" +"@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + "@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": version "7.25.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" @@ -1351,7 +1440,20 @@ "@babel/types" "^7.28.4" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.4.4": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== @@ -1384,6 +1486,14 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" +"@babel/types@^7.28.6", "@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1780,17 +1890,6 @@ dependencies: tslib "^2.4.0" -"@gerrit0/mini-shiki@^3.17.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@gerrit0/mini-shiki/-/mini-shiki-3.20.0.tgz#a9154b8faeb7c2268e6c54af4cec86a9fb722297" - integrity sha512-Wa57i+bMpK6PGJZ1f2myxo3iO+K/kZikcyvH8NIqNNZhQUbDav7V9LQmWOXhf946mz5c1NZ19WMsGYiDKTryzQ== - dependencies: - "@shikijs/engine-oniguruma" "^3.20.0" - "@shikijs/langs" "^3.20.0" - "@shikijs/themes" "^3.20.0" - "@shikijs/types" "^3.20.0" - "@shikijs/vscode-textmate" "^10.0.2" - "@hutson/parse-repository-url@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" @@ -1997,7 +2096,7 @@ resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== -"@isaacs/brace-expansion@^5.0.0": +"@isaacs/brace-expansion@^5.0.0", "@isaacs/brace-expansion@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz#0ef5a92d91f2fff2a37646ce54da9e5f599f6eff" integrity sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ== @@ -2075,51 +2174,56 @@ dependencies: itk-wasm "1.0.0-b.173" -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== +"@jasminejs/reporters@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jasminejs/reporters/-/reporters-1.0.0.tgz#1d06099c11ff9793544e6d84ad8fb45c37630a60" + integrity sha512-rM3GG4vx2H1Gp5kYCTr9aKlOEJFd43pzpiMAiy5b1+FUc2ub4e6bS6yCi/WQNDzAa5MVp9++dwcoEtcIfoEnhA== + +"@jest/console@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-30.2.0.tgz#c52fcd5b58fdd2e8eb66b2fd8ae56f2f64d05b28" + integrity sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ== dependencies: - "@jest/types" "^29.6.3" + "@jest/types" "30.2.0" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" + chalk "^4.1.2" + jest-message-util "30.2.0" + jest-util "30.2.0" slash "^3.0.0" -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== +"@jest/core@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-30.2.0.tgz#813d59faa5abd5510964a8b3a7b17cc77b775275" + integrity sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ== dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/console" "30.2.0" + "@jest/pattern" "30.0.1" + "@jest/reporters" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + ci-info "^4.2.0" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-changed-files "30.2.0" + jest-config "30.2.0" + jest-haste-map "30.2.0" + jest-message-util "30.2.0" + jest-regex-util "30.0.1" + jest-resolve "30.2.0" + jest-resolve-dependencies "30.2.0" + jest-runner "30.2.0" + jest-runtime "30.2.0" + jest-snapshot "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" + jest-watcher "30.2.0" + micromatch "^4.0.8" + pretty-format "30.2.0" slash "^3.0.0" - strip-ansi "^6.0.0" "@jest/diff-sequences@30.0.1": version "30.0.1" @@ -2149,15 +2253,12 @@ "@types/node" "*" jest-mock "30.2.0" -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== +"@jest/expect-utils@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-30.2.0.tgz#4f95413d4748454fdb17404bf1141827d15e6011" + integrity sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA== dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" + "@jest/get-type" "30.1.0" "@jest/expect-utils@^29.7.0": version "29.7.0" @@ -2166,13 +2267,13 @@ dependencies: jest-get-type "^29.6.3" -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== +"@jest/expect@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-30.2.0.tgz#9a5968499bb8add2bbb09136f69f7df5ddbf3185" + integrity sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA== dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" + expect "30.2.0" + jest-snapshot "30.2.0" "@jest/fake-timers@30.2.0": version "30.2.0" @@ -2186,32 +2287,20 @@ jest-mock "30.2.0" jest-util "30.2.0" -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - "@jest/get-type@30.1.0": version "30.1.0" resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc" integrity sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA== -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== +"@jest/globals@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-30.2.0.tgz#2f4b696d5862664b89c4ee2e49ae24d2bb7e0988" + integrity sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw== dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" + "@jest/environment" "30.2.0" + "@jest/expect" "30.2.0" + "@jest/types" "30.2.0" + jest-mock "30.2.0" "@jest/pattern@30.0.1": version "30.0.1" @@ -2221,34 +2310,33 @@ "@types/node" "*" jest-regex-util "30.0.1" -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== +"@jest/reporters@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-30.2.0.tgz#a36b28fcbaf0c4595250b108e6f20e363348fd91" + integrity sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" + "@jest/console" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" + "@jridgewell/trace-mapping" "^0.3.25" "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" + chalk "^4.1.2" + collect-v8-coverage "^1.0.2" + exit-x "^0.2.2" + glob "^10.3.10" + graceful-fs "^4.2.11" istanbul-lib-coverage "^3.0.0" istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" + istanbul-lib-source-maps "^5.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" + jest-message-util "30.2.0" + jest-util "30.2.0" + jest-worker "30.2.0" slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" + string-length "^4.0.2" v8-to-istanbul "^9.0.1" "@jest/schemas@30.0.5": @@ -2265,55 +2353,65 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== +"@jest/snapshot-utils@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz#387858eb90c2f98f67bff327435a532ac5309fbe" + integrity sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug== dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" + "@jest/types" "30.2.0" + chalk "^4.1.2" + graceful-fs "^4.2.11" + natural-compare "^1.4.0" -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== +"@jest/source-map@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-30.0.1.tgz#305ebec50468f13e658b3d5c26f85107a5620aaa" + integrity sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg== dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "@jridgewell/trace-mapping" "^0.3.25" + callsites "^3.1.0" + graceful-fs "^4.2.11" -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== +"@jest/test-result@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-30.2.0.tgz#9c0124377fb7996cdffb86eda3dbc56eacab363d" + integrity sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg== dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" + "@jest/console" "30.2.0" + "@jest/types" "30.2.0" + "@types/istanbul-lib-coverage" "^2.0.6" + collect-v8-coverage "^1.0.2" + +"@jest/test-sequencer@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz#bf0066bc72e176d58f5dfa7f212b6e7eee44f221" + integrity sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q== + dependencies: + "@jest/test-result" "30.2.0" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" slash "^3.0.0" -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== +"@jest/transform@30.2.0": + version "30.2.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-30.2.0.tgz#54bef1a4510dcbd58d5d4de4fe2980a63077ef2a" + integrity sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA== dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" + "@babel/core" "^7.27.4" + "@jest/types" "30.2.0" + "@jridgewell/trace-mapping" "^0.3.25" + babel-plugin-istanbul "^7.0.1" + chalk "^4.1.2" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" + jest-regex-util "30.0.1" + jest-util "30.2.0" + micromatch "^4.0.8" + pirates "^4.0.7" slash "^3.0.0" - write-file-atomic "^4.0.2" + write-file-atomic "^5.0.1" "@jest/types@30.2.0": version "30.2.0" @@ -2357,6 +2455,14 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" @@ -2393,7 +2499,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -2401,7 +2507,7 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.28": +"@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.28": version "0.3.31" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== @@ -2541,49 +2647,55 @@ yargs "17.7.2" yargs-parser "21.1.1" -"@microsoft/api-extractor-model@7.30.3": - version "7.30.3" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.30.3.tgz#d1256b6955c8c2a1115e0cfe99e1e8f9802e52cc" - integrity sha512-yEAvq0F78MmStXdqz9TTT4PZ05Xu5R8nqgwI5xmUmQjWBQ9E6R2n8HB/iZMRciG4rf9iwI2mtuQwIzDXBvHn1w== - dependencies: - "@microsoft/tsdoc" "~0.15.1" - "@microsoft/tsdoc-config" "~0.17.1" - "@rushstack/node-core-library" "5.11.0" - -"@microsoft/api-extractor@7.49.2": - version "7.49.2" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.49.2.tgz#bc08c5fef1a3064f86657fd2e2f84c0ea64462f5" - integrity sha512-DI/WnvhbkHcucxxc4ys00ejCiViFls5EKPrEfe4NV3GGpVkoM5ZXF61HZNSGA8IG0oEV4KfTqIa59Rc3wdMopw== - dependencies: - "@microsoft/api-extractor-model" "7.30.3" - "@microsoft/tsdoc" "~0.15.1" - "@microsoft/tsdoc-config" "~0.17.1" - "@rushstack/node-core-library" "5.11.0" - "@rushstack/rig-package" "0.5.3" - "@rushstack/terminal" "0.14.6" - "@rushstack/ts-command-line" "4.23.4" - lodash "~4.17.15" - minimatch "~3.0.3" +"@microsoft/api-extractor-model@7.33.1": + version "7.33.1" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.33.1.tgz#9763ad17d9e00b83a88d6086a29315bbdb56b8ad" + integrity sha512-KX0LI6xzI0gcBOXXmr5mnnbdhsK2W93pqvJo8OgJgWvRRh+wMEp0Ccj38h1XKeJ29E1tuAZKSUOfHUQ1WA8fZg== + dependencies: + "@microsoft/tsdoc" "~0.16.0" + "@microsoft/tsdoc-config" "~0.18.0" + "@rushstack/node-core-library" "5.20.1" + +"@microsoft/api-extractor@7.57.1": + version "7.57.1" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.57.1.tgz#d105ec5d0ae1c598f885e639edc78a257e313b1b" + integrity sha512-rTHuqQeI38kNgUoWNlCNrAJWgRA7s48DNZcMyPkQvTzb33EQL/a0FA8S1IAXh9133NG4/cJ19trXtBZSwZndsw== + dependencies: + "@microsoft/api-extractor-model" "7.33.1" + "@microsoft/tsdoc" "~0.16.0" + "@microsoft/tsdoc-config" "~0.18.0" + "@rushstack/node-core-library" "5.20.1" + "@rushstack/rig-package" "0.7.1" + "@rushstack/terminal" "0.22.1" + "@rushstack/ts-command-line" "5.3.1" + diff "~8.0.2" + lodash "~4.17.23" + minimatch "10.1.2" resolve "~1.22.1" semver "~7.5.4" source-map "~0.6.1" - typescript "5.7.2" + typescript "5.8.2" -"@microsoft/tsdoc-config@~0.17.1": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz#e0f0b50628f4ad7fe121ca616beacfe6a25b9335" - integrity sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw== +"@microsoft/tsdoc-config@~0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.18.0.tgz#02fd9924b888053ecbc3c0385a24532bf2106c98" + integrity sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw== dependencies: - "@microsoft/tsdoc" "0.15.1" + "@microsoft/tsdoc" "0.16.0" ajv "~8.12.0" jju "~1.4.0" resolve "~1.22.2" -"@microsoft/tsdoc@0.15.1", "@microsoft/tsdoc@~0.15.1": +"@microsoft/tsdoc@0.15.1": version "0.15.1" resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz#d4f6937353bc4568292654efb0a0e0532adbcba2" integrity sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw== +"@microsoft/tsdoc@0.16.0", "@microsoft/tsdoc@~0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz#2249090633e04063176863a050c8f0808d2b6d2b" + integrity sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA== + "@module-federation/error-codes@0.21.2": version "0.21.2" resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.21.2.tgz#a24573e2ebfb58f972a8eafbc1e1421a4a709546" @@ -3269,6 +3381,11 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@pkgr/core@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" + integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== + "@playwright/test@1.56.1": version "1.56.1" resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.56.1.tgz#6e3bf3d0c90c5cf94bf64bdb56fd15a805c8bd3f" @@ -3492,10 +3609,10 @@ resolved "https://registry.yarnpkg.com/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz#d4540a5d28bd6177164bc0ba0bee4bdec0458591" integrity sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w== -"@rushstack/node-core-library@5.11.0": - version "5.11.0" - resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.11.0.tgz#8ceb980f3a591e1254167bb5ffdc200d1893b783" - integrity sha512-I8+VzG9A0F3nH2rLpPd7hF8F7l5Xb7D+ldrWVZYegXM6CsKkvWc670RlgK3WX8/AseZfXA/vVrh0bpXe2Y2UDQ== +"@rushstack/node-core-library@5.20.1": + version "5.20.1" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.20.1.tgz#4b758ea0c6b9db524d1e6f2433a175df7b08db6b" + integrity sha512-QvxZyh+RsTJ77JpQkS9K9lJujh6lj5WyMxieT0bdACtwqxEkGB9zCuSMX5UlXRweaIgSpu1ztdHmhV07fKUpMg== dependencies: ajv "~8.13.0" ajv-draft-04 "~1.0.0" @@ -3506,67 +3623,38 @@ resolve "~1.22.1" semver "~7.5.4" -"@rushstack/rig-package@0.5.3": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.5.3.tgz#ea4d8a3458540b1295500149c04e645f23134e5d" - integrity sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow== +"@rushstack/problem-matcher@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@rushstack/problem-matcher/-/problem-matcher-0.2.1.tgz#e9f6cac2dd6a882d60e76a8d4462b7d24b4f17e5" + integrity sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog== + +"@rushstack/rig-package@0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.7.1.tgz#ffe5b46e55ee141432710a329336b087471c82a8" + integrity sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA== dependencies: resolve "~1.22.1" strip-json-comments "~3.1.1" -"@rushstack/terminal@0.14.6": - version "0.14.6" - resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.14.6.tgz#a58a6bbbd1dead6c0701960b583645f10e5577ec" - integrity sha512-4nMUy4h0u5PGXVG71kEA9uYI3l8GjVqewoHOFONiM6fuqS51ORdaJZ5ZXB2VZEGUyfg1TOTSy88MF2cdAy+lqA== +"@rushstack/terminal@0.22.1": + version "0.22.1" + resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.22.1.tgz#bb40fc351b3a5987c51a11f8a6db5aa2e47fc672" + integrity sha512-Mdtu0VN7v31O5Zcno8ZZH5kQHF13Ez7WN9Aio7nFJVcR36i4bkERionYrWgBDQJ0JdVPLKGecZER/xRU5IvGLw== dependencies: - "@rushstack/node-core-library" "5.11.0" + "@rushstack/node-core-library" "5.20.1" + "@rushstack/problem-matcher" "0.2.1" supports-color "~8.1.1" -"@rushstack/ts-command-line@4.23.4": - version "4.23.4" - resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.23.4.tgz#f04c04f039621c47e25793d551e67300cd0dfcba" - integrity sha512-pqmzDJCm0TS8VyeqnzcJ7ncwXgiLDQ6LVmXXfqv2nPL6VIz+UpyTpNVfZRJpyyJ+UDxqob1vIj2liaUfBjv8/A== +"@rushstack/ts-command-line@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-5.3.1.tgz#433d17a5f0f939f7e781de8d5116fab53bad0464" + integrity sha512-mid/JIZSJafwy3x9e4v0wVLuAqSSYYErEHV0HXPALYLSBN13YNkR5caOk0hf97lSRKrxhtvQjGaDKSEelR3sMg== dependencies: - "@rushstack/terminal" "0.14.6" + "@rushstack/terminal" "0.22.1" "@types/argparse" "1.0.38" argparse "~1.0.9" string-argv "~0.3.1" -"@shikijs/engine-oniguruma@^3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.20.0.tgz#4b476a8dff29561dfd9af1ba2edb4c378d3bee06" - integrity sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ== - dependencies: - "@shikijs/types" "3.20.0" - "@shikijs/vscode-textmate" "^10.0.2" - -"@shikijs/langs@^3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.20.0.tgz#5dcfdeb9eb2d5f811144ca606553a4d8a6a667d5" - integrity sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA== - dependencies: - "@shikijs/types" "3.20.0" - -"@shikijs/themes@^3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.20.0.tgz#9b030fe81fcd0a8b7941131ef14c274b4c6451a8" - integrity sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ== - dependencies: - "@shikijs/types" "3.20.0" - -"@shikijs/types@3.20.0", "@shikijs/types@^3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.20.0.tgz#b1fbacba2e1e38d31e3f869309fff216a5d27126" - integrity sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw== - dependencies: - "@shikijs/vscode-textmate" "^10.0.2" - "@types/hast" "^3.0.4" - -"@shikijs/vscode-textmate@^10.0.2": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" - integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== - "@sigstore/bundle@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-4.0.0.tgz#854eda43eb6a59352037e49000177c8904572f83" @@ -3623,20 +3711,13 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.41.tgz#aa51a6c1946df2c5a11494a2cdb9318e026db16c" integrity sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g== -"@sinonjs/commons@^3.0.0", "@sinonjs/commons@^3.0.1": +"@sinonjs/commons@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - "@sinonjs/fake-timers@^13.0.0", "@sinonjs/fake-timers@^13.0.5": version "13.0.5" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz#36b9dbc21ad5546486ea9173d6bea063eb1717d5" @@ -3731,7 +3812,7 @@ resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== -"@types/babel__core@^7.1.14": +"@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== @@ -3757,7 +3838,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*": version "7.20.6" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== @@ -3875,20 +3956,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/hast@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - "@types/html-minifier-terser@^6.0.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" @@ -4108,11 +4175,6 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== -"@types/unist@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" - integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== - "@types/webxr@^0.5.5": version "0.5.19" resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.19.tgz#463a27bc06ff1c0a0c997e86b48bf24c5f50a4af" @@ -4151,6 +4213,108 @@ dependencies: "@types/node" "*" +"@ungap/structured-clone@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@unrs/resolver-binding-android-arm-eabi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz#9f5b04503088e6a354295e8ea8fe3cb99e43af81" + integrity sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw== + +"@unrs/resolver-binding-android-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz#7414885431bd7178b989aedc4d25cccb3865bc9f" + integrity sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g== + +"@unrs/resolver-binding-darwin-arm64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz#b4a8556f42171fb9c9f7bac8235045e82aa0cbdf" + integrity sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g== + +"@unrs/resolver-binding-darwin-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz#fd4d81257b13f4d1a083890a6a17c00de571f0dc" + integrity sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ== + +"@unrs/resolver-binding-freebsd-x64@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz#d2513084d0f37c407757e22f32bd924a78cfd99b" + integrity sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz#844d2605d057488d77fab09705f2866b86164e0a" + integrity sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz#204892995cefb6bd1d017d52d097193bc61ddad3" + integrity sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw== + +"@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz#023eb0c3aac46066a10be7a3f362e7b34f3bdf9d" + integrity sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ== + +"@unrs/resolver-binding-linux-arm64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz#9e6f9abb06424e3140a60ac996139786f5d99be0" + integrity sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz#b111417f17c9d1b02efbec8e08398f0c5527bb44" + integrity sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz#92ffbf02748af3e99873945c9a8a5ead01d508a9" + integrity sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ== + +"@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz#0bec6f1258fc390e6b305e9ff44256cb207de165" + integrity sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew== + +"@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz#577843a084c5952f5906770633ccfb89dac9bc94" + integrity sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg== + +"@unrs/resolver-binding-linux-x64-gnu@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz#36fb318eebdd690f6da32ac5e0499a76fa881935" + integrity sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w== + +"@unrs/resolver-binding-linux-x64-musl@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz#bfb9af75f783f98f6a22c4244214efe4df1853d6" + integrity sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA== + +"@unrs/resolver-binding-wasm32-wasi@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz#752c359dd875684b27429500d88226d7cc72f71d" + integrity sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz#ce5735e600e4c2fbb409cd051b3b7da4a399af35" + integrity sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw== + +"@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz#72fc57bc7c64ec5c3de0d64ee0d1810317bc60a6" + integrity sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ== + +"@unrs/resolver-binding-win32-x64-msvc@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz#538b1e103bf8d9864e7b85cc96fa8d6fb6c40777" + integrity sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g== + "@web3-storage/car-block-validator@^1.0.1": version "1.2.0" resolved "https://registry.yarnpkg.com/@web3-storage/car-block-validator/-/car-block-validator-1.2.0.tgz#533ea6b22059606ed19e906434a50c0a16c07283" @@ -4499,12 +4663,12 @@ ajv@~8.13.0: require-from-string "^2.0.2" uri-js "^4.4.1" -ansi-colors@^4.1.1, ansi-colors@^4.1.3: +ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.2.1: +ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -4557,7 +4721,12 @@ ansi-styles@^6.0.0, ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -anymatch@^3.0.3, anymatch@~3.1.2: +ansi-styles@^6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + +anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -4694,17 +4863,17 @@ axios@1.13.5, axios@^1.12.0, axios@^1.4.0, axios@^1.6.2: form-data "^4.0.5" proxy-from-env "^1.1.0" -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== +babel-jest@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.2.0.tgz#fd44a1ec9552be35ead881f7381faa7d8f3b95ac" + integrity sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw== dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" + "@jest/transform" "30.2.0" + "@types/babel__core" "^7.20.5" + babel-plugin-istanbul "^7.0.1" + babel-preset-jest "30.2.0" + chalk "^4.1.2" + graceful-fs "^4.2.11" slash "^3.0.0" babel-loader@9.1.2: @@ -4715,10 +4884,10 @@ babel-loader@9.1.2: find-cache-dir "^3.3.2" schema-utils "^4.0.0" -babel-plugin-istanbul@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz#629a178f63b83dc9ecee46fd20266283b1f11280" - integrity sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw== +babel-plugin-istanbul@7.0.1, babel-plugin-istanbul@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz#d8b518c8ea199364cf84ccc82de89740236daf92" + integrity sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" @@ -4726,26 +4895,12 @@ babel-plugin-istanbul@7.0.0: istanbul-lib-instrument "^6.0.2" test-exclude "^6.0.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== +babel-plugin-jest-hoist@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz#94c250d36b43f95900f3a219241e0f4648191ce2" + integrity sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA== dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" + "@types/babel__core" "^7.20.5" babel-plugin-polyfill-corejs2@^0.4.10: version "0.4.11" @@ -4779,10 +4934,10 @@ babel-plugin-transform-import-meta@2.3.2: "@babel/template" "^7.25.9" tslib "^2.8.1" -babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== +babel-preset-current-node-syntax@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -4800,13 +4955,13 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== +babel-preset-jest@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz#04717843e561347781d6d7f69c81e6bcc3ed11ce" + integrity sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ== dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" + babel-plugin-jest-hoist "30.2.0" + babel-preset-current-node-syntax "^1.2.0" balanced-match@^1.0.0: version "1.0.2" @@ -4848,7 +5003,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -big-integer@^1.6.17, big-integer@^1.6.44: +big-integer@^1.6.44: version "1.6.52" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== @@ -4874,14 +5029,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - bl@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" @@ -4890,7 +5037,7 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -bl@^4.0.3, bl@^4.1.0: +bl@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -4904,11 +5051,6 @@ blakejs@^1.1.1: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== - body-parser@1.20.3, body-parser@^1.19.0: version "1.20.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" @@ -4976,11 +5118,6 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browser-stdout@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - browserslist@^4.0.0, browserslist@^4.21.9, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.4, browserslist@^4.25.3, browserslist@^4.28.1: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" @@ -5027,11 +5164,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - buffer@6.0.3, buffer@^5.2.1, buffer@^5.5.0: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -5040,11 +5172,6 @@ buffer@6.0.3, buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.2.1" -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== - bundle-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" @@ -5117,7 +5244,7 @@ call-bound@^1.0.2: call-bind-apply-helpers "^1.0.2" get-intrinsic "^1.3.0" -callsites@^3.0.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -5164,7 +5291,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.2.0, camelcase@^6.3.0: +camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -5213,13 +5340,6 @@ chai@5.2.0: loupe "^3.1.0" pathval "^2.0.0" -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - chalk@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -5250,6 +5370,11 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -5265,7 +5390,7 @@ check-error@^2.1.1: resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== -chokidar@^3.5.1, chokidar@^3.5.3, chokidar@^3.6.0: +chokidar@^3.5.1, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -5310,10 +5435,10 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== -cjs-module-lexer@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" - integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== +cjs-module-lexer@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz#b3ca5101843389259ade7d88c77bd06ce55849ca" + integrity sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ== clean-css@^5.2.2: version "5.3.3" @@ -5348,6 +5473,13 @@ cli-cursor@^4.0.0: dependencies: restore-cursor "^4.0.0" +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + dependencies: + restore-cursor "^5.0.0" + cli-spinners@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" @@ -5358,6 +5490,11 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== +cli-spinners@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-3.4.0.tgz#1f11f6d48c4e5bc6849fcb4efa0dc98f9e7299ea" + integrity sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw== + cli-truncate@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" @@ -5398,6 +5535,15 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" +cliui@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-9.0.1.tgz#6f7890f386f6f1f79953adc1f78dec46fcc2d291" + integrity sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w== + dependencies: + string-width "^7.2.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -5427,10 +5573,10 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== +collect-v8-coverage@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== color-convert@^1.9.0: version "1.9.3" @@ -5817,19 +5963,6 @@ coverage-istanbul-loader@3.0.5: dependencies: "@jsdevtools/coverage-istanbul-loader" "3.0.5" -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -6139,7 +6272,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.3.5, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.6" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== @@ -6180,11 +6313,6 @@ decamelize@^1.1.0, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - decamelize@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9" @@ -6265,11 +6393,16 @@ decompress@^4.2.1: pify "^2.3.0" strip-dirs "^2.0.0" -dedent@1.5.3, dedent@^1.0.0: +dedent@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== +dedent@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.1.tgz#364661eea3d73f3faba7089214420ec2f8f13e15" + integrity sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg== + deep-eql@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" @@ -6280,7 +6413,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deepmerge@^4.2.2: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -6406,7 +6539,7 @@ detect-libc@^2.0.0: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== -detect-newline@^3.0.0: +detect-newline@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== @@ -6474,16 +6607,16 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - diff@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== +diff@~8.0.2: + version "8.0.3" + resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.3.tgz#c7da3d9e0e8c283bb548681f8d7174653720c2d5" + integrity sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -6602,18 +6735,18 @@ dotenv@^16.4.4, dotenv@~16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== -dpdm@3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/dpdm/-/dpdm-3.14.0.tgz#12a60a2d88b23981c91239b86e7462a5c203e5e9" - integrity sha512-YJzsFSyEtj88q5eTELg3UWU7TVZkG1dpbF4JDQ3t1b07xuzXmdoGeSz9TKOke1mUuOpWlk4q+pBh+aHzD6GBTg== +dpdm@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/dpdm/-/dpdm-4.0.1.tgz#a3f146dcd89299885ad216bc99eb51eceff2ae58" + integrity sha512-9NutC+V6A/4GHgqsqRTMQNDlhipK3lyPWBJ8zIVT8lTncy71d1BzR7sbCO0Dv2zTZ4XSxvbEfMyd0NDDLU0+fw== dependencies: - chalk "^4.1.2" - fs-extra "^11.1.1" - glob "^10.3.4" - ora "^5.4.1" - tslib "^2.6.2" - typescript "^5.2.2" - yargs "^17.7.2" + chalk "^5.6.2" + fs-extra "^11.3.3" + glob "^13.0.0" + ora "^9.1.0" + tslib "^2.8.1" + typescript "^5.9.3" + yargs "^18.0.0" dunder-proto@^1.0.1: version "1.0.1" @@ -6624,13 +6757,6 @@ dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -6668,6 +6794,11 @@ emittery@^0.13.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== +emoji-regex@^10.3.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" + integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -6956,7 +7087,7 @@ execa@7.2.0, execa@^7.1.1: signal-exit "^3.0.7" strip-final-newline "^3.0.0" -execa@^5.0.0: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -6976,17 +7107,29 @@ exit-hook@^4.0.0: resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-4.0.0.tgz#c1e16ebd03d3166f837b1502dac755bb5c460d58" integrity sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ== -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== +exit-x@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exit-x/-/exit-x-0.2.2.tgz#1f9052de3b8d99a696b10dad5bced9bdd5c3aa64" + integrity sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ== expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^29.0.0, expect@^29.7.0: +expect@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-30.2.0.tgz#d4013bed267013c14bc1199cec8aa57cee9b5869" + integrity sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw== + dependencies: + "@jest/expect-utils" "30.2.0" + "@jest/get-type" "30.1.0" + jest-matcher-utils "30.2.0" + jest-message-util "30.2.0" + jest-mock "30.2.0" + jest-util "30.2.0" + +expect@^29.0.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -7078,6 +7221,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -7107,7 +7261,7 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -fb-watchman@^2.0.0: +fb-watchman@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== @@ -7394,7 +7548,7 @@ fs-extra@10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^11.1.1, fs-extra@^11.2.0: +fs-extra@^11.2.0: version "11.2.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== @@ -7403,6 +7557,15 @@ fs-extra@^11.1.1, fs-extra@^11.2.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.3.3: + version "11.3.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.3.tgz#a27da23b72524e81ac6c3815cc0179b8c74c59ee" + integrity sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -7438,21 +7601,11 @@ fsevents@2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@^2.3.3, fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -7482,6 +7635,11 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-east-asian-width@^1.0.0, get-east-asian-width@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz#ce7008fe345edcf5497a6f557cfa54bc318a9ce7" + integrity sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA== + get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" @@ -7648,10 +7806,19 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^10.3.4: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== +"glob@^10.2.2 || ^11.0.3 || ^12.0.0 || ^13.0.0": + version "13.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.6.tgz#078666566a425147ccacfbd2e332deb66a2be71d" + integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw== + dependencies: + minimatch "^10.2.2" + minipass "^7.1.3" + path-scurry "^2.0.2" + +glob@^10.3.10: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" @@ -7681,7 +7848,7 @@ glob@^13.0.0, glob@^13.0.3: minipass "^7.1.2" path-scurry "^2.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -7783,7 +7950,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -8172,7 +8339,7 @@ import-local@3.1.0: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -import-local@^3.0.2: +import-local@^3.0.2, import-local@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== @@ -8203,7 +8370,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -8272,11 +8439,6 @@ interface-store@^6.0.0: resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -8415,7 +8577,7 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-generator-fn@^2.0.0: +is-generator-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== @@ -8439,6 +8601,11 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-interactive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -8488,11 +8655,6 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" @@ -8559,6 +8721,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-unicode-supported@^2.0.0, is-unicode-supported@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -8630,7 +8797,7 @@ istanbul-lib-instrument@^4.0.3: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -8682,6 +8849,15 @@ istanbul-lib-source-maps@^4.0.0, istanbul-lib-source-maps@^4.0.1: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" +istanbul-lib-source-maps@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" + integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== + dependencies: + "@jridgewell/trace-mapping" "^0.3.23" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + istanbul-reports@^3.0.2, istanbul-reports@^3.0.5, istanbul-reports@^3.1.3: version "3.1.7" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" @@ -8810,18 +8986,24 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" -jasmine-core@^4.1.0, jasmine-core@^4.6.0: +jasmine-core@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-4.6.1.tgz#5ebb8afa07282078f8d7b15871737a83b74e58f2" integrity sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ== -jasmine@4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-4.6.0.tgz#2ecde288da25815c67897bb9b9b91f6709880ce1" - integrity sha512-iq7HQ5M8ydNUspjd9vbFW9Lu+6lQ1QLDIqjl0WysEllF5EJZy8XaUyNlhCJVwOx2YFzqTtARWbS56F/f0PzRFw== +jasmine-core@~6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-6.0.1.tgz#c3f22635d54e6a8316e1bc5c7e7008fe5a94df95" + integrity sha512-gUtzV5ASR0MLBwDNqri4kBsgKNCcRQd9qOlNw/w/deavD0cl3JmWXXfH8JhKM4LTg6LPTt2IOQ4px3YYfgh2Xg== + +jasmine@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-6.0.0.tgz#533a66b644b171596942fd22757c90e5708fd72d" + integrity sha512-eSPL6LPWT39WwvHSEEbRXuSvioXMTheNhIPaeUT1OPmSprDZwj4S29884DkTx6/tyiOWTWB1N+LdW2ZSg74aEA== dependencies: - glob "^7.1.6" - jasmine-core "^4.6.0" + "@jasminejs/reporters" "^1.0.0" + glob "^10.2.2 || ^11.0.3 || ^12.0.0 || ^13.0.0" + jasmine-core "~6.0.0" javascript-natural-sort@^0.7.1: version "0.7.1" @@ -8836,87 +9018,88 @@ jest-canvas-mock@2.5.2: cssfontparser "^1.2.1" moo-color "^1.0.2" -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== +jest-changed-files@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-30.2.0.tgz#602266e478ed554e1e1469944faa7efd37cee61c" + integrity sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ== dependencies: - execa "^5.0.0" - jest-util "^29.7.0" + execa "^5.1.1" + jest-util "30.2.0" p-limit "^3.1.0" -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== +jest-circus@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-30.2.0.tgz#98b8198b958748a2f322354311023d1d02e7603f" + integrity sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg== dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/environment" "30.2.0" + "@jest/expect" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/types" "30.2.0" "@types/node" "*" - chalk "^4.0.0" + chalk "^4.1.2" co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" + dedent "^1.6.0" + is-generator-fn "^2.1.0" + jest-each "30.2.0" + jest-matcher-utils "30.2.0" + jest-message-util "30.2.0" + jest-runtime "30.2.0" + jest-snapshot "30.2.0" + jest-util "30.2.0" p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" + pretty-format "30.2.0" + pure-rand "^7.0.0" slash "^3.0.0" - stack-utils "^2.0.3" + stack-utils "^2.0.6" -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== +jest-cli@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-30.2.0.tgz#1780f8e9d66bf84a10b369aea60aeda7697dcc67" + integrity sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA== dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" + "@jest/core" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/types" "30.2.0" + chalk "^4.1.2" + exit-x "^0.2.2" + import-local "^3.2.0" + jest-config "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" + yargs "^17.7.2" -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== +jest-config@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-30.2.0.tgz#29df8c50e2ad801cc59c406b50176c18c362a90b" + integrity sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA== dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" + "@babel/core" "^7.27.4" + "@jest/get-type" "30.1.0" + "@jest/pattern" "30.0.1" + "@jest/test-sequencer" "30.2.0" + "@jest/types" "30.2.0" + babel-jest "30.2.0" + chalk "^4.1.2" + ci-info "^4.2.0" + deepmerge "^4.3.1" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-circus "30.2.0" + jest-docblock "30.2.0" + jest-environment-node "30.2.0" + jest-regex-util "30.0.1" + jest-resolve "30.2.0" + jest-runner "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" + micromatch "^4.0.8" parse-json "^5.2.0" - pretty-format "^29.7.0" + pretty-format "30.2.0" slash "^3.0.0" strip-json-comments "^3.1.1" -"jest-diff@>=30.0.0 < 31", jest-diff@^30.0.2: +jest-diff@30.2.0, "jest-diff@>=30.0.0 < 31", jest-diff@^30.0.2: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.2.0.tgz#e3ec3a6ea5c5747f605c9e874f83d756cba36825" integrity sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A== @@ -8936,23 +9119,23 @@ jest-diff@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== +jest-docblock@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-30.2.0.tgz#42cd98d69f887e531c7352309542b1ce4ee10256" + integrity sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA== dependencies: - detect-newline "^3.0.0" + detect-newline "^3.1.0" -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== +jest-each@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-30.2.0.tgz#39e623ae71641c2ac3ee69b3ba3d258fce8e768d" + integrity sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ== dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" + "@jest/get-type" "30.1.0" + "@jest/types" "30.2.0" + chalk "^4.1.2" + jest-util "30.2.0" + pretty-format "30.2.0" jest-environment-jsdom@30.2.0: version "30.2.0" @@ -8965,41 +9148,41 @@ jest-environment-jsdom@30.2.0: "@types/node" "*" jsdom "^26.1.0" -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== +jest-environment-node@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-30.2.0.tgz#3def7980ebd2fd86e74efd4d2e681f55ab38da0f" + integrity sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA== dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/environment" "30.2.0" + "@jest/fake-timers" "30.2.0" + "@jest/types" "30.2.0" "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" + jest-mock "30.2.0" + jest-util "30.2.0" + jest-validate "30.2.0" jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== +jest-haste-map@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-30.2.0.tgz#808e3889f288603ac70ff0ac047598345a66022e" + integrity sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw== dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" + "@jest/types" "30.2.0" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" + anymatch "^3.1.3" + fb-watchman "^2.0.2" + graceful-fs "^4.2.11" + jest-regex-util "30.0.1" + jest-util "30.2.0" + jest-worker "30.2.0" + micromatch "^4.0.8" walker "^1.0.8" optionalDependencies: - fsevents "^2.3.2" + fsevents "^2.3.3" jest-junit@16.0.0: version "16.0.0" @@ -9011,13 +9194,23 @@ jest-junit@16.0.0: uuid "^8.3.2" xml "^1.0.1" -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== +jest-leak-detector@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz#292fdca7b7c9cf594e1e570ace140b01d8beb736" + integrity sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ== dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" + "@jest/get-type" "30.1.0" + pretty-format "30.2.0" + +jest-matcher-utils@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz#69a0d4c271066559ec8b0d8174829adc3f23a783" + integrity sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg== + dependencies: + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + jest-diff "30.2.0" + pretty-format "30.2.0" jest-matcher-utils@^29.7.0: version "29.7.0" @@ -9068,16 +9261,7 @@ jest-mock@30.2.0: "@types/node" "*" jest-util "30.2.0" -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: +jest-pnp-resolver@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== @@ -9087,114 +9271,110 @@ jest-regex-util@30.0.1: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.0.1.tgz#f17c1de3958b67dfe485354f5a10093298f2a49b" integrity sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA== -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== +jest-resolve-dependencies@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz#3370e2c0b49cc560f6a7e8ec3a59dd99525e1a55" + integrity sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w== dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" + jest-regex-util "30.0.1" + jest-snapshot "30.2.0" -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== +jest-resolve@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-30.2.0.tgz#2e2009cbd61e8f1f003355d5ec87225412cebcd7" + integrity sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A== dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" + jest-pnp-resolver "^1.2.3" + jest-util "30.2.0" + jest-validate "30.2.0" slash "^3.0.0" + unrs-resolver "^1.7.11" -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== +jest-runner@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-30.2.0.tgz#c62b4c3130afa661789705e13a07bdbcec26a114" + integrity sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ== dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/console" "30.2.0" + "@jest/environment" "30.2.0" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" "@types/node" "*" - chalk "^4.0.0" + chalk "^4.1.2" emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-docblock "30.2.0" + jest-environment-node "30.2.0" + jest-haste-map "30.2.0" + jest-leak-detector "30.2.0" + jest-message-util "30.2.0" + jest-resolve "30.2.0" + jest-runtime "30.2.0" + jest-util "30.2.0" + jest-watcher "30.2.0" + jest-worker "30.2.0" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" +jest-runtime@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-30.2.0.tgz#395ea792cde048db1b0cd1a92dc9cb9f1921bf8a" + integrity sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg== + dependencies: + "@jest/environment" "30.2.0" + "@jest/fake-timers" "30.2.0" + "@jest/globals" "30.2.0" + "@jest/source-map" "30.0.1" + "@jest/test-result" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" + chalk "^4.1.2" + cjs-module-lexer "^2.1.0" + collect-v8-coverage "^1.0.2" + glob "^10.3.10" + graceful-fs "^4.2.11" + jest-haste-map "30.2.0" + jest-message-util "30.2.0" + jest-mock "30.2.0" + jest-regex-util "30.0.1" + jest-resolve "30.2.0" + jest-snapshot "30.2.0" + jest-util "30.2.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" +jest-snapshot@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-30.2.0.tgz#266fbbb4b95fc4665ce6f32f1f38eeb39f4e26d0" + integrity sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA== + dependencies: + "@babel/core" "^7.27.4" + "@babel/generator" "^7.27.5" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/types" "^7.27.3" + "@jest/expect-utils" "30.2.0" + "@jest/get-type" "30.1.0" + "@jest/snapshot-utils" "30.2.0" + "@jest/transform" "30.2.0" + "@jest/types" "30.2.0" + babel-preset-current-node-syntax "^1.2.0" + chalk "^4.1.2" + expect "30.2.0" + graceful-fs "^4.2.11" + jest-diff "30.2.0" + jest-matcher-utils "30.2.0" + jest-message-util "30.2.0" + jest-util "30.2.0" + pretty-format "30.2.0" + semver "^7.7.2" + synckit "^0.11.8" jest-util@30.2.0: version "30.2.0" @@ -9220,60 +9400,61 @@ jest-util@^29.7.0: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== +jest-validate@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-30.2.0.tgz#273eaaed4c0963b934b5b31e96289edda6e0a2ef" + integrity sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw== dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" + "@jest/get-type" "30.1.0" + "@jest/types" "30.2.0" + camelcase "^6.3.0" + chalk "^4.1.2" leven "^3.1.0" - pretty-format "^29.7.0" + pretty-format "30.2.0" -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== +jest-watcher@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-30.2.0.tgz#f9c055de48e18c979e7756a3917e596e2d69b07b" + integrity sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg== dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/test-result" "30.2.0" + "@jest/types" "30.2.0" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" + jest-util "30.2.0" + string-length "^4.0.2" -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== +jest-worker@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.2.0.tgz#fd5c2a36ff6058ec8f74366ec89538cc99539d26" + integrity sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g== dependencies: "@types/node" "*" + "@ungap/structured-clone" "^1.3.0" + jest-util "30.2.0" merge-stream "^2.0.0" - supports-color "^8.0.0" + supports-color "^8.1.1" -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" - jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== +jest@30.2.0: + version "30.2.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-30.2.0.tgz#9f0a71e734af968f26952b5ae4b724af82681630" + integrity sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A== dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" + "@jest/core" "30.2.0" + "@jest/types" "30.2.0" + import-local "^3.2.0" + jest-cli "30.2.0" jiti@^1.20.0: version "1.21.6" @@ -9505,13 +9686,6 @@ karma-junit-reporter@2.0.1: path-is-absolute "^1.0.0" xmlbuilder "12.0.0" -karma-mocha@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" - integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== - dependencies: - minimist "^1.2.3" - karma-spec-reporter@0.0.36: version "0.0.36" resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.36.tgz#c54dc155dec2ded1f92ea68dbbdd67fcedbef350" @@ -9570,11 +9744,6 @@ kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - known-css-properties@^0.29.0: version "0.29.0" resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.29.0.tgz#e8ba024fb03886f23cb882e806929f32d814158f" @@ -9728,13 +9897,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -linkify-it@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" - integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== - dependencies: - uc.micro "^2.0.0" - lint-staged@13.3.0: version "13.3.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" @@ -9751,11 +9913,6 @@ lint-staged@13.3.0: string-argv "0.3.2" yaml "2.3.1" -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== - listr2@6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" @@ -9880,12 +10037,12 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.23, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.15: +lodash@4.17.23, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.23: version "4.17.23" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== -log-symbols@^4.0.0, log-symbols@^4.1.0: +log-symbols@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -9893,6 +10050,14 @@ log-symbols@^4.0.0, log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-symbols@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-7.0.1.tgz#f52e68037d96f589fc572ff2193dc424d48c195b" + integrity sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg== + dependencies: + is-unicode-supported "^2.0.0" + yoctocolors "^2.1.1" + log-update@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" @@ -9966,11 +10131,6 @@ lru-cache@^7.5.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - make-dir@4.0.0, make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -10056,18 +10216,6 @@ map-obj@^4.0.0, map-obj@^4.1.0, map-obj@^4.3.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -markdown-it@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" - integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== - dependencies: - argparse "^2.0.1" - entities "^4.4.0" - linkify-it "^5.0.0" - mdurl "^2.0.0" - punycode.js "^2.3.1" - uc.micro "^2.1.0" - markdown-table@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" @@ -10108,11 +10256,6 @@ mdn-data@2.0.30: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== -mdurl@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" - integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -10269,6 +10412,11 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -10291,6 +10439,13 @@ minimatch@10.1.1: dependencies: "@isaacs/brace-expansion" "^5.0.0" +minimatch@10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.2.tgz#6c3f289f9de66d628fa3feb1842804396a43d81c" + integrity sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw== + dependencies: + "@isaacs/brace-expansion" "^5.0.1" + minimatch@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" @@ -10305,6 +10460,13 @@ minimatch@^10.0.3, minimatch@^10.1.1, minimatch@^10.2.1: dependencies: brace-expansion "^5.0.2" +minimatch@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.2.tgz#361603ee323cfb83496fea2ae17cc44ea4e1f99f" + integrity sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw== + dependencies: + brace-expansion "^5.0.2" + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -10312,27 +10474,20 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.6: +minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: +minimatch@^9.0.3, minimatch@^9.0.4: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" -minimatch@~3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== - dependencies: - brace-expansion "^1.1.7" - minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -10342,7 +10497,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -10416,6 +10571,11 @@ minipass@^3.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +minipass@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + minizlib@^3.0.1, minizlib@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" @@ -10428,7 +10588,7 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -"mkdirp@>=0.5 0", mkdirp@^0.5.5: +mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -10440,32 +10600,6 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mocha@10.8.2: - version "10.8.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" - integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== - dependencies: - ansi-colors "^4.1.3" - browser-stdout "^1.3.1" - chokidar "^3.5.3" - debug "^4.3.5" - diff "^5.2.0" - escape-string-regexp "^4.0.0" - find-up "^5.0.0" - glob "^8.1.0" - he "^1.2.0" - js-yaml "^4.1.0" - log-symbols "^4.1.0" - minimatch "^5.1.6" - ms "^2.1.3" - serialize-javascript "^6.0.2" - strip-json-comments "^3.1.1" - supports-color "^8.1.1" - workerpool "^6.5.1" - yargs "^16.2.0" - yargs-parser "^20.2.9" - yargs-unparser "^2.0.0" - modify-values@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -10557,6 +10691,11 @@ napi-build-utils@^2.0.0: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== +napi-postinstall@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" + integrity sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -11023,6 +11162,13 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + onnxruntime-common@1.17.1: version "1.17.1" resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.17.1.tgz#1d3cfcfe56f9a5fc2ef5530c8e8723c86708a290" @@ -11099,20 +11245,19 @@ ora@5.3.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" +ora@^9.1.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-9.3.0.tgz#187c87cc1062350f549f481de32bf91424c2b0e3" + integrity sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw== + dependencies: + chalk "^5.6.2" + cli-cursor "^5.0.0" + cli-spinners "^3.2.0" + is-interactive "^2.0.0" + is-unicode-supported "^2.1.0" + log-symbols "^7.0.1" + stdin-discarder "^0.3.1" + string-width "^8.1.0" oxc-parser@0.74.0: version "0.74.0" @@ -11535,6 +11680,14 @@ path-scurry@^2.0.0: lru-cache "^11.0.0" minipass "^7.1.2" +path-scurry@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" + integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-to-regexp@0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" @@ -11631,10 +11784,10 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +pirates@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@4.2.0, pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" @@ -12311,14 +12464,6 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - promzard@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-2.0.0.tgz#03ad0e4db706544dfdd4f459281f13484fc10c49" @@ -12384,11 +12529,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode.js@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" - integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== - punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -12417,10 +12557,10 @@ puppeteer@13.7.0: unbzip2-stream "1.4.3" ws "8.5.0" -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== +pure-rand@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-7.0.1.tgz#6f53a5a9e3e4a47445822af96821ca509ed37566" + integrity sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== qjobs@^1.2.0: version "1.2.0" @@ -12606,7 +12746,7 @@ read@^4.0.0: dependencies: mute-stream "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: +readable-stream@^2.0.1, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -12642,13 +12782,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -12818,12 +12951,7 @@ resolve.exports@2.0.3: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@~1.22.1, resolve@~1.22.2: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@~1.22.1, resolve@~1.22.2: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -12857,6 +12985,14 @@ restore-cursor@^4.0.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + dependencies: + onetime "^7.0.0" + signal-exit "^4.1.0" + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -12877,13 +13013,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== -rimraf@2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -12891,6 +13020,13 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^6.1.2: version "6.1.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.1.3.tgz#afbee236b3bd2be331d4e7ce4493bac1718981af" @@ -13120,11 +13256,6 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -13166,22 +13297,21 @@ shell-quote@^1.8.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -shelljs@0.8.5, shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== +shelljs@0.10.0, shelljs@0.8.5, shelljs@^0.9.2: + version "0.10.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.10.0.tgz#e3bbae99b0f3f0cc5dce05b46a346fae2090e883" + integrity sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw== dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" + execa "^5.1.1" + fast-glob "^3.3.2" -shx@0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.4.tgz#74289230b4b663979167f94e1935901406e40f02" - integrity sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g== +shx@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/shx/-/shx-0.4.0.tgz#c6ea6ace7e778da0ab32d2eab9def59d788e9336" + integrity sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA== dependencies: - minimist "^1.2.3" - shelljs "^0.8.5" + minimist "^1.2.8" + shelljs "^0.9.2" side-channel-list@^1.0.0: version "1.0.0" @@ -13279,11 +13409,6 @@ sirv@^2.0.3: mrmime "^2.0.0" totalist "^3.0.0" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -13540,6 +13665,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +stdin-discarder@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.3.1.tgz#92a1e741e709248865d0562bb7babe84d350ae6a" + integrity sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA== + stream-browserify@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" @@ -13562,7 +13692,7 @@ string-argv@0.3.2, string-argv@~0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== -string-length@^4.0.1: +string-length@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== @@ -13597,6 +13727,23 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string-width@^7.0.0, string-width@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +string-width@^8.1.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.2.0.tgz#bdb6a9bd6d7800db635adae96cdb0443fec56c42" + integrity sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw== + dependencies: + get-east-asian-width "^1.5.0" + strip-ansi "^7.1.2" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -13632,6 +13779,13 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-ansi@^7.1.0, strip-ansi@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -13817,6 +13971,13 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +synckit@^0.11.8: + version "0.11.12" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.12.tgz#abe74124264fbc00a48011b0d98bdc1cffb64a7b" + integrity sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ== + dependencies: + "@pkgr/core" "^0.2.9" + table@^6.8.1: version "6.8.2" resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" @@ -14068,11 +14229,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - tree-dump@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.2.tgz#c460d5921caeb197bde71d0e9a7b479848c5b8ac" @@ -14142,7 +14298,7 @@ tslib@^2.0.0, tslib@^2.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== @@ -14238,42 +14394,31 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typedoc@0.28.15: - version "0.28.15" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.28.15.tgz#667faf77eb934deb935fbfd5108a6de5f953948f" - integrity sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg== - dependencies: - "@gerrit0/mini-shiki" "^3.17.0" - lunr "^2.3.9" - markdown-it "^14.1.0" - minimatch "^9.0.5" - yaml "^2.8.1" - -typescript@5.5.4, typescript@^5.2.2: +typescript@5.5.4: version "5.5.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== -typescript@5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" - integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== +typescript@5.8.2: + version "5.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== "typescript@>=3 < 6": version "5.6.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== +typescript@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== + ua-parser-js@^0.7.30: version "0.7.38" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.38.tgz#f497d8a4dc1fec6e854e5caa4b2f9913422ef054" integrity sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA== -uc.micro@^2.0.0, uc.micro@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" - integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== - uglify-js@^3.1.4: version "3.19.2" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.2.tgz#319ae26a5fbd18d03c7dc02496cfa1d6f1cd4307" @@ -14400,27 +14545,38 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +unrs-resolver@^1.7.11: + version "1.11.1" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz#be9cd8686c99ef53ecb96df2a473c64d304048a9" + integrity sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg== + dependencies: + napi-postinstall "^0.3.0" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.11.1" + "@unrs/resolver-binding-android-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-arm64" "1.11.1" + "@unrs/resolver-binding-darwin-x64" "1.11.1" + "@unrs/resolver-binding-freebsd-x64" "1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-arm64-musl" "1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl" "1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-gnu" "1.11.1" + "@unrs/resolver-binding-linux-x64-musl" "1.11.1" + "@unrs/resolver-binding-wasm32-wasi" "1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc" "1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" + "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" + untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -unzipper@0.10.14: - version "0.10.14" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" - integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - upath@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" @@ -14843,11 +14999,6 @@ worker-loader@3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -workerpool@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" - integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -14884,6 +15035,15 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" +wrap-ansi@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" + integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -14916,14 +15076,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - write-file-atomic@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-6.0.0.tgz#e9c89c8191b3ef0606bc79fb92681aa1aa16fa93" @@ -15042,7 +15194,7 @@ yaml@2.3.1: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== -yaml@^2.6.0, yaml@^2.8.1: +yaml@^2.6.0: version "2.8.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== @@ -15065,17 +15217,12 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^20.2.9: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" +yargs-parser@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-22.0.0.tgz#87b82094051b0567717346ecd00fd14804b357c8" + integrity sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw== -yargs@17.7.2, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: +yargs@17.7.2, yargs@^17.6.2, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -15118,6 +15265,18 @@ yargs@^16.1.1, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-18.0.0.tgz#6c84259806273a746b09f579087b68a3c2d25bd1" + integrity sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg== + dependencies: + cliui "^9.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + string-width "^7.2.0" + y18n "^5.0.5" + yargs-parser "^22.0.0" + yauzl@^2.10.0, yauzl@^2.4.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -15146,6 +15305,11 @@ yoctocolors-cjs@^2.1.3: resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== +yoctocolors@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.2.tgz#d795f54d173494e7d8db93150cec0ed7f678c83a" + integrity sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug== + zstddec@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.1.0.tgz#7050f3f0e0c3978562d0c566b3e5a427d2bad7ec" From 915244d121d6eccb5ce3b3f5abaa976669c64c22 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 20 Feb 2026 21:15:52 +0000 Subject: [PATCH 21/90] chore(version): Update package versions to 4.17.1 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 71 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2eb66bf04a..f142f39b8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +### Bug Fixes + +- **security:** Changes in response to CVE-2026-26996 ([#2622](https://github.com/cornerstonejs/cornerstone3D/issues/2622)) ([97df707](https://github.com/cornerstonejs/cornerstone3D/commit/97df707a1035c7bd77545c54df8d1bef9cfab603)) + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) ### Features diff --git a/commit.txt b/commit.txt index f8aeff30a9..6f868c0d5e 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -de1a72a0a0da368e87666cdc61ed605058ec982a \ No newline at end of file +97df707a1035c7bd77545c54df8d1bef9cfab603 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 586d61d2bb..8643d41e21 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.17.0", + "version": "4.17.1", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 17723a283b..2aa4daab65 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/adapters + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index bd0a17af78..d95b2ba1c6 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.17.0", + "version": "4.17.1", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0" + "@cornerstonejs/core": "4.17.1", + "@cornerstonejs/tools": "4.17.1" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 33083773a5..20f84db77f 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/ai + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 7d6dbbfdbf..980d50f81e 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.17.0", + "version": "4.17.1", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0" + "@cornerstonejs/core": "4.17.1", + "@cornerstonejs/tools": "4.17.1" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index a7a362c720..25f9d2726f 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/core + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index b09678dd84..aa528e4afb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.17.0", + "version": "4.17.1", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 3300e7406f..9a6c59edca 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 2191de454a..8d0ef2560d 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.17.0", + "version": "4.17.1", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/core": "4.17.1", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index ea06ce67ec..872c5ed2ef 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index d6defc439c..2df09ef06c 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.17.0", + "version": "4.17.1", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0", + "@cornerstonejs/core": "4.17.1", + "@cornerstonejs/tools": "4.17.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 2f2440a76e..ee0dd15ac5 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 31f036725f..0a2bf9cbd2 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.17.0", + "version": "4.17.1", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0" + "@cornerstonejs/core": "4.17.1" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index f1ffe9b037..76457404fe 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 500b740fee..fe0fbb6161 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.17.0", + "version": "4.17.1", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0", + "@cornerstonejs/core": "4.17.1", + "@cornerstonejs/tools": "4.17.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index bd7e2afc6d..0424bf5cdf 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/tools + # [4.17.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.16.4...v4.17.0) (2026-02-18) ### Features diff --git a/packages/tools/package.json b/packages/tools/package.json index c55331a195..22cdcbdfbf 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.17.0", + "version": "4.17.1", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/core": "4.17.1", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index d31d0ab0f8..9475b75a3e 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.0'; +export const version = '4.17.1'; diff --git a/version.json b/version.json index 996d5138f4..6697c8e828 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.17.0", - "commit": "de1a72a0a0da368e87666cdc61ed605058ec982a" + "version": "4.17.1", + "commit": "97df707a1035c7bd77545c54df8d1bef9cfab603" } \ No newline at end of file diff --git a/version.txt b/version.txt index 8643e72279..331b258ffe 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.17.0 \ No newline at end of file +4.17.1 \ No newline at end of file From c2ee3d58d6aeb67d10c2cad37b471b00700e3b07 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 20 Feb 2026 17:48:07 -0500 Subject: [PATCH 22/90] fix: annotations text box limitations (#2617) * refactor: update getTextBoxCoordsCanvas function to accept element and textLines parameters for improved textbox placement across multiple annotation tools * fix: correct bounding box calculations in _drawTextGroup function to accurately reflect text box position and size * feat: implement text box overlap management with registry for improved placement accuracy - Added a text box overlap registry to track rendered text box positions. - Integrated overlap avoidance logic in getTextBoxCoordsCanvas to prevent occlusion of existing text boxes. - Updated draw and drawTextBox functions to clear and register text boxes during rendering. * refactor: enhance overlap detection in getTextBoxCoordsCanvas using AABB intersection - Replaced the previous rectangle overlap logic with a more accurate AABB intersection method. - Introduced a new utility function to convert text box rectangles to AABB format, allowing for better handling of overlap checks. - Updated the overlap detection functions to utilize the new intersection logic for improved accuracy in text box placement. * test: add unit tests for getTextBoxCoordsCanvas to validate positioning logic - Introduced a new test suite for getTextBoxCoordsCanvas to ensure correct coordinate calculations for text boxes. - Added tests for default positioning, overlap handling, and fallback mechanisms when space is limited. - Utilized a mock viewport element to simulate various scenarios for accurate testing. * style: format getTextBoxCoordsCanvas test cases for improved readability - Reformatted the test cases in getTextBoxCoordsCanvas.spec.ts to enhance code clarity. - Adjusted the indentation and line breaks for better visual structure without altering functionality. * refactor: update type assertions in getTextBoxCoordsCanvas tests for better type safety - Changed type assertions from any to unknown in getTextBoxCoordsCanvas test cases to enhance type safety and maintain code quality. - Ensured consistency in type handling across the test suite without altering existing functionality. * refactor: remove unnecessary type assertions in getTextBoxCoordsCanvas tests - Updated test cases in getTextBoxCoordsCanvas.spec.ts to eliminate type assertions from unknown to the actual type for annotationPoints and related variables. - Improved code clarity and type safety without changing the existing functionality of the tests. * chore: update tsconfig.json to exclude test files from compilation - Added an "exclude" property to tsconfig.json to prevent test files from being included in the TypeScript compilation process. - This change helps streamline the build process by omitting unnecessary test files. * refactor: integrate getTextBoxCoordsCanvas into ArrowAnnotateTool for improved text box positioning - Replaced direct canvas coordinate assignment with a call to getTextBoxCoordsCanvas to enhance the accuracy of text box placement. - This change ensures that text box coordinates are calculated based on the current canvas state and element, improving overall annotation functionality. * refactor: streamline text box rendering across annotation tools - Replaced direct text box rendering logic with a unified renderLinkedTextBoxAnnotation method in multiple annotation tools. - This change enhances code maintainability and consistency in text box visibility and positioning logic. - Improved handling of text box state and coordinates, ensuring better integration with existing annotation functionalities. --------- Co-authored-by: Bill Wallace --- packages/tools/src/drawingSvg/draw.ts | 7 + packages/tools/src/drawingSvg/drawTextBox.ts | 20 +- .../tools/src/tools/annotation/AngleTool.ts | 64 ++--- .../src/tools/annotation/ArrowAnnotateTool.ts | 57 +---- .../src/tools/annotation/BidirectionalTool.ts | 61 +---- .../src/tools/annotation/CircleROITool.ts | 64 +---- .../src/tools/annotation/CobbAngleTool.ts | 68 ++--- .../src/tools/annotation/EllipticalROITool.ts | 63 +---- .../tools/src/tools/annotation/HeightTool.ts | 69 ++--- .../tools/src/tools/annotation/LengthTool.ts | 60 +---- .../tools/annotation/LivewireContourTool.ts | 64 ++--- .../tools/annotation/PlanarFreehandROITool.ts | 40 +-- .../tools/src/tools/annotation/ProbeTool.ts | 12 +- .../src/tools/annotation/RectangleROITool.ts | 59 +---- .../src/tools/annotation/SplineROITool.ts | 60 ++--- .../annotation/UltrasoundDirectionalTool.ts | 64 ++--- .../tools/src/tools/base/AnnotationTool.ts | 109 ++++++++ .../CircleROIStartEndThresholdTool.ts | 65 ++--- .../RectangleROIStartEndThresholdTool.ts | 59 +---- .../segmentation/SegmentBidirectionalTool.ts | 63 +---- .../drawing/getTextBoxCoordsCanvas.spec.ts | 107 ++++++++ .../drawing/getTextBoxCoordsCanvas.ts | 240 +++++++++++++++++- .../drawing/textBoxOverlapRegistry.ts | 60 +++++ packages/tools/tsconfig.json | 3 +- 24 files changed, 750 insertions(+), 788 deletions(-) create mode 100644 packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts create mode 100644 packages/tools/src/utilities/drawing/textBoxOverlapRegistry.ts diff --git a/packages/tools/src/drawingSvg/draw.ts b/packages/tools/src/drawingSvg/draw.ts index 4ee257ee87..5e1387748f 100644 --- a/packages/tools/src/drawingSvg/draw.ts +++ b/packages/tools/src/drawingSvg/draw.ts @@ -1,5 +1,6 @@ import type { SVGDrawingHelper } from '../types'; import getSvgDrawingHelper from './getSvgDrawingHelper'; +import { clearTextBoxRegistry } from '../utilities/drawing/textBoxOverlapRegistry'; function draw( element: HTMLDivElement, @@ -7,6 +8,12 @@ function draw( ): void { const svgDrawingHelper = getSvgDrawingHelper(element); + // Reset the text-box overlap registry so that placements computed in this + // frame only consider boxes drawn within the same frame. + if (svgDrawingHelper.svgLayerElement) { + clearTextBoxRegistry(svgDrawingHelper.svgLayerElement); + } + // Save... fn(svgDrawingHelper); // Restore... diff --git a/packages/tools/src/drawingSvg/drawTextBox.ts b/packages/tools/src/drawingSvg/drawTextBox.ts index a58ef020bd..5be7c099d6 100644 --- a/packages/tools/src/drawingSvg/drawTextBox.ts +++ b/packages/tools/src/drawingSvg/drawTextBox.ts @@ -3,6 +3,7 @@ import type { SVGDrawingHelper } from '../types'; import _getHash from './_getHash'; import setAttributesIfNecessary from './setAttributesIfNecessary'; +import { registerTextBox } from '../utilities/drawing/textBoxOverlapRegistry'; /** * Draws a textBox. @@ -43,6 +44,11 @@ function drawTextBox( mergedOptions ); + // Register this text box so future placements can avoid overlapping it. + if (svgDrawingHelper.svgLayerElement) { + registerTextBox(svgDrawingHelper.svgLayerElement, textGroupBoundingBox); + } + return textGroupBoundingBox; } @@ -146,14 +152,14 @@ function _drawTextGroup( textGroupBoundingBox = _drawTextBackground(textGroup, backgroundStyles); } - // We translate the group using `position` - // which means we also need to pluck those values when returning - // the bounding box + // `getBBox()` is returned in the group's local coordinates and does not include + // the group's translate transform, so we offset x/y manually. Keep width/height + // as-is to reflect the actual rendered text box size for link anchoring. return Object.assign({}, textGroupBoundingBox, { - x, - y, - height: textGroupBoundingBox.height + padding, - width: textGroupBoundingBox.width + padding, + x: x + textGroupBoundingBox.x, + y: y + textGroupBoundingBox.y, + height: textGroupBoundingBox.height, + width: textGroupBoundingBox.width, }); } diff --git a/packages/tools/src/tools/annotation/AngleTool.ts b/packages/tools/src/tools/annotation/AngleTool.ts index 33377957bb..dccf86f778 100644 --- a/packages/tools/src/tools/annotation/AngleTool.ts +++ b/packages/tools/src/tools/annotation/AngleTool.ts @@ -19,7 +19,6 @@ import angleBetweenLines from '../../utilities/math/angle/angleBetweenLines'; import { drawHandles as drawHandlesSvg, drawLine as drawLineSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, drawPath as drawPathSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; @@ -827,55 +826,24 @@ class AngleTool extends AnnotationTool { continue; } - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); - - if (!data.handles.textBox.hasMoved) { - // linked to the vertex by default - const canvasTextBoxCoords = canvasCoordinates[1]; - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + const vertexAnchor: Types.Point2[] = [ + canvasCoordinates[1], + canvasCoordinates[1], + ]; + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + placementPoints: vertexAnchor, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/annotation/ArrowAnnotateTool.ts b/packages/tools/src/tools/annotation/ArrowAnnotateTool.ts index f01812bf8e..c823f55f8b 100644 --- a/packages/tools/src/tools/annotation/ArrowAnnotateTool.ts +++ b/packages/tools/src/tools/annotation/ArrowAnnotateTool.ts @@ -18,7 +18,6 @@ import * as lineSegment from '../../utilities/math/line'; import { drawHandles as drawHandlesSvg, drawArrow as drawArrowSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; @@ -805,54 +804,18 @@ class ArrowAnnotateTool extends AnnotationTool { continue; } - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines: [label], + canvasCoordinates, + }) + ) { continue; } - - // Need to update to sync w/ annotation while unlinked/not moved - if (!data.handles.textBox.hasMoved) { - // linked to the point that doesn't have the arrowhead by default - const canvasTextBoxCoords = canvasCoordinates[1]; - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); - } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - [label], - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/annotation/BidirectionalTool.ts b/packages/tools/src/tools/annotation/BidirectionalTool.ts index 3cca8e9d08..b755474e2e 100644 --- a/packages/tools/src/tools/annotation/BidirectionalTool.ts +++ b/packages/tools/src/tools/annotation/BidirectionalTool.ts @@ -24,13 +24,11 @@ import { import { drawLine as drawLineSvg, drawHandles as drawHandlesSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { ChangeTypes, Events, MeasurementType } from '../../enums'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; import * as lineSegment from '../../utilities/math/line'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import { resetElementCursor, hideElementCursor, @@ -1191,59 +1189,22 @@ class BidirectionalTool extends AnnotationTool { renderStatus = true; - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { continue; } - - let canvasTextBoxCoords; - - if (!data.handles.textBox.hasMoved) { - canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/annotation/CircleROITool.ts b/packages/tools/src/tools/annotation/CircleROITool.ts index 589dce883a..a454b78590 100644 --- a/packages/tools/src/tools/annotation/CircleROITool.ts +++ b/packages/tools/src/tools/annotation/CircleROITool.ts @@ -26,12 +26,10 @@ import { import { drawCircle as drawCircleSvg, drawHandles as drawHandlesSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { ChangeTypes, Events, MeasurementType } from '../../enums'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import { resetElementCursor, hideElementCursor, @@ -781,60 +779,24 @@ class CircleROITool extends AnnotationTool { renderStatus = true; if (this.configuration.calculateStats) { - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { continue; } - - // Poor man's cached? - let canvasTextBoxCoords; - - if (!data.handles.textBox.hasMoved) { - canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCorners); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + const linkAnchorPoints: Types.Point2[] = [center, canvasCoordinates[1]]; + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates: linkAnchorPoints, + placementPoints: canvasCorners, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - [center, canvasCoordinates[1]], - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } } diff --git a/packages/tools/src/tools/annotation/CobbAngleTool.ts b/packages/tools/src/tools/annotation/CobbAngleTool.ts index e183f2bf5a..2a5bc608ba 100644 --- a/packages/tools/src/tools/annotation/CobbAngleTool.ts +++ b/packages/tools/src/tools/annotation/CobbAngleTool.ts @@ -22,12 +22,10 @@ import { midPoint2 } from '../../utilities/math/midPoint'; import { drawHandles as drawHandlesSvg, drawLine as drawLineSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, drawTextBox as drawTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds'; import { @@ -863,56 +861,26 @@ class CobbAngleTool extends AnnotationTool { continue; } - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); - - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines: textLines ?? [], + canvasCoordinates, + textBoxUID: 'cobbAngleText', + }) + ) { + continue; } - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = 'cobbAngleText'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; - if (this.configuration.showArcLines) { + const textBoxStyleOptions = this.getLinkedTextBoxStyle( + styleSpecifier, + annotation + ); const arc1TextBoxUID = 'arcAngle1'; const arc1TextLine = [ @@ -928,7 +896,7 @@ class CobbAngleTool extends AnnotationTool { arc1TextLine, arch1TextPosCanvas, { - ...options, + ...textBoxStyleOptions, padding: 3, } ); @@ -948,7 +916,7 @@ class CobbAngleTool extends AnnotationTool { arc2TextLine, arch2TextPosCanvas, { - ...options, + ...textBoxStyleOptions, padding: 3, } ); diff --git a/packages/tools/src/tools/annotation/EllipticalROITool.ts b/packages/tools/src/tools/annotation/EllipticalROITool.ts index 20370c737f..7f2f9f59a6 100644 --- a/packages/tools/src/tools/annotation/EllipticalROITool.ts +++ b/packages/tools/src/tools/annotation/EllipticalROITool.ts @@ -29,12 +29,10 @@ import { drawCircle as drawCircleSvg, drawEllipseByCoordinates as drawEllipseSvg, drawHandles as drawHandlesSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { ChangeTypes, Events } from '../../enums'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import getWorldWidthAndHeightFromTwoPoints from '../../utilities/planar/getWorldWidthAndHeightFromTwoPoints'; import { pointInEllipse, @@ -939,60 +937,23 @@ class EllipticalROITool extends AnnotationTool { renderStatus = true; - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { continue; } - - // Poor man's cached? - let canvasTextBoxCoords; - - if (!data.handles.textBox.hasMoved) { - canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCorners); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + placementPoints: canvasCorners, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/annotation/HeightTool.ts b/packages/tools/src/tools/annotation/HeightTool.ts index 5adaa07dfa..70249a7c35 100644 --- a/packages/tools/src/tools/annotation/HeightTool.ts +++ b/packages/tools/src/tools/annotation/HeightTool.ts @@ -21,11 +21,9 @@ import * as lineSegment from '../../utilities/math/line'; import { drawHandles as drawHandlesSvg, drawHeight as drawHeightSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds'; import { @@ -338,8 +336,13 @@ class HeightTool extends AnnotationTool { const eventDetail = evt.detail; const { element } = eventDetail; - const { annotation, viewportIdsToRender, handleIndex, movingTextBox,newAnnotation } = - this.editData; + const { + annotation, + viewportIdsToRender, + handleIndex, + movingTextBox, + newAnnotation, + } = this.editData; const { data } = annotation; this.createMemo(element, annotation, { newAnnotation }); if (movingTextBox) { @@ -674,55 +677,19 @@ class HeightTool extends AnnotationTool { return renderStatus; } - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); - - // Need to update to sync with annotation while unlinked/not moved - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines: textLines ?? [], + canvasCoordinates, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/annotation/LengthTool.ts b/packages/tools/src/tools/annotation/LengthTool.ts index 878e8279c9..8329263be7 100644 --- a/packages/tools/src/tools/annotation/LengthTool.ts +++ b/packages/tools/src/tools/annotation/LengthTool.ts @@ -26,11 +26,9 @@ import * as lineSegment from '../../utilities/math/line'; import { drawHandles as drawHandlesSvg, drawLine as drawLineSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import triggerAnnotationRenderForViewportIds from '../../utilities/triggerAnnotationRenderForViewportIds'; import { @@ -752,55 +750,19 @@ class LengthTool extends AnnotationTool { return renderStatus; } - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); - - // Need to update to sync with annotation while unlinked/not moved - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines: textLines ?? [], + canvasCoordinates, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/annotation/LivewireContourTool.ts b/packages/tools/src/tools/annotation/LivewireContourTool.ts index fa354aa396..77a212b092 100644 --- a/packages/tools/src/tools/annotation/LivewireContourTool.ts +++ b/packages/tools/src/tools/annotation/LivewireContourTool.ts @@ -10,10 +10,7 @@ import { import type { Types } from '@cornerstonejs/core'; import { removeAnnotation } from '../../stateManagement/annotation/annotationState'; -import { - drawHandles as drawHandlesSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, -} from '../../drawingSvg'; +import { drawHandles as drawHandlesSvg } from '../../drawingSvg'; import { state } from '../../store/state'; import { Events, KeyboardBindings, ChangeTypes } from '../../enums'; import type { @@ -41,7 +38,6 @@ import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters' import ContourSegmentationBaseTool from '../base/ContourSegmentationBaseTool'; import type { AnnotationStyle } from '../../types/AnnotationStyle'; import type { AnnotationModifiedEventDetail } from '../../types/EventTypes'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import { getCalibratedLengthUnitsAndScale, throttle } from '../../utilities'; const CLICK_CLOSE_CURVE_SQR_DIST = 10 ** 2; // px @@ -985,12 +981,7 @@ class LivewireContourTool extends ContourSegmentationBaseTool { this._throttledCalculateCachedStats(annotation, element); } - this._renderStats( - annotation, - viewport, - svgDrawingHelper, - annotationStyle.textbox - ); + this._renderStats(annotation, enabledElement, svgDrawingHelper); return true; } @@ -1100,58 +1091,37 @@ class LivewireContourTool extends ContourSegmentationBaseTool { return cachedStats; }; - private _renderStats = ( - annotation, - viewport, - svgDrawingHelper, - textboxStyle - ) => { + private _renderStats = (annotation, enabledElement, svgDrawingHelper) => { const data = annotation.data; + const { viewport } = enabledElement; const targetId = this.getTargetId(viewport); - if (!data.contour.closed || !textboxStyle.visibility) { + if (!data.contour.closed) { return; } + const styleSpecifier = { + toolGroupId: this.toolGroupId, + toolName: this.getToolName(), + viewportId: enabledElement.viewport.id, + annotationUID: annotation.annotationUID, + }; const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { return; } - const canvasCoordinates = data.handles.points.map((p) => viewport.worldToCanvas(p) ); - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); - } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = 'textBox'; - const boundingBox = drawLinkedTextBoxSvg( + this.renderLinkedTextBoxAnnotation({ + enabledElement, svgDrawingHelper, - annotation.annotationUID ?? '', - textBoxUID, + annotation, + styleSpecifier, textLines, - textBoxPosition, canvasCoordinates, - {}, - textboxStyle - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; + textBoxUID: 'textBox', + }); }; triggerAnnotationModified = ( diff --git a/packages/tools/src/tools/annotation/PlanarFreehandROITool.ts b/packages/tools/src/tools/annotation/PlanarFreehandROITool.ts index 46463beced..26c3aa89a2 100644 --- a/packages/tools/src/tools/annotation/PlanarFreehandROITool.ts +++ b/packages/tools/src/tools/annotation/PlanarFreehandROITool.ts @@ -34,12 +34,10 @@ import type { Statistics, } from '../../types'; import { triggerAnnotationModified } from '../../stateManagement/annotation/helpers/state'; -import { drawLinkedTextBox } from '../../drawingSvg'; import type { ContourAnnotation, PlanarFreehandROIAnnotation, } from '../../types/ToolSpecificAnnotationTypes'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import type { PlanarFreehandROICommonData } from '../../utilities/math/polyline/planarFreehandROIInternalTypes'; import { getLineSegmentIntersectionsCoordinates } from '../../utilities/math/polyline'; @@ -1089,11 +1087,6 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool { annotationUID: annotation.annotationUID, }; - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - return; - } - const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { return; @@ -1102,37 +1095,14 @@ class PlanarFreehandROITool extends ContourSegmentationBaseTool { const canvasCoordinates = data.contour.polyline.map((p) => viewport.worldToCanvas(p) ); - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); - } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBox( + this.renderLinkedTextBoxAnnotation({ + enabledElement, svgDrawingHelper, - annotation.annotationUID ?? '', - textBoxUID, + annotation, + styleSpecifier, textLines, - textBoxPosition, canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; + }); }; } diff --git a/packages/tools/src/tools/annotation/ProbeTool.ts b/packages/tools/src/tools/annotation/ProbeTool.ts index dee48a2ac6..2f2406614f 100644 --- a/packages/tools/src/tools/annotation/ProbeTool.ts +++ b/packages/tools/src/tools/annotation/ProbeTool.ts @@ -24,6 +24,7 @@ import { drawHandles as drawHandlesSvg, drawTextBox as drawTextBoxSvg, } from '../../drawingSvg'; +import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import { state } from '../../store/state'; import { ChangeTypes, Events } from '../../enums'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; @@ -547,10 +548,11 @@ class ProbeTool extends AnnotationTool { const textLines = this.configuration.getTextLines(data, targetId); if (textLines) { - const textCanvasCoordinates = [ - canvasCoordinates[0] + this.configuration.textCanvasOffset.x, - canvasCoordinates[1] + this.configuration.textCanvasOffset.y, - ]; + const textCanvasCoordinates = getTextBoxCoordsCanvas( + [canvasCoordinates], + element, + textLines + ); const textUID = '0'; drawTextBoxSvg( @@ -558,7 +560,7 @@ class ProbeTool extends AnnotationTool { annotationUID, textUID, textLines, - [textCanvasCoordinates[0], textCanvasCoordinates[1]], + textCanvasCoordinates, options ); } diff --git a/packages/tools/src/tools/annotation/RectangleROITool.ts b/packages/tools/src/tools/annotation/RectangleROITool.ts index 9b8e385040..8a2a65855f 100644 --- a/packages/tools/src/tools/annotation/RectangleROITool.ts +++ b/packages/tools/src/tools/annotation/RectangleROITool.ts @@ -23,14 +23,12 @@ import { } from '../../stateManagement/annotation/helpers/state'; import { drawHandles as drawHandlesSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, drawRectByCoordinates as drawRectSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { ChangeTypes, Events } from '../../enums'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; import * as rectangle from '../../utilities/math/rectangle'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import { resetElementCursor, hideElementCursor, @@ -754,57 +752,22 @@ class RectangleROITool extends AnnotationTool { renderStatus = true; - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { continue; } - - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/annotation/SplineROITool.ts b/packages/tools/src/tools/annotation/SplineROITool.ts index 935228c969..3c50d39476 100644 --- a/packages/tools/src/tools/annotation/SplineROITool.ts +++ b/packages/tools/src/tools/annotation/SplineROITool.ts @@ -15,7 +15,6 @@ import { import { drawHandles as drawHandlesSvg, drawPolyline as drawPolylineSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { @@ -37,7 +36,6 @@ import type { import * as math from '../../utilities/math'; import throttle from '../../utilities/throttle'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import { getCalibratedLengthUnitsAndScale } from '../../utilities/getCalibratedUnits'; import getMouseModifierKey from '../../eventDispatchers/shared/getMouseModifier'; @@ -939,12 +937,7 @@ class SplineROITool extends ContourSegmentationBaseTool { ); } - this._renderStats( - annotation, - viewport, - svgDrawingHelper, - annotationStyle.textbox - ); + this._renderStats(annotation, enabledElement, svgDrawingHelper); if (this.fireChangeOnUpdate?.annotationUID === annotationUID) { this.triggerChangeEvent( @@ -1036,58 +1029,37 @@ class SplineROITool extends ContourSegmentationBaseTool { }); } - private _renderStats = ( - annotation, - viewport, - svgDrawingHelper, - textboxStyle - ) => { + private _renderStats = (annotation, enabledElement, svgDrawingHelper) => { const data = annotation.data; + const { viewport } = enabledElement; const targetId = this.getTargetId(viewport); - if (!data.spline.instance.closed || !textboxStyle.visibility) { + if (!data.spline.instance.closed) { return; } + const styleSpecifier = { + toolGroupId: this.toolGroupId, + toolName: this.getToolName(), + viewportId: enabledElement.viewport.id, + annotationUID: annotation.annotationUID, + }; const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { return; } - const canvasCoordinates = data.handles.points.map((p) => viewport.worldToCanvas(p) ); - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); - } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = 'textBox'; - const boundingBox = drawLinkedTextBoxSvg( + this.renderLinkedTextBoxAnnotation({ + enabledElement, svgDrawingHelper, - annotation.annotationUID ?? '', - textBoxUID, + annotation, + styleSpecifier, textLines, - textBoxPosition, canvasCoordinates, - {}, - textboxStyle - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; + textBoxUID: 'textBox', + }); }; addControlPointCallback = ( diff --git a/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts b/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts index 67d6de3171..72056d9b9a 100644 --- a/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts +++ b/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts @@ -22,7 +22,6 @@ import type { UltrasoundDirectionalAnnotation } from '../../types/ToolSpecificAn import { drawHandle as drawHandleSvg, drawLine as drawLineSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { state } from '../../store/state'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; @@ -708,59 +707,28 @@ class UltrasoundDirectionalTool extends AnnotationTool { // draw another line from first point to the - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines( data, targetId, this.configuration ); - - if (!data.handles.textBox.hasMoved) { - // linked to the vertex by default - const canvasTextBoxCoords = canvasCoordinates[1]; - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + const vertexAnchor: Types.Point2[] = [ + canvasCoordinates[1], + canvasCoordinates[1], + ]; + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + placementPoints: vertexAnchor, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/tools/base/AnnotationTool.ts b/packages/tools/src/tools/base/AnnotationTool.ts index ece3491d45..816bf98cc3 100644 --- a/packages/tools/src/tools/base/AnnotationTool.ts +++ b/packages/tools/src/tools/base/AnnotationTool.ts @@ -34,6 +34,9 @@ import type { StyleSpecifier, } from '../../types/AnnotationStyle'; import { triggerAnnotationModified } from '../../stateManagement/annotation/helpers/state'; +import { drawLinkedTextBox } from '../../drawingSvg'; +import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; +import type { SVGDrawingHelper } from '../../types'; import ChangeTypes from '../../enums/ChangeTypes'; import { setAnnotationSelected } from '../../stateManagement/annotation/annotationSelection'; import { addContourSegmentationAnnotation } from '../../utilities/contourSegmentation'; @@ -371,6 +374,112 @@ abstract class AnnotationTool extends AnnotationDisplayTool { }; } + /** + * Renders a linked text box for an annotation using shared visibility, placement, + * and worldBoundingBox logic. Call from renderAnnotation when the tool uses a + * linked text box (e.g. Length, RectangleROI). The caller must supply textLines + * and canvasCoordinates; when text box visibility is off, this method resets + * data.handles.textBox and returns false. + * + * @param options.enabledElement - Cornerstone enabled element + * @param options.svgDrawingHelper - SVG drawing helper + * @param options.annotation - Annotation whose text box to render + * @param options.styleSpecifier - Style specifier for getLinkedTextBoxStyle + * @param options.textLines - Lines to display (caller responsibility to compute/skip when empty) + * @param options.canvasCoordinates - Canvas anchor points for the link line (and for placement when placementPoints omitted) + * @param options.textBoxUID - Optional UID for the text box SVG group (default '1') + * @param options.placementPoints - Optional; when provided, used for getTextBoxCoordsCanvas only (e.g. circle ROI uses corners for placement, center for link) + * @returns true if the text box was drawn, false if visibility was off (textBox was reset) + */ + protected renderLinkedTextBoxAnnotation(options: { + enabledElement: Types.IEnabledElement; + svgDrawingHelper: SVGDrawingHelper; + annotation: Annotation; + styleSpecifier: StyleSpecifier; + textLines: string[]; + canvasCoordinates: Types.Point2[]; + textBoxUID?: string; + placementPoints?: Types.Point2[]; + }): boolean { + const { + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + textBoxUID = '1', + placementPoints, + } = options; + const { viewport } = enabledElement; + const { element } = viewport; + const { annotationUID, data } = annotation; + + const styleOptions = this.getLinkedTextBoxStyle(styleSpecifier, annotation); + if (!styleOptions.visibility) { + data.handles.textBox = { + hasMoved: false, + worldPosition: [0, 0, 0], + worldBoundingBox: { + topLeft: [0, 0, 0], + topRight: [0, 0, 0], + bottomLeft: [0, 0, 0], + bottomRight: [0, 0, 0], + }, + }; + return false; + } + + if (!data.handles.textBox) { + data.handles.textBox = { + hasMoved: false, + worldPosition: [0, 0, 0], + worldBoundingBox: { + topLeft: [0, 0, 0], + topRight: [0, 0, 0], + bottomLeft: [0, 0, 0], + bottomRight: [0, 0, 0], + }, + }; + } + + const pointsForPlacement = placementPoints ?? canvasCoordinates; + if (!data.handles.textBox.hasMoved) { + const canvasTextBoxCoords = getTextBoxCoordsCanvas( + pointsForPlacement, + element, + textLines + ); + data.handles.textBox.worldPosition = + viewport.canvasToWorld(canvasTextBoxCoords); + } + + const textBoxPosition = viewport.worldToCanvas( + data.handles.textBox.worldPosition + ); + + const boundingBox = drawLinkedTextBox( + svgDrawingHelper, + annotationUID, + textBoxUID, + textLines, + textBoxPosition, + canvasCoordinates, + {}, + styleOptions + ); + + const { x: left, y: top, width, height } = boundingBox; + data.handles.textBox.worldBoundingBox = { + topLeft: viewport.canvasToWorld([left, top]), + topRight: viewport.canvasToWorld([left + width, top]), + bottomLeft: viewport.canvasToWorld([left, top + height]), + bottomRight: viewport.canvasToWorld([left + width, top + height]), + }; + + return true; + } + /** * Returns true if the viewport is scaled to SUV units * @param viewport - The viewport diff --git a/packages/tools/src/tools/segmentation/CircleROIStartEndThresholdTool.ts b/packages/tools/src/tools/segmentation/CircleROIStartEndThresholdTool.ts index 0b6216456e..5af7c47197 100644 --- a/packages/tools/src/tools/segmentation/CircleROIStartEndThresholdTool.ts +++ b/packages/tools/src/tools/segmentation/CircleROIStartEndThresholdTool.ts @@ -17,11 +17,9 @@ import { isAnnotationLocked } from '../../stateManagement/annotation/annotationL import { drawCircle as drawCircleSvg, drawHandles as drawHandlesSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; import getWorldWidthAndHeightFromTwoPoints from '../../utilities/planar/getWorldWidthAndHeightFromTwoPoints'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import throttle from '../../utilities/throttle'; import debounce from '../../utilities/debounce'; import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility'; @@ -536,58 +534,27 @@ class CircleROIStartEndThresholdTool extends CircleROITool { renderStatus = true; if (this.configuration.showTextBox) { - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } const textLines = this.configuration.getTextLines(data, { metadata }); if (!textLines || textLines.length === 0) { continue; } - - // Poor man's cached? - let canvasTextBoxCoords; - - if (!data.handles.textBox.hasMoved) { - canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCorners); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + const linkAnchorPoints: Types.Point2[] = [ + canvasCoordinates[0], + canvasCoordinates[1], + ]; + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates: linkAnchorPoints, + placementPoints: canvasCorners, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - [canvasCoordinates[0], canvasCoordinates[1]], - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } } return renderStatus; diff --git a/packages/tools/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts b/packages/tools/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts index 72155cd609..fc53dc2457 100644 --- a/packages/tools/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts +++ b/packages/tools/src/tools/segmentation/RectangleROIStartEndThresholdTool.ts @@ -16,12 +16,10 @@ import { isAnnotationLocked } from '../../stateManagement/annotation/annotationL import { drawHandles as drawHandlesSvg, drawRect as drawRectSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; import throttle from '../../utilities/throttle'; import debounce from '../../utilities/debounce'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import getWorldWidthAndHeightFromCorners from '../../utilities/planar/getWorldWidthAndHeightFromCorners'; import { isAnnotationVisible } from '../../stateManagement/annotation/annotationVisibility'; @@ -687,57 +685,22 @@ class RectangleROIStartEndThresholdTool extends RectangleROITool { renderStatus = true; if (this.configuration.showTextBox) { - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - const textLines = this.configuration.getTextLines(data, { metadata }); if (!textLines || textLines.length === 0) { continue; } - - if (!data.handles.textBox.hasMoved) { - const canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } } diff --git a/packages/tools/src/tools/segmentation/SegmentBidirectionalTool.ts b/packages/tools/src/tools/segmentation/SegmentBidirectionalTool.ts index f4dd8b7977..7d503f788f 100644 --- a/packages/tools/src/tools/segmentation/SegmentBidirectionalTool.ts +++ b/packages/tools/src/tools/segmentation/SegmentBidirectionalTool.ts @@ -17,10 +17,8 @@ import { isAnnotationVisible } from '../../stateManagement/annotation/annotation import { drawLine as drawLineSvg, drawHandles as drawHandlesSvg, - drawLinkedTextBox as drawLinkedTextBoxSvg, } from '../../drawingSvg'; import { getViewportIdsWithToolToRender } from '../../utilities/viewportFilters'; -import { getTextBoxCoordsCanvas } from '../../utilities/drawing'; import { hideElementCursor } from '../../cursors/elementCursor'; import type { EventTypes, @@ -412,61 +410,22 @@ class SegmentBidirectionalTool extends BidirectionalTool { renderStatus = true; - const options = this.getLinkedTextBoxStyle(styleSpecifier, annotation); - if (!options.visibility) { - data.handles.textBox = { - hasMoved: false, - worldPosition: [0, 0, 0], - worldBoundingBox: { - topLeft: [0, 0, 0], - topRight: [0, 0, 0], - bottomLeft: [0, 0, 0], - bottomRight: [0, 0, 0], - }, - }; - continue; - } - - options.color = color; - const textLines = this.configuration.getTextLines(data, targetId); if (!textLines || textLines.length === 0) { continue; } - - let canvasTextBoxCoords; - - if (!data.handles.textBox.hasMoved) { - canvasTextBoxCoords = getTextBoxCoordsCanvas(canvasCoordinates); - - data.handles.textBox.worldPosition = - viewport.canvasToWorld(canvasTextBoxCoords); + if ( + !this.renderLinkedTextBoxAnnotation({ + enabledElement, + svgDrawingHelper, + annotation, + styleSpecifier, + textLines, + canvasCoordinates, + }) + ) { + continue; } - - const textBoxPosition = viewport.worldToCanvas( - data.handles.textBox.worldPosition - ); - - const textBoxUID = '1'; - const boundingBox = drawLinkedTextBoxSvg( - svgDrawingHelper, - annotationUID, - textBoxUID, - textLines, - textBoxPosition, - canvasCoordinates, - {}, - options - ); - - const { x: left, y: top, width, height } = boundingBox; - - data.handles.textBox.worldBoundingBox = { - topLeft: viewport.canvasToWorld([left, top]), - topRight: viewport.canvasToWorld([left + width, top]), - bottomLeft: viewport.canvasToWorld([left, top + height]), - bottomRight: viewport.canvasToWorld([left + width, top + height]), - }; } return renderStatus; diff --git a/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts new file mode 100644 index 0000000000..8f6263217f --- /dev/null +++ b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts @@ -0,0 +1,107 @@ +import { describe, it, expect } from '@jest/globals'; +import getTextBoxCoordsCanvas from './getTextBoxCoordsCanvas'; +import { registerTextBox } from './textBoxOverlapRegistry'; + +function createViewportElement(width: number, height: number) { + const element = document.createElement('div') as HTMLDivElement; + Object.defineProperty(element, 'clientWidth', { + value: width, + configurable: true, + }); + Object.defineProperty(element, 'clientHeight', { + value: height, + configurable: true, + }); + + const viewportElement = document.createElement('div'); + viewportElement.className = 'viewport-element'; + + const svgLayer = document.createElement('div'); + svgLayer.className = 'svg-layer'; + viewportElement.appendChild(svgLayer); + element.appendChild(viewportElement); + + return { element, svgLayer }; +} + +describe('getTextBoxCoordsCanvas', () => { + const annotationPoints = [ + [100, 100], + [120, 120], + ] as [number, number][]; + const textLines = ['0123456789']; // width: 130, height: 67 by estimator + + it('returns the default right-side midpoint when no element is provided', () => { + const coords = getTextBoxCoordsCanvas(annotationPoints); + + expect(coords[0]).toBe(120); + expect(coords[1]).toBe(110); + }); + + it('nudges downward when the default textbox overlaps an existing one', () => { + const { element, svgLayer } = createViewportElement(500, 400); + + registerTextBox(svgLayer, { + x: 120, + y: 70, + width: 130, + height: 67, + }); + + const coords = getTextBoxCoordsCanvas( + annotationPoints, + element, + textLines + ); + + // blocker.y + blocker.height + gap(6) + expect(coords[0]).toBe(120); + expect(coords[1]).toBe(143); + }); + + it('falls back to upward nudging when downward placement runs out of space', () => { + const { element, svgLayer } = createViewportElement(500, 400); + const lowerPoints = [ + [100, 350], + [120, 390], + ] as [number, number][]; + + registerTextBox(svgLayer, { + x: 120, + y: 330, + width: 130, + height: 67, + }); + + const coords = getTextBoxCoordsCanvas( + lowerPoints, + element, + textLines + ); + + // blocker.y - candidate.height - gap(6) + expect(coords[0]).toBe(120); + expect(coords[1]).toBe(257); + }); + + it('keeps the original position when both downward and upward slots are exhausted', () => { + const { element, svgLayer } = createViewportElement(500, 150); + const topPoints = [ + [100, 60], + [120, 80], + ] as [number, number][]; + + registerTextBox(svgLayer, { + x: 120, + y: 30, + width: 130, + height: 67, + }); + + const coords = getTextBoxCoordsCanvas(topPoints, element, textLines); + + // original candidate y = center(70) - h/2(33.5) = 36.5 + expect(coords[0]).toBe(120); + expect(coords[1]).toBeCloseTo(36.5); + }); +}); diff --git a/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts index 2235f5f40e..d999d9fb50 100644 --- a/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts +++ b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts @@ -1,36 +1,234 @@ import type { Types } from '@cornerstonejs/core'; +import { + getRegisteredTextBoxes, + type TextBoxRect, +} from './textBoxOverlapRegistry'; +import intersectAABB from '../math/aabb/intersectAABB'; + +const VIEWPORT_ELEMENT = 'viewport-element'; + +// Minimum gap (px) between adjacent text boxes +const TEXT_BOX_GAP = 6; /** * Determine the coordinates that will place the textbox to the right of the - * annotation. + * annotation while keeping it inside viewport bounds when an element is provided. + * + * When an element is supplied the function also checks for overlap with + * previously-rendered text boxes (tracked via the textBoxOverlapRegistry) and + * nudges the new box vertically so that it does not occlude existing labels. * * @param annotationCanvasPoints - The canvas points of the annotation's handles. + * @param element - Viewport HTML element used to clamp textbox placement. + * @param textLines - Text content used to estimate textbox size before rendering. * @returns - The coordinates for default placement of the textbox. */ export default function getTextBoxCoordsCanvas( - annotationCanvasPoints: Array + annotationCanvasPoints: Array, + element?: HTMLDivElement, + textLines: Array = [] ): Types.Point2 { + if (!annotationCanvasPoints?.length || !annotationCanvasPoints[0]) { + return [0, 0]; + } const corners = _determineCorners(annotationCanvasPoints); const centerY = (corners.top[1] + corners.bottom[1]) / 2; - const textBoxCanvas = [corners.right[0], centerY]; + const defaultTextBoxCanvas = [corners.right[0], centerY]; + + if (!element) { + return defaultTextBoxCanvas; + } + + const { width: textBoxWidth, height: textBoxHeight } = + _estimateTextBoxSize(textLines); + const margin = 4; + const maxX = element.clientWidth - margin; + const maxY = element.clientHeight - margin; + let x = corners.right[0]; + let y = centerY - textBoxHeight / 2; + + if (x + textBoxWidth > maxX) { + x = corners.left[0] - textBoxWidth; + } + + x = Math.max(margin, Math.min(x, maxX - textBoxWidth)); + y = Math.max(margin, Math.min(y, maxY - textBoxHeight)); + + // Overlap avoidance + const svgLayer = _findSvgLayer(element); + if (svgLayer) { + const existingBoxes = getRegisteredTextBoxes(svgLayer); + if (existingBoxes.length > 0) { + const resolved = _resolveOverlap( + x, + y, + textBoxWidth, + textBoxHeight, + existingBoxes, + margin, + maxX, + maxY + ); + x = resolved[0]; + y = resolved[1]; + } + } + + return [x, y]; +} + +/** + * If the proposed rectangle overlaps any existing text box, try to nudge it + * vertically (downward first, then upward) until a clear slot is found. Falls + * back to the original position when the viewport is too crowded. + */ +function _resolveOverlap( + x: number, + y: number, + width: number, + height: number, + existingBoxes: TextBoxRect[], + margin: number, + maxX: number, + maxY: number +): Types.Point2 { + if (!_overlapsAny(x, y, width, height, existingBoxes)) { + return [x, y]; + } + + // scan downward – push below each overlapping box in turn. + let candidateY = y; + for (let i = 0; i < 30; i++) { + const blocker = _findFirstOverlap( + x, + candidateY, + width, + height, + existingBoxes + ); + if (!blocker) { + break; + } + candidateY = blocker.y + blocker.height + TEXT_BOX_GAP; + if (candidateY + height > maxY) { + candidateY = Infinity; + break; + } + } + if ( + candidateY !== Infinity && + !_overlapsAny(x, candidateY, width, height, existingBoxes) + ) { + return [ + x, + Math.max(margin, Math.min(candidateY, maxY - height)), + ]; + } + + // Strategy 2: scan upward – push above each overlapping box in turn. + candidateY = y; + for (let i = 0; i < 30; i++) { + const blocker = _findFirstOverlap( + x, + candidateY, + width, + height, + existingBoxes + ); + if (!blocker) { + break; + } + candidateY = blocker.y - height - TEXT_BOX_GAP; + if (candidateY < margin) { + candidateY = -Infinity; + break; + } + } + if ( + candidateY !== -Infinity && + !_overlapsAny(x, candidateY, width, height, existingBoxes) + ) { + return [ + x, + Math.max(margin, Math.min(candidateY, maxY - height)), + ]; + } + + // All vertical slots exhausted – return the original position. + return [x, y]; +} + +/** + * Returns `true` when the candidate rectangle intersects (or nearly touches) + * any rectangle in `boxes`. + */ +function _overlapsAny( + x: number, + y: number, + w: number, + h: number, + boxes: TextBoxRect[] +): boolean { + const candidate = _toTextBoxAABB({ x, y, width: w, height: h }); + + return boxes.some((box) => + intersectAABB(candidate, _toTextBoxAABB(box, TEXT_BOX_GAP / 2)) + ); +} + +/** + * Returns the first existing box that overlaps the candidate, or `undefined`. + */ +function _findFirstOverlap( + x: number, + y: number, + w: number, + h: number, + boxes: TextBoxRect[] +): TextBoxRect | undefined { + const candidate = _toTextBoxAABB({ x, y, width: w, height: h }); + + return boxes.find((box) => + intersectAABB(candidate, _toTextBoxAABB(box, TEXT_BOX_GAP / 2)) + ); +} + +function _toTextBoxAABB(rect: TextBoxRect, inflate = 0): Types.AABB2 { + return { + minX: rect.x - inflate, + minY: rect.y - inflate, + maxX: rect.x + rect.width + inflate, + maxY: rect.y + rect.height + inflate, + }; +} - return textBoxCanvas; +/** + * Locate the SVG drawing layer for a viewport element. + * Mirrors the lookup in getSvgDrawingHelper.ts. + */ +function _findSvgLayer(element: HTMLDivElement): Element | null { + const internalDiv = element.querySelector(`.${VIEWPORT_ELEMENT}`); + return internalDiv?.querySelector(':scope > .svg-layer') || null; } /** * Determine the handles that have the min/max x and y values. - * - * @param canvasPoints - The canvas points of the annotation's handles. - * @returns - The top, left, bottom, and right handles. + * Handles single-point annotations (e.g. Probe): left/right/top/bottom all equal that point. */ function _determineCorners(canvasPoints: Array) { + const p0 = canvasPoints[0]; + if (!p0 || canvasPoints.length < 2) { + return { left: p0, right: p0, top: p0, bottom: p0 }; + } const handlesLeftToRight = [canvasPoints[0], canvasPoints[1]].sort(_compareX); const handlesTopToBottom = [canvasPoints[0], canvasPoints[1]].sort(_compareY); + const left = handlesLeftToRight[0]; const right = handlesLeftToRight[handlesLeftToRight.length - 1]; const top = handlesTopToBottom[0]; const bottom = handlesTopToBottom[handlesTopToBottom.length - 1]; return { + left, top, bottom, right, @@ -43,3 +241,31 @@ function _determineCorners(canvasPoints: Array) { return a[1] < b[1] ? -1 : 1; } } + +/** + * We estimate dimensions here (instead of measuring a rendered SVG bbox) + * because this utility runs before drawing occurs and should stay a pure + * placement helper shared by many tools. + * + * These constants intentionally mirror `drawTextBox` defaults: + * - padding follows drawingSvg/drawTextBox.ts default (25px) + * - line height approximates 14px font with 1.2em tspans + * - average character width uses a conservative value for Helvetica/Arial + * + * Result: a stable pre-draw placement that prevents corner overflow without + * requiring a two-pass draw/measure/redraw cycle in each tool. + */ +function _estimateTextBoxSize(textLines: Array) { + const estimatedPadding = 25; + const estimatedCharWidth = 8; + const estimatedLineHeight = 17; + const longestLineLength = textLines.reduce( + (max, line) => Math.max(max, line?.length ?? 0), + 0 + ); + const lineCount = Math.max(textLines.length, 1); + const width = longestLineLength * estimatedCharWidth + estimatedPadding * 2; + const height = lineCount * estimatedLineHeight + estimatedPadding * 2; + + return { width, height }; +} diff --git a/packages/tools/src/utilities/drawing/textBoxOverlapRegistry.ts b/packages/tools/src/utilities/drawing/textBoxOverlapRegistry.ts new file mode 100644 index 0000000000..f103ee6ed0 --- /dev/null +++ b/packages/tools/src/utilities/drawing/textBoxOverlapRegistry.ts @@ -0,0 +1,60 @@ +/** + * Per-viewport registry that tracks rendered text-box bounding rectangles. + * + * During each annotation render cycle the registry is: + * 1. Cleared at the start (via `clearTextBoxRegistry`) + * 2. Populated after each text box (via `registerTextBox` – called from + * drawTextBox.ts) + * 3. Queried before placing a new box (via `getRegisteredTextBoxes` – used + * by getTextBoxCoordsCanvas.ts to avoid overlap) + * + * The registry is keyed by the viewport SVG-layer element which is unique per + * viewport and naturally scoped to a single render frame. + */ + +export interface TextBoxRect { + x: number; + y: number; + width: number; + height: number; +} + +const registry = new WeakMap(); + +/** + * Clear all tracked text boxes for a viewport. + * Called at the beginning of each render cycle (draw.ts). + */ +export function clearTextBoxRegistry(svgLayerElement: Element): void { + registry.set(svgLayerElement, []); +} + +/** + * Register a rendered text box so subsequent placements can avoid it. + * Called from drawTextBox.ts after each text box is drawn. + */ +export function registerTextBox( + svgLayerElement: Element, + rect: TextBoxRect +): void { + let boxes = registry.get(svgLayerElement); + if (!boxes) { + boxes = []; + registry.set(svgLayerElement, boxes); + } + boxes.push({ + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + }); +} + +/** + * Return all text boxes registered so far for the given viewport. + */ +export function getRegisteredTextBoxes( + svgLayerElement: Element +): TextBoxRect[] { + return registry.get(svgLayerElement) || []; +} diff --git a/packages/tools/tsconfig.json b/packages/tools/tsconfig.json index bc915f1e65..a954f9c713 100644 --- a/packages/tools/tsconfig.json +++ b/packages/tools/tsconfig.json @@ -4,5 +4,6 @@ "outDir": "./dist/esm", "rootDir": "./src" }, - "include": ["./src/**/*"] + "include": ["./src/**/*"], + "exclude": ["./src/**/*.spec.ts", "./src/**/*.test.ts"] } From 1d66826de48a222ad08bcd0f9502b89d0379c7de Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 20 Feb 2026 22:51:46 +0000 Subject: [PATCH 23/90] chore(version): Update package versions to 4.17.2 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f142f39b8e..4787c40f7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +### Bug Fixes + +- annotations text box limitations ([#2617](https://github.com/cornerstonejs/cornerstone3D/issues/2617)) ([83608ba](https://github.com/cornerstonejs/cornerstone3D/commit/83608ba8c5d48526c3c81b8c791f67b2c883478a)) + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 6f868c0d5e..f86af7567a 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -97df707a1035c7bd77545c54df8d1bef9cfab603 \ No newline at end of file +83608ba8c5d48526c3c81b8c791f67b2c883478a \ No newline at end of file diff --git a/lerna.json b/lerna.json index 8643d41e21..a6ae3a9121 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.17.1", + "version": "4.17.2", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 2aa4daab65..a66f9a53b5 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index d95b2ba1c6..30add71d5f 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.17.1", + "version": "4.17.2", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.1", - "@cornerstonejs/tools": "4.17.1" + "@cornerstonejs/core": "4.17.2", + "@cornerstonejs/tools": "4.17.2" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 20f84db77f..d5034c4a34 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 980d50f81e..3d912ff127 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.17.1", + "version": "4.17.2", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.1", - "@cornerstonejs/tools": "4.17.1" + "@cornerstonejs/core": "4.17.2", + "@cornerstonejs/tools": "4.17.2" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 25f9d2726f..8a1bb9e651 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index aa528e4afb..9e9ca9b0a0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.17.1", + "version": "4.17.2", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 9a6c59edca..61cb0cc797 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 8d0ef2560d..b99ff30c5d 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.17.1", + "version": "4.17.2", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.1", + "@cornerstonejs/core": "4.17.2", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 872c5ed2ef..3f90cb433c 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 2df09ef06c..ab57c8c0e2 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.17.1", + "version": "4.17.2", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.1", - "@cornerstonejs/tools": "4.17.1", + "@cornerstonejs/core": "4.17.2", + "@cornerstonejs/tools": "4.17.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index ee0dd15ac5..27a684ffb8 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 0a2bf9cbd2..92b9f9c13c 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.17.1", + "version": "4.17.2", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.1" + "@cornerstonejs/core": "4.17.2" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 76457404fe..d9add1bab3 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index fe0fbb6161..dfe4b8febd 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.17.1", + "version": "4.17.2", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.1", - "@cornerstonejs/tools": "4.17.1", + "@cornerstonejs/core": "4.17.2", + "@cornerstonejs/tools": "4.17.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 0424bf5cdf..fe280d055b 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) + +### Bug Fixes + +- annotations text box limitations ([#2617](https://github.com/cornerstonejs/cornerstone3D/issues/2617)) ([83608ba](https://github.com/cornerstonejs/cornerstone3D/commit/83608ba8c5d48526c3c81b8c791f67b2c883478a)) + ## [4.17.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.0...v4.17.1) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 22cdcbdfbf..b1e2b0c2f6 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.17.1", + "version": "4.17.2", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.1", + "@cornerstonejs/core": "4.17.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 9475b75a3e..53c501dafd 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.1'; +export const version = '4.17.2'; diff --git a/version.json b/version.json index 6697c8e828..31c0dd7f7a 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.17.1", - "commit": "97df707a1035c7bd77545c54df8d1bef9cfab603" + "version": "4.17.2", + "commit": "83608ba8c5d48526c3c81b8c791f67b2c883478a" } \ No newline at end of file diff --git a/version.txt b/version.txt index 331b258ffe..7ef918f363 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.17.1 \ No newline at end of file +4.17.2 \ No newline at end of file From 3a02127ce33091f4eaa46bbb63bf390e1f444978 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Sat, 21 Feb 2026 19:06:42 -0500 Subject: [PATCH 24/90] fix: Continuous flicker on viewer redraw (#2626) * fix: Continuous flicker on viewer redraw * fix: Comment on size 0 --- .../ContextPoolRenderingEngine.ts | 100 ++++++++++++++---- .../helpers/getOrCreateCanvas.ts | 9 +- 2 files changed, 86 insertions(+), 23 deletions(-) diff --git a/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts b/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts index 1a11e7ce59..949349268b 100644 --- a/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts +++ b/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts @@ -195,25 +195,65 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { /** * Resizes viewports that use VTK.js for rendering. + * Only updates the VTK offscreen size when the displayed size (canvas client size in device pixels) + * differs from the current rendered size (canvas.width/height). The on-screen canvas dimensions + * are updated only when the VTK render result is copied in _copyToOnscreenCanvas, avoiding + * flicker during resize. If a render is already scheduled, resize is deferred until the next + * resize() call. */ protected _resizeVTKViewports( vtkDrivenViewports: (IStackViewport | IVolumeViewport)[], keepCamera = true, immediate = true ) { - const canvasesDrivenByVtkJs = vtkDrivenViewports.map( - (vp: IStackViewport | IVolumeViewport) => { - return getOrCreateCanvas(vp.element); + const devicePixelRatio = window.devicePixelRatio || 1; + + // Compute target display size (pixels the canvas is actually displayed at) for each viewport + const viewportsNeedingResize: (IStackViewport | IVolumeViewport)[] = []; + for (const vp of vtkDrivenViewports) { + const canvas = getOrCreateCanvas(vp.element); + const displayedWidth = Math.round(canvas.clientWidth * devicePixelRatio); + const displayedHeight = Math.round( + canvas.clientHeight * devicePixelRatio + ); + + if (displayedWidth === 0 || displayedHeight === 0) { + continue; } - ); + const renderedWidth = canvas.width; + const renderedHeight = canvas.height; + + if ( + displayedWidth === renderedWidth && + displayedHeight === renderedHeight + ) { + continue; + } + viewportsNeedingResize.push(vp); + } - canvasesDrivenByVtkJs.forEach((canvas) => { - const devicePixelRatio = window.devicePixelRatio || 1; - canvas.width = canvas.clientWidth * devicePixelRatio; - canvas.height = canvas.clientHeight * devicePixelRatio; - }); + if (viewportsNeedingResize.length === 0) { + return; + } + + if (this._animationFrameSet) { + return; + } - if (canvasesDrivenByVtkJs.length) { + for (const vp of viewportsNeedingResize) { + const canvas = getOrCreateCanvas(vp.element); + const displayedWidth = Math.round(canvas.clientWidth * devicePixelRatio); + const displayedHeight = Math.round( + canvas.clientHeight * devicePixelRatio + ); + const targetWidth = Math.max(VIEWPORT_MIN_SIZE, displayedWidth); + const targetHeight = Math.max(VIEWPORT_MIN_SIZE, displayedHeight); + + vp.sWidth = targetWidth; + vp.sHeight = targetHeight; + } + + if (vtkDrivenViewports.length) { this._resize(vtkDrivenViewports); } @@ -320,6 +360,12 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { offscreenMultiRenderWindow: VtkOffscreenMultiRenderWindow, offScreenCanvasContainer: HTMLDivElement ): EventTypes.ImageRenderedEventDetail { + if ( + viewport.canvas.clientWidth === 0 || + viewport.canvas.clientHeight === 0 + ) { + return; + } // Check viewport size if ( viewport.sWidth < VIEWPORT_MIN_SIZE || @@ -375,8 +421,8 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { ); const maxSize = this.contextPool.getMaxSizeForContext(contextIndex); - const viewportWidth = viewport.canvas.width; - const viewportHeight = viewport.canvas.height; + const viewportWidth = viewport.sWidth; + const viewportHeight = viewport.sHeight; const xEnd = Math.min(1, viewportWidth / maxSize.width); const yEnd = Math.min(1, viewportHeight / maxSize.height); @@ -443,8 +489,8 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { const maxSizeChanged = this.contextPool.updateViewportSize( viewport.id, - viewport.canvas.width, - viewport.canvas.height + viewport.sWidth, + viewport.sHeight ); if (!maxSizeChanged) { @@ -481,7 +527,19 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { renderingEngineId, suppressEvents, } = viewport; - const { width: dWidth, height: dHeight } = canvas; + const dWidth = viewport.sWidth; + const dHeight = viewport.sHeight; + + // Update on-screen canvas size only when the VTK render result is available, + // so the displayed size matches the rendered size and aspect ratio without flicker. + if ( + canvas.width !== dWidth || + (canvas.height !== dHeight && dWidth >= 1 && dHeight >= 1) + ) { + canvas.width = dWidth; + canvas.height = dHeight; + canvas.style.aspectRatio = `${dWidth} / ${dHeight}`; + } const onScreenContext = canvas.getContext('2d'); @@ -522,8 +580,8 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { for (const viewport of viewportsDrivenByVtkJs) { viewport.sx = 0; viewport.sy = 0; - viewport.sWidth = viewport.canvas.width; - viewport.sHeight = viewport.canvas.height; + // Use viewport.sWidth/sHeight (set by _resizeVTKViewports to target size); do not overwrite from canvas, + // so that we only update the on-screen canvas when the VTK result is copied in _copyToOnscreenCanvas. // Get the context assigned to this viewport const contextIndex = this.contextPool.getContextIndexForViewport( @@ -533,8 +591,8 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { // Update viewport size and check if max size changed const maxSizeChanged = this.contextPool.updateViewportSize( viewport.id, - viewport.canvas.width, - viewport.canvas.height + viewport.sWidth, + viewport.sHeight ); if (maxSizeChanged) { @@ -547,8 +605,8 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { // Calculate viewport coordinates relative to the max size const maxSize = this.contextPool.getMaxSizeForContext(contextIndex); - const xEnd = Math.min(1, viewport.canvas.width / maxSize.width); - const yEnd = Math.min(1, viewport.canvas.height / maxSize.height); + const xEnd = Math.min(1, viewport.sWidth / maxSize.width); + const yEnd = Math.min(1, viewport.sHeight / maxSize.height); renderer.setViewport(0, 0, xEnd, yEnd); } diff --git a/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts b/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts index 1fbd34dace..c4e65541e9 100644 --- a/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts +++ b/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts @@ -105,8 +105,13 @@ export function getOrCreateCanvas(element: HTMLDivElement): HTMLCanvasElement { // this hasn't been observed. const width = Math.ceil(rect.width * devicePixelRatio); const height = Math.ceil(rect.height * devicePixelRatio); - canvas.width = width; - canvas.height = height; + // does weird things given 0 or NaN for the division + // Also weird when the canvas size is zero + if (width > 0 && height > 0) { + canvas.width = width; + canvas.height = height; + canvas.style.aspectRatio = `${width} / ${height}`; + } // Reset the size of the canvas to be the number of physical pixels, // expressed as CSS pixels, with a tiny extra amount to prevent clipping // to the next lower size in the physical display. From 6549e9251dd20f1b8a20c98bc805a928c913ced6 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Sun, 22 Feb 2026 00:10:35 +0000 Subject: [PATCH 25/90] chore(version): Update package versions to 4.17.3 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4787c40f7f..ee0fd4ee29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +### Bug Fixes + +- Continuous flicker on viewer redraw ([#2626](https://github.com/cornerstonejs/cornerstone3D/issues/2626)) ([ed3398d](https://github.com/cornerstonejs/cornerstone3D/commit/ed3398d0877da109644fb5273cc163d01068f90d)) + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) ### Bug Fixes diff --git a/commit.txt b/commit.txt index f86af7567a..480c68b8cc 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -83608ba8c5d48526c3c81b8c791f67b2c883478a \ No newline at end of file +ed3398d0877da109644fb5273cc163d01068f90d \ No newline at end of file diff --git a/lerna.json b/lerna.json index a6ae3a9121..9a74a66bfb 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.17.2", + "version": "4.17.3", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index a66f9a53b5..901362d34e 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 30add71d5f..152cb57cf2 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.17.2", + "version": "4.17.3", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.2", - "@cornerstonejs/tools": "4.17.2" + "@cornerstonejs/core": "4.17.3", + "@cornerstonejs/tools": "4.17.3" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index d5034c4a34..aea18a96a8 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 3d912ff127..fb170f3f44 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.17.2", + "version": "4.17.3", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.2", - "@cornerstonejs/tools": "4.17.2" + "@cornerstonejs/core": "4.17.3", + "@cornerstonejs/tools": "4.17.3" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 8a1bb9e651..4fed47e0d9 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +### Bug Fixes + +- Continuous flicker on viewer redraw ([#2626](https://github.com/cornerstonejs/cornerstone3D/issues/2626)) ([ed3398d](https://github.com/cornerstonejs/cornerstone3D/commit/ed3398d0877da109644fb5273cc163d01068f90d)) + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 9e9ca9b0a0..ac14163300 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.17.2", + "version": "4.17.3", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 61cb0cc797..64ec88d006 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index b99ff30c5d..544ad66e10 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.17.2", + "version": "4.17.3", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.2", + "@cornerstonejs/core": "4.17.3", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 3f90cb433c..ff6b9e740c 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index ab57c8c0e2..1dbba872ef 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.17.2", + "version": "4.17.3", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.2", - "@cornerstonejs/tools": "4.17.2", + "@cornerstonejs/core": "4.17.3", + "@cornerstonejs/tools": "4.17.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 27a684ffb8..b3b00f4052 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 92b9f9c13c..c9453c7c3a 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.17.2", + "version": "4.17.3", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.2" + "@cornerstonejs/core": "4.17.3" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index d9add1bab3..baefa81d3d 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index dfe4b8febd..a19ea081fe 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.17.2", + "version": "4.17.3", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.2", - "@cornerstonejs/tools": "4.17.2", + "@cornerstonejs/core": "4.17.3", + "@cornerstonejs/tools": "4.17.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index fe280d055b..0dfbcbb9da 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.17.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.1...v4.17.2) (2026-02-20) ### Bug Fixes diff --git a/packages/tools/package.json b/packages/tools/package.json index b1e2b0c2f6..0a03fc7f81 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.17.2", + "version": "4.17.3", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.2", + "@cornerstonejs/core": "4.17.3", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 53c501dafd..158ae005b0 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.2'; +export const version = '4.17.3'; diff --git a/version.json b/version.json index 31c0dd7f7a..cd6dcc1f1a 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.17.2", - "commit": "83608ba8c5d48526c3c81b8c791f67b2c883478a" + "version": "4.17.3", + "commit": "ed3398d0877da109644fb5273cc163d01068f90d" } \ No newline at end of file diff --git a/version.txt b/version.txt index 7ef918f363..a52013d97a 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.17.2 \ No newline at end of file +4.17.3 \ No newline at end of file From 6544f9466776b24edce79e2811b34ecccd9377eb Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:21:14 -0500 Subject: [PATCH 26/90] chore(security): Update circleci config to only run bun audit for lockfile changes. (#2629) Disabled all dependabot pull requests for bun and npm version updates. --- .circleci/config.yml | 15 +++++++++++++-- .github/.dependabot.yaml | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fbeadeb064..9b32a3c4c4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,11 +27,22 @@ jobs: - checkout - run: echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/repo/.npmrc - install_bun - # SECURITY AUDIT + # SECURITY AUDIT - only when bun.lock has changed - run: name: 'Security Audit - High Risk Vulnerabilities' command: | - echo "🔍 Running bun audit for security vulnerabilities..." + git fetch origin main 2>/dev/null || true + BASE_REF=$(git merge-base HEAD origin/main 2>/dev/null) + if [[ -z "$BASE_REF" ]]; then + echo "Could not determine base ref (e.g. shallow clone or no origin/main), skipping security audit." + exit 0 + fi + CHANGED_FILES=$(git diff --name-only origin/main...HEAD 2>/dev/null || echo "") + if ! echo "$CHANGED_FILES" | grep -qx 'bun.lock'; then + echo "⏭️ bun.lock unchanged - skipping security audit." + exit 0 + fi + echo "🔍 bun.lock changed - running bun audit for security vulnerabilities..." echo "Checking for HIGH-RISK vulnerabilities..." # Define ignored vulnerabilities with comments diff --git a/.github/.dependabot.yaml b/.github/.dependabot.yaml index 38f6126d3e..4bb229ba61 100644 --- a/.github/.dependabot.yaml +++ b/.github/.dependabot.yaml @@ -2,6 +2,8 @@ version: 2 enable-beta-ecosystems: true updates: - package-ecosystem: "bun" + # Disable all pull requests for bun version updates. + open-pull-requests-limit: 0 directory: "/" schedule: interval: "daily" @@ -10,6 +12,8 @@ updates: prefix: "chore" include: "scope" - package-ecosystem: "npm" + # Disable all pull requests for npm version updates. + open-pull-requests-limit: 0 directory: "/" schedule: interval: "daily" From 44c0b70d7897099ab202d893fda8403b4489fb14 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Mon, 23 Feb 2026 21:25:32 +0000 Subject: [PATCH 27/90] chore(version): Update package versions to 4.17.4 [skip ci] --- CHANGELOG.md | 4 ++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 69 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee0fd4ee29..d34105bf4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package root + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 480c68b8cc..ab8a970b4e 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -ed3398d0877da109644fb5273cc163d01068f90d \ No newline at end of file +659a2bd0856aa4a11a4c0ddb165a43db1c589d57 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 9a74a66bfb..db7b7327a8 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.17.3", + "version": "4.17.4", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 901362d34e..150ebe375a 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 152cb57cf2..c1f1b5b13d 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.17.3", + "version": "4.17.4", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.3", - "@cornerstonejs/tools": "4.17.3" + "@cornerstonejs/core": "4.17.4", + "@cornerstonejs/tools": "4.17.4" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index aea18a96a8..edbcaed4d6 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index fb170f3f44..0af55c99c8 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.17.3", + "version": "4.17.4", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.3", - "@cornerstonejs/tools": "4.17.3" + "@cornerstonejs/core": "4.17.4", + "@cornerstonejs/tools": "4.17.4" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 4fed47e0d9..696dc0d2f8 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) ### Bug Fixes diff --git a/packages/core/package.json b/packages/core/package.json index ac14163300..f989ff34c8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.17.3", + "version": "4.17.4", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 64ec88d006..b584e1ead0 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 544ad66e10..a6efbd49d8 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.17.3", + "version": "4.17.4", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.3", + "@cornerstonejs/core": "4.17.4", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index ff6b9e740c..31cc772b82 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 1dbba872ef..cb82ef3a9f 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.17.3", + "version": "4.17.4", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.3", - "@cornerstonejs/tools": "4.17.3", + "@cornerstonejs/core": "4.17.4", + "@cornerstonejs/tools": "4.17.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index b3b00f4052..774ea6eba6 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index c9453c7c3a..c26dd293af 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.17.3", + "version": "4.17.4", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.3" + "@cornerstonejs/core": "4.17.4" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index baefa81d3d..126e6c4291 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index a19ea081fe..768dba7390 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.17.3", + "version": "4.17.4", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.3", - "@cornerstonejs/tools": "4.17.3", + "@cornerstonejs/core": "4.17.4", + "@cornerstonejs/tools": "4.17.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 0dfbcbb9da..a7a6e5b1b5 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.17.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.2...v4.17.3) (2026-02-22) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 0a03fc7f81..3ecb7855b2 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.17.3", + "version": "4.17.4", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.3", + "@cornerstonejs/core": "4.17.4", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 158ae005b0..1d4eec247e 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.3'; +export const version = '4.17.4'; diff --git a/version.json b/version.json index cd6dcc1f1a..cbe4929008 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.17.3", - "commit": "ed3398d0877da109644fb5273cc163d01068f90d" + "version": "4.17.4", + "commit": "659a2bd0856aa4a11a4c0ddb165a43db1c589d57" } \ No newline at end of file diff --git a/version.txt b/version.txt index a52013d97a..5ef30ebbc3 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.17.3 \ No newline at end of file +4.17.4 \ No newline at end of file From 13ab9007ef3edf23d29df35b8c52e7d389f9e800 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 24 Feb 2026 12:55:39 -0500 Subject: [PATCH 28/90] fix: move crosshairs implementation to absolute camera instead of delta (#2627) --- packages/tools/src/tools/CrosshairsTool.ts | 748 ++++++++++++------ .../mpr-reformat-after-interaction.png | Bin 356903 -> 357646 bytes .../mpr-reformat-after-interaction.png | Bin 319345 -> 320375 bytes 3 files changed, 506 insertions(+), 242 deletions(-) diff --git a/packages/tools/src/tools/CrosshairsTool.ts b/packages/tools/src/tools/CrosshairsTool.ts index 1b38a66451..9929846c5b 100644 --- a/packages/tools/src/tools/CrosshairsTool.ts +++ b/packages/tools/src/tools/CrosshairsTool.ts @@ -112,6 +112,16 @@ class CrosshairsTool extends AnnotationTool { _getReferenceLineControllable?: (viewportId: string) => boolean; _getReferenceLineDraggableRotatable?: (viewportId: string) => boolean; _getReferenceLineSlabThicknessControlsOn?: (viewportId: string) => boolean; + _volumeViewportNewVolumeListeners = new Map< + string, + { + element: HTMLDivElement; + handler: EventListener; + } + >(); + _toolGroupViewportAddedListener: EventListener | null = null; + _toolGroupViewportRemovedListener: EventListener | null = null; + _ignoreFiredEvents = false; constructor( toolProps: PublicToolProps = {}, @@ -262,34 +272,34 @@ class CrosshairsTool extends AnnotationTool { return viewports; }; - onSetToolActive() { - const viewportsInfo = this._getViewportsInfo(); - - // Upon new setVolumes on viewports we need to update the crosshairs - // reference points in the new space, so we subscribe to the event - // and update the reference points accordingly. - this._unsubscribeToViewportNewVolumeSet(viewportsInfo); - this._subscribeToViewportNewVolumeSet(viewportsInfo); + _reinitializeListenersAndCenter = (): void => { + this._unbindToolGroupViewportListeners(); + this._clearAllVolumeListenersAndViewportState(); + this._bindToolGroupViewportListeners(); + this._syncVolumeListenersWithToolGroup(); + this._computeToolCenter(this._getViewportsInfo()); + }; - this._computeToolCenter(viewportsInfo); + onSetToolActive() { + this._reinitializeListenersAndCenter(); } onSetToolPassive() { - const viewportsInfo = this._getViewportsInfo(); - - this._computeToolCenter(viewportsInfo); + this._reinitializeListenersAndCenter(); } onSetToolEnabled() { - const viewportsInfo = this._getViewportsInfo(); - - this._computeToolCenter(viewportsInfo); + this._reinitializeListenersAndCenter(); } onSetToolDisabled() { const viewportsInfo = this._getViewportsInfo(); - this._unsubscribeToViewportNewVolumeSet(viewportsInfo); + this._unbindToolGroupViewportListeners(); + this._clearAllVolumeListenersAndViewportState(); + this._ignoreFiredEvents = false; + this.editData = null; + state.isInteractingWithTool = false; // Crosshairs annotations in the state // has no value when the tool is disabled @@ -324,6 +334,9 @@ class CrosshairsTool extends AnnotationTool { viewportId, renderingEngineId ); + if (!enabledElement) { + continue; + } const viewport = enabledElement.viewport as Types.IVolumeViewport; const resetPan = true; const resetZoom = true; @@ -375,96 +388,77 @@ class CrosshairsTool extends AnnotationTool { return; } - // Todo: handle two same view viewport, or more than 3 viewports - const [firstViewport, secondViewport, thirdViewport] = viewportsInfo; - - // Initialize first viewport - const { normal: normal1, point: point1 } = - this.initializeViewport(firstViewport); - - // Initialize second viewport - const { normal: normal2, point: point2 } = - this.initializeViewport(secondViewport); - - let normal3 = [0, 0, 0]; - let point3 = vec3.create(); - - // If there are three viewports - if (thirdViewport) { - ({ normal: normal3, point: point3 } = - this.initializeViewport(thirdViewport)); - } else { - // If there are only two views (viewport) associated with the crosshairs: - // In this situation, we don't have a third information to find the - // exact intersection, and we "assume" the third view is looking at - // a location in between the first and second view centers - vec3.add(point3, point1, point2); - vec3.scale(point3, point3, 0.5); - vec3.cross(normal3, normal1, normal2); - } - - // Planes of each viewport - const firstPlane = csUtils.planar.planeEquation(normal1, point1); - const secondPlane = csUtils.planar.planeEquation(normal2, point2); - const thirdPlane = csUtils.planar.planeEquation(normal3, point3); - - // Calculating the intersection of 3 planes - // prettier-ignore + viewportsInfo.forEach((viewportInfo) => { + this.initializeViewport(viewportInfo); + }); - const toolCenter = csUtils.planar.threePlaneIntersection(firstPlane, secondPlane, thirdPlane); - this.setToolCenter(toolCenter); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: true, + }); }; setToolCenter(toolCenter: Types.Point3, suppressEvents = false): void { - // prettier-ignore const viewportsInfo = this._getViewportsInfo(); + const previousIgnoreFiredEvents = this._ignoreFiredEvents; + this._ignoreFiredEvents = true; + try { + viewportsInfo.forEach(({ renderingEngineId, viewportId }) => { + const renderingEngine = getRenderingEngine(renderingEngineId); + if (!renderingEngine) { + return; + } - viewportsInfo.map(({ renderingEngineId, viewportId }) => { - const renderingEngine = getRenderingEngine(renderingEngineId); + const viewport = renderingEngine.getViewport(viewportId); + if (!viewport) { + return; + } - const viewport = renderingEngine.getViewport(viewportId); - const camera = viewport.getCamera(); - const { focalPoint, position, viewPlaneNormal } = camera; + const camera = viewport.getCamera(); + const { focalPoint, position, viewPlaneNormal } = camera; - // Calculate the delta between the current camera focal point and the new tool center - const delta = [ - toolCenter[0] - focalPoint[0], - toolCenter[1] - focalPoint[1], - toolCenter[2] - focalPoint[2], - ]; + // Calculate the delta between the current camera focal point and the new tool center + const delta = [ + toolCenter[0] - focalPoint[0], + toolCenter[1] - focalPoint[1], + toolCenter[2] - focalPoint[2], + ]; - // Project this vector onto the view plane normal. - // This isolates the component of the movement that corresponds to the "scroll" (slice change). - const scroll = - delta[0] * viewPlaneNormal[0] + - delta[1] * viewPlaneNormal[1] + - delta[2] * viewPlaneNormal[2]; - - const scrollDelta = [ - scroll * viewPlaneNormal[0], - scroll * viewPlaneNormal[1], - scroll * viewPlaneNormal[2], - ]; + // Project this vector onto the view plane normal. + // This isolates the component of the movement that corresponds to the "scroll" (slice change). + const scroll = + delta[0] * viewPlaneNormal[0] + + delta[1] * viewPlaneNormal[1] + + delta[2] * viewPlaneNormal[2]; + + const scrollDelta = [ + scroll * viewPlaneNormal[0], + scroll * viewPlaneNormal[1], + scroll * viewPlaneNormal[2], + ]; - // Apply this "scroll" to the position and focal point of the camera. - const newFocalPoint: Types.Point3 = [ - focalPoint[0] + scrollDelta[0], - focalPoint[1] + scrollDelta[1], - focalPoint[2] + scrollDelta[2], - ]; - const newPosition: Types.Point3 = [ - position[0] + scrollDelta[0], - position[1] + scrollDelta[1], - position[2] + scrollDelta[2], - ]; + // Apply this "scroll" to the position and focal point of the camera. + const newFocalPoint: Types.Point3 = [ + focalPoint[0] + scrollDelta[0], + focalPoint[1] + scrollDelta[1], + focalPoint[2] + scrollDelta[2], + ]; + const newPosition: Types.Point3 = [ + position[0] + scrollDelta[0], + position[1] + scrollDelta[1], + position[2] + scrollDelta[2], + ]; - viewport.setCamera({ - focalPoint: newFocalPoint, - position: newPosition, - }); + viewport.setCamera({ + focalPoint: newFocalPoint, + position: newPosition, + }); - viewport.render(); - }); + viewport.render(); + }); + } finally { + this._ignoreFiredEvents = previousIgnoreFiredEvents; + } this.toolCenter = toolCenter; @@ -493,6 +487,12 @@ class CrosshairsTool extends AnnotationTool { const { currentPoints } = eventDetail; const jumpWorld = currentPoints.world; + this._syncVolumeListenersWithToolGroup(); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: false, + updateViewportCameras: false, + }); + const enabledElement = getEnabledElement(element); const { viewport } = enabledElement; this._jump(enabledElement, jumpWorld); @@ -648,8 +648,26 @@ class CrosshairsTool extends AnnotationTool { const eventDetail = evt.detail; const { element } = eventDetail; const enabledElement = getEnabledElement(element); + if (!enabledElement) { + return; + } + const { renderingEngine } = enabledElement; const viewport = enabledElement.viewport as Types.IVolumeViewport; + this._syncVolumeListenersWithToolGroup(); + + if (this._ignoreFiredEvents) { + return; + } + + const isSourceInToolGroup = this._getViewportsInfo().some( + ({ viewportId, renderingEngineId }) => + viewportId === viewport.id && renderingEngineId === renderingEngine.id + ); + + if (!isSourceInToolGroup) { + return; + } const annotations = this._getAnnotations(enabledElement); const filteredToolAnnotations = @@ -659,87 +677,19 @@ class CrosshairsTool extends AnnotationTool { const viewportAnnotation = filteredToolAnnotations[0] as CrosshairsAnnotation; - if (!viewportAnnotation) { - return; - } - - // -- Update the camera of other linked viewports containing the same volumeId that - // have the same camera in case of translation - // -- Update the crosshair center in world coordinates in annotation. - // This is necessary because other tools can modify the position of the slices, - // e.g. stackScroll tool at wheel scroll. So we update the coordinates of the center always here. - // NOTE: rotation and slab thickness handles are created/updated in renderTool. const currentCamera = viewport.getCamera(); - const oldCameraPosition = viewportAnnotation.metadata.cameraPosition; - const deltaCameraPosition: Types.Point3 = [0, 0, 0]; - vtkMath.subtract( - currentCamera.position, - oldCameraPosition, - deltaCameraPosition - ); - - const oldCameraFocalPoint = viewportAnnotation.metadata.cameraFocalPoint; - const deltaCameraFocalPoint: Types.Point3 = [0, 0, 0]; - vtkMath.subtract( - currentCamera.focalPoint, - oldCameraFocalPoint, - deltaCameraFocalPoint - ); - - // updated cached "previous" camera position and focal point - viewportAnnotation.metadata.cameraPosition = [...currentCamera.position]; - viewportAnnotation.metadata.cameraFocalPoint = [ - ...currentCamera.focalPoint, - ]; - - const viewportControllable = this._getReferenceLineControllable( - viewport.id - ); - const viewportDraggableRotatable = this._getReferenceLineDraggableRotatable( - viewport.id - ); - if ( - !csUtils.isEqual(currentCamera.position, oldCameraPosition, 1e-3) && - viewportControllable && - viewportDraggableRotatable - ) { - // Is camera Modified a TRANSLATION or ROTATION? - let isRotation = false; - - // This is guaranteed to be the same diff for both position and focal point - // if the camera is modified by pan, zoom, or scroll BUT for rotation of - // crosshairs handles it will be different. - const cameraModifiedSameForPosAndFocalPoint = csUtils.isEqual( - deltaCameraPosition, - deltaCameraFocalPoint, - 1e-3 - ); - - // NOTE: it is a translation if the the focal point and camera position shifts are the same - if (!cameraModifiedSameForPosAndFocalPoint) { - isRotation = true; - } - - const cameraModifiedInPlane = - Math.abs( - vtkMath.dot(deltaCameraPosition, currentCamera.viewPlaneNormal) - ) < 1e-2; - - // TRANSLATION - // NOTE1: if the camera modified is a result of a pan or zoom don't update the crosshair center - // NOTE2: rotation handles are updates in renderTool - if (!isRotation && !cameraModifiedInPlane) { - this.toolCenter[0] += deltaCameraPosition[0]; - this.toolCenter[1] += deltaCameraPosition[1]; - this.toolCenter[2] += deltaCameraPosition[2]; - - triggerEvent(eventTarget, Events.CROSSHAIR_TOOL_CENTER_CHANGED, { - toolGroupId: this.toolGroupId, - toolCenter: this.toolCenter, - }); - } + if (viewportAnnotation) { + viewportAnnotation.metadata.cameraPosition = [...currentCamera.position]; + viewportAnnotation.metadata.cameraFocalPoint = [ + ...currentCamera.focalPoint, + ]; } + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); + // AutoPan modification if (this.configuration.autoPan?.enabled) { const toolGroup = getToolGroupForViewport( @@ -1598,39 +1548,30 @@ class CrosshairsTool extends AnnotationTool { return toolGroupAnnotations; }; - _onNewVolume = () => { - const viewportsInfo = this._getViewportsInfo(); - this._computeToolCenter(viewportsInfo); + _onNewVolume = (_evt?: Event) => { + this._syncVolumeListenersWithToolGroup(); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); }; - _unsubscribeToViewportNewVolumeSet(viewportsInfo) { - viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { - const { viewport } = getEnabledElementByIds( - viewportId, - renderingEngineId - ); - const { element } = viewport; - - element.removeEventListener( - Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, - this._onNewVolume - ); - }); + /** + * @deprecated No longer manages per-viewport listeners directly. + * Listener lifecycle is now handled by _syncVolumeListenersWithToolGroup. + * Will be removed in a future version. + */ + _unsubscribeToViewportNewVolumeSet(_viewportsInfo) { + this._syncVolumeListenersWithToolGroup(); } - _subscribeToViewportNewVolumeSet(viewports) { - viewports.forEach(({ viewportId, renderingEngineId }) => { - const { viewport } = getEnabledElementByIds( - viewportId, - renderingEngineId - ); - const { element } = viewport; - - element.addEventListener( - Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, - this._onNewVolume - ); - }); + /** + * @deprecated No longer manages per-viewport listeners directly. + * Listener lifecycle is now handled by _syncVolumeListenersWithToolGroup. + * Will be removed in a future version. + */ + _subscribeToViewportNewVolumeSet(_viewports) { + this._syncVolumeListenersWithToolGroup(); } _autoPanViewportIfNecessary( @@ -1696,10 +1637,16 @@ class CrosshairsTool extends AnnotationTool { focalPoint[2] - deltaPointsWorld[2], ]; - viewport.setCamera({ - focalPoint: updatedFocalPoint, - position: updatedPosition, - }); + const previousIgnoreFiredEvents = this._ignoreFiredEvents; + this._ignoreFiredEvents = true; + try { + viewport.setCamera({ + focalPoint: updatedFocalPoint, + position: updatedPosition, + }); + } finally { + this._ignoreFiredEvents = previousIgnoreFiredEvents; + } viewport.render(); } @@ -1709,7 +1656,8 @@ class CrosshairsTool extends AnnotationTool { return false; } - viewportIdArrayOne.forEach((id) => { + for (let index = 0; index < viewportIdArrayOne.length; index++) { + const id = viewportIdArrayOne[index]; let itemFound = false; for (let i = 0; i < viewportIdArrayTwo.length; ++i) { if (id === viewportIdArrayTwo[i]) { @@ -1720,7 +1668,7 @@ class CrosshairsTool extends AnnotationTool { if (itemFound === false) { return false; } - }); + } return true; }; @@ -2062,6 +2010,10 @@ class CrosshairsTool extends AnnotationTool { viewportsAnnotationsToUpdate, delta ); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); state.isInteractingWithTool = false; @@ -2069,6 +2021,12 @@ class CrosshairsTool extends AnnotationTool { }; _activateModify = (element) => { + this._syncVolumeListenersWithToolGroup(); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: false, + updateViewportCameras: false, + }); + // mobile sometimes has lingering interaction even when touchEnd triggers // this check allows for multiple handles to be active which doesn't affect // tool usage. @@ -2099,10 +2057,16 @@ class CrosshairsTool extends AnnotationTool { const eventDetail = evt.detail; const { element } = eventDetail; - this.editData.annotation.data.handles.activeOperation = null; - this.editData.annotation.data.activeViewportIds = []; + if (this.editData?.annotation?.data) { + this.editData.annotation.data.handles.activeOperation = null; + this.editData.annotation.data.activeViewportIds = []; + } this._deactivateModify(element); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); resetElementCursor(element); @@ -2183,6 +2147,10 @@ class CrosshairsTool extends AnnotationTool { viewportsAnnotationsToUpdate, delta ); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); } else if (handles.activeOperation === OPERATION.ROTATE) { // ROTATION const otherViewportAnnotations = @@ -2255,34 +2223,44 @@ class CrosshairsTool extends AnnotationTool { const otherViewportsIds = []; // update camera for the other viewports. // NOTE: The lines then are rendered by the onCameraModified - viewportsAnnotationsToUpdate.forEach((annotation) => { - const { data } = annotation; - data.handles.toolCenter = center; - - const otherViewport = renderingEngine.getViewport(data.viewportId); - const camera = otherViewport.getCamera(); - const { viewUp, position, focalPoint } = camera; - - viewUp[0] += position[0]; - viewUp[1] += position[1]; - viewUp[2] += position[2]; - - vec3.transformMat4(focalPoint, focalPoint, matrix); - vec3.transformMat4(position, position, matrix); - vec3.transformMat4(viewUp, viewUp, matrix); - - viewUp[0] -= position[0]; - viewUp[1] -= position[1]; - viewUp[2] -= position[2]; + const previousIgnoreFiredEvents = this._ignoreFiredEvents; + this._ignoreFiredEvents = true; + try { + viewportsAnnotationsToUpdate.forEach((annotation) => { + const { data } = annotation; + data.handles.toolCenter = center; - otherViewport.setCamera({ - position, - viewUp, - focalPoint, + const otherViewport = renderingEngine.getViewport(data.viewportId); + const camera = otherViewport.getCamera(); + const { viewUp, position, focalPoint } = camera; + + viewUp[0] += position[0]; + viewUp[1] += position[1]; + viewUp[2] += position[2]; + + vec3.transformMat4(focalPoint, focalPoint, matrix); + vec3.transformMat4(position, position, matrix); + vec3.transformMat4(viewUp, viewUp, matrix); + + viewUp[0] -= position[0]; + viewUp[1] -= position[1]; + viewUp[2] -= position[2]; + + otherViewport.setCamera({ + position, + viewUp, + focalPoint, + }); + otherViewportsIds.push(otherViewport.id); }); - otherViewportsIds.push(otherViewport.id); - }); + } finally { + this._ignoreFiredEvents = previousIgnoreFiredEvents; + } renderingEngine.renderViewports(otherViewportsIds); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); } else if (handles.activeOperation === OPERATION.SLAB) { // SLAB THICKNESS // this should be just the active one under the mouse, @@ -2459,7 +2437,20 @@ class CrosshairsTool extends AnnotationTool { } ); renderingEngine.renderViewports(viewportsIds); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); } + + const requireSameOrientation = false; + const viewportIdsToRender = getViewportIdsWithToolToRender( + element, + this.getToolName(), + requireSameOrientation + ); + + triggerAnnotationRenderForViewportIds(viewportIdsToRender); }; setSlabThickness(viewport, slabThickness) { @@ -2493,8 +2484,6 @@ class CrosshairsTool extends AnnotationTool { delta ) { // update camera for the other viewports. - // NOTE1: The lines then are rendered by the onCameraModified - // NOTE2: crosshair center are automatically updated in the onCameraModified event viewportsAnnotationsToUpdate.forEach((annotation) => { this._applyDeltaShiftToViewportCamera(renderingEngine, annotation, delta); }); @@ -2506,8 +2495,6 @@ class CrosshairsTool extends AnnotationTool { delta ) { // update camera for the other viewports. - // NOTE1: The lines then are rendered by the onCameraModified - // NOTE2: crosshair center are automatically updated in the onCameraModified event const { data } = annotation; const viewport = renderingEngine.getViewport(data.viewportId); @@ -2531,10 +2518,16 @@ class CrosshairsTool extends AnnotationTool { vtkMath.add(camera.focalPoint, projectedDelta, newFocalPoint); vtkMath.add(camera.position, projectedDelta, newPosition); - viewport.setCamera({ - focalPoint: newFocalPoint, - position: newPosition, - }); + const previousIgnoreFiredEvents = this._ignoreFiredEvents; + this._ignoreFiredEvents = true; + try { + viewport.setCamera({ + focalPoint: newFocalPoint, + position: newPosition, + }); + } finally { + this._ignoreFiredEvents = previousIgnoreFiredEvents; + } viewport.render(); } } @@ -2858,6 +2851,277 @@ class CrosshairsTool extends AnnotationTool { return data.handles.activeOperation === OPERATION.DRAG ? true : false; } + + _toViewportKey = (renderingEngineId: string, viewportId: string): string => { + return `${renderingEngineId}::${viewportId}`; + }; + + _isFinitePoint3 = (point: Types.Point3): boolean => { + if (!point || point.length !== 3) { + return false; + } + + return ( + Number.isFinite(point[0]) && + Number.isFinite(point[1]) && + Number.isFinite(point[2]) + ); + }; + + _bindToolGroupViewportListeners = (): void => { + if (!this._toolGroupViewportAddedListener) { + this._toolGroupViewportAddedListener = ((evt: CustomEvent) => { + if (evt.detail?.toolGroupId !== this.toolGroupId) { + return; + } + + this._syncVolumeListenersWithToolGroup(); + this._computeToolCenter(this._getViewportsInfo()); + }) as EventListener; + eventTarget.addEventListener( + Events.TOOLGROUP_VIEWPORT_ADDED, + this._toolGroupViewportAddedListener + ); + } + + if (!this._toolGroupViewportRemovedListener) { + this._toolGroupViewportRemovedListener = ((evt: CustomEvent) => { + if (evt.detail?.toolGroupId !== this.toolGroupId) { + return; + } + + this._syncVolumeListenersWithToolGroup(); + this._recomputeToolCenterFromAbsoluteCameras({ + emitEvent: true, + updateViewportCameras: false, + }); + }) as EventListener; + eventTarget.addEventListener( + Events.TOOLGROUP_VIEWPORT_REMOVED, + this._toolGroupViewportRemovedListener + ); + } + }; + + _unbindToolGroupViewportListeners = (): void => { + if (this._toolGroupViewportAddedListener) { + eventTarget.removeEventListener( + Events.TOOLGROUP_VIEWPORT_ADDED, + this._toolGroupViewportAddedListener + ); + this._toolGroupViewportAddedListener = null; + } + + if (this._toolGroupViewportRemovedListener) { + eventTarget.removeEventListener( + Events.TOOLGROUP_VIEWPORT_REMOVED, + this._toolGroupViewportRemovedListener + ); + this._toolGroupViewportRemovedListener = null; + } + }; + + _syncVolumeListenersWithToolGroup = (): void => { + const viewportsInfo = this._getViewportsInfo(); + const activeViewportKeys = new Set(); + + viewportsInfo.forEach((viewportInfo) => { + const { viewportId, renderingEngineId } = viewportInfo; + const viewportKey = this._toViewportKey(renderingEngineId, viewportId); + activeViewportKeys.add(viewportKey); + + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + const existingListenerInfo = + this._volumeViewportNewVolumeListeners.get(viewportKey); + + if (!enabledElement) { + if (existingListenerInfo) { + existingListenerInfo.element.removeEventListener( + Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, + existingListenerInfo.handler + ); + this._volumeViewportNewVolumeListeners.delete(viewportKey); + } + return; + } + + const { viewport } = enabledElement; + const { element } = viewport; + + if (existingListenerInfo && existingListenerInfo.element !== element) { + existingListenerInfo.element.removeEventListener( + Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, + existingListenerInfo.handler + ); + this._volumeViewportNewVolumeListeners.delete(viewportKey); + } + + if (this._volumeViewportNewVolumeListeners.has(viewportKey)) { + return; + } + + const handler = ((evt: Event) => this._onNewVolume(evt)) as EventListener; + element.addEventListener( + Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, + handler + ); + + this._volumeViewportNewVolumeListeners.set(viewportKey, { + element, + handler, + }); + }); + + Array.from(this._volumeViewportNewVolumeListeners.entries()).forEach( + ([viewportKey, listenerInfo]) => { + if (activeViewportKeys.has(viewportKey)) { + return; + } + + listenerInfo.element.removeEventListener( + Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, + listenerInfo.handler + ); + this._volumeViewportNewVolumeListeners.delete(viewportKey); + } + ); + }; + + _clearAllVolumeListenersAndViewportState = (): void => { + this._volumeViewportNewVolumeListeners.forEach((listenerInfo) => { + listenerInfo.element.removeEventListener( + Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME, + listenerInfo.handler + ); + }); + + this._volumeViewportNewVolumeListeners.clear(); + }; + + _calculateToolCenterFromAbsoluteCameras = (): Types.Point3 | null => { + const viewportsInfo = this._getViewportsInfo(); + const uniquePlanes: Array<{ + normal: Types.Point3; + point: Types.Point3; + }> = []; + + viewportsInfo.forEach((viewportInfo) => { + const enabledElement = getEnabledElementByIds( + viewportInfo.viewportId, + viewportInfo.renderingEngineId + ); + + if (!enabledElement) { + return; + } + + const camera = enabledElement.viewport.getCamera(); + + const normal = [...camera.viewPlaneNormal] as Types.Point3; + const point = [...camera.focalPoint] as Types.Point3; + + if (!this._isFinitePoint3(normal) || !this._isFinitePoint3(point)) { + return; + } + + vec3.normalize(normal, normal); + + const alreadyTracked = uniquePlanes.some( + (plane) => + csUtils.isEqual(plane.normal, normal, 1e-3) || + csUtils.isOpposite(plane.normal, normal, 1e-3) + ); + + if (!alreadyTracked) { + uniquePlanes.push({ normal, point }); + } + }); + + if (uniquePlanes.length < 2) { + return null; + } + + const firstPlane = csUtils.planar.planeEquation( + uniquePlanes[0].normal, + uniquePlanes[0].point + ); + const secondPlane = csUtils.planar.planeEquation( + uniquePlanes[1].normal, + uniquePlanes[1].point + ); + + let thirdPlane; + if (uniquePlanes.length >= 3) { + thirdPlane = csUtils.planar.planeEquation( + uniquePlanes[2].normal, + uniquePlanes[2].point + ); + } else { + const thirdNormal = vec3.create() as Types.Point3; + vec3.cross(thirdNormal, uniquePlanes[0].normal, uniquePlanes[1].normal); + + if (vec3.length(thirdNormal) < 1e-6) { + return null; + } + + vec3.normalize(thirdNormal, thirdNormal); + + const thirdPoint = this._isFinitePoint3(this.toolCenter) + ? ([...this.toolCenter] as Types.Point3) + : ([ + (uniquePlanes[0].point[0] + uniquePlanes[1].point[0]) * 0.5, + (uniquePlanes[0].point[1] + uniquePlanes[1].point[1]) * 0.5, + (uniquePlanes[0].point[2] + uniquePlanes[1].point[2]) * 0.5, + ] as Types.Point3); + + thirdPlane = csUtils.planar.planeEquation(thirdNormal, thirdPoint); + } + + const center = csUtils.planar.threePlaneIntersection( + firstPlane, + secondPlane, + thirdPlane + ) as Types.Point3; + + return this._isFinitePoint3(center) ? center : null; + }; + + _recomputeToolCenterFromAbsoluteCameras = ({ + emitEvent = true, + updateViewportCameras = false, + }: { + emitEvent?: boolean; + updateViewportCameras?: boolean; + } = {}): Types.Point3 | null => { + const toolCenter = this._calculateToolCenterFromAbsoluteCameras(); + + if (!toolCenter) { + return null; + } + + const hasChanged = !csUtils.isEqual(this.toolCenter, toolCenter, 1e-3); + if (!hasChanged) { + return toolCenter; + } + + if (updateViewportCameras) { + this.setToolCenter(toolCenter, !emitEvent); + } else { + this.toolCenter = toolCenter; + + if (emitEvent) { + triggerEvent(eventTarget, Events.CROSSHAIR_TOOL_CENTER_CHANGED, { + toolGroupId: this.toolGroupId, + toolCenter: this.toolCenter, + }); + } + } + + return toolCenter; + }; } CrosshairsTool.toolName = 'Crosshairs'; diff --git a/tests/screenshots/chromium/MPRReformat.spec.ts/mpr-reformat-after-interaction.png b/tests/screenshots/chromium/MPRReformat.spec.ts/mpr-reformat-after-interaction.png index 90ee6e7ae6003e517f8b8e0a89a920b27e1f5872..e77d7b541f48e443a6079395705fe7623372b229 100644 GIT binary patch literal 357646 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 z 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

4T|g(|OH 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

^{)jV=~37dS(G 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

H~SuLYq35 z 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�@z%$rY1MiEK%zfOcUnY4+x8jvY^+-Cy=ipMB7Mws>1@B+WO@xCr`9&y z@aNz-*=*2ojJxFTQdz~WQT?}fH%B6_oavm5l(`UZ%Mpb&n{$9y^CniHz1P-OIGt`LO6kGGQ#kI#Gh) z&U>7g58;9!Cfx%VaJ_998B5;32fLS}Fo(%zhItYl#-V{kr)0cceNLDT?BYM-t~Y4@ z7J|uTeH~CEL!Bpf4y^^zG}QDTVDW#$8ddKe`Ga!KHju6-r6ZAtpLm0cG`en+YmT{%9P%FgZfusIf{9D)=5v|j zNJjG^@N-)sGqwt@dWdOWisR%2I<&!b9|xZ45-iN(Bz z%Of*#?(j#JFP04`r88-Nc_)ilB{-7b>*~OB2{RjM+N37Tq(m;gVuuBth8(U^!lA)_ znpcOZ&_>wzJMuj~{Q%c^q=fHovgaTbp}yf6Pgm{xQlw-aqfM;VqF~@s>h2xDZ&4Hs zY`pp;#X*h)kAMjX%REG0U3=1$KeCFG$SB7^aKYNF$%7s<7KpuC4|mKK#I*4rcK#9CZ)B7xT?b zw|ZN9Wc`ox$dqW^n+=H{e3OOG<+@9HbQA}yUdDW*u3r6vr;(=t3unhPl{LcjwFDDG z3UEYDXgea}8K4?eNiS;1$}~yiME&XnpW%%8KdR9Epo_NBYCL`~PDd=f;~hbmZHKN{ zi&X<9pY-s@mX-)NN)6!&gbc?vr<8LWxy?=cBgOFO(OK4k1h_Fu6T4-n^*$NO=d|_x zy#Vdnos4`IR0~!DIm*W3o_zU4e z@C=Ludas9esN9CgZ12QVnj}rQait* z%mJlK4sQ2O`AzRg#@KOGhK#v4p9sGF>~ghVwz;seweYjpxKc6my-FClhzH01m;yu1 zr`d!}i-=$?dLyCvB@W!kchvEB5?Y6vq->p_S`yD)%_~i%V=4&ox-tbb86^l=3%xTi z0opsPQ_U)9DZZ-oLTPLm!7ac4mJ0DsxI!#H>m2Ng@-?E5Yi4}?HqZ~E`e9~u9}yZx zgjhFLF8uQKAy5u^KGxeWXgJI0;Gg_0B5G}@&3#~!NLmD?Jm=G!v+dL3D0H{LI~pvD z>(E>4*vId~-R20!TI&ZIQsrc1Z4f!QRqS@6YX@@WJTgrx(ymv2Cg;22+?&hRixYya zA}2I+M9f0s1@1_|}0o(PcPnB>xDHz>lZ8jev-qR(N9)i1T-N_t=Vui z(;rl*>)C3VUkr;Ziq&w+m)%p&j8PIBpbf<-$#+sqR7%YINm;xr4+-}k)}p0*;wR|p za@`t-Get&HYk>+YPOv{aMpHmBD|V(d!>EoQAW>I=YQa~XuCuJOmsL}d=B}y9cyO0K za{w=vueCVmjt2uXtNHGQuYY=x7wYPwV}oR9dbU+xs>^rT5Gxh4oMmc)aVTq2>YoEq zLokj*EDL!{DR)neA!2AS_NtbUcpITGci!V^)|9qRjK$x9H4R<|nT+38_bOI~13jvf zX$YTk5osG{=^?3)(`Z5Hz_5KJddsqo{8HKQ7e&DqE9gvy21kt+&0E#Vq&hUJ{Q(H7qv2e9T=!=})1 zD}`yL5&RxRiOrdrQI6`?v)Fkv6q`#P_URewG2Wp(vH2$Eii)DUlaareH;0XpZDb~< z#U7$rR&)A9=l@`Tshc?X?El){1>XtOe@8tqw`)_HD?P>4t}?QUocc$^RQ>On`Og_f zF_+5<;)lF&u0Ip6w?F`e-cOC3d_nDc!oTqB{nOmHzB6l!i64V#0sGz4G6l1Yd}Q(G z9MyiwT4wGycieW9cr5|OCCf$*q-BqqF5egBlei^zTgg6h8r~Vp@IOn}y@sTfmuq`wTOd90N-VAbq3`A#L+jT`0vTZz36lGU?vGZn<3ehhke?_%V* zJuIj-=H#xnq=h(mlsi#YG57^M_Ts*Qm?U5SmCO%Z{PUy=Vkh@`iwEKRLHJOPW7OWc zdu$;ER?S(<^fl+$!Xk&|`Z$!ZOm<}q;pQTYppy0&pM%rN)TqPE%TYMABimp#(SM@d zj&8>4f4qWW`|a*wmiikgVUGSpJVC@~*6X6h6T}c=qZE{|RVP)?t$3VJOnu`Yr3Ld) zG(E|u7?$9v#c{6xUg0Q-7g4CdkPA&HilCh+a{1=G@WH3Br!GnBg9XJaT(N z8d_mNeyltZiUcPMPM^DKZn4C05EA_7FJZIl#5QvFu4tyUk>>pGF%-@}5PRF+O=Q}^ z=KyB(b?+1g*GAm!$wbO%idkW-oR22i$~ ztA7j!3Ow#R26w79(kcd|EO?3<8H27=I1>cw~uY;cObyJz{qMzGOI1xiLUg# zSXBnn(W$h?AGAof|JY2`Q-#O6QH){$)xUD~yU-%+6$a+Nu!7n)R0p*E7|8zr7QimU z)FAC~X9MJ$2X$TRG|XR8;pS5J+2}h^f}KeLswgx?BG4R5KSE`e8zyrig8_PtXmi*% zbv0vbLle+Nvu#)JA^Xifsxjv@0#Z}Vn&?W!#JMdSgZ!mt6*Lpduf2AvHm6Fv(i$t2 z>M6d>B&P1er3V7}F~Wd)SJA_1u`LUe)~3>T+bDxCp~Vjop*7IUNz+T453_*68PF^X zf#K!+djpG(LLlvM$D&w{q+~RUHzZKCj^z6DKV_z9ME!u12S6=In74H%meZ5H`^IiMzf2NXo)R&cj$zyGv{oMaG0^XtiX{mh<-nd!{ zsIiJv3&ZjEpc4=|vio-fgAJE3p@Usa6HWiK!pM@A3h}huJ>od0R-&6zTK?9ivQ(p} zG{n)~8x^IB-h|+hSm|NEtdd`H`t}~X|C>pfPrR4Sq=zUVk0OXNLNqA)=H)2o3v_LJ zJ_jxH>-ym4d)dvgXGif6zerd8rUlNd$XSVzAPfaELyi&PsjoMorJ?xx0>~xA3h_o05rjn)xCNLg+57U}(@tp*KWcJa z9^|I|Hv_n#K9`zN=|Dp(VX{sz?ll1i^U(@oM>}6!%B;>Mlk_|{&y^Y`Q^3xNxs`zZ zwYd;f_IHU~{itrc&=zB(N=r>$YiR;}Iv|v9GGIZ0M34IJ=3`HKvTR87p54;6JOO?M z8urxV#YP^%w);d);I;9#VX}!|64k5aB_DKG|(D<3%M>G1NQiBNxN?*7V5U1 z!ia^=48UN_`QXQ?fZ{;?B5i@&P)&4z$TTusHA!q|n4 zCCxt7Wlu)gm|XQWap%>AKB4T=O-UXbr>P7zviYWJMm!rWw3+t z!}KWYxi)Q1Fu=N50|f*&w)`rBX6Z<2lJYx&ymu<*~SVralvYyj-;y zg5R7)u&f|eA5ioeqRP3Xd>l=fUX)u9=f9jB|_C=<^X&_4b_x|-MI^zb6fEce? zASh5*^iwb-mWS}EQDNdrn+CjXk%Z-eiJNb@WMlF^0x|qC?P$U!9ONI(zk7J5VHZa-(QicQb zK%z4Z$_kzQ$I~K(r#Cz1kqxs(`WVF6m|<%DjEOXj{VSGkiHo-^@V_ji-sf$K@Y{47 z%YPyhu_01|4(x}yV6It5KFs(s^sgLnW#J7}^T)NVPfjmeNQeK*D-4p6WJSEfmb$LW zV)rHis_GRgO+ju*?NEQPuYbIPYxm>Nu>UKPGC4aigNzI1G^;6IzDT^M<1S(lSQ6z? zBl?I7=h15B5iS#nD|3yS-QX_s2vvq*<@`@RshuWg%oMhC-*i*Uij#V|tmBGjB2qeC)ZAVqc}yP~DAI##*b&=9ScZ`rZ9TvhL>CEWP{;&2T24+2RhDHb6^ zE&}f3)pzh^z)ZQf=9MUOmmJ*-ikNicj0(%Vn5P`U-g*QknX(?rnPW1qwQuA4ZhW5)kp%)G7Tic3jfjN zf6pVA(vEGy({m;OX3;5E)!Y(k#8mo4qHrE5l!o63{LBpbSS?O@*8u>eOsG6s^|QBc z6@NJM$7DT>E{=JN@tQd#nw<4=?pxOq>Wbl|nnk_Oby;Ioo;z62{0<8I80-bsbPBf@-jbAohq8E0Zi<OD*>be7yS7a_S5_c(b8Gw?~||kA0*Nje@U!_ zZ{eKSq%j@nRw=)vB^Qn~lDE8HwP;nJk=9-AFEQlqwEoC;>_##;YH$qj zvS!$nh(5;D@Dn1hiPL#^IIZH$4LrCYYqefHY)fN8hVF0)wKLFWbjB1RMVi3vlJz%O zg-zBPIMQsdu|{oQbDQx)N!vwtm!$9yz|2M<-+xt04Iw@hb;A zpE)1boIv|QK)BJUBQEFrE6PRRf15e$jCfA2&HHto$}zYlw3x}{cQ+`7vFGaSGlKgN zV+pDXG4R(xHB>FgI9QwMYjca7N+ahjxo^8B(;~m5`Bg^v#`$O%wBDvNRu^Tp56bH743Up#$WgNvI?F*?iQr_5WXs0XHxq;I{b<0 zkk@;q_K%!vy_AlKVTXXXU88rWhKfddx?1-L93Js6L`p^tA_O_ z3S&{VVr!oMtan?d8s3KhGKs-nF?H)GZVY$qFgnWpyL~$oZ{I&Y)WYZz13V1O6V4nM z)_5RETG@nYw}MzpzMTzXseO3)g^U30&S^pw6l>NW*>YOCO)H~W+2EM9E*jV0zLH%Jv-lE3P`iACmyo+oL2I5;2e=6j4DEx;?fDG7p=MuRQ)phc)cG- z&LUAxh~>(K62a4UCu=AChp0|aCQc`t!>o&E5Z;|j0%u{=MPNF{3MZgpPUH4n4^>@r{Z;y=gX*D>OIW2UD`Sa#%}J zV}0sZK!+pkEh|QJt^QqJ8yBn^X|5gYnFKl5kjNWAwAcF3F}rlnD)dk2?e{>z=fKo! z^%fFPXD?gPqW8c5UA9mg>yi(CIXliJ5VITuKP1Idg>KZzFFyj2djYxt76-!A|LY0lpj zS2IMsQb5H{GRw+x zS?l}hcVJ%o5J!sU#vhvbe<%?(gwx6bW-JydW4cos)?+I%Tqy%;o$eSmDRPTW!6P7p z5kR4-aAwB38>+c0^ViM6SBz1r$N1%3@}4+8MH1VwXg7+eEf1c$=1nie;hfqu_d|Q$6vi~ymF>oV-e{4VoBdC} z;Fa*8TM4fS&D+)Oc|-ISK1$v&NhT8%U%*H8v^4guJ1%{oJrA1ZCy7Vn@2~d!1sp;+ zAy%8V$@ve|9C`6Ws;;@ zsp*MN_6wc=W=(Mp8UoosPeY7E2&e|?AkjnWl~Bu*(DS?*96l5_#65@VeiXNJUd(+# zG`2G6m)Pi*BaqK*?bu}<8_}j6Y0|DSd_MW;EwFvimNxL!>h1BY2okQ>N7Pr&W-touVNqR0!4 z^J4gnLqj-DN^dVj7%D?zderqC*#$TJIxEfcKd|Qd*M`>mdk>1wHOM2E@zxMKFu z%%-C0X(-}Ag-xrkL`$l`fW`ffcmaBbNloNaY|65cVRu?IdtfbTsX{A^Ne+(6riy+i zScv@V||OS%|JoB`3Aj(oOCv z8o@)bc;>|(&3|{9(^qd0o1y-!leN?VBqe7AO$gOMi3bj)A>hJJ{mgNPNn6ltyVE$- zvoXS@?A;_a6kGbDehHfS{{9i*x7U$-(Noz%yUsPbF3ZG%G#LNLbZKL9XLzgEhG&bUJL$UqK%IJ_%iogqM z3!ixi)7bsnl}3RQuqahJN-^aee=TnDpiS>RBoha~9Kc*ec>Jea9U7%Xx}6+?kMAp~ zV-3!nCVG5kdJLFS0ohwhU6MmUpeTjJ}w&rd18GHCj zG%SLa4k7ni{FuYoYLjK&!DCNnm@*4D3=zIebc0O-%9WI9K|?jl=SWkN zg=uk(D>hjgwVNxK;vQ!>D)VlD5B}T@M|iCZ-NQQN5$(!6CxH5PhQvM{$rqItFcac? z#+;!OgEC$DX3r-(Us0IwaW2TjHLZgu>aEMTmuI)v`B>6-cOVh^&^A?p? zy-DF%*oCCUoz$^6-~UslRQ&CT_w`pRvdBd_5-jes1NE<>9q3*zuhQL$|D0I9pGUsL zs8l}aVF$jSQ(t(0D&10AZb1eqI(>t6JaGy`lfBli1%gUl9K~Enov`Oc8|MtSBS2Cf zsvh_b_*3wlK3b*qr0%-lDRW?r>;(wQqXXgT7j<+* z2u88y&qT*bF`e%#s3+-5qWIgLsgMU-NdEr*jerl=?j84Q9gh;t2|4^xnB-Lfbr9nW zQfsjI)@d3gf?x<3#Jd*@I&t+qB63*qd*cfTF^l-H!wF|H$ z^6X{2R+7!Gg!#pRsoL)m-LW-LiM>bJ6mcl${{R?4=e`V6CsmxXe9O59u0ua{(e?EG zjy>42C@%c2_o&)Z-q|ZBGk4TQy_L?`cr+da@j5nFr~sm$&?{jz5hZKgMuF^Bv{ho0 z;^~+K%s+K%`_Yw7dRv-3!DPrZNKTXw3M{nS8O23S4!kl7Nj~~{;!4RR+ZY>dJMi4~ zQNFKZU||_^(pGUnBroMFV8^M{LP>oxI5!DbI^sGsyu1x!gL=47F2@J~ zP;1r&1Xp?7t07pXG*?{`;y9>G1Q@o=ry2`NS2D&%DLuDQDXcPsOAchRWjaaKH2Udg zcR?E4dA88{BG=w(zDTj<2mt#{G1s3?06u_cSe?U>fF+pVLuHZ=zR>UrRGK8&Su@ZQ>g?%KGJoQLag>AL-u~6x0^8ElFq_Q+b;(RTnikPY_=K?bLJb z*#qmJjnZBIYeaY45j>7v{F3xUp3YxhpI)C#hL+fKmfa$gJTLJ?wuI5zQ?){!3twt_ z{k-q;)@!#DiXP>&>=cS|6dcEePD6G#6_R(>;7jnep(v4cC6w zrST)ybO30rb93yO+C^eOjP1WH6;?f$AD zsrXetU2qQJT!-*l(%CXTJn9~UTb3@M>FJaibgZ8=aR`;J?GC&he}4b_-~Vs_?Y{-m z_|~_+73SHv9-t-A;O9U8`GAE8w1ejoLTc|aX)w(xE}1#bnZX|>Yb}H62@fE0Jidbx!@~w6!4vd+}QMh-2valub3b+$J1l_`yFElbSCvXNqiqW`&e(p1m%O>e4 z;C}%&0x^0^{}CjnqQ1!_#?sS+6#6C?0O=XH*zxRe-k;M4*hD&4u|UrTOj>{bgWlC4$(O^tPxHtl=ra=+?GTg|A?H5<5W2D`&W_f|a#r6XXeC20Pw4o23^nZr-w; zmsDXUywMUj@-;D0*AbRo6Ww2IjzDwqSb-J^c4O)srI|27KNmoY->xyVRa}lQ;Y;0Rhb+W1%`rrhR}Uclj)&G%nVCDiV?o`_FH%7yZDR~1nlm#otXGwmjP^; z0X<3iZ_on)E%AxoP{bLerH%bxg%i5Pse(Apvp za~S1GXuPcM4@)aIj8}Q(I&V{3#xhW>kK+67-_DcZPr$DGH9s;Z@LAMR@)0gPyp3VB zy6HSmK<&RtR@){Szws+tP`4rM8H;#j&gF*D%x9c4pAK6(X7>9l1`e`^b_tKG;%78X z^7J^eYcO-(+{XG?egq?ZfZ}GimS^}p1ITGq{vev=m1zv?b0dg*GTeZ`hz9&cfdk8d)7)ljiAvNJ!}^m0|$U+Tw%@ zYjfNjrn8^_{O5sNU_A@4@r5sZA@D%-_J4beM+0WVX9;0K)>Xfki&B@>^Z22Ika}Fh z4f|@v>aPhcKnwuG#=rt>AMrH<+^VBnGS1!TEih6Tc;hUO-$oCC$>9)1x&NdwRI>0C z1$OdT81yDdZhSl=d0UmOQpEJCjE2m85?I%5ruH8fyKzaNh54sBkyEX&=5nssqPE0E zE|8~l+GjrVnLqv0KMhP6Px(c6HIF;q{hs%P#r|oWjX6$a1GAh=Q~-+gefi~=gKWa4 z3RsBAhd2le0MMN-2Yu>DX7`!MBqkx&I^Z$cJgPeL5tNy@ z9A_y6M>;uWW@BJZB3^7{O-o+WWE8K%#Kk3J;1Pw(3ZF>hWF3Qrsd>xVutCqr$`*gd z9zh0Uq#Q3@Uk1q%dmKBIxyp*j!C)QC(bBqWH-&EkT0c7SYo;kyEy+2vQgOwr_+}TW zLTR+2dEM$B+IpV_@d#6^SlI07FxxUa7xV&_`NP-=u>qke)zXRp?MC)Xb;l}Ww#@Zt zE)s0d&EC=vVgj^HVwu|Fa9hT*K%U0!VMC3+!76{$vE0{5GVAC}+HEaw5qlPo~G5Opju;|TS6}!gcP&2N8_U*UcKA$c@`*_wK zT)piMEKo7KGtbvm`X^m+@E6&j?g=LGD;}CQ+9%bdPfAljYYV_D4_Q`CH^sV%CMkK9 zPZV_dQ^>5-BSt`50N%&`k0Ia8D;|W?b^|Kk>J78a!`DP&!9{xzBt ztFrH`K03U54)eCDSG>z6fe*9)=0uG)pOu$?4mTH>lRnEIWCdlkTAAHcw5hdr-R$y1@0fP5d&TEt zKubREDZxN$DLttVDeWlmYB#!#$WRLkT7CZZ3B4A})sk642*aUeA0N8Pf7rl)PB zba4$9U2aIr%?UFX`kyQhu=Yd`0JNpoo_*tuH{$Gx(>kE+m%sewfE;lh?$dAvrnqUM zo~P{#BCll#8ABpXWXF=`SxfyBI>F(G&-Ym(;x2RaPwAuJ-l+>8zY5bFrYk1!g%@6k zVTU0rI*Hi}Op7xWj?FH$H_Hw4sfp%T$pyD@8Yy_OlPa}3b^-8s0J5j6R000mGNklSp#M%b7wn+q06?bKBlR6f+teUb* zFx!^JfkD9AwbETv{!qjTmMe13lCy*d-YrF!@wcs(%C2f=8z!G=V|u411zlW};w_!_ z6(x33m`|E2IX}ViJZ;)Q8hjDF0u&#d3Kv{QVUfz0ZAni;MA5`d-9|t=oySVUQyEw` zU&OxMX!+)^?lQq9#h@wy&u2;OKPmer#^sAkOF2rE;G^Z4tt3vPGPjLb(NmmtsZobM zFVnuA)dX6Zye-o)LKzCD*~yUyEw0C|`FU@#0YCZ4Pfl40t)EJ;&;r)R-n?!ia~*(* z2BCs^+bJ7*v?ohC4HDB9v8 zCa0yo0IyauWgU#$h@p*c<1^UK{TM^L8h=PRB|RM`@&HGLI=+bHS~Qu3gwU46=S?E# zbz*%47}FM5Hw8bJ1M{P?13!{kUC#G%Lr7JUFfq-wYl!3int9J~j%yF=2-oqi?_MN6 zS-+hoYHI6Ohwr76P!EbTKP2U&`6A`7Q|*EPP28!f81UO@q2)!@w_0X=bTKXPAcLMo zeN|l2gY(GH&f8d)_7;&$@1jlbst zS`L7c@6&Fy>54C)TJI@04l*4E{@;!^U>Q{;WsuJg9xXjQc?J$2g0B0g;@tnZRBM>*FSez?J z{i1FIm@i1Q=M0LYK3nzcCFPrQ_eqAS2PumKUBnG9zW8F8XTuPOa=Q?qs|4;&7!^YK zNz%r&v{9Tgpm&p4#FB^gU&9liC}c zw@W3VWi#kfR!KR=mzoZtHWu2Q7#0Wy-sWHY;uizW!qF~__5s>TkKqhWhq`%#FziOV z%i_IT=E#kIKk&g1BJL#C1(jyec}*{RAX`Y8rDI@LS!{`vXqSK|+c_OygJMGqgW5v1 zXB~qXbL+K;>3RoX8K2|n93J{tEC*f>lu{)D$!;vVq@}%{k*6$#8|{*zE$CD11NXgt z1}(JlQ0jnaTt)mI&2H$B&iSF9xuj_Rn;A4#a3msMv{+s<&QI4B_sz*PV{{ z4X6wrf?1`7*2U#`le`gJN=%Cy;4n z#qzm$N`Mn2@~M*Nb_cZiMDPJf04FJb-6ZE+tlu_f6XlNEGQ!q`%S|xJL|mw8Tw+aQ zZY5eu&sig?CH|cEzIX@JF&N=8Z+4)iR&p((rQ%DOAZPbI<&rJBIps?(PLKAhOYzcE zrUSTG9gAu1;!W5{8>2S(=uN8QxOn^?@{N4}DG*LwVI-__*V>%o1*=9}$AN9wLX8fibWG0HtHnOLdqf&W-~+NE zBXLwsD|)aUY&!4uZ5-JvefpB#hR7B>m(C`nDyuK#K=$2?#y8I!~670SVSxyl zLr&DoS>D>OI-oU4@Pi&MW9YRya5C-IdoWLL$}6wv*rGjLp7E}OE06~$E$|-T76R2!rwS_k){7gLp2jTf zlOaJ`SLMWzV36D-qZsJ0rp1q$kb-W%{N*pBH-KT4EaRSdV%!s-FIc*xL0AvYSpkCN ziiriqdKXdw|8|SPrPAp&tn1X>;DgKp_Q#*B;Kls{FGM0h*ilROi~t$O=YQ=06~|$` zG6eUyA+}+x1v(5mhrSF>7VvK*@CFlr3<@8Ic+E?mo3QTw>%ac&XFrRHjn3mr>}3kF zCN(o_x`%LjNjz*cZJo#5Z=RN0G}6iC^Jy1SaVI^sbRXd-!L3! zi+EkrHe1BIZ@#(+D zmM`k&=rlq0r~@mDOYrn)Pf4!Ef2FC=S<*@PE~`(Q*wr^tLNzHzVaa=^-Hpd>ciV1J zkMGYLbEIRNYYHgukPIKb{q1juN;EWOpZnbBCSuqvw2ylzYEPBi5^K3cR`aDuLS>ZO z${4P1x3e63Is#k-gJ-T;jr^Ww))%}v5K+=K**zPx_W&u>gl~ zodP96_v|TA#cxBD5BWF*Sp@sVb!2V5xFB|^m)TqafXi-q*iU`*iFw4C7Xv_Q(b}`> z<68**zzl%^<8zov!$wzn-Q9TlCE;P0zmZDkl&;YjF#fC=U)Lm$Zp%1ZPx}=-BsmE@ zQ!$=t!h!$S#FFsUY;Dh-2tZXcE)lBY_>3IL&pr2C^zhez{nsJK$GJ{Si_}DIF_PHQ z%9!`X$Fd4da_T5^zmo5`2b#D==_3dOEaPTzy`|l$j5xNY%W)GAb{z)au8KLmjKw_b z5?~pET1?R&|M4G(emzJo@DFqfvGifEef8B>b!KXJhPMY>N#U}Ie+z~ex^%Ds`2F*r|NJgfI$x zIG!a3DyN`$nEy<%CNt4>YUa4g? zMEeytDqHjF>wwo6@%_N{Lcgyv-(#c1pfKJA5{RJS~$ryLobHUuKQ z^>)C{IOa-^5(2`!&)W5%%wPz2nR}mBrZ!rWv~$iLi!gC8&|E{sHU%kAZU)?i7;v8j z7wFi0&OB{+)_tZuzxV{yUCY0X32Y`n+azj^tb3F4B#g?oC$;i)QMI}p>+0P4^YB5^ z!?1NGt}?YGfNO6@ThG_W>A-ve)#X8KZ?Z$D`ScNT*bM^|FPG66RYn+p<8_9;f9qe) z&&m+C-AUx?CDGc|4_R*5H9NWy)Ct+rC#8)gA#CBy6j939OpFJ1CFywd)hVw^0)>?m zt{s}F?X+jGQe7INS$zw3^)S(vQ4{e%8wq&0?nn9yKT`2bPxlA+<~kt{>`ncZ{rXz1 zvM8|7&Cyp^#I8>~>^}!%{|}8jt1O^eAAMk<4QVpWm`G|0ucRu`FF`4-Uq5HAZIo=K z4i%Cjmk+gEl=tY2*bKoVzwlP|i@X$<_crG}E%tKdmXyrDqX z6HdTN{|A5Y2mjyy_y5Jb1sTHu56J5I=broQXFvP#r^sxq4WbO4{Y;8yde@``In{2= z3{nmwu!prs zFTMrA)G{v`u%F5CcAZk@h!P2a000mGNkl(ym9WKgZ4%A27n*u*!oj&*K$>Q{-dqMoaWaZh2JC%)BXDjB;`Bq~g8 zhLCOn*iKWm(jr^w;^(mUS;w-O=#zMrB+W5U;NH4(=IMM=sb~UV{jtUE$zsIiS*FtA z_3W&p;|BT6Ns{m#9`ocjyrD`;s_9T%u^Bs@_+%Mn@xFa}-JP0ZmXy2XQx0_*`Vy4utP21t>dK#A!TDm%u^)i8iK`x0d7XS- zY2qi(h49gg$@$dJIveM#HT|!@{8wa>i+{o2TGtwL5)iFGRLM@Z(NRJN+(d=f#K?T! z&h*VD2h)L3N3dm)+mbQ2^oZ$_{JtY-7QUSOecuojSE*=a$wDnnyW|p^)MVbxO>J0$ z!=~U+r|$E$ zvLp8E`{r4HahM}-^c05meUoF`Is^ToLHQc(QlN=danXch_<(z3oP$`qjp^vgd+S_A z_{y2{)wr4u5Xqs|)gRan6V3RO%#wP2y0er64EE!{3x(OfWFUqUb5GP9 zCOG7_jr+r>7`P?Ar5MewKK$Vi2N?V6SHHS-PtHI2lRt@<3W)pq>#sA(Z58jzm9q6u zJ30yYYTQmINi=FAu9>*&s2o5JMe_nFvW+zxOoX|bRwCn(kzJqI}w-`{vDve%Wmp;wWVVPE|x4D z;t4O=Cy5+*k{f^3+B9+SCiR{&T@69_c)prGv84Z1ODkMSl}!;qYonaXow)B-$s2Kb z({hjl(?wF>B-xC11(v>hsRf>`=MdKsKe>$wBz=K8`XFE2z1DnAe38rNTFi%c)KQi3 zq}Sha@~7MM=5@fnob>f5&FN$xo4PGWVryM;Tu<}kKA2Y6e2iPeoeUKNg&;A0{29B$ z({*i2Czl;}?O5-gen5CMI1Ch~aPEN1k4X!j$)}T^_4N;Da?1$4dBtytGDY+?mcF%+ z4T29qEf`}9Ie~=?z$#nT;~}7JVxb}>6D1b$#;h4==gcN>-tNo&1ZbP2-XS+uKudS- zmi4i9O>qO0|6x(inI6JYt*}YGuAS0)@cgn6@*&vZrdUKWtZ@0teD=qo>4SW+82N%N{WicpoPneJ%X-7gmu_`i7NmW6!#dOhKnq%ja2z<0azEwTCU$?o zDquXslfdC8t`c)17>^cR*de`(o)BkYJ5od9eb1q9nI?+z;$4=dYGZa2ik|nGte@p= zh=iEHa|kDO%SjTn-34MO}dzzKYh!-N>%Bu0p3Lv-=CzV)q7ed<#%;(g*1pI|?j zbDoaB_j|t=H~-T={Zs9!gZ}7`{wVGbOdFU7LBh%cxEZ*bLuM|W@@4-SB~kLe03CYxFwWzZelJr(Q3mA5g_U_pZQFfXJg@zs|hy1 z-|Q_`=OZ8ah&^?q7ElFBOQxu7?%c~YVc5`{SZC-#*zm}0T@iy6Xe?$(ZHuQRs%3(4 zXjNkTKm6ejLt7Cy$H?OquoI!6DH#xp9S6IOO2b@GWs9_OoHADvHbTi%=h%QS8sin9 zf3Zv*(d|EHzB@J%?8fm`>>XH}Ln#wF1(?Uj}@2N)-_y@Z*9JAq2 z4F-a_#b{fmTgUvvU=>e~e}n!5{GYPICzI~nXBWa>*pMRi0MPQ^70{McZIsc4q_qRr&8cVp$w$!m zmOnUnUteq;oKKr%9lHu=TUuzzcwK4;VIGj`AyyXEw!tuwPyRkz z6TN_o!QU1@TO{s=!?tu7nJlzij=|;ld>=ADY_KfTU@1>?O%b|Gjo3M}f}@?JaIP(h zbG9r@LMde>S`!K^qr_}Stvm(fbN8pb$X;#CI#Wh1hRXVW!zrDAmUM5yW6hotqdswv z2Y0Ub`wcypj+V4E@gF zF2{$%E|MyurPJKxg`vMy2CEC|3!tr|lUkKTmH2rT^RM1!xktbURKnq5;fqagT{~N# zR}q=c7extQ%4Z$ue*47#*H&(WQeQA_8BaRx*>3<*A6+nf$LI4QyK?WfD|^z0;uxo! zCq7_LYUKuGwId0E?I4DBOQ&D&DM^velQ|Mn8d*LtftU)i`_i zS-}WmH=Y~g4^cpqMut^3u7`m-M*Hbce>%qV?Qefu^F>F4Ei0xye*W5PudOLM;suGH z(f;&L|1?%A?7i_uVbu+Y8z27SFa9DRF*4;$JlDsB!z;(OYii5G5> zAjYhix<*DO}b0)Tfu zX6~cQvGTY5DQ-&q7bjGe6xe*ktJFeWurM?(E{k9;hlfQ1>>4saa%z1Qne4D>DcI;vy*9Vma zikF+B@TK#WZ1lJMsyv9^SMD_RxlYS;CyA;o0#$Z9?-A*CU@7v$`K4S^(D`WJCgu2; zOl|_SwkW(fY%&>r_qr6AV8n+l>eoqIXClS1x4Nh@P0pq|`Z_gn)>D?t&+K`VrZYLA z*>xSKwLVmuWN!yVq#dri#uxViok@QXNqTx^`)#)c6H>X+2F6>KOing(@7sIr$%s_@ zndp{;(L_%-F(p5OzU4?oGCk1`U5+91!K3eSue}Z*-DrWwP!a<;4IKsZ-a4H@C@kG4 z4dQsqI%ycM9*L#Ir2LsSg>84|iDptWQT5LjUo3!oVNU`_zz6=qwO zjfitU-^VLp;i}kMFdLH&%tj{eDT+}#2Zhygbwg3| zvJ62i;(wysrd<6DuM+Cuz??it8I$Va(A8u;D*~Qdy1}CoPuOOIv=DUquN}?4uQymq zQ60ygqER%w?>-AIy2<;ClKzZQ0kMF{A#ZJ2IS}e07$Kv*Lu;f4g{PRJ~@pi9%>QnIwu{VP_kwT2ftz>Q6kZ~dGstwb`Uc~2Wpe!~ri5#kd z(89#O-bKAj>E>;Frn_@vbH&d?>4TEaNbCg9d0_a~vslG`k3n9vSN-4n9#ju8Iv#;S zvasdeW!`eUOT1mY2s+1gga<=Kb;^<_$Y2MN9bOEmNvjrGWM~7)5#Lsc&m?X%IfRNv zkM|5xlZEyqnViaK30D|-%KX4p!gNVsCJ2^{Wy{!Liro|0>#4wkK>nbDQ;&QTYl)>K zjW?}QPPS&G3B@2Cp$iDPX}bTN000mGNkl^#L^#!(IPCXH; z1S3=lTjf%k7!X>j%={>PNO_C99&;kSJ@Ku zlA-C$>%8et_?dqK3L=FSF2;a?X9_ibTg@NDie-$U-IYJ`I3JC)Hl9#r6yKK-&T_opfaux7j;>um2;cGWx9cR7 z#ilpDez7CT9v75XXEPnr`Yt}g%ZXR$R%()qcuV)UCiZ-2w_J`7_Mj(}KIm{2rZ|@> ztu1;|A5*s|1JuUORJ+HD;5S^l;gUzRUr!4Dy{C4kfgF z7kf=W%+PHx2lbV$wLkV?6+-n~L<9x*>K(JqsosBo{;NSl3-~Q7-{nMLozNs13^gi&w1C%WKkN@}&adPtkzA{=$ zgwvAgHl@@-LkK?OdTmMEjJMa{5MH2=qIt{jan1%!d@1KWKX;?8>kQ+1smzVT@&kk7 zruASJ)1eKEBwZ>1?R4d+Fy6C zXC6j0uy+|okF3LkUQ(DHBD37FdmL>10Px%~rE~Y5xcA4?;ORb$y`Nz@{}?{b0n2Ekbj*U*@QM{QKqRy z%Dc0_UN?JAGR~Aj5~k!3KBrjI4GUutZrlEG&4hO2D?2}%W9%z0x^MFoB`fofL`%C8 z8^4R$G-=6b$WO|&9+)%*FEyb(NcEq0zCXsk)s#wqWn(2{-lfnEY1?bqGCNvW`Pp=6 ziPE?A&9Y0Ui>u9-T#h#gZQHe#p8wo9a$L`s-jWqQ?9!aK2cCQ4H8ZzOt9njG>S8Mr zY{Ou+%W;dHTyj0E=4u?~#U?H)ejbg)+3cn*tQbh zY|rE(CCT48+j-768kv(q%kB?R6(p_X;Otn&CGHgL-urrb(*?y-R)C`t*y*_N9L4ZtRL_@xLn4t>z8ZT+AzJ$=|i##HrmX` z>^vYnfXmO*VFQ2q{#xPM9{%<`=SzFN>rpZ(wFf7 z@QW_Xdzp0S*fIUK>GxQ_%6jLq#~%CBKmAj&N42JR2)*O+V`yV9bHcACKB!YlTMFOM zg=Ed&b=O^3?dry-;XdSfpOOm@SD{xhQWIL5l9iyHZ}C`9tf(^CcLmIJsKRpg&Y#bO zb~;=G(Io%P-~7$9&p!L&i!Z9%>VvNJ-S2)^Y~8`MxIO20-g&2l*+(CJR5Pii zQ3*gXPBg$2`V={s(b{1G;O2@WE1 zURTjXX_nM6U5H8E>$Q&P5~X694GXgnFowhXJpN0Oycdk+N!QMc+MK$gtHa=>uIq>s zKF=we6zm|F%C_#0&7KiE2rI!n!rS~+<_#|t+95V>$l8^6cD+T_obojGxuz)HZbF+~ zj=e+FQZ*@an3l9w%lN~V17r(}%7k`^nz0+yZb*K)ZGEG6PCi;2%eW;IaGo#4G0y8$ zY6u0%-?5&|gOt-a6I#Fa@9U6^KVNYOi7)@iZQBGMV;*(3mM;Gryv#~Hu0F~e1pVP% z{_@W2`)j$++pP^73T>P?Z;|tjv*vY!V@$zjy@^W~niGXvgire-WuEs}N{h`?`*ir{ zkL|P75)x&a7aIz#^~}}8?(bdy+4VzMs3@OoknuyQon?J_>i69-w3n9IG|z{aNBJf$ zQp%Y;Z(alQd?*2!gU~Mbpxe@4m*j94qeA;$lmX{^uhuc;_}EwyzF+x^ zW#gFtNzCiJf!oW~Pxp{am#w*NZJjdByS^nhTF!lFTNA$BnQ2XXTx4D`r<{d(t!^%u z)aU6^#)r-I;3LO%uid>=?P88!tBq~PX+6`Y`b+oyYY6k7le{smV{g4$drSLzZQau_ ze!7=0Te4?5;h8e0-CkO4{Xy8im1#EG#zNb;xvd@gDRY_b(WO)7UHa|3J3MD~kJDBEHAO zH!efjOJpcUjng_Zq&LI6zjePvcCwfz(<1i%L!=O*U_O-8R$Upqy51)DF z8C^)1`^saFi7@}{XFrovtDA+dR7<-U{?Q%Q9UJoZBTK?UU)!<_c++y(u%3x(OlewL z(p|^(q&q`OQf29E-eqo1Dg49G9hCa_o$q`H8B+vaHkk|LK%6v_ns%+;ofVZb7%Z~C zZ+Gk3td|OYv#Y4=-XAL`dwR1#mT}Gfw<9bX-+hTE3FC44uWchAPp_S^xltfqi=kugwm*eIb+G$}S(dy+G zmBaA<(C{hSGj}H@g4G56tS{Y376%`G@Zl62slL%Wy^iM;A>tvl^&g9!6XnaI^eKaCvPA+@_anQcAL@zR-Flw>4TlfohYuxTPv3Gqf`Y``W>}SM_ft6ZI^$ltR%d;%rny5r>ifi7T(D zo!*q;3!ya?;TOI2R1Fs+8`H(e^guXbi}JkUmKx(SD7Tj_Axos6>Sa^1nRv$5L*}?e zy6)-Ir|(OZPDQs~dF2%dwq@<7pMF~6s*DNI6_FNQ7l&1m7M-rcvdnvVXny|cul`CW zN|k-})mL?C$;-0c)uyD{GiT0VvJ6S#Sy8EB8S0VOljDv3HK7~2NDOwk6k@l^tTV1h zxUD=%`lj5Fw81fDa>|{bQ>MNl?V$TCoWX1jn7U{qKqLLeH@=~j(0cwYC>E)V#;(xf zf372c=XZ)47hxN_$casladRxH6BF|Z&GUD>**M0bwm$M$-*UoswE8+myt-&D?iE_b zGJJ`H)$@3)yGY>UtqIg!t1E-M000mGNkl?Pt^1?S+rcecd#L&6a9&qvSIc;D zKvJa^`7pg`+j=IpIqfFc_R5d*yskD3yXfn%WrEvO8e(&8NWK`p;`Zqqb33l*&2q0= zwy45}&kfEgzH9k)uY19@UAED%Wi;4I%f?)8WRCRUL+m%rN%5Fcbq%`^v)u-v zC9_&?cJ(E>m=1>3@pe3J-G79gzWzJ7aycIQj;)_u{ifr4HHOgPMc&7@IbHcruak}0 zm=7`jJQe+SbM@ll!9~6nM9U8@uD0rkzi`MB4=IHTq}-GcX`(V@n^gIujsHILpyJ|Y_u&(=^o~_yXDJVSX`u4*sz7lvp+1<<-n{w>H~DPGSTGraNrxwl@RZeCB;;7Q;o zY`Rp+akcH3=WP+*9QmwyD}jHW9B*F^>v4s1BCAt4s^rlv)}u4p`eK`s`|+-2Fl?`) zVVz0lB@r!On#+93`n{WTH}b(7m!E&vBfPPAc3$hU=k1`c!3pXU-g-`}0(nD6MJo2~rjA%5bixR;W1&heEEKfIws2B>}o^;<|*WFl+@yrFWC zE$6yY4!?O=)r+3-mE^`;j%3ROSto8OdX ztNvd&e;&gcraB}g4T%+dmk#eoCQ|*Yc9z+ydS_a%FF%Cf;|KN9&FsGe(|Q8Bq5rgN zM52+_V|i$CH1%D$7-^+6gj1(ZiP(#ZYh18#iK~x3`lyD}E{psSin(F^xBguq7ANsm z|Ni>dzjmf5W_5^I{~_r`^SUWEC-=NDMlr67JS{BjX4AyqGHIpF$$@Z8^3)L4n;Xg0 zcTPcB9w~Q9#+(?t_AeyQYR1s+$freaYS`Ta4?OVr`& zIL8#LiAcf}S@ZOsC_66%iylPL1==?Ov%TmqcN;}@5=5BT1eWCp+E0*mxo0ve~L`)-!qh0OUjx|GQ%Bb9;C2XcE|85CO;g{wL|DFWjh}@V#p#Ye)(tKWA|g2*9o)4r`~bX zr~AiN`lr3b$DZykpWYI4n|8&}&XM+MNDlMbE!%Ne*93-j`>(AV1oM`{v(Z`}&OFbT4~CkzX#BVyo|n6w??V2O z&1<`*9TQt}UaL;nKCjbYAAgYQG|ubAx>|(y^XsFp2z^nUJ9qBv*|VSaIC&iY$CM;& z-nHewG5jehNNe-9Yoc;HsE!QTX_m-TH*_zRv1_Luk!kIIRPD}v$jhK*`DmKwwCmB* zMu6QD=Jk3ZZqxo6{#Ejp!4NyVzLkr0aW&t;)y~96}3LBZ`*CQ&q1@(@oPtJjC9_j+1ouF z*7$AP>i@ib{Pwrau)GJl@Q~2bcd~!V zR~`=QMH6#3hRrYJk$ByWPlvSmIIQ~|<>6#ni|b|_4}gL~Xzvp?LXX>8lJ?POy+8{1~X#ZTQ>Lu&-~SKzj3}i;C~vG=V2~^9c{!*Ey#LsF-`Y8G+loHQ z4={)U2B&&gJ^}ugKt*$%xpB3P?j|87LYwgapn6EbfSOEN@OHrtkb8Y@W70fuOmGGr zPp93V&ReKNm6FiESqa@ z`QGd7zMqc~y17uQ-p9%;uz4I2Vk>jjMWcjslH#8Xs$?hB^*=?@W)+Tw;5$p4B_rCIl%m{1huBXnmz@jXX`QVLj{Yp$HStLKI zS-5Bg*hH8O76)$+vmMdWrx6I?XFT{NGOqUxM4cFrv8@x1h-$Ate6IXvO=D^uS4DE# zi{g&V@}}#c*5E?L3YBRv;G__{!FD@qi_R-Ar)!y=&%;%1jF;avzCYOUwWqu6>{o7d zRg>oBW7+9Oh-vPYUGI+DBUuNe$g7z4@ILa6_Zt0ol^skO$;O<4-I6~Rv@Ih^bADLN_p482Gj@hUm5`^;-V8>t3#7lQ^-WH&Q6MT(ejTT zT*_Qwcr+uOLrK;>m`@r7G*PrR3FKoqowt=SIRR8tw~7`Gy?q?jYb1eKGV4gMw-2dr2>7{f+gI+@*wO$m!}my@fnklLurYWc8C zZ!g-J4Rv>jb(l&t!A1R7TOONLLUCJN-#*z%613fz-Dk?T^doJj`UdhZ(Bb zOhsVtP>Y%wL8BMH!KK8 zr6&j9b5&R2+Vf+3ALHpp*TVB8b00(8eXXP4BztjpL8WH%b%4l+@xV_fTSq}At;uH) z)ARoEr9MKwRe-x>3NIrxJ9~)L^qC4%-e;+$TbxsAeML{W6IESIJkz-9kSRWT1oYk= zHJZkZhsr}UR8d20a?Ii zU7jSST&iW&up-gK;jYAJC2FJmER^u5w}S~x5HOb?ek8NrC1jD>PA6rlP48#;-@?-n zP@a>tFup{HNf;wRE3~O-rDUlQ8fiCW$O020WaYZl04~MJx<)*33kG>se$E*5O zVQoQ4_`O9O90-`KGzKKF?_&2!OlqOr*)L64vXq>vl52W{4Goo!Zi-SkA(ZzeN!6h0 z?MQCXY_XjK>feJStV35<`oLzPDt0n0GnX$>To^Tv z$h6mysgL zje_g((VL8CRmG49KFKXlOXjMsPWG}LWrb0U7WGvNW;j}O6PB_fr-LsuVl)cY+byD> zUfRVu&AAfd!Yd-G--%UPA5`Ysy1L{j-F?)%Z%A4=~P}cHv z|L3(1726#%PM>rxhdYR;)Q9WT7|rW;yoAMQ_`aLdWMaNm)WYLQ!$nUNSy8rjp&V9I zkq!f8(G_EaTTj4VUKLiNkx?Xj!8W8A(x%mXFk_AwPjnll&=WC0H;u=3KQ!Q^_$NPi z)r2R_2yK(A62wJd4I zgyyKOfDlnOky!PR*lIb-53u~UD!5cKN>8S9{=n+P{Jy%HPlZ8C>)UZ*xW~2~stc=j zB44BC`wLjitAtJ_%h1Mv7WA{i!Kz`;%VedfwTsMVqa~Gf=5mP0>(FAG!75RBgn^0r zYB!gat=}6WJjKOma5r;pL4nu#&od*)0g)eRvp(KCgFdt%VkBhucz6(5&s#D2rpHz`Uk*Fa{N9MXh7jQuS?9?{4|#E6}LRu*=h=nZbv!S?^$->vTMS zm4}>_O>sXYv0a*fG>WY`*V7!unl@14@N}SgM&QlPrwucXBG0D$?{By6F3fdq;G6IU zaZtGKo3JKxK<(dmp=bNI3v(gAa?pYh^z>Ok;M0BI%xA$lVH;taQ2pnNYkzu-58a!~ z?!SqjA2I)n1+@E{g8!DkHlYK==pLi9z!8aP-SL>hT$4o;2A7_nI>$^dbpRqVyT-io zlyjns#UkQ|%N!is^`DWedl@IwuHtV+^s5Ut%9>Zh20kN&e%f7RGIffPQ1G};8OIpT zd2K7@DF~4)08#AuC39cX32}gQVGEr3`2;v|_6%O@Mu6m{$ff%cWRMS@)_dPBg9D>G z@&tXBze)pX6ypUSGs*z>w~Li(XgK3k?z+(J^3VczKiOZ^A%AK0y{1-#wk%&TNO|V* zkj_1TZ55fX%(69}ydgxt zz;S|D8Ipyx-cMVeOVj_xkbPmhV=rf*3pq2khoJzUevp9ush{t(voO{uaLC@iUrzrd z#XShJDau!ggM&`9j(K#$M$wsG94H7Qrp=e&351MTogXv1I%E_L% zjiY^{i@x37hAyn(d&UYkX18Zj;I)d4J6$-Rw9=$J-^WB46Zkos)1>XGz#SykB!G(I zvaQ1H7Tl6t^bX;N?-f3&8lVVsgnI|dR=d4OYvQ?ObYrD+!Tis>7l-!f*_%!H7^Z#< zF&~r~35vLg8z_4s?Yd4V?cDjTOwok(5;B@szgn0IIW2=Dk%>Ci6g(y=P4N>&5>BCL zoe09hBHop*R`hC0U=*VO{yoDxa3W2XR~J77;3R-lF$<)7BKgB)eagb1YL^F_%^b26 z_tJ~Kq%4gZGE|}xO|0K7#2UZrwMcgn4yvUtW zfNm$~7i-7E1wYCI=ukD?6jf_GM#0U(9Yo8k75uu39PkWg0HXlENMyB}q$A8^BCWgj z@Cm!RaCowMwu1FJeM<-L!r`v|Sy_}^8@0!S>pv0{t zS6SUvhL3iRYR{onP7!A#LMoW@PWiO6Kz(qi}a;of;4K1YcxyJ9=3xUwx}bx){)VC#XL{clHFiC#a}QJt>;~Qkvk=^6U0=1AEa>gyy<$~`J$7HjMHwc|EsYF z$~vvAA)4V41jS>az6`P8OY&XibfPoH08}hR(44^Ni#m5sl-A|Y7Ru;I=_1^)7w}2W zPTwzxNVz6yKOAO-p!l4k%7tp4g&>?{eufmT*K$Xz%Z3nV9)P9=V&)4h6z)1N8AEbwxWJR|(K=NOVU==yP} zTlXS*ttvcT_@m=86egyQeofN^FK`y0XpD&e$xqRI$oFjOhNM({B3Yn5JwP4$5+xP% zWbhD}`}MN&E<|CWbloqmciA2dEG+a@3)hSmLc?Fdn@z;)0NRFs_k%t}H1vL#5tIaJ zH|d}@pVi^3H4^MR@tVY3INC*h<=$^}F)=HWZuI*g6mt-ZMZMGGgfANE5MfgX}67Ug2S!EVn= z-+IdG7B}dv4Jv{TkJA71|xLzbfUnRgidgcqVL#9=0;chlMw|LfT{J#$v z%L4@{b@p4j$24)mYLKtplWg<{FRRAfC2+CtrhJ+*SXssvr<+aCvG>J-lk#jiC|+?f zdn{GF9uD48^DRPd*|?(x{b-g75;KkIbcsx2b}ptYS7+OLm(})YeA%_@kz^{~*?xGP zYcPB%MrFw&CP#9)z=eSP2+g7fY8cTC^N0ouTI2z*3!T&PRGK!5#aR50TGjq|GIgQl zX)2@!C=!nGwftK!)UkvX>?;@w545}mOOH*R)vNrX5TXO6*D3RK=y2m|@S05Hmx#wx zO(Nq3ZefB7VQM=XKPc5zi)U%y-iYPTG|sUrfA}3rQ(4Gw-O_=+cR3t!3M%Ue=rxPt z*{}YZrKjd~>nxpEuVET6F}ZPKfQ!02F-fxr7Au{UrvJ1CP;Xz^V6tZVtBL!A^Nt7v-@xFC(EI&DQHqUb z3-LS>h+-&lk-xT_4NVPm%61Fz0?zWe{C9Xm#tKvSZGEMeO18$qsiCXHp<=KrVYMm6 z;F0QlOBT_<-GIG7PC9g-N>xE?=<0DJo#FTM4KvRS%D2vh<@zWzwq<1JOF*WCMsY!O z?$1QNHJxibk-%^T1zN;gf3ra%@;!`4xh&hcIj}~fMIXyX>a?y5^+Mh55j-Q{@jTdl zrTcwMz6cnrN|#+e`nD^koawAH92zyaS}zOGiTp!RjyKmMWEVB0MIipjM)ZTVBd6M6 z?f0q=y?mDGz_(W*MXm{S)P`BSxsa--dvq(y?BDdKcFRcDnwmU4wC}bbQxxgc9(0o* zFuJ@yKi#yShy57;wpu$oO?%=kx8yB2V`?_ON60n3Ix``5uWs)1-*=eI109$d%qGt& zQ%<8PQHWT>c%V~pA`6G$z8CR@)lBQIO}E#8@pqJUbUx~SK7Cxq~rE~bi@ zH*5p1e%`2uGM-eJa&bXU#-@+qVk4v+dOkX;nl~~kSnCyAfk5|+nWd#+p9j=b>!tiF zzbhZ%*SYxV9Ns&yQ9w@+RfZ}|Gd7|jGVPd9Wydn_81L5^i<@7^>Kyy+@w+DNq-yTb z&0Jp>hk2~Dk%LAW)Ebn@NfY|eHae%p!_^|Y%G@2+hWwx=Un6TO(yc^e`+QP4U-Kw8 zLN{!5mALNzA}3A~joGt@W&=I!Pg&ePprZI%vlx8|7E4z^?Al>?^jPv@kywqN=o9%a z9aHpMBHc3J`=eUjuNv%rR}>FT3(u>hFYvnUlZ5LN9mkRHnD#U?i3FTVp|xgBs{MS2 z6)^K;N2fV1^BwXqnmj`r0>o)Zy5A{&nZr3IZ!tqy!>U+D&O}sZrAH|UzMVJk0rx;D zH;a__z@bl7)`;kgTBm!tp4)3hr?8y?WgDP0 zMR}uHyj;FF_?j-!u_^0of{i+6qmqRo3;x`%GLpDRCHVDGxJ`gc!4mZ&(yXx?yq<7P z;j-2{`d6B(oZsCvvv5HL)n>E54a>Uxgc`D&OJ?7fnd^JCBT`R@tkpzvOJ-3od#7_k z9IrRwkqj3q3GZY+C~ia??o-6EEFvPx}uaO)!nY?sxUNpGHs?`Mae-LPsO=rPMM zM=tmHYq^!E`5Tz4Aqrb()qQMH_Xshm&T!WWzuc|Ji>-@Uy-}nVX(#*q0LhjAds&gX zCm##))^t$!qRy@i4gw~2TN9vl9=%|6f&EN7@ma)>Z-v>Jp61A^-1A+vF@-aj#sf}h z?3t`+RHn~NmF`+eyUE%|lTLa!vDI~CIcWSH?rk#b*#yuV1I%s_E=@WO8pw@Xu#d^5 z)2q4?BkRL_^z+`(Sk(O6S+#x&YhQnP-2^K6ge&Fp0k%yM^R+e6fn%QlZvR3<27`de zZ|eMDF+CeX!m$*HoXL39^c`NS@RWhND)Ha-Ag=@>VSfU@47UkB)#87qR`0th?&$J= zsq9HX#`}DQx-e@2v}NoSPyAHtJ}wh(5b3+ zRptjO*Y1g3w~JODyyJz(7Z%C35@z3<=+k7NrfrrsC%p-B|1xGPMTA0b&}y@vtA;16 zL05{D7&(WHhrQmG6gL2*fy_yR<{&zNYUqLvSXPAcco`VyoCNP|J}W_Z*oyV@axSgwFJCmHu*FJA~aPYhVhSe)j5-1 zr`;gQLRK5v(=lXkE>oMkmP>OZg$(>tXqyFMugN* zDOMtgMU_K!evoGmiH!mMCD;H1+gYX_u(X)MU}!d<aO_ z^*({*o|^b`lgh(mzuR`1dd$qX?D;5LDZr4H=liY+R! zs>c6i2a=kop@u_CTpe>ox}7jJhz{QVvc4scp$oGG>ekd7+LQxsDYBq{n zeZcBT`C9)uX$n4Yal3~=#)e5Ru^gjk;&_#OmMBUybj$DLQ@%~BEu!tabg+hSd7eSE z#Ddv~zfw(yqn-0gnKatAYLheH;2#vjsdeoVF$tf~nRU!D#tQ#H;eLN4Ypv(pSSI{iWBwvWVBM_I#vFqhCvi%+ z8oIuc-+=u`+Su<|Kuu0^^cU1x*JxRRT3TO1YNvaMP(dy%(RL!n9b38 zt|$Eo1j9IUS?VHMJ2{86m=f|DPaO>RJOj6OY92-zkx)9ycnQ)qE0 zVF*^eI?OnkMiyy3GS?+atIUW)Jd$80dSauMTU~B2F5H?^4ei0uAzNDwZxs!}2nVds zIOP{(ZJS#C`8i{Aj*#BXW!d6b2`4{!8UJ^*dc) zLs59kcI+txkU$jYRhY}JLm<9@N7K{oOm@q~&+frqiu!Wlg>v;~PKgOZ$!V5zjYkEq z%gBsSP1iu4;q=-1l(psn89{@&|FQ5#v@<}pW%qspNe*X6QOX-Batn=k3 zqy&SoYe*0b{`%Mu)}Pt=SJ_L)dN#i*9t6&Rc1v~q#5tT73RTof=U*4^1W}GEYtXn9 zTHI^??U9GTZ2HT9Q9PiN`RwOCvC_$mcie9*gJahT|DRC<%=_yw77qV^QMce~YefEp zq(6ElAo5?WnHdsoT}WGcgvv&aCx}6zeGTsyDvK*!;;Mt`D^jqPt(A*g@kEv+WO&OE z6M|ecHrp7I;wz4eh}f)c-+mot_7x?NOTvbAbSq)_^^XtkPLrsCNiCCkI|B$c#TQYE zN<+Xp0@DL3)8#&qY6_{u!Dy~TQA28l*C)M6{XJEBKz!SNP|4xKD%WgWK&Mu0QMAer z`1p1c!hhKz&iEI6-xJ)pL@?Bkn7k8JQGYdC&O}K!bbiV&=e%bU2;4PNCXAXQGjBJ@ z*Ti@QGZn*Ns-t%QpP2Nf*I>u_PsbrK9O$$D|!U2^c82q%>JtUE>4Q|rM|4{pB6WX4(VS}S6Xn7VG;w+mSSgiURje51znITxij2Sc4zL3>|_!nR%KP2Ev zW2@n}k&G&f<*NuI3PFbZo~|P(^pg+xSrq(pJ!o^Wq*iWbb{5K0!rd_N-STL80JdOsMT{=V^zK1hoM(eB)5h+7d26 z?y()Fc6;swkLo0SC=lT6{=@L^gW;S1iCXNtSUA!``DxyIKec8+mKRB)Gx1yv2PC27 zSCU;Y&0J+6<3gWl4fx_^NVr_mIw|(vS1)egdq1zVNa+l_0%srr`GA7kNwS2+81LQ% zL(DFvui9OKYF_?nb@AA{WOo=batYuJFZ}Jcw}8R^yx_dwcc$7Fk@xDXRCV$=qZ-Wk5dAzx~C2R>$`QAYDu5J&%#dF2Sw zB5V+(nB%P8snNagLn(6zT=A}qZ(kU)1b1X(&o#^hCC)+bnuv*I)4JwWmjU8z_iETt z;yk`~e;R^|pVDieTp-E;W*`gOL1c1#GZZ7}qq|UcNv1l|sGFj*sxOm@ve|^AS_a=r zG1mXnb&JCZLo~zoU+#_~e@~jbvq&CETbcFgHN)F#;*6%LqV9zmcn(#{J_ML*&x=o_ z2a_}X3H&KJ=5TEKXy!pswvFxST`!)FUivbj)$6ih->!lLS%~8;Z^cyDMrLQ@DjbE@ z%CdKK&?^l>kJ>|0ae=!14kc~dbZE|D`G8!D>0-OT@lqu8dOg_a1HoLnF9a)(A+%ka ztjnSMa0k`_h@h7tQ$$a2pZ&~a2Uqqlz>4grlw=R2jfwLTGz=QF?z$N7sJXh9F$}mz zrq}uWeSa!0k-6n8e1A_o2@chJhM+q{O%NgM^oyqLey9Zv_W# zbsbIqHyB_D!&WEu2dFr>7TN;A55I0Qxx#b%#H(GLJ8m@O`IK~GTQ4g|F<4hwwyQr5 z^J_?gF|K3utaPOwTr7Nt)wS@RjZq(jYv*rp7lm3`rRj$LIsrD=`+?9zvtUO}l(~EUuIFDCMfwVAWTEE*X*Tt6vi42* zSlhS^d8D@W&PM8aGOIM7Mr;k^bI3Z<eVky1Xf#_M{e}(=$>vq?PgISMs+uL1HZ$O6E_bTFUV`n*-x$8 z5h)f|P&?2Mv*XqB<##3)q;t4h0%TaZM-hTSpt16=eXaFZjRxn~S+Xazb)o0^AT*fK z_ljf#_h+yaXL;~AXPaQtTjX{EzmI($MDrma@#~&UL&f0UOg*P)_YRm&RTqeV6kAI> zfhwN8#?sXN=07tgsHIx*pHGoId`l%1>F=O}

?eK4atsiIKWRIbh8a$*=%3BkWN>c^!hED(|H>Y(I%JvL{_G-AFOYU zvCT=;v8qoja-}I!JL+ME000mGNkl){1D+z_o_P0T6T z-SAQr+KPC5T_n>F-v~h4JOONu5`3F2w7vFEx^WrjfgX((TKK=De)?pQQ3gQUM1_>x zLZVBPZiCEx16j>a&BI};;S5`78w)rMlh7V#;B99PCfeFPkF+t>N>ly@&F|7H=V4-T z&!!bxE{r+4cpSB^d+NN78w5wj>LC~f0@&Tf zGXrCq)C5_;xn6P*7g!_H?IS>2TioemIjhE`{4)zjTB3zkXK9`g<^Ri6rn`t9Je^&9 zqYgwjR4K>dNS$wzU>~-VBOgwYn`NmpawlbkyFt(XpQ{+Cn)~0Sh-t}73C4042v28B zTWe8cq6a1aN-ll?HC)8Gy0}ZA&ga@wNV4LKlyz-=rJ>kk07jjP6Y63tQUkV~MX0VZi){8}Kjf{{)#WH35Br%r zq>9y^>rq_)!F>X8he!B8-)f^SVp?q7lR3*40{brxfp}rkYR}?>%Jqi&E*-QOA~iT_ zbNA_oAHMze+lJHNXAAxg^DHX9fQ-;#L#N;W{`cQ}^UW>c(>K5Q%+pUJ3KwCkcBg$0 z>8-lwQt969;4)?|HjA#ky7dH3)+;j(vj7SDX-o2;J0!#UN2PLc4_@F~dmQI3fGFr1 zv8L<*NE~6q10&9!W`HeY>)=M5kBLu;%D9lO2F@gX{in65P+-N{^Z* z=5A6umWHe(OQJaDT*Y=~4r&_x0NSrom4R}Sa*sz+A}dRTKhFkS#e<45^E~PncWLIa zs$8gu5DBh|F%Ac0{dyK!C30#>bA(2D(rqj6#SO}STNJ?wr9fsp`6wc{Ng-Nd`UmBl zMJ%*gw6n>*n=W3pqMim7PiS_L;!LIE)he3DCN9UtWB-&n=qXsDJ5P%0MZTrq-Asv) zQlhK&rcdcnv{XS37)+PoumMhhHbwDkdnzB`yiHJnXH%Uj08!bRqRw|4PRYo^wZ!m; z;(!*L<#d*Y3-_}>N?pcMjLE=b$UYmOH9Z>mTajFVdZu${wX>^;T-YWzjTY65DQ7^^r)Ss1t|hlQaW<2wHx^S>ghA7n_`dS_oL2&L_%S#hTyC{ z0ltmuDjC%D?MsZqR7$H;sNTGwSukXAp}C(&M+|L=h_s37O|)iN$#|yZ(~HkG@ng@? zEH*D?68&QmO2++JI0GJ8+$EL$*MYFNoCp0zo6TZWY~nJSg-^Cg4LZ-Zv&uy!_8No# zQ-p9iN^V)WZevZy!wL#J%b{f;X(>laa*7ox29dk?dP@bM^V6aVgZ(d(Dx!FrhR(My zB|03Tg+(l9AipL?8a)R~Ot@90vI7C_MI7cAPbPOKNuhL}TSPSKfRN-=(uLMvlLRj1 zDJc})w#gzoC)r)-hhrj%ANxRE=r*vJ&IS#56#i8S1)*`a(CSN1Qv9omg`S672B6Mr zO$3L@F-<{wNe-~ZPs%2y6%xuC!;MJgY7!|D(!hDiF^rZ|!@)!1FOoPXY4pVwFm`NI zvQe(I20&ju&g9tAl4Ykwy?%-51e!a?n#$Is2Ybsa&ph*kAN;^Tsdeo4zyJNOe)X&O z-g~e1^ij5Wz={Znwa-sFB)~kFJ@$<^-Y^R-(%vF$)z;;M_uqf_-FH!~2VQolxmr7( zT>6rkRTgL#xDgqZkmzV}B{B0JWjBZ^;K3H6k_O-t&f(P)@Nj)=4_^eLV|f^|IgNXF|R6Y&!sgi-p=Ys^$Pr8fHe(TmmjHErEkUlKNbs*!a1>Y3AM zRt211JlZWut|=z8T-=C_-FDY!20ejp0;>$Zwk5m%^ix|G`~Jx;u-Z4a=(a%iM*G){ z=MXzCPSwrRoD!aG&RQLE-1WLgwTJlb%t&CEvX$hvQ_fp>ad-bt|^_J_MBi?*mufgfZDrE7puziRcX#gxlv^CBsTvpeNh&lQ)W zWRToKyLge_)qR16z7=tj=UFvaXv@u<9Q%lBOwvY9n4(Dm7w3w{ync@*%ObIHxpTBh zrf$82M`DsJmwKv|=s}kpK$2Y#r?n1>*CJUr_o-VBK&uD2vh+X(ZOdmoAFe#+iTZHQ zzB(nSN;i_e>@l?97A>?o{CwNClP7s` zzM)PThBQxd_&#!v{c}2Rww)n5?G-=Y-&C747gXDJo5b3(7B)p&=u(}-cDB;iu^X5%a93bKCOvS>hO)eWeLzDO}712a+fOmcw zS>byw(BfuK{5xA{7g6RGk%W^(TIo-a?Ju6&qDW}*vfHkY%p*+_r+HJOVOEE)Go~ao z1KL`50dJ8aICam%vX)Wx85lzNDsId>j}0!--5Eb{A0f}`=lz1i@ZbHrfA`f_Up4FK zFMjchciwr&+DB<0n?|5n)14#HzZpr1-wcr&&M_-1>e)bTZ?Narzy9^lfBtiOs(M;Q z;O~_7urRyx<(FSJBy4yX`H-=cbPq0cDFjOKK+`Y!#ne7o%D`qf)!I*Rt4GLfhr^_sL8i#1NP`DAObx@&!1l%l=s2}Mn&#N=Nb z>>>CHj>q<_QOMQ@_o%5|i=VnuimuefvAw+r7JyxLkK7#PSn*VgNz|%q`!146^{!X4 zMr%nV1H}?J3{yOkx$jV;7-k1DjqCyw7mkdzihm24DO=8pZG81>KPn%2;q?-oQHPBW zk&!$x37~Cmp(VRqjWy@}*CLRQYz-$zm26CYkcI=JP2RtGQiYZnRK|OFKv|zEo6N#Lak-w38G#YV@`(qGKLlYL(=}Ssdp`oK^Dt<(_&f zt!8fxNGV0rcM$=%#f-ZovyJNR9%yn)?QMy$Fr{+~ZM%`{lB=KM)g%dU6BlkWu8Sv= zyS81kLperue9Y^(^t##15w*nP1hagQI-up}0noxi3;7Z*$I!9bPXnN(>bXj>jU>o~ z>zhS+k#Cqi^KCOxIi5f8mSd%1y&3cA>@g2$ zHs7$&rqN1yXhQYzB8e(mH2(}jta=G0w+%KileV*BAKZ`SEXco1mdP?*N(M>*!@=Ri zkoXd|Kwd`yqePViU%f~qRCUd4m)hv*x}`W4m*b)*FFUrl@+d`z8WIvmF{?;8;o8F* z?OP=}=`3QHq08|i&Nb`_EdlVSyLf~YPi-0LaXRpEp3xU6anb~xNm8ie=7F$h64ikh z5fnKO1gpFs@9K^3F2{<4syn)-=yHsGmg0exg%xvSLXt^tZlQ&iSunCl9joVdX_5#j z3$Jbipsi90^4JVLPF3U3D5@SPPB48IKTn01SrjlyAYzqz04b`y83d)j*60t+W(hS@ zERcY!%Ej4y&?|W&?Gw-f$&1M0Dkc==rzH1*UGCC$H(Da{)9!ix`RBj?{qLKF7Uo&_ z72A!#sE{*0>ESn}>*j%f@EH-aK%@qc>{)BU(CjaN`Ad^j3`#xo^wYV+Ez}i+_c=!W zAlBH#<0j1@9u+6+8hO|e6lfIIc!ZlGS99*Dxb~n^9JhmZpU$x@ zW?C<`lDiy+>&-+mj5 z{`%{$+vBFEAeg5ndv(8V#u#iG{qA{AfoTypB>Rkv%GQqAWKgIhcK}a}N0wCGG!45D zJF# zKZL@4ca+0Ing<#j+SG$-?f9^RqxBpO$(>-==#f+9000mGNkl?X)Kot$K-WrFL#&h&bk*#fW#PDsMk%u_Mj(#Va|3P0(C24XzAu`cY!J-Wza=j zCBb{0vaRT69tWp$*uCss@e500q0MKE zny@WTYLTM363%d15)M;ifdGAKnBH>3IEIUytp@x2!FAbxd~YA?nT57{Se|J22G-p? zV!us_QN69k;z?OtpmFuXHz{~)lg3skD&>RU?g!K2UUhe|K8=qTmZ`+v4lOqcal(rj z!6(z0_Z<_(`*x;W<_xf7G@O=b`c5K{^c{DlV=ZL4#kJ36GH7c%95OH-yl>RYV~JPs zxUGStbJW`8;NXyIF?Q3sl*bWr$j5^e85QPeb1{R-iemMscw z+_N2&?bf&<9xXW=JOC}<)FgQTZ&eEqBLI(oWoMG4C~m5{0xd6MC8$#HptX=LCEd_1 zsaTfW?PrzpiP_aH`k;NfIxrxKBRM2M2*3>5p@p_h`MXN=4J(oTth6Q`Ofp&Wq$%H{6z~}fTNhl-rLn#V398Q~j_qp+4dA3p5 z=Wli!_@*_;`O}^si{AN*B<aj@&RF~A=S#DL5c*bN+HEqc>k9$lmi45m~=<;kkD~TN$ju={Wa+Uhvc?vbrfn%QUyljtNC0do)nsVO$)xj`R zlpFkL4{~Y|6pB^jKrWu>D|^DyGy%@!`fMJ4Dh=1@GE+o;B8(|hd{>?M8n9CKu^+>BpHAH8ameczJDo%Y|i8RY1{GZ&;(gI60Tm*({5^o8rYe zC6O#=?9KydFP^i#dGN(C3JD%dUjx&EOW=Y_2(m4tZmqR*!Tz)c5%@4z zXlu+2lqT@sCTy9{;L||==}gOW&y^>*GQ2mP*<*(rPJg=p*WryWqcue84wQrIk(ZI6 z*atuh9rOTbL7!}d(ouE`E!P4J{D}vq7kyka;VjEi2-i>KBauh9QvUevhS97 zEt5^v9~|Lan=It|E7@J&2&2>Z@KR+gJl)C!XqV^&v`U=O&?Qbtjgf9?w9qoF6mWXK zl)!Z0dYBT1(T-K3Pj!}jI&A{97b#K8dAr2qAi5}c9farPjJ+I*@eeXs+~|@cRw}`d z=AgHJ&*6wvV>16NmVgJ66bho+;+UK|&~nIo;f!e0MY>wt&`qZ^T4-?&cEN8K{?{WZ z)NbZ^^w_dJ>^ggyVpb$7@Ukm($roreZ_%bvBn4E9F6kUF>Al5x{WAGx6mdsc#N@jQ zXH*7}Jw%NJa`F8Gbdg=R1cJ-mQ#v_-p@A`r0)X8PlM~&lSI=W)Ett^oo$q|d0IgxR z>?$RsI|ex1m#3q_jeH&a<4+(`Sb9y-Zn6kq_N5n$CHxr31>g;NiR~!^PWCSQU}id4 z-kK+!N-k?+ry*0w=Pvyek1(v=>lK-q$RhwAFm%e=(BgfFO!Gj39ln3gAo?nV% zWF;Yhe3UOL5`|wxKBg?#TmeiOI(rOl@wvzfTwtUh*b(Q zXGxV@H#4-G1e2qAB#W!k64eCkaGMhI zY>!Xpi*nb2#gUh$Nzl(xVoOnq9mdsSSnu51q?)OGGb-}vq2F`bw>D=+$YXq3JuCQ> zq6Ky9a|!m_oX>^DJRvvzvxrk!j%f>*7|)!eDjgSCAF>q?)vHdXhR4ls*ETg3_dR^R6JI;E}_wHv%SO~{s8a%kjMpWD~4#E$K! z6Lj4o&d**AVfCn5@FHqv?TlkW4NB_t1|n5l-2c4v$^tmzVXvTY3@HNiKoclcrKb~; zL<|!$&Zh%OXVQ)iJm;GeGJNA-wieTgV@+CwBDx(;r#erf&gpIKL~h&x5;ej#CQNRg z1A@L?e33GI{gU8eo*!jFNfcg9t~80k!=$yx5vokrVMa<(#Mk?WRm*aviP7n8=}bxF zj|M27V^WM1+1hYk=u7qO#IBT2Qamn)X-p%rjh#e05WQAOrO`a7br|C?gyG`56a@MG zsXMD5)e7|_%B}(?-X<_kP6O1H<5IlS#LdCCdFWD&QJ?utr7q9rVe(tl?ea4;t#Iob zC^`A&&Bq}-rlU{OfzrfRS;o?rtk`MYS^*=72zXTH7@s#gyo{m}ccJp*3Ray1b)&*F^no%cBTP70jS9XSF zl7a!X)sysIrFc}keN_)(%`W>gYT4-Ex#yny-uJ#|sK&neth?+&)X*L#HyuMyi^aC{ z&z?2dV}`rh<8yxh``@F`0@3V)UYQn`eQD=qbA>Tjvpr&`=>yNfi*Yz z4pK%x8SRO09`y3k*}*?)kI0R5tM=s9m4CPsX`J;~s$!}l00ZoSce-^FE2ssHpf&jM zkAG~v{YU@kA3gv4^QhDN)?06xJ^UBH_{F!s{cT%ElQO}opntO4%ouC%wRAngPk;JT zyV+o^sXuH*pbbIa;GF!Z6XexXaJ6m{SC&dj=7fLQ?e>tL)}EXI!vv&HUb_4tP zSCll@Wgte8X7J{oBTaHaE#mIcMC_7Fd zinuDN*@3^7Smq&7Mror&#om^wR*B-5*aSQGFNBCQxbi3}@L@ zIqCLQ+>t(YKwBjnBsnmu%UnI5LXzAT!$GNkmPv_*&r8g-sg#q_p6BV-%CS8ky;h}doMI5ro3m>ePwttYb_VkApVF_nDCyQVmsv_eElaE?SH$aWc!e;fQLi^I zH#cdLrO7UoGizFvur)ridZ-jmiqnl>Bc{!J?kJ}#fAt`#59eBqp$9sIfqu$ansJ>{ z@D>+wtuu9?#wOrOd#;VNvn!oZi*_K11U}rbO3KDGQNl2gVU~)d-y1XzWYL_T)0vs+ zAxY3CR|@P@VMv}Va6><}4{8$7!4@xbfIlf(=#rr+HTL40;(h`2wN}G&I#Vt*!8r5! z4l~a&4n&efa+{xBx*wKj4WFvMWX!}}r`|8hQY?_NDj zZt>8FOvAc+K2xr3laR-ruwz%rj(}G@>M|}ZIZ22nMO+QGH5@|C9eeEiXPl}6GOYeC=&~M)Z#{{DqQCMK zVA|#?i3iM7EDn3@Ky!a%j2&^X7k8RPTCczU>%X?oz_g~tu%Z3rCqFTm`paMb^7YqW z|Iv?rgjne0;_?%{PSW51`+py`l>YO7{?A4mW`wsDLAWpG)^0QNzP0v;4n&c!k7TA3 z&Pju@GIh6Ml#w8+#{jcKYigZ%E|TCuu|<@E^o_|;7P)vRDH%nL*@MV!i>tJ*l4Y8j z$OfT7u!wTBsbR#6vVtbT9CEA-q{mfpeKT6CF#!olUBApxcRq9ySB;4b z$m{fKk`gbU!TTfvK}u&3I^&ul-%}&1hIt^5d0VVAu-{ z`p!xbUm5gZ?vFuHC|u{@0KMA*6@c~I;|#c1DaR{&Z< zzuZl-$yE<%i8OXqYjgO72AL@i_?(%*(A(V|#Yj=oP30(0lhvAm z^`nnJMmDL|RSc%Eun!-9^wD4a)nD1T{^BqG!Z7Wh{K=o#WZI(Jown%T>KCIa-~n#W z+Qiz;fBL6?iexRwyk!eS`>;`wnQdWiEgnNcF1C0U9B%32ToYIbDaxuKLy#H%-11j# z^)O{``WDdBsBPJj%D5v$2pa%x6HuC?0Vj#CJ`-PUglfDSiL9ecz-EgCZ|muWmbqaU zud$@8GkLl!JXPF6%YC#;Y(f(?!3=TJ1mVb!}<;nHc=l8!bF+`-}%=nir#H<>QSRObmq*dxJ{UL_?~}`lQ!Ml zyjoplk&hf)qg5)>HLB4*IV{uAf%(qU{%6Sxg+D1PukIZ>$W^*P)g3gRNKagr3(KvM zrR%d$Y-_G#Twi%jFLo825V~-+(CWB!w{qQ!^psCi* z4M)Spg&V#(ZE*X(u@}K+o6kh~bbAz4lKQ4-p~aG+a)BKOwgh%$n6~<^Cw#g}aVcD6 z{y4-js~VcY7i|Tf*Sb7hOc6NSwT5m_6L>zHb{m?uh+Xq&yURl(X_9VdA_YAX$zrfjY~Pj|PzF2~ed`iRb6 zpUifv!)XF$#pB3ywq@zp`CV)?PomN4&arre2KnY{2*SLcRTf7fM`zYV~pj3*x!y~J!)$r)pI zH`3~;bCoQuh!Ly*#UHQ zS3^!^4f?Hex(qpLtT(%jcWjYR%pzG^%2Wn+Z&S#fPjO3RNv49HRB@Bw$_+g%;)vKh zni<9}G-zvY$CX*t?8LIqc%zwEfo73m5`IJv{c1gtJ@y;u*nYJ~a2&#lWpD`ZLbi$4 z^E}~K_6pkf>M_%cS8eTEYom|m0L=Pk4;rR2lOUiJN}*;kg+crxOj^8L4K%^cr9k3R zE^!g3UlK!$4jY(rq$f!(cp>vJfHBTI$Z+uTO|EHclG%bU#d#0AA54G1vBi^Z(2Ksh zeP-VSUgUPu204)6TOLXIB22Gc_HMITf8O6>>w+xJNP28`S{uS&{^eiVH>S>b>#esi z?Ka7_ST^%mU%S)nv1YNiW>I?ghd=zGEyu5Z^{Xw6xywMNPC;YDi9@-`*WK}5)&GK5d@sBZC!N6(26!xM-% zXa{nXJF5V~zRA!1!3MymNx!pLnYs@h=j6xS8te5x-7SUu4b2|$G+ISv} zggNCYh86_Bk=9a9#X)75*qhj}bhNpyd*xDuw6G^e!^@*(0JPwQ1C7Cl+4xE7A_8v6 zF5+albX+M)-ug|6HI3Sth}oiWJi8yKd*H4AW zpNuz6Xmzv>;Q3YA!8e+TmUIurJ-MJU%F-L6==cJIQBPuX4Fc z?&UOru68)b+AEGB=oY55oX(B_{3?@UOIC}7$noYpg*@oM%aq$MpDP*DFc8_l==st7 zJl=b@WSR7y$thDXUYb{m-O!oIF~8K%com((D)krA8CM^OhkO|FTN1gnNis;~#$2hP ztLy;LRFWDi$&-Y$^CmwIkcT*h;qeyZ}RPS^)#*or0d{v zOk3qXl|7$YlE`M#7O6x!v6G;xi)aX1B{dm$JH|k~L9}W2EN7>wD)zFZhP#urfoPK^ zqt!2tD~m^g3am6K^UO%mvXMnCv3NRAyq(fU>M4B8;AS|)WQ)bqDFM&|($pUMa=9ED z_be$cbGN)BCv9=Nll_D;s`ddO(7xCFMwl6Pqq;p7yxSVLF5UH_GN>r?KnfnBL5R@? z!XfAb9GVr;`U6*IG6KfxY{FTmBfOmmfxgfw0+Q@fY4M~@Xb_m(K0M*57*PM}DW=;L zp_gLr_~fQ767b@giZMW#yljBLx0owtOGC3tGkEYK)x(Hv(ZkJ*_J=<_bm#s{FGag8 zr3sM_AO7v%{;fe-L!mY&21iY0U_TjHHE{clC!c)ox#!>)V7LAF$3Hezg5CV)n{S%# z({Pwz<{QH4o=g71giGL%5pQOCNdhr#g8J zwb?@ZWw6kuvt$ALH^m3rf`xYIXA%#~8iTKf85^j2^>o~7p&icetyld_yhzmX!4>m? zW(SDU;>8Kkb;pN6kI*LZ04YJ%zP&`3S9XI(KpianIywKNmr~TNU$+UYyQ(XRPP&P# zR^>|3w2}psu3mXaM^VqJV(_!-R^U@jPLkvZ+c@?*N^HXdapxi-2Xh(ZM?2cVSx!uA zG@N^VICjQbFs&I*A4Tc##JTe#*n@?(Oa(KGiloN>bWCT%Y27T7Pk~2{pe{|j5AUKxm(NUjyc1uP zST;OGL0>tQHZ`=&FNeV@tKsp{8{YvfCBQa8pzAeQXtQWZc#rapnE;Z6Jjkd=m^w^X z2gafQRbpS;1Tu3JiJK=Y875rjaKy2?cDSKVI=(b%?uO~jB7wJwNlJf4YH86GRA1U+ z&0F2k(sHd5W;}O$7(R&s0q2W2S8`qSU0DFjFyWNAYBU?nfR?EBdLxEbHI+Oanu{EZ zUjk^)U5+`5bbd09lV6T-+%!DWZg9oLV`yP~@+(eMe$HPa8wC#kOi}dq}<{2et;S6BB`r=pBG(* za#k#1-osfk=E*o$l{;s73z|7717PKww;X$=ym;}b)aDYok*OgW2o`7)KYjMuXYdWi zkj1yYT|AALW?-@pPxdeEGSeJPh}WJx>FO7-Wuaqj)b9f0A!5f2gRt*`_aV-9>2*r& zP82dlfd`{q3=@KN>gOoGVZt%+g-87ixOlo+T10ghaqWr(TV}~ZjIy^&Hd2vQa!dYRU5GAwv^W5y7P%H3h}_J?PldFT)H+QJw|4uZGeV$B!hX$dxZlG0UO@FTs(6oRuepe z>sZ{*S;Xp2&YNT{FXH5{AfdYQ1w9#rmFBsH^?=#hmzpl&O|`SiSZl!KffA0$Nx^$v4P|7AfK2Gwfa=bwBgUvcJ85SBLT*IYw2rNirLFS3Pq% z9t5v#Da&5Mls0E&P}FKEvrVGG)%&#rN#q_LKk4kkPcv7?wMq!2@)nmPiNSmro%Uy*qIrJ!XO5EkV4>9rmlQEDw^CzhOv#A1#6oYU zNooYN_9p=?QhDq3alcLhEwy#m7(=V$DpESGc=Ceb6y}}D2``D5b-F+)nmYS$DV+)2 ze6UYzk4{gmO|I{4!dJuhy5m&SG`wQ?@Rt9S-MKv+Bh3+?m%|6d;d_oTW0{Y&CMQ*Bq8UFfyi+v5YV=m z5DvR|@r3pR8XN}LL@KVq)STz_BD>B}t6ruwpS&Lqj3%H$$oF^EoDU5JS9V_R;T%cg zA*{Ys$qPxQE|fx;q=!*)MY+DK-?Pg!NmMtWg}&&|87s^qGa%B0VWn}5-tEJ}r|C)Z-qttx&~!!lFF zjxBLr-dZ& zsk$8!bb@I?4`KSglgcir!_>O99E%0RDQE^Yfs%72>&dTw{p%n7=tuwfAOGWj@=yNB z_rCYNfAz2a6^yZFeT6(~3<4{Hpk+h6sN!SvV+LDW5i{xId^N-V%l!gT*_s-lMZEC? zFBiUV7EvW~W{f@DNzqpxHpP=XC5iq@YDAU2OgU+F*Ktx{6Myn;R_*^$-JS*2=xK5F zG)_%)OiesHvN&`kIgc05SjemiI}6TRUHK;3G-au4^kjw#DM<{ij;KalokV?@hNMtM zfOkDixH+oB^xRc0IvfL4T#k1xcUkf^w?kii2!+(6@%tnyBt0X`luEaWK)^L(JMB!4 z89Fe0U!&fk3W(Cz&Bq?!)oy5rTl5GRrZG(t+qH96Gi?oIkVKHJlfO5IHeYR$2y-4~ zg%$;9{#0TN?ILLf2Ek(QUJLnSOo3v1+}Hy8ym9ZkUZliY>gfQXn5z*(e)7pDw9s-O z*+b~jrEAP`th#JYTG1?zn?~o*WhW8Q7Rd*hgw?0p0&$8b>@7+-zOQYDqgi}LhIMIC z`qvd7s4LyL@+6TDPvxkeQV@b;1un;r{IbuNo}kWVa`WN3Y_bF*L6VfF@_WSUeM{9GmrZHX@Hv>j=;wb^?3 z17}FpDWX|DFPa}Hw9qEWp4j9XEVSiDaC;LsjU2Tn_D`kCHKxq1lZEz_ljvL06yq?= zKe1DCsU|L8Yd6$_?M&C>--iwi*YG_Lnz`E)<8O7K#q`Tn;!bA^Z4ymEl^T0#VjwM^ zaarR3FH&3d>IpShiFhKHs4>Tqa+vC#&yLuyRnic0QPBU3SLJBO$pWok*7z@CmK4KW zi@n#S~QzF`yL#VHC?Mad@@lJhP)kV?mkrAX_=S}Dqf%|Og{W4?PlOE z*i>QP!=I&RQ(U`EGIbfqzDH>(T*V740V$y~t?PYL_oHSD?6&NOJ@G`LAnAhfk6O^E>iLf`=m&6DKM1g_CwI{(yh%*8FlSb z$57|R!=xc_*m5TXVfK0E+S#AK``zz;_OqY;vw!x_-hA`TAN=44$Zu?z7Bzm}dFLIo zwVLAN```aQ9Fpx{`yL*}#yfIP0QT`mAK8$QU)t!(u&(v<-FM$Lv`qOG+N>l3O7?92 z7f<_saY9N`%4m_Quyu+{DWZABvSxQBtzyD0ZoSN+PEzJuq-Z;LWuDH_8Wm*C9lwO&}J-1>0nyWwPZg+qsF_C_OGIR1-v}96wD0O^V9V60O+=S7@Q# zGeayF0}*RGCZ|Zr^9d(lewHr#n+IWhnb@(^O6P-uWomZl!)K1z~ z5ZL>1XgsS_?XoYSBR7@=%7<m1sU>1)gdX=+VcwNzRF@K$JEzu zAIoC9P(X-*(X^XHXVzTQrs=FmSY~#!jIND>&l>&Knroz*R1Bg>oy4Mo7MLL#p1n=V zT7v$xpSnGCQ*o#5d(UlFwB|kEFT4)YGd&7WAP3Sj6zZ$z<1t!6F<7R5fWS@L@9HHM z=6U#acjM{~^_?c&(dG5LAV4j7Uu?c`lj&EC6A%mKk zbgDVDfSC*LB9Rn#v{SQca@*P>fzYV~ZzTI=%^@J|#e)q9igK*MND9HI$x8U;pwG)N z;@N!mb;ryjv=}vS>9vIk*(TrCqVH$)bCo1R_NPrCR0C!M2S?*XS%U^>fAW)`{KJ3v z5A92{(}H3Bm;dr#TDQu+_S$PNyzs(5_y_;MJ{v$?diX0RA8F;ReY4Y+ZfURG@cu@> ztPy)7Of;n{x;Vpn6@pB6ODp1CT+YHEQ#`2D6=!i*8FI!XId~S&t*s|qi^pe*>Y*It zi?SFJS1*~pL=T880(6U&?vyIX>s6Io#3iys3oSMyISF8oPDT0}NulZ#HJT`dCZmzx5<3RE}atrX%a!g*<(jhgwIqXrA0|%UJ|em2B93zYH{WBBUmf0I~qu9apEL z+v)6TQ3^RNSekB2Ekh%#d%loRdG-6!DU)xa!K~u{R@L5kp2;Z6>o%k9cwLSz$4Lr( zfv!T|q9D~ghJ{YW$f5A?(L-onY~7I=9{cX<88UbwkNU*}t+QBY!C+grX0Kj)w?zz~ zqu{0Ro5L>>Lt7-ZY@3uOkG)PaU=P$A?vLICN4IktGAHM+ZJ`Zqw#VeJ%28{kF9Ls{ z%QyFO?pXlsP%wGGm^=>dZH?MNFoT5_GfY5BRt$F`@PFLAe7!ofkDY}1{$cj;F;8yE zr_U;Z8JP@+cpr7hkdn?+A=>P~OZj7p+63MMYNv&^O)kgH4Mgg49GS!RUu6_Y3}5UU z@oJhdUURjP9(h@iLlO>9-4d85&zcrleGzX*HZ?G}biVX?7-O512x+pqE2)&TWcaln zHMHC0G@*-FL-o|XibA>9Ld)s3x0G@M-CN{2I#(Ad+n(L90eLmYiwiU?ZW1wxEDlHT zV3w!YpFC$9C!CVf0BBn~^jVxb{+S|<9hNCiY64x^67y+iQO4b~k&paI&e07ziP_$dD;$^9T7OFS<7SM-LclZpyWjmTgIcrX(1x|&8n^pD_~3*0-h0pfEZqwLk-*pjpeWnfIGnNi zz{b{%r}`G8$YG+Uxcc!qRh5??x>(=+a>kl3~4fmW?;)=goBfDOs#EUm4Iq30U+a-_f zCx0zshOKT{h2E2gtZtk-&IlzwqpN&e)(K$+t5|O=JKIS=lY_x9IkZNeEl+i znZ$2%ePVrdx2X`mc=C(-Tx~D6x4-eu=GW@Py>^$;k1rp8zI^`hnTKD!{1t;~sWP~9 zFH^I%KG9=1tK{j$A|+44q}l;)5>+Mee%|)+lOKQZ#0PARgbOVC^Kbq9>C4mh&1X-3 z_Q^A!T%X!AApws5Z+HKjox9e!iB0dm`!3KUi__vys%@I<$u6G2Z3C_bDV^>YNkp#n zqsxu;`hQ>ee~SZJ8vWLos(M)NtKrRWZFra|G`IoyAge23w``kXi&E>f_e5F0HRjjF z@s>mvetr7-**8A}piSLg4F&n<-}&682+AbLCAjC~r#|`UXCM8?*Z!kTquu}U-}(51 zPd@m~Z+>I#fBN#LzkTJm*1~(sd!N0&CHnf+Gr#)cr7za*7T&tC*P8nL+0TFf{O|4l zx6|AI@zeik-G1xow|@4cpMCi44>A8#5bnFUvuXSARr=}=%O5_y`;?md62q2eK^ zWpK(>XNJN=PnjJpN*~_CNK*4I(+g~@>rdLfmDp=Aov9$7gG#C-I*rh>K8Q zgcH_rT&9B+lWqq-Rwvhkc|^CS;WJ?hC@P80h&@NQxs{rb-)XP#299xN zBm7=D6*~`e6VwMKhI`-x^od%{Dt(3oY?DI5os_QZ z9}du~r?66&u0p!86LrD8jQ^XbMLmQx43f1mciTC{nIj=Q>_tN7*9?y5uBplPl%g@H-6rKP)M zMiTq{)#a<}H?LoQ>r48yWH%cBA^+iv^2Pd0i00*Z6Uq)fmC`rUS9cGqCnzEvsD4*_ zQpJnANCGWo6E*6Yh7GgPs0sgHb;NjAug~rf?{T@zEx6{z=WR=JY6;%EL$n9D=@$*X8ZvQZU8T2m`2Yw*l?q z242|Y>BOM}SH@K$v@3#((v6FNwun!4jhexG04@5kk!#IuX&fE9SKP3(cxs|!R?FsH zS)$F5t3U%XCtRnRu99e0`5T`-y;_tQQWSJ@gj-1wkzB*Vv3u-Bq>9{1qpYLSB=k^O z@-_i6Qf4aRgsJw^*rl;{=DT^@65berc^<+yZy=%RM#1q^jh4I9&N zks&41tnv5s&1w>(bW) za;N;{tP2hBd!WgDLzkB)9C-B-wQwn_-QUMJKf+s3!9I1Ku|@u_gv@%fvAmZOb|7YF$p+{^F@`UB#S#IQu8>l%I2C5E`1hl>G0k* zosaX96)}Fc2x#kxw^88dIR_X#eAxtoW%nD!p|hTO)GOOp3dwTHT*Mc(dQ?;j28req zRp)bI0JM<1rw07p|8W&wM$FgO!CUVH7eAO7%% z_V|PP;P=1({cnH!+Ydkd5dCBn>k@5K6s@cq2*|ngOis@}`z*YR?WD9uKK}S)8yy5S z?pr#THMi5kg>?~=o!$2BZ+{!f&Fo9-(p7TVqyI~PH5dWr2jch=({81n3p)E|SR}|f zb&pWsH?Ti^|9}4M|Ky&h3hg2p%-0?d%$Z5u!2XpNec{kh^oXYm5q0a?o^5hI`Q#Jp z019JR&mKx=fL@p}D0`-5yI&u)8L-<-YW(Pklz>g0vNbF=o7v-Gb$j{$kF%mI2cMEIElV7Kh8qSWdfjW z;!Ss$)=kb{4;gFmBt2PN*?FQADFMHElI8pifiE#?XH*~Bqx5xcxgZ)k}Q&4LXWEI z4p*c!6?F21G04DmU!c#kF(0MNS>}!0l1@pzvo|eo+^|(529+vsRSC`DpoV*r$mr<| zvTlE7`8+Lmxy)M8C-4sBoCVGZx`=bn3R z55T$Gcq~2ZRK8y%TZ}T;txN6Zh)(xQKGQX{GxMwpyPWEF1FWVqZAFdYqg6r~Dd`T2 zc-p4klViYkyKSNE4rr!6*hEvPcxtG0lAvfnRS5KiX91>an8_4%!Tc<6+mCiXreZWOh$khuw!icE$F^dfHmcOLx? zk|ra)N)6RPfMJJIgp@-c+L?;5h-%<$y-u!n2rZ?EmqDH|j<#l9W?E(qP32UO|L78M zfYno8DOHp+d*tw^zKFY(fVR1UfR5iGh8CIMmC!XW++nTqIs{kGk(gr6l_U~Xaj}>W zW-(`9`d3xrGjo@l_t5;->SR{sdyD8HbUJb`dvkFp+d3@4T;L0_|KFc| z?zxv@B&|%wS!xq5Df;`P2UlbD$reJEP2-I}9z35$zTPuPG}ya^NlkVslz`sRKFoZ;eN zczcC-U@DIWhoMqqx#4n;0bZoc&+xAv9y!V!GbcS5hyYr)1406zrJhKyBvwb{2Wnzx z*7v5#h>^Rnr50M9d_7>O1k9qgJC4}2M;t6(U95Gqkj3`Mizq0IK*KK8DPJfOv8HG? zX*VqAIcoHEhMW2dwoz`VQUr2-mMydiBquTZtkDlvo5}*riWs`_>mo7v3TPKkC*H&v zmCI@~j2gu$p1wHCvYcGpJ52y>602`<^Fo=dC{+AIMMawoN3AzQd(|9QfA#RIrR*m3 zhhBR&bwzfbdKKCZv+1Uz{bq%1a+7oHQrrz8Ky_E%f*!}`uz-O2^?zl%&JlAs=d`-r5LWr7um}p{pqGyV&>5lTz?_q*yJ3=Ak;XV zqXj!phgXZ?a#(9L0;!VTJ)NQ|0`It#<;+6MUwO@3Yq$pTYm2U?dz+R z4t=V3nfb0~QO$8D)~Spur*Uz=t>VGMM1|<8GA_1RryRg-0<^_t+HwkLTQ^%#Lc-M0 zoH)!y@`xZNC`P+XXTrYH2a@V2WeQuYsUPR0-6n-}Yt-kpcu`(&qVy_V_o70u8pOBO zL|+cPGzgCEUJ)&c8v}q7C>W3lI01k`orjw^++(Cz-Q3ZI+4s;Uik+6|Us1&ko81Gt zK>jggezJ?nwLy8fpAl1>F|H{K(jYGd+?+6DL{NyTHSq|_C;QdFm{|y~UUDf%S(z5I z)w7uw7twZ*%xxc8n$l^+{cs4xcp-FH!@8mozp1@3zTMm+0tzu~9rlaczx%1-6MF865zFtXA zf+p}ar9({Sj$6)Z$?zILlmc4bv$%y;vvBRaR3?P`YY`(YH|Zs20#6et%2B1wEBBBp zSRjutk25chZm|C4QN|tSA;;tS^rti_s!#81Qk8MPKOgJZTq&sn)1~WGn*^khr6*4( zLoAwvcP&$OiX_1-*e3jmGLR~9+JunF65Axo&>F86+AMM*FIZ@kqv(fUJ=_xkbR90A zDtQc4OCnP6n=)k)S1L`DwkTt$Qvd)E07*naRKB&*?=?pmDBs41!-ubb&Cd=roTv0E z{iZ}s&HmGFeoZMq{&hMV`33+x9!UqMMGP$_)>Z^kgi(v}cFl9HESluHOw|WFk6XXq z?2Vn&9d!PHU(OZB(rY>=?S|4JOH3Kx*rI`sTDEp(kLr))d28e|@H~8j$00Q(7j9Yh zgDqggDmQTavka8a3tP67TqXFQY=Jwv3`HNsT`^DE0gN;`wX|Sb+*9VlEwiYjP0T0@ zAkhRwDJ{*@JBZ(Tz^^wLH4oEa>;$yglTcnfb7x=i4N#@XPuOijpyi(dCR>Q!d~ z(19zPJ+;sZu?3Au5=lt`EuLkFsRG)*9J}nnbyPI#UCuRz_zs*Zon3jlbRGSvHcW-i z!*Zr9%aejQyF#BHf7)i1Yv@&pc5(uQ9M#r-YK$sT??4_-OiKRMEq^pS1q&_GS5!B8 z&`NTe~Juxymb8$cQ zBK5LbbUfZZ^q!d1VphHvdxGWUrqreTqdw}D+===Iw_&zS;BEJyS_}-ZhG`AB+BbJS zAF|zvVZv?o_rL!=5SOMMqSM9Fwa!FGm@ZXzklZgG306HC0T&4x4H8HU>;~;vA8hzG zWP8xo^x}EawtKoh8F#|-7Wfdh=+;XGwyvyOBqb8)7Q!DjQjA1@?z!jQc;gMjwDuWp zV;3(N*!&{kvB%$f>n+2pcE7<|``1A1uYUC_o7=zno4@(dkA7r5|Es_HtAF!v{*B>V z>z+YYm{!n9EU~qZB8|PMZJBb`4P1#5JaJU@ zs>sz-g5gVY2HoT2p>>MKt6qyN$M}UR8f6XvTZuGAZCn#Y`0DJ4`~6WbBfPo}uT5Sw zY(K^0D!Ux1Ft~VnIR&(&Lv108WKg61b3QFpyt~90T0JCqaUr;sl9cL6IVs^`eqeyY z+esmcu2aPMXlL&K@ozh^&=$$*vR^5Tl<+piD^JSlB=G6}OX){DIZRrMu#GccL_toH zDADB@kCVk!vHd2IR#UVZwP>NOt`%xhZBCDE4ngJ4Q?Z_5y%#SFuRAD3QVD?8eO0br zkU3A8NLs{!Rq7b&_d2m;GAXjY;kFWuKdD1I+O&sj76&%e+?ONK(H+W z@BPmXG}{n4+^jX@HqF8~3+j#>a(Qr*EhONg2qcx-hoV!NRY@qWe* z-^SrBS_|<~nT<5Ot4#=h=*Dmgq{%{C&Jb4%fG4$CD;gC^`Aq+Xhr2BCBtEm~y|w^A zTO0~1r`4V}kr?})J@#*t%qA^5;tHeKR)K&P9jH@!e=^28C51v4ICWWof$r!cMHY+H zgdgTm8EJEaiZaZU0`tVRxEohFOH`(SHoFi=6rf`q7P^R;l;d5bq{t%v)#RL!NV2Ye zpBC%hp-Rgld=9aAe73}(AxuIN`H%*x^=c4Y6Y?cF%Mju6wk?} z=%dc%Rjkuh6!z826aiOc*DgRDM^PWJgP|Ra2=cU|M{DQleqmfdEbxlNn(mcsO8H`o zfBd4l39*W+8}KKv832{FV|ecuzxc)T&p!|7vbdTNpcg)_rTaiK*Kv+U1|W8Pvrds? zWYe5pt`tXIyuwO$>3^56=~lv=dK|6frsj|3CfdPk-=(AHWaLV6DyJ`|rR1pZ?Q-dh^XUZ8CrM zv!9vW8&ibwk|gZ@XP$ogLH9;8-3Ra_Eaxnmw@3xx;;v0(G1U#xl$EJL%o3wcty6M| zUyl&XUhUoo&1)<{+f7yF#u@r#ac+|wHcjN1CPkj~Olr|XjDKP*lq%>OLTt8*>#}RARr3o^dPLfgD@^3Lw3X6>$y9`NTr2julNRY;pFMXra{; zeZRRL3ch_q)dB<5GF_a~9OHJ>|C4i)Lr$n5Zm8#e5b(OMb-};5Sq*paYB@qGGs4vr>}qlO#e9?qA(4KSj^CDsBZNyfPtV zy{ObnXNuk7W~9$uJ(L%UPCzLJ$PDYH3)JMw5wbQ>fi=fkNyLtJW?>71I{;~4MO=ve*MpN6!Kg_R<`vNorjQhB zznQiQT{R^V<;i;Kv@DX#kRvLN+c|b6hQ5MZ!#Yylz+-ob=Br_%@}N9Aut`qtKL|A2 zuLp~}0wvd1T2mfug-)9=tyy^$DP+5A)d!B zF$*LL98>P08?ZeN{>7F*_}~M>KlTCHfVTPh=%cMmy=E!ezj!znAc1w@i|-~8q`ue|aKvPNwPq0g9>r6QNX3;^9Fw{+?9HJ8z=2ctF#u;i+dKx?l7OWPoE z_$oD-xXC#iHr24`Hjk&Z>&~nBZFtNS2Yq$Wz5#f0kgEiW>)FG7mHJPZu}3}F2Gx4- z4eq~qxCjOUr{$mj{O3RZ@sD49^;MfpBN(&sA_3S>e)1E;wAQ|v+3g#6L>CF_vp>J} z^wYNVNKcjg2(fqB>Zp5j3F>pQ^0Y`Qwd&<|RxQPDizpsJJfTZWxJs>L^C`jr!J&9| zHt|_fmR%x1)uWntwMeAv67$;E$+@vfO{U_26GJ2O!GpF;&;@WcA%BxaDrZM)m+oT9 z`CPn`Ve1+P?9C1Y_Sz4%}s}sqgjkcOFpyEt~bi|EHV29WfvZ_e9_`Y#T)@G z?Ttme)KUcJHOAxdhGSoJIfrF?b_G*Tx@GncIke2-%zqBu&{q#viz<1o<=bL-YL4ia z#JrPMudSLy7F@(ayG=rBTo)*Ft0a9Wjz3crsjHV0;Gs~(l%Zsw;^|hzkdp4b?j$Lc zt`sk3D5RmdxP=xfNRq40c8Xg}*`WT3e9oL<)~6lFrkz=1+Wjua?c~cmTM>17JP=lU zn{Frtjuy`FPo6Yux2}0OIf|QY(!Zdm%`LQG#faF%p}+QEAB~~a#iejE2;Zb7TaffP zG&>Ad8<~GihbiEhun3@C+>*puX4;@Uu$N=!xUZ%UNIjJM7SN_Qot zk&_~LbD&b)HpQt|K#~MO5d*+5Yp@N5wH!6{^GY;{ea*sf!7r?PPj|3E-CK5C1Q=7@ zs0cu7T}4)5h)S3f>xP|SAAR(Zb!_d9#}vfD7wi$l%Gw2VcabniyNAY7Y%RDMfB4~t zNS2Fi%&;uo^(;q4d>)o=^@T3qIsi-yh~9c}y!YOF&%S*9_1CQ(`{v7DS<&t!dBH`e zxdS%YG$9r()k&NQu|rf3vPzlUCYD$_*Xay{jUvSn7Tx9$$^{4ti`U3)-KiMnO}I}3 z^kS-Cc;N+@TVcDf@xqlC%eP7`1dIY5hPDD$4tS4S3vgd2kzhq?H)*2fzy9mLe(}W@ z|Lo8H%$_y)Y9?9x)$|3gz4n>`-RGZs?pMG5HPpk+vHjw?nyuS5?@RahhRZh=w}~S+ zn5hDr983Fb18K*VMLm{dc^h2_9*WJ&L?>4dEj>b^iH+zgG0#bkTkgjivpQWR?`xTY zSM|u>`w8Vm*~&v>Ihe{W2_i)dHkSS~zp!@ul@IwlO(qMF9Nf$GU6*^4LZxn@P411aWqS~)pG9;o9`)T%-eaFC zeRAQNt23JCUtJ}cMVrJCUElOL3tpNL;May{r*{th*PaZ7`af_fhs=`%dERo{`5unW zFTeWo;pA$}4JX6Na1z{@5!=q{oRW5==o#Xc5-R)(&4Pg@9)5 z7ZLi8m^Hs^>=GBN#i}0n6OS^7i-$XA2ee7xL32^9xqty7lkBlYT?v~lv3how+Dj6w z*gRfLM>MdG=MoF+^vh$iYqaGq#Y0`Zvswa7Z*v`*|)#~>l7C^O%__+{3H)bu){Xz5WrEx z1}iZtgA@jMut-&0TAwKN>-3Q|lUpUJXSI6#u1-o4StPk9K#2x%dRHd*Ro1D`?ovV& zw8X?Vmhz)VuhJjK*GsS75?R7xb|T^q<6K_aL~`U@)+s zy_9UxEQbK?sfUcBw<@18Ik0lEB;ZpECUI9oYNWu&CB{l^uF(#4_DA{xV6lvbmi{=< zDeUbiZ&O`~fR-^3>wpOgX41U$q6oPwUjcf}9E}XmxX19kO+xb2e9-2oR>fXqSkxv2 z9mDKdYt#ZX_Y?pf+V|KgW;6eH|L)(}n!*lMCa`9kMirw}T@UwDBTE#(BYtO(8kbLn_`E)qOtX!-> z!wx=^>!I-WCJGCsennnWxr~nZQ_Zbd=gvuBGEpJllQ`RxoDTY?hL=Lb@3XB>J3RX|Ubu`8-VBdR(|V zX^S+5^CIy_Nkl;wyeK`(sUlSlTt}^PdESNiBmEMWjEX8=MfAK%Le_?ng0h7=rIKME zilF7oUe4_}ZjuYPO%f~Cqv+a*ZAx^Lj=eg_03Rrd7r$~$qrCGejT-Hc_Dw*ya386$}{09u`p8ml^`XrZM%vqYC;`d4Om;ZA45 zK#Sq5H5zICiNFts?Jyh`e0*0UPY-f`=!;s6n&!->BdN+^FBz6knU7K|n_8qgy`qCs zLI{J3d~HIr+}Au@WNU93n44#E4S-f#! z4&6qJ1|nSyg0w71wMa6U?DlK+q@7jH=ZU-3w+ol_ zV4-d5&MSW&?$&OuMB*ZN^TL{E7}D@nav;GqzIqlYY*%JPd?1w@iYvXW4_rhFuP{Xd zfHgly$;7i~X~wY%bE4T9zj*RVI6>J{fP$@KZ-a2y_9)v6t1RD3j!B}&rr~?(l+N{P zZhxNRV|PF+6uh$rQNJPT)jmJb0RTO^u^jdprDEY?WRr{ux7&ax@zT}fpNU=o2sQUL zJBIu5BAbEV{`R-_r>!QFsA1qFR3O#b(WBjfNi)1^vt&kEyVI<-rYW!+3_sgK+Mjl( zb<$df)sfNBw7X_e`XrZVF}DLZS;Qh*C7c^%h5+EjL$av`DiZ3fOby@c?7MdYhYI$N zCKapV4Yov>fvX&0JO|7!(ITg3Mu~Bc$xm@*n#EN!YM-<@G$?D+j_$QdaaP4~nn!}N zW95y-BkHS^DLzp$5Am_tUE$cDyR~WR)YU1jDZ$@7F}c-0oj%_xT;CB@52X5i4>L+hij; z?kPd^)Uh1vG8JMS8XT6aM9;cKBJ(wYZF7Yz$t=YRf!Srg6mhHy6Q|u6F7`ZoK>K_H zKGd#LvrW+?a4|=bXpveMMFQ%w9EdZrY$A>fyDU#gi8A78Cr|soS>xMd;9`rC(Ee-+ zdYSY!=JS8}+Fv26nc>6S)f&Ubwrknf2u?=xcF=8pDuWKhd|y}ZyNzx+dt)FMZA{> zDjg=F_c`mh+N4dpe+GsxcLsmV@V?G^kF{N-lwF=6;=D{VqbpM2gEP=16q&y!F%p!R z94ke|Yo4wmo}@ZIDV_rUIdF#I*Suw`x{s*xNT@r7Jm`f&5y_If+=7|7^TL6{vpi_3 zI62O$*v&Fw82iRroo2`^AuBk8lAdLpaVc8PKoOJIwcb&WT{`*fA;SULku%obKy`N8uf5$?S^0i;^ZN$m`b?6H zF}Dxh%7mFj0x-f$>~y$c6e%V=;E*cmUWaG-1R(4< zTgpY!UF3L9>r-nDe#kA_nL(&EhJ&Vf?k-XRkEhG#t+->^eFLts)=`a#4U_01>z>Q; z@O59K+XWO2=iL;;(zX`T$*HLl zZF5KZr5m(cbo}c9LA$?F?%vCsNgg6xDY}mqvCI_D?{IN%@L68D=OSs9?vFFyut+^T zRIA4KSmF||Me1atGj$3X0G^$BdlkzY2{=u1ryjf99W9#L+JsAy)ogfa`r4NgZIZ2& z&(MP2IoyBRxNcH4CF_v2o%=5wc3@mP5w^qSHN~uHN%r+FOfO?N^v$lu(Z$;WM#_^e zN$0aQWtAzVb3wUya>uUjKa4*-9U!Gpz{{dRBM;GYP`gBS)TT=tX_83d8l|;UlBk|c z(S#peO)^!#e+!bV(JMjwFwdb*<3NOM0^}{68fo}-dSkFi7YSilCJ*P<`Nq1}2;I~C zvU|jMd6M%>R44%6Kq0@AZ(k$}6n{OPgmwm6lz5sbF0~z<5c!biIhM>2@Em3MupEN$4wEqo8)w8!7v+?!uIAQ!c{tB zM^#ip)7ZnlAfTnUCWxog%r5W@&#s>8s5*iLa?v(9-h3m>VOV$V*gytJEwovdx=s}- znr9Z(BYBB7`r@Xu>OPR!(;yQ*CBd;p-0;B2Xp(N?j-_$r5LhX1>6Wf;2CQE5meOZ- z|3+g>@IP$sa>g!U(#vF1l39VaIBEFq#j`izR?b!HPN(qBrPoS!qbPp0KMmEq`s%9& zXlsvHwwsZPc3<*?E)SMbJ?j#16!UUj-MY&Y5vEiejoSoD0CRGc3GBVhn~FK7Co2Ce z?#rFJ4HGZgjm$R`oXPPmsb%#NxXPOX$@T~L*rDa9d5y_wuJOWxa@x5eS%(S3LE!PV z4=OnbSv)(m?MeF#dH`W#iDANphw3UWtRUdzRgvI&VC%)GW*|Dy)icjO|Ba`f!WoQ$ zw^%Qn+4vrlT)J)fcl|>5zW2TF8IFDHt+%Z4#Z!`^9gtjgyCtwFo@$Ox@4RLbi1`na zdM?RUCw(rS>u6lNXq#3~&<=v;`JyH+%2^Iz&cW)ACt1=>>6TaCl0-L0TB`0yzt2)S7%LIi(1d6ST8`SMCQjT(Qr>9|Q+Pxr(y(O*MQ&8j$7k6Cijy9iu z`YFCwKnp&DZqTC&IzCJSI>xL^Y@Ac7!%S&}Lptr{YglOWq|KQ}ef*i)t=m#uS$({n zq1oY)e8VC=^z(F|4vn1lEuEov9CjPeUp@N9Wp1Tme&7l^^&IKq((UUOZy826w8PV( zPM#5LCQTPwSR^ie5x?RZ0WCy0s34P1+l^Td!+)am2pCf@Cec%k2m~$%~maRnr?O?^lf^wKCguvMMgA?)*YoPkp9APkLwL7kd zG*QDnI#D@Z`m49LAh6C3nmf@JTWny`PNRh$rwXh zVnQ}GQRaRMLcCt2s1!+gkpi$v+-(BWY?JPetXRvDWJjdi0htt`f0-+6d9FY!`;zdhs?Bu3NRAl6^3Tb z{`Ty%&mszxp2I}i+(p$h`eHU(Pcn?!JlU0++k@`prq)*~gsPWXVc;T`8;0%@J-X4E z#T}>NmJB^5{SA`nL z?XR#`|N7UzMvi5!FWjLy&)cG;WX9xD=LG-&5CBO;K~#C`m}xic2BQk=xi$X&d+(V! z*X*}Q;$l~Eq*0}gt1_Ju(=RPOFt~}}OK4Hth78@xBH=w*TqL-HlxE1zv($V_h;YWy z*zq2cpDp6HL?iGcuL=eVdWJUbnD#im(s+c*N_ZAFj{4V{@!{yb^l zsk=#&AUlZNMWT|-E(d4+tEb)WJY-bB*C|uqW^748!p?5HfQ2>*O5treN=U?nyrGGG zj6B?IHP)rY>zL!B+{+ybzPfjBJ+Nq#WOzkX*G;Y(ZP7(Cz%f5u@+`Z>0WBu2iRyQs zpe4*XkKyJ@r6$=mlB#^L`cn|GN9%TN;>S;Mbb$q z0S^>7^Zy)WtaUPAA&CLnhvsYxz-jTgU%IPp z(!8%o>w$s*!xyg`R9(A9D{B$ozbrwv+YmcpPp}WemQ<8rLZJNq?Qef; zkG%258$`U6v!Sekmv8fI)i}?}Ud3*!287vwwcqZ4{q@)FdwZSTytx5CcwqVl!=*?Z zMH?ef5RPs8V8mdL7>>1HjasZ%0JPkRhO^)8SCO>6ImR0YGLB~+iTUbT7Lt@>UEE#- z=(xmu6>OGlH}dhEMY`Jigq&dvxg+%WLDL?S|X_6=vHw#zIqgW=c7TzuCz)VXm+{H_}@J~W^UW3VlBC-*tf6C zmR=#WoL$rdXV5uM@uGcrp0QfX7eV2>|zn!A*5>-F`U;m)Qu+sEST zmQIW4Y7Ymh9{A7jtNw&TN__VhCp9z#YisWoF$K&9B66GE* zQrlUHzq#ulOg(ftZZTYT^%$`=rXZbJf$m~A+#TQWD4~TG17&MD>P-k}!Co)~*B#iQ zHoAD^=<9Jxc+$PrqNjj=Xu~&XCZAFJ(6X*wk!-qY%1XuA0OKJOQyH>T)S`<>lH)}| zLg^%l8nguP--hjwCxf;STRk1)JZbl|rqA{p_Q`4S2-b0x=vkv1YG@fbikBNM$82g5 z`=5rE)L`A&{$V$Y2H@O**}=dC#0583IKDD?b$eFOH8L%wF2SQhEK(NfUKMV#Z>^=L2*QW}qOe}T z2ibk(*64Sax;H6xZ+jq$d+jb>>SK+$XDOmBZr@7|4B$R}@r0ExNUMI1Ce6Lz_-_4o)>u1z>nGS%>HRlnL+_r zkuzY^Wh;X9g;OqY6n;VoG%){D-Kp3fM-`~6SBTy4m09Ndv-YdmfkCkskGetkfM!7q z)+PJXj3>YRgD_wW7E%t25+%=6RNRb-;}+WPCTEx$^s1E5yz8ZaiYGQy zVW>sms(fJJdbpKTij9EOT*Nk1b~KM)V&7<0xbp+GxZ?&Fog8y@uh-&fpMWaid2vvY z5rd-w(wImvJFlzm_<#xDNh^&ru+#r?VDC%M;lyfHH5NG8=BQ^mYEj3WCLxkr1Ei%c z$2p4l{ei^xbwSfqr3Q(M(c4|m)hfyqsfe@xSq?*@0$RQ$PvE4^I5eho(xKIushA@g7#eqX z?Ujd<=eJxWe}u075;gQBLh^i4NWC|PcIefq%kd&naLfar=yJT{*?vzsGCySpwA+VA zdzi*5Zuz92Jb{56h5I~V*CIGS&p0ZL2zD6qt(#A;VgB2hjN3#Wy6252zvhEooWD9X zWhO(j8U6zCmpaAJwkU~mv!sYyC@3p`zIC1UM|(ajBKMSVfM7gq;>bPE1IY=e!!lHo z>pCx}St0B-Ic{1ASuDHqOs*Q8QFX27tGdSAVe<|onuOQtieGzXQ}|xBuH0XHwZ8{a z#<@*(*U^hpdTU~#O*fV%N0<0^pxjX{GB-Y~U=iPnCAv&zL2jg<76I*L50%WTWTGK# z%c59m@jOaGobA-dL6#}UsBGTT3%3R~GT(Opm-C;T86Gz!hEMVafBeKet0zKm@rK1Mb`f2&GJrxYO!l*HIm;ZD1F%2lNE~Bo1&t+$<8m5U!+XB4I))E zr3y9*A9s=oy2+KqFhYiSkxG^LTqIw}ESJ|FUy6iM+c_Z#kSWySq8QyMA#I*}Aw@NJ zyUy>$eJo*O0vbUX9`vMkmce?bph5!R7K;g~=vHD*Z6Frf5;t}urRu7uW&zB$Kdo_8 z39=iIjtDuiQio?n%pG>;OE10j{PWKP3Zg;uXNSSv_|_z1xjCfYS*Q9%bgG40LKPj- zBH6ZzL{KLWfo4h}?#4y(Me~F!Qji9HLvl#01*J){Fk4q7ShA)JJ-+kKI|e~f2G+h; z5+w}~;cWBSdv)h^*zL0|^mo7eU78%B!KHzbW)PcCYv0;2d+zT){1B$9Ex5EBFcDsF z6K;?U3-qgB{c7J%hI?@)%mQGXvThGpy*)n!C7HS0M6u=E;`?&|-C} z)C|v2Yt93xiOcbDaOm)NIk=s>9Ium;NFI=ec#M-gR*&UNvK^Ah=)|-rtVKB$)V`e6 zjjPe+IJrh6#ju?`xya6!l8QZezlFASzmofsLgj-Pk~3cW6IlRAoNWRvZGwwgu-q`` z<%Wg!o{{FL1KKC&c1@RCb2a~&Z-mj#U&6uzPN=}U5=ZJk(46nmZk7g*;I9zAb2%_@5OgdMb+x~e# zVku23m0{}r700|~@q+F+@CZOHl2@W0`KS)$f7&>q>=IHv?fof|3|}p@C4%Q9Mm6n; z?sUpCSrXQmOw?((b`w%iD`@-ZPlXAQX)+LJ2bs!f*fVMqlT^x5 zxVuVKk4r2n+eE4>62uFy&e9MBpB9hnBb6}g45vvqJi1MtJq^W_8Zim> ztKm|^jj-%(Dkh(OSO~Mbn_fI?(b|j9!grB{k*My>kQI>XD** zN{Q8G^6A4?W zIk?tvCngE$zEz%Bq@DzBW5rY~ivNkKzo_Dyqp}>NCMHiwH>ikdMy z@R>MK>GP5D`%A=5=e|fRCu zjUx3-M&~!_%&T^$C7WPjLna4wp>V$Rh0xJ?#G2A0FZX4826D=BRVnJ8`y?qACxxCz z-GS9lbq#n{Cnc%%=R!XTrbXtPvB;(K#%&}s`*$d>hhXvBQep42lyna`EUSoD$pN8_sz6q%ZA z07w#6*%g^$vgmY*c#LwHw4{hqNSZJ$0Cqi7PNk8#Rq~>fI<(q@B;1q4iq}6#D&r*j z`$ZC?t&$ish0&~pM={m;Wy&6DeG=mo{>jctxXo&BB?e-2xv)kw7k4Qz2E)4cttFm3 zD*IN679i5*_qYcb0Dv&{7K|>qv{eMbgV0S9h$7+_pwSwm^qx~(!;wZ?etGSIia^{xN#AO6E@uf5ij$kzXt+vULQ zfBmoj_1-Uk`MY+?;xNGKGw8zlbS!I>e8itQvNTum8Qu|5VB;!!AX3`)AVaxYn~vfj zw-Jvq)ib8ie}%Ej(T>lpKZR1RZYhNoB}EDr{|Vm0SQ;QNn4RHJouvd0qbSL;O|%B2f8BB1 z@p5GQHz_MclHkzR=64N+1G+?;a@oe0Ybt`b9Q;mBtqm$1Pij!9K4w9qUl z!yK6B!E1X(qu!PzDb!`TD4$7_9jwN|zwei1hg~rhGTtmce2T5G5dDLZ00AiNSgWzqN7-a@OKir7zQAoUhn>s^j@s*5C1 zOfAA$Ay2%9E3-^p^UOMiUdE9rHa>^ZL4 z<5!;6q=*s`9ftMEN53zE+1a-SxvV45tnX*3m{ykh>dwK<~p z)7eWC(0$gR63GciZHgnlhyk{S9i@b$$F5H5F;bG^k;+K*v;J8mgA}ecGD4NUY!Ba9 zdqAuCN&&X9iz(dV=6olY?=a7E&rcU9ote>+ob0Dh354rtBZbL_hiN(__WeYo6C6*6 zrB5hWMO~ic$fj&iCG^Ak7+Tbi8D^%6@1ah}{AcN%B2S61o>{`Jqu%Ww4kwElmP25F zYiGJVWfd z+~-U$y%!>vKSx}j(iym||4Y1=`vZH}CpOXU8X>q#Giq_CS+9Ho4g}i4OELA#Hhj!i z-lE)6FRZJ+q>8D;dVN?9-TWdK#2UYig-Mf$gZz_I0YK%*1dzLmAgka(pM`eQ|Mdqo z@2-OU6aaXQcu`o)Ai-QCPi$#feBCzdhS?d->h-m+ea+k1qI?^S9Joo2Rj4Akmp%t? z62%gUWVfvPgAF&{`uJ*6qxCKa_?0IU{v08k|Y@~dqsI&xm9Yo6o0y5+$ZggH{QV60L>N(%(_77&$@EqCqMa#_rdRh zhGL289ULH@ViqxOI=D1{@WBU9qlhjz3r0jfa*MpO@KM)HOGzXizmxIXNn~sCsTu(` zfQUJ=5Oa&^2E;sLb<`<^6UaqW_p>_5vik>|(2b!|`dOneAV^x7T8_d+T<#(f*Qq}O z70}keA+-mex(l*cXaQ(v3vCsfc&V|Ih>Ea5zYC~Fdb6*-$XxBT6Q(>qttCa|i!^xkcH4Xw@T zg>BlZrxR75WuYB5W_zV|*^Z}4PLFy@=Q~yIhZcrkaXQ2FaqM(q2o!crlD;ewL!0w? zEZpN)?Sl*Sjl7|VRxzbcEPmv56zgfBRi0T2b=pTxP~CvMbmyAvjw-OH^cjzp8<^AFxex8BZQR4erZa!zD(<7Cw<1>MVWf6;;M$q0h58yj zR&-k}dzzvHK<@PWsLQb)1Z}SFCWVT*@~J+G8(D9gC41B>_ln&l*%{XGr z+!APZU=AEhny!H+Qvh1E%vn2A5FY`z#574+I#-x;N4~U_q~2BP^qNUz-WvR-1GG94 zg?5~s6ai7x;xn*q5f3+>)3wh9mBUi!UzKJgHpx@6U`zC{x%{B56__L070Cz7@Nwr2cT_P)> z6qW?^d*H5|L`{-gwUTmHA{>T9Oae^@IlL=Lg5FODR1UrDS(o?OEu1xyDyK-+wXu7* z(^8TSs$C_SQ;nlnnWHr%yhu`b9&#p!1h?O?jZIwEtEf@-C2LU7jh~1(b&`1Rz4yFv zepaXu0g2M!pm|kzw+d*DmX3tg|IEXEW+6DIK6bFU% zY?Sv`Q67ayj4kNq<+Fvp(>@}^9kljg;DWRV+N+{p z%#lZ$1Wz%DGoU2BN>ZpI0jL8vKgd$vwqTq~d^^S>tzLY+Bn#}Z;LV*QM5CCoIRi)dV`9KRvbXy$h^N1bC_URMA z&dWM{S$ngmE=~7mv1jFhlKUTpzV(hvKfh#v>nV!9*YeQw^P8o?)SGC){OSHydbb*` zrYjJvcB1eAKk$}k_I4ii0q4&qr}Q?!dPhy5o2!bd6g%R^I$?6*aY8A6uRA?$VcvVC z5Wb?E#X<0=;m#^*JO67K%fLFw*1)y!C9_oUz{M4tcgu-63~HF4(-+OlQ9IM(U8R-o zCT)t8;@k)nq@pZ8WN}&7gCk9Vwn*^*z?pf_u+4eDXR!=%>~%tk7-ACR$8dk#mgcd{ zlRT5?z=Gy4hhK*&*UrT74>X(mAXObZg?6A>ouau9Xx2hXF~K8zM9*tIPnA^kMKWpK zz9WYjCT*b76oLvxCa5@Jy@S8;rLQq-Q*K@KN5w+jfcQt}KRv23oUb}qXkEhQG;y4{ zPiUt5r!?s0@+E-N658e33kt-vT#wvm0YT%NHLTZ6Cvow*M&hU}an&X&z0|-qLM!Q{ zN@XX;a%qM;4n9rEg!$7>4XvvwatN1R4^(=m|25o7Q#hc)yO=_uwd%Dmzx*=t6<;ED zkpQ3u+f^q$6Kw+e;EjNcT-^@OSePOKx7Oy6=|9z$QV0r_+PfCe%!RWPa_1u#Q`PUe zPXb-6;pe=2&qv(dOE3MuzC;fX|BsE?;g5Qf)*nLi-p-QZoGJj!7zPXXaud5c7sc=N zu|t>PP!lFiCVevd!?<#sJCAyaB;LLGLZ5r2?$i`|P}(Qg@O(;smww-5i_ci;W1 zzxpeGOKoSHw}Wng0+&c|jj&sc)L-hRTK^NdyBMEPqmn^w$-3a0yA{G|V=qmWfG}V{ zXi)4D1|sfX%GSv0IU)||0?qBbv}A0MLe@TMw)H|lmatoXqtjUX z(EV#9!s^4sy#Pm^St5Sp9OFF56@Omhe8n;}|Tax{7uq-wE&8TW%$MQt?iX`w7Tb?>Z3;8%ld^@%_ zrwc`c!K*PM@GHB2smqdU>+ap7=4A`Pl-A>ohd;EOYAGwRS!g1vfPo|`t$b!lI67Rd z_7dAbdvk(cyN>`LztV&rQxA#f?|;Ac&pe+``!HXp_ve&{NlT)&xkP$`DyqOTDEh-Y z<9S{;-!M;$tW<|ctrz0?P24=MBDe6~a+b(&(*N+@G$}YtY;+(H;=Ot=Dlpg%sh&EF?12d`DGg?bB9G-Ca zHO-Ibsn%%wwNnzMJ$=sIZBly})-CFpYpCKkC0AWR{c>n<9>NmtT3m>M9_nH6I0#1D zpJ$KDl=|?QH9XI2MEOy!u*v+Zu*l-Lff(a*%0GE&?_HSKmdh4yXFdR47+S%pn3!`oh7tLFn zQkaz2$SQ1yCh6C{-yIFrK38E1HO~@xYpDWQq;PJXPGusTEDUwjeEy{ihugkpE|6? z>aWe89IKBA$*9#_b6@$&wfPUbZPwdyS_0|@ zFGetJ>9y25eKtivYAy^=?trh{!ldSpqqmF1{_#X%;1d>7MP3W`y<=K&lN+?WtAq@| ze$JqA&Z>G%qj7R!Of~gBS)A?yhb+8bfeMr$u#B<8=}b1=x$tGL+-to%S?c`=6hh;5 ztE3ny;pGd-wLQP5lH#2MVJ8u_c^H_mb#f;F+H0iaRy3FhCa3dqI0-ld^bJv?I(JIV z`$DVMubvr0stArpuNtc*Ps>vOoome-mZ`{1i~+B#uxTxl=87C3_nADgt*%kA%s)T5 zK5=1qlR_@n0nKLd2f0Le&ptms%G6EcAT*aq4SkDJ&-m#YRotMZ(i1I*U!T)I_WSmI z+I3O`ptVP@HBw9=qT${>u(U54L6?&PT6?-vED>xHnUAYndl%(>^3$;p`F=E%^^%;~ zp6@9=2ZF6LuImJ8w;URYhW+d!@Hk{?g|v&SDcI9r9eLl0c;P zXkplW`uX_gIgmTqg7SwdcAnb%?hZps$%e&AN1bi8Vjcc^!y%>fU_C?`UY$RWY^BNOgkD?3laZcAwRsV$ESrmPUiWhNXP9d8Xv6#>L=^VBikRWCQ zq_#iU9!8iPrUD`e{7t}H4o_oDg3C;63xfpa^lwq8$A5LaS{vz? zP|skxyeEDGI{E(l@Bigr{^gH;^dqF?y$5I=R_#8z&ANgmrgDq3L1~XOW>dt=GF3dw z&4j4CXxIa!7C>men(OrtmFsYu4}4P%G{SS>1oJiJb$`p2*!e48aWw0&7CDxXG3$3N z`7r#4;k(Ym48&F&_#}-XoE1p&^X&rA#pENXz+orA+ds85PM{N@asS>Y-2bHo63L&I zr~nDhJm5{e^2#gT!=L~B=a_R}N6^n2F$~-nTpdv9;UDF5$b{9x^5EToeS|P4 zMgx{`1FJ2*#3tVaY>I7e8*kcKc?%yPp(?Wj6!cZFrfZ~S7*5wzb6^Yqwk-<0$A>`? z4XSp@L`Ayv;nS+(AuBXN8XE*!jx=vs0B!CqwAe=gsFywwKhFTBa%oH;!6=to9tGvp zz}ws=DXf=kxc(L~j-{~BCh=b3+x;~;b=|OD0;s*z0(u537`()5xEv=rl}mq7kkUQQ zL(zI8Dpr9LtAG|eOW8Y5zFMpG6&*8!HKYnC5SoQ9W{D)jgl*TTi^GfqifJu;9F|b4 zr9Q6MM5D2Wm1+NVJvdjde z8&;3qbmn=ebCr55q(2=zP=qDQA^VgFE-I2ho840;P(bPd_jLR}`N>bb&pwbREtnJQ4pH$Yfzw2}Ac;1>Jq=Y3_1-aEK_UB5CsI49 z=n|=ZWXe$_?X=T^%1fCfw#Z!V9@x z)NDa#VUZ!GNg=U=KGCQr z-NmJJW!yjmfB8xcc5Vs(Z9;R13LJ4CH7id`5nF5M5V}U)aw{~fkS2%fZ79E>+L-E8s|^* zcc*u1o5R+#X$#mLBVPO7(z)P!c=hXM>1IPx254tgP)?I(q=a@=kw%(aj!m+xMVIm* ztm3fd_OFwTt_s3mBlYnrr5~|me&cNNz|9vT)*C53d$NWvArXm0NJ^mHOyUj_%x*A9fB zjDHBMRmBFbtW#g1oXf&;t5Px^EDiSClnonn!oJ;F0bbUxsy$Ft&8UeEFNxlyMm?b- znR1nB)ZY38nTE=yEIF?8{TNzm+-fK_vcS12NDP2>k;Kj$H+a%nXiZFujw$7 z)Fb`d*r9rgwYqVUT!$~yqv*GLR#Pq|dmiW8f60{|#ky5&o@p{AZBu$#c(^BtHYd#w zfbE&@dgRx7<`hbfF?85O=;9vaJ=3~Wvr(vP1d~yv8^ zx5b~{_`$@Y*@NzNN|R)W$P?HwJE1Wp58P9GE35Ttj-iEm<}Exto&;(RBee-ir8{^# z?bzPZ#74O2DR>|O?bEnanX4>A^(M7HhSWl9ox&pP^y)Bm!tLzJftEo+$og4Bje^6P z7FwHh$2KvXDrPpI$6H*rR+UC{suwBYHvG!T4EscvL$Q7D(&M%L`*hxqm`O~2o^nKG z@z+pM3gAUa@$~9c-SCK8nd4MAn)OFo3iqTOxhnysE`9Cn(!xZ!(*~hXVf`%J7_C5Z z;_kpw>Q$0fIKNfQzq~AB8`O_;v&uU6Um5)q7$SHAeg zFMi<*U+~*L{^%oAOmV~PAOG=;;Bm-o<#;lmF{XpnWiBnNmjQiIZG(gB@vyy!`{!O1uf$nnB|wqsDzMF zi)aK)8Y(ox`_~`$f02sGr_n90e*e5?HYNZ75CBO;K~%4sTnHrQU-~iu&A$Ks`))5q zysN*?U+OnnpMB+(SFD-tA6lk3@Un+yi!Nbm2HSn-op%uM z?2Uip>tA#AASdu(fLFdWzVi$nUU% zlypm^zgCF>_ayO(QO|8C5o({~H%ml1*PW1q4yz>`!pUT=kvx`boyA&fXD1@ACCrAU zw-smBp5g{PsmpTnlgx0B@#OIdqR zUBgypk}AJBU@Zi+P=zm&La%mK$79xY66zUBR1R;w9gkCI6NTVMnp=k@9xm(AnoYQi zchHTC2mVUoT)QW;mr~D6&RV+r6+5heR)YiwI_D@>aXAK~zC;YI z0@^B`_UQ~)Tfe8+!#Y`Lac04trvxHJIw*Mak+D}%BD2{lHaQ$>%msyOl_D(j-m%_c z*3S0zA}+^k7el+7uN{aiQV>xmbGFb9OICYhgOWs=v~Qf=4$wkGTO-wwMbj5?>VtO^ zy0S%S#*$z&L%gm{6`jOSNf$DSrKtARb!!-QEbO96VIZO`PTRwzgGp6!1igj(F6K8y zBBl933%MWEIj9XNkyBjWB!KoHD^e;oQ#9c#@SsDWFSN@E%V83t>HLijf!s*zND{~d z?$Z?Lfe02x;Nrb*0JKp?eYQoYd&pS zvD|`GK{oKoyfn9DO!bzf>2se$0iIv}@|XS~a+%^#q_z)=9{=EPL11l)RLTDR+i$-O z&qL(gTEi`b+nx*#t@(=hhYbU#U~J#PfsCqGjp@22_Ubl|CudBA3g}4oxT$;VB-*OUv|Nl7^t`upGTh z`0%Gb6n2pqTBIPh30e&2feyCqqAodVjTlu*g4$ zBR@?cK&HsHma0Mc%Y|q&i8fQ;m?BJrq>|-IeL@8G!NTjfNE)Xq^7IU7Nfo!q-e-4; z=wS5+~-p&V?2h$?;aAmenHuGW-d}iY)-` zI>pdh9F#f0EoB4WpH@b|nI?EpJK;VJ`*FVNb3m!o%Zt{_*4ASN{a#zB&w{mjLw!E8 z?>t`Xw<;MFZ@5lLp>}$+$|Q5Cha3Z2e!M^NqOm_ipOXaem$MRLRq*`qmePBvG%QXF;QU}W0XlL2?1NkuL@!%-G|sYt1U6#gblI1B=XUZkYZ{H`o^6v!dmfZ%DI zE6R#PI~=n0Y5eM$^*)~4ITgF1ck=$)7t0xzV|avLwm$fvsJkAi6QnaP57I6b};?4M$b&6Go(7O{uHNrKeW9Oj(Yvkyj{p zmX+fztHjWjKASP$WpUP!!qXXf>oo-y9($qG+nz6Q3h8m?s~ zav_-xq`)K=Q9YimSNvFPl0}MYl-{6(_a08+Q3#R38N5#~l1^Q@-oPA5?z=LktxuXY zKaJB|TdF6D%Q=EDVRa#RSR$w8B|J#U!HHK@VkYeZbx=gZc;~)PRU@14_8whuc6m7|Mnd6)4_DlGV}oxJ69X@Dv=AWMuixP zN|aD7q;^~m-l6+o&am8jmE-`2>;NDZ?Hi?e-fm1c3e!=lP6DFvO%7uhL}#QF_OX<( z8CKDZI2?WR%{O0v{dKq>gPtAI1AXmCETC_e0#R3ygE3hD7fL=T%u)kvuzIb{mV!z1 zCGa%@ut)w0gwA>=Uw!peau$CO>3B;aac!r#*0-l*;;4HDiLxhEZ2B1rHWlRby$lvA%HH zSLWtDdBj3%y>c22;tXDID@5u6lBGV2Mw%oBJveJ9oA%>;QyO(LVwQwS^op;&7h(|$ zZ56k06Fu%V5~b9pW4cVq^ON|jR`Frpn=Q5WzFsD=-#iHPh|OUZo&l|r&C=Jh#^%j^ zUW)eaPQg3_T5G}l^-(~}3uG{SsTN(#6#=d9N8b)?a|u(w68XJ%4HjC=o2nRGGolvS zGR4p)ky$C!<;-^X_^S{8CVI?p zwp-O`V*)l(pRk|`IJDlLtjwW=`>6h;JVe>lFzui!qS+<kIb4v+Nqn!( zqc%B}Qm;%=d7$>tdX>OtC69U*q>!d-CNt0##B2y}gUfLh2v_^NxSO# z&=lCCY%ul8DUuUh z3}}%7CwFnt2b#S_T>x5Wc|a=-%xjl^FF=b6M<#?P6^{3kEiJqdIbE%Z;H11NIgJ*{ zWNT6&l#l~t${Ko_9%kt?Em827oR?Izg-|_p4BTX$hQs zP*^61G!D%CDHwH;^A>WdzYzfSb~~cpVQwXr_zf^Ng0`T@K+fdal0u^!06!(voSfm* zTcmNpYK`bnyb%eUK~XIEH835L%BWBA`S0Ne9--xp?w6Q+%o57C`ZvD`lX4EXNec0R znorx%_FW`G^Cgl7!z%$p1Ia;^i}wOKgF&#A3q3kaoERx6W3q0|OzPcBp_Ruj@Ml@U zvV=JW&!W!=*~RxL1O;V8i7e2%XVC|ozD0@{`@aCd=m6_L6u;g!me}l_k+$*ErMJVc zbmzk^pl=gAwu;A=WAUU>(Y0r&Li(S25G6(Fs@)ENhMWaw+^Wa>T12 zp1>*3OfQSdjNh0T8LEU!coWyia?H-89`oxN!?HctLB~teQMMJu(KB-sO1wTnpfhiN;FR1hemV>D|$* z5LKG=*~$#{bl|T!Gz+R1uy9+*0{)49IqhKGdC7X%*Lqmv%9IqUgqDrY5!M^w=j)lL zGA`(7;Pm9|eTj6<43{O7c^uHL5<`p5Q+(e#f7=8ds1(<}YT5uls^F{Cc9FGBpZDYv zhj4r>SsKyZv&-$=L9~x}4yQAx-*jfN*}r5{cR=#ozD-iTJ!+!VNvMS0*y@fVSve`^R)*JoiwNAZ# zB8xs$Sqj%nCpJ&{BZk4wuddJSa%>W5Rr(9@NdT?) zmw*;AaXB=w^(-k=6;)J`RJ9cOxP!8|9#G()&!S{!K>BYp{QPsSGJsEdd+Gc_bLz%!Jz^?eT?1#bdg-p zW{+_NON%(g(m-}x!;fD@ZT1AP#3ZQF`aFl&LM6ZJ#Nt=X0*?jN28v0P2Hnt2-IA7Xb|8ExsL=J{=l{jObZvd`MBbC0nXt zD#y-8G%r*w%BqNzxIsWdAaz$p`07Iek^9{7d>#JeG(yD#Ef3S>VX$C!SQNhydwdN{ zo5K^ep{bodIpGBG+)&)47YRG(H}tWDPG=2!Ak4F{&GJMcH^^cbCskk$lVrHLNHSZS zBuM2dNnoVL!`PH=p=wg7l&^i+o+V27X82y#E>8oBpq>EQK8Dr;pI;;_r}X}N*i%&E zkPVi;1}rJTCWAl~)Ji~G`WUt%-VhrTyL65%J1dU&>ild4W0%q8_$sN+Aq3PAo=7~p zf72c3c9WPNcG3=|c;n$q<{a{1P6G8g19~3whK(8KWlifmhZuD_%W}MirFBU+-qT#I9I_-=2M@gTF|yaR=6n=`%5-)LvZMwUJ=QLUX;=yZT-vi<5e zoXI)?+QGF=SD(V`f*%2!tD1~BiA6H9Sd`mI&C3e` zmbKZ<92Hz6?+En`82;L7>i7*``qGzBc+iD)M_E8753QD|BP+y_e(=Eu4z#$p!C_%| zB#XSX_*j2?YN;~6@|CZA`O9Da zZxV|T&I~LcPz0#+X%rc^5SU2T0O8goGru3M%NPQjW@%RkngyU$*~_Gi)qd*7dI3?W z-v~I%8cyR7(|vkZzfu&(S|vMf6(0xXgTv`UB?!&zNZpLkS$bO}t+N^-h}XWl30ObzKh2v- zB4^;Ipr@3Ht~X5{?0N`QwaxZG9m)uD_8jGNst8p!`OM_dVnWH1`*<5{K(<-sDv}ud zX{$WENG_##Wwp@$bKPya@RLfJbj2JxU;3*~mkw}=aIz$Yb1vZzY?Axhdd2@X35i`k zF;-}|b00RWGM~fInkt!C78P%L6!7FJ>W}ZGmavNN{UZ6LiljNjwLEI1ea_3WNEA=%HSTGU46I9EnIbbB6;Iq3Hc9z*A6e-V>vn+BM<;pse0N;w zctw3a2$!DEO?P&{iPgm-7%^X6Ja@Iq$N@IL>U^^DVI!+U!j+s7f1c8StP#G7tx$c+K z0an2|+BhDh+Z~JtO?=;$vFQl9j7O=*e#0cx$vc1Y4_}2ISz1 zIP~#>dJrM4JkMC`Z8rq|I-LF>Em%a7yc9@f$QhKrAMeWBhBl#X{co zFEQ^mOv#ABL;f3z|LcGjSQM!B5~1ET1au2Q(7*R~UVH5|k_hPLt+(ESz0qF*I>R1dHm2OL zD0}!2X=bUUcNBrSq78({gWXYgEmFw?omnHVj7dD<5+TGj#2W7>QV;_;)yUpN88HcB z#G<1qnm#U)>eiwftu^FK)}xOTcjbm{&>D0l*Qmb&7iGkO!=ek$wL~}pQg+pbNa4;6 zV>^t@wJCZwFx-+J;<8A)LcIW>yFU&;PdtKi6q|_d24u=6p1Mnf11w=*LSAL~=)&`S zIAzHuFc1C~zY{pn2^f7#f%@psa*Jftc&Uk6?jm`up|Idq%6-Kz<+({jVXVtTOY97} z*;?=d!Ue%PNM=cNOgZA2YoJ+}ku7YS4A-PsgQqUx=E^;uBI375ng9i^N!*imR$~WJ zvd9SsV0nq)VP)AfXDE_!9bWMlDM6XUo#_&;+BYe1#m`WbkgYd%otAxCyTxXNg&zt2b^L53CCq4 zjC(d=oJ8DxNkV~Yz=<8NmP$1WRt;ytfY?)<=>u}uf2yVSfU2!(qo`gw-`xI_=>nB! zg^BLF(#Bs&hqcywA-L&|bF5A9+wNS$ZM7Gs&Cbn7xN`}64#rCr7??Qnh%V zOP@MacT+t>`1#Vg|>iKa_tUriT zZ=FV%2}Xeu8;}Wakrn6?nNV8?uFF&)z!DH3O9=c9MGmciL$pjqUr{kEWK+0 zW!F8o=mC;D?^+?MEuuJ|1x=7ZIOp7nWr{iC*o~1dy^f$e1sADdKz}W|BykNO!b0f0 zwro1CQ-l!=Z}sWh(&0AqAYl(-iO%d2Ua1s<0XD!2Z=sVQ(JXzX2jXPR8C-wq{|rGH zWLKK!r_0K;P}N>U!vt*(v_T3aV&#wM*k_t33Ybm9sRdAci1ez91d0Gi0Bk>Pb!BcX zRMMx;8Y6!H{r8_l#oE%0b^8jz0Vy`8AAW9+efi~=ZMt50#anXkr_GpB8qx`s$$Dy-HF(J3oGubvUHbG1N#hU20ho07 zLfH8+-qb9~aJ!|rfOQ1yS;LbSEyFT~Nx)Cg1^8pX3o|K*M-6Cf(5Kp^O#jvC+zsQf zw-Y&I*HVZX2*Y0rcwZu#_ZETKAQGny_%N@1bOh%x^`U@3$Vj05(MKPds8n+JdSPxk zhcHd&mg*T272D@b!o&@HGT1z6Vc3G4B!RH*kt$YDC66@{5-6!$!Y`E6VqwB1->1cr zz8g&Vbc>Qm1Ri_^#U|>)QkW&v9YDK^r?;MM8|_t7Mg)13#d}KcV8*7neC!OSl=>rX zVaiX77&cAn=G`KdE&(lC-sA3;aw-m{No{Yv|5ZH~WIL;MnbJXNgPZ!Zr7k9*&61Xh zfVSQdxKpnw%VIg1yILpZw6d}+fL3Q9cj*=@2W29BwEHxoWp|UoQNr_e!x&Gl%KB=c zWh|3#AIBv2|I_8KaGr0?8~@{vKQ2+rhkzC-08gJ)K9Iu4LDw-$gx(UhC@$fR1x*vq zk=l!TYA8_2!zTHg`jIM5mASW^&$OzvagRi8qTV3{_uf-_LlSjTy#vzj(e3H|oC^3e zrzqJ49+)F42eS>89H=X|y!r}gFA=AAi_BgZsVi2d0w?pv)GLenz$RG!$Xv}!Q_o;Y z4U;>L0G0Jq@9kn|fYwBM&Jy`=y^2uTvh^T#Fd1p*bDwu=Xqn5zy{w|=MZ<`mP3Q>&aLlkfs-&W+q$26 zHZ1)xqSGZFeyxHGho1MuQ(H#Sy@o=Qw4GGCfLkmpLKNv{tTs<2GfFi)1!_pVu;kG> zEBCq&c2Ij>4h2ECBBTuqUQHp;zemIz%zktgPEuPjT%NlEAJ%&iD1sXlOga1<=^M;b zTN*ra<#Gjc)3alqZ&JdupNAyh9NG;#xekq04F|vy+AFS0n(QJrZGjHZk}vGD99R@b zrb&vLHS)swudwPkBi4ueXdNZp+z(!dg?$kMB+&?OURU@#8c z^J(Z^&`AVX(uow5fjCKuTuQ!Fe_9CB6lioyV6kE9EP<$LHldR`Xq4Wz-VHycp0om_ zpGH|^|JB=i(j0w>_R)tDr7Wo|S)&8q8j8)>ohwOgA)sPX)gqaAF3sr|>H~#U6rC}g z+K?VvCj8j;CnR;Bkk}6?d_GAJG1>xT2|I8K2wo$>DxjrS zl#1y^DuU33N16O1J339MAUy}BP4^Av)A!YE^f5{4SZI?%5=5sK%3M98Q-?V%zCY@q zt`d^Ni^7KXEl>WvxlcSZoT2=)_HlFR&c$w6;VvNUZRLS+YNWJ&k zEVTHbfOfFZ=BP5L0*THZ2f{I01RnB$Tl&;ioaCi5`PNqc;;{U2U(6QTB&moF6>+<2 z;L2giNF7y7Ak-^yU8;z$*2{Rh7dk+Tb9W(8ZZ>WJ01yC4L_t(sjDi{9wzsIig5|V0 z*r2g^_0?Bl)j`)4?pv5pYIuiZt1HJrQd~`n1=6XI9-1NqM7Bz_64wck73VH^1kQ;k zQSj3t2gKzR@?R1gU<#YbHJrz?7!!0uVy@{o--(`4`KB~SV($Pm)*_Ae~4?@4fflC!c&$BG)b}6)nA6i-AI0QgWB~vjH7x{+|Km5?=9G^kkxmnSX z0L(i8=X}7AHFAs2A9y2dQ%5m~OZg6yf+lOHLo`u##?x`WZQ`JJ{i!0dFLR-a8sZL%xSVunB618Q};%Sc8b)_)ti@a&q-25f%LmP3GZ7ZcK*KON9>kCirCM)IzMgh`-LkNoZ(9= zBvxjZwAQF)HaH0cg-t@kmiwps5$ z-$&X%z3uTAC6Q=x<#6pw5r9K&2nCfA*)bH*Qr-Zs<5uEZ76}wL2^l-Rau4mS$4>QG z7Fs*Y3OzrS#2ZU@Azw5DT7CQ68OpnwBT9iQ57rc!y0tSl+4s^eA(+_#6mtMtlVs+~ z6ZCWK;bIZ>5abrf`WDAZ7C_r>+jiU~oWF8!IiF|X`L}~v=VcJ9h89v1-afRGQs*q1 zdw-TXp-Lg5@o^!Tk>px~ok?FuQ6II?>J_`5gmIYtU74VPhx2?w(f~wk%ne8DK~6=Y z4wJ-f=17LhjIcxc3>7(Qe>hfA=jrP3xK9#C01m&lIA5tkEch!nW8SJbEuvprg9bIZS~ zev&m*0&t=rYbHd7w%C6~(a{=tYw4~@%vr+;mPYCn3)ED5~NhXEsjdXb|t< zbZ$}YfU1icX^=~J&yw{(+dYtb>I)8WGxJXZGsF+q2DvHFppa>bg2?cKhVV))fCZbw zmY}}CH{#km<|Qd{c8PpNAAIn^M<0Fk`s=TA;rtap{_&6Be*5hrC7#IQb7*2f3RnVw ze*{94G%-0B@n25?9#Z(tbC%E`Y?WAoBuT~}S~6kWOchk_ljYVvHSs}*0oCRkau_W+ z5aPfmQ7{P?enp01&`%8;JJ9b&rD6UZByWo(&(5?~vB8$GD^ZjpQ#Khc6s2E<9jgscJktEeYHRBNA8 zN)LlA*;~{UeTdxP*C@2Z4gNIhYI@JFk%l*mUa$rpU`#I_VV_M3%<7({dp7#BMwKZB z3lvd~ULsg};|z^2XYtu%Z^^P0b}o`7PT68Pb2%m(EoU*bHjvA*g=psOU%Mj&^O}V!bhU_wf<8ifn4jy!46wnfO z%PJ`VuHx?n%1#nLd)895QsV35G1e!FMhsrIZjPTxJIR`Md~VB2yFQ*hPFP-NDFjY z@59Km$4!ON)B95zEws9o2xV&zXtgzdpTsy%0$aliah1^7B9(g-nWQ^tHeR~DunM=t zPPbiHJuFd;`E)U~dGe!HrnEWVHF>qxF43AYG=CHfB#SAybz@QbS2C*|#69;W5b$67 zU1hcxB|PR~dN#4QIwE!;iKSS(1Z1jl|0Yv_lLn<)W(u z@!Emyk3r0UmQP(Hy~Pss9g;+_r(VlovFU2$cCjWx6BLjUwMpm>(0t};r9_nk&|051 zrSvgDdI-t&?St|Q1)QF zFuSed(8%&RZltA0D0Pa!MWu!KmZ%Vj{_xe;h(AQ%e)`j&0zr9$PV2w;#V_7@=N(5x z-hzLFmZ^oZCighR0-|2T-b-kaB0V5=#xO@fvcU$fVQVcB`skOp`N}J=_`fKDYt42+ z=@Su{7jZx>Vh|XZwH{+tyx&1KH8Ol&qlAnyog5Cvw4QV<^6@jowN zW8sMcZju{v`_juVgQAeEs5H$B@_S=w2x$fng@*z%LcxTKg0YO#NPT$#G=(jOjAj1i zOE10jxfZ%c5LLt>mM0DI8(FZ4YMdBp?TealdQCj8)k*syDmER5M?@TW4=<6J_o%WW z27I4_U$;@LEvwlQp7T_sDdD9isDbJrk&~#bcaq19rNF(lk7c?>B326p2ReV1N}I|q zQ?o#pM_rEBKJc~n7TSyWHe(T~K3l~qUL_!e$!|D72(q-$ramcD4hyaB)-_^imng6V zKnvai#|O4=XBOJp+s$&zBW3r|g2^ex{aE@$qe(=@t3)5@d~P(kTvl5L;XCzmRgx=< zg|<#ng7ay`mQ!!4<@Ytxatu>ZCmce;W0$B@Wg}NfbO~a(h&w$kw0;yiG65^bD@Z)o zh*`qTt5j^ZM=u~B1+;4f1kD$HWb(6OXtBQJ{}#o){NTVIOyZ7VeL#W9=1LQ$9qF(c z`S9mfVX1dHo{#?2qngwUi@JydO==@~DmrrSN{?D-yI-H(*wN-9bvURgAaet_#oT`W z#m+)oLwj-wXRAf>*n`1xafjsO^Obw`0dM5g-Rr;IpPAabu-TLp%6cOec~lkGV(Zlt zT*uTS#v%pDady<+yVArJnavLTq22+C*v0(Z+Bpsye@VJ?nRq|(SW#KON9TNnt zEaA1SwMxSyjjLy?v;TU!E_%Ce$@Hkwhubg(^H+wMdTo@xPG_U}B%iw+4+E*aN>o?5 zio$VzuXZ4bzN3VPt-8XhBv~WJ?Y$UUrKJ*nTS3oPdOoU!c39IqVYYO~LR&>$a*;ai z=oQX)R3N9zafr}IVov_s&tc~~%`p13#&$ zrXXfrB#jeItbV{#eAgHfFlCj-a)j@iM9fmyy==t>m(s`cRI$Z_(ZhTSiD5I|Za!~E zqB#<}BBj#2#Z6XXUQ})~r5G@>O#*oF#ZM#Wa}Fag69N&h;wcpJg%wf39%hD{A9I+) zZQbpDKls59-h1yomp0sT=z!LV-fzGuSOWnb^VV2@k&+T6!ll%7nR>sPYfF;kWByDt zB9#^Z#;Jp4&mVvJ<(Cm^0epdq*Ra%w7%=9sm0`K5s~=;-BFGUYZ^ObvU!+vstB17pWJ0^8un<6E+o;?w@?} z2{tx3oww=la=pWcAASh&cN;GT3m4)r2s5v;Tip>>y-~6_TUscUYOiaw(AHlhAAp`K zRb*D4PgN{4+{^GFxJC`6hbRyN3H}zb!91!{XdF^F1H;0wIVprj0ISJ`us9vjH=Sfa zWrofwqgOslV0?+1<8%P2Q4);u4d2VTx`Z#8HM=7h7lgf*BVPjd_DLu`r+uf8xGtBz<% z3F%DV&vmR*mSdX`3zp{k@W%{lh4h3t}_4)1ZehXD5=!ag)_pZT03$4&S zK)c5f0ni2lQ$Wi@2bv(-48b{_J`tLGxn8n(o~JOi>57yV9KKVOnEnR3N>ZAM^a)zD zaz5nrsQt5wq&|F~p2HQ{6sabgtJ0zoq<7MywaLHC>^tV1Q}gjpaCfk zF2^LcOQb&}vbDCk7L6yWqm64Gi(dGq^eU=hMDtWUb9$5LRhQmD+CUt7WV5k50GLD060ub$=$j{(b(@GP^{_2Ij9Y7ur?;h96_?|D#LoCuz0fg}nD#&op&86m4DFo> zIR?e!o~sO}7}R1!)mg&t_M$YP+2OrajLd69%+*kbT_aa66!9sP(U+)s31Ls|i{ubi1(b&SlK$zUhUI}rocoN$Mhv~Os2k+qh1}Ly+-DhEG1rVQD`K$ zq+8p}HUIz~&0mkV1NMPVFCDaHkHNq9M&z!`@rMr4YjCvHT$_ zK~`Xy6ZiuF-f*Z`p^bHlcY6|xE436Bd5?x|Qzw1%+PvHS%Hf)onD6&`y#*g+$SCf2 z>b!*IaEYWxkp7=UvOBVA-67~n4!=-;Wj<4Rw<_rfzJ)pIULLV8#o!dmch~N+i$;(-LXTRz$%O*B`Jb#xj?8a zwQstu5=Q08ntJc+OI(8yhD@#Y85c^Zv2&PZ);3r08wZ|84OnWU0JFhiouarS)`*s` zAzrUh66q4ox16g%0>C5QpidNDXOpFlqq9(mtWgHpd+W^P+WQ!1@n$!%PMaYA+Q-m> zHEjyJb(b)bXejrd*g;*C{;v^sp2d4`>EmbWl&dp|bpqQ>EwtNW*&$aoPSROuOCMSf zJtO4ZZBySKN|YYRk^wvQ1}=VYed^%hR7iL9BV|h3!5gx~&{ioez+^Ud=H#revtDY^ z?(sx4v8dQ&p|uIn<|*zQiC9yKtUSaB_#VuKwk9(AqGh-ZEm z9!X-MwKo4qvOtj(IuRUa3TUyow51RT@kQ%8dOhgwn6ErqXixm$POo_dO%wscUe3LP zNtp`3tP&2B1QxOpB~Bfe_K>Q1rNG)J-`39O6NlBL1IayFE8?bs=2=>3lf+?B)wPJrF%meHKGP6Y?L5m62z-ewBxo>6H52Yoe!j)Ujdm}Fb~%gp z$!8wI$~>#Y&|V@~br4bV9SbenxeRoZMMFdRX*<|lQyXr>4r-Cc1{%Z^QEJ;en$IL; zHNQ$rkZ4Um;{@`?8*lheZY9Iopj>SZ-IdCtMNH3RTQ$yR;5y(athawg@Zq&3xCb71 z61j+V){2B3*WT%crZ7EdIaxWds~CG@Q!ucR<7 z)@I>khXMh#^Z^_&Gmq1u$tPfB`&5QlhIkD)T9jAjX2;VlOeLZfa`9 z6n@Td&j3WEz8@P2OMs!h|Ni^F_i${tDczGEp-QJxFb&#Rde}X%E^xh5HbjkvO#$Ak zMEs+Z+uD__mLkMBATdBP6an_nzE~Kz_m(X-0s0NGlL)51&z0)ru44ql~_Cd=j zZ0y{6WV@-Uc)-nbShv)3eioRNn_0+DB?3@W4``QgIaWYh`ohcPgjj+l;;c$!_F_2P z(pPUQ;sBDxaW~zIp{<97b~|7$hbvL(U5+ih4cC@mZDS4(N29KY_eg`JqW zQjaQYk7@Nl;zN9UkvyBdo#t z(q}%^weYN$KK|_RK{)`w;pqT|fI8$C$uDZbPgu4Gr`{qlZ{$C^l(Q<+?oUN()gXsW zVY0i^qq=}}W(K!udXrda({v=2xato7wnw;aEtW&!M4I5b@Z^fom(bNVugJqSDM<_+ z`Wa+2+FN;FK8iKdd&+zIhR>Z+V3rXoF zm7Mr1zN9a%cB6{5zl!7!ZV%rIqFEevBq35->yo9^nZ8R`%+k!d_-fj^Y7=M?vEpJ9 zlULEWm;!%ZdzWL*A-A*6326QjQDcrd)H{rTmZ!tor_?HaIBtm&GX%855v;q0atQd3 z(tu4C+8ThiMlvSr#f&Ag%qmr|%`wX{td7@+nL&pxZMeGCky4n=xmXV=-#_@00|uZN ziGPD*6&(D_U;eW5>yJMA2mlFSAct9bP?lJz0ZQab<&v-ALrWnKq(*55Aaji(D7E){ z;jU8_S^CWEJZ89}IB$GJ{{4IJz4ze18G0=DHyJd1m3bNbB<_5ji0MKvm1rK9?@p{p=8_z9Yu1s>Y~ zHbWY~DVnD^t3aUs!M7a9hBq`N$gWAcM$#+`m(GDt-6G9B(QFpajaAAx)!r;a+QUPYf>SKTBop;`R^GzQ+!tSZk%Yh+Hg2vZyU-3Ux!2RUok3abE z!yo_n$G*5u+qs!%y?wtQQPbWl{|1qz*H-TbR7#eCo#H#fTd+85!8oAKSi_r|`}`*9 zvUpPF-pyD~Ad_N!n8PAm7>|=fVX#@eJ{}?)0kaV0J|*eqX)GB#Qh5I7$P`813Qp~l z_VFj5U`}|7n4}O_eIXrYu91&{FXHAZeUg3a^`L8?x!yt^N)kq4B2tt-jTTu`6;JOX zhSnFPz`F8QJ?c12&N(8e;oPD88rLFeLiNBVF#!C4>ykv(WHIyl+GC6)$j#1x0PjgX zX<;>UuY=E`HYQ&p$q~@zFi!5Tu#O?ynbEaQF_6PR@)75D5CG3q-cuyV^N~5>{Z%}2 zuc1c+?G1powtP-WL|CW}oz(pXLe?CvLt7TT(#c-=ENJ51RmJy`7Fy>aaG=oZCKUoX z8%pz4N@6OYwMJUNUCtY?Lkw*?VmNbeL(77k^~_CYa(3Q9U6g3K-L*q>ItcCxu9}q;dxCnZa)FH=DOP}Ic+5YL3yK0ar^?->IEPOw-%WB72&%oBSEpa%?Vr?ZXNES17OH?ZNQ`uaEs{yGHZglP z-o|mi4-0pyP6U*Exg0LX3TW}tIyqFDq~J;-&&Mc^U$fMg#+}G<`%mq98X1po5eKVB z(lz2>vA-}eMXo^)p2Lyqg(!n!;W9vv+FMk&(b?9faOq@PZw=MsMyDm`E^dFI9xf{d z-5A=T_*f!0sw(odsSeO$ZLICCi^TM!f7}wQ6f&WNZAc^GXtu3{FA0pa&Y(-!Y2jZ7 z4=WRskp-J$4Ua5-P(TqJHY99dEvjKC{}qXQOwI6x?8hn{Dzg|E6Hj-pN)`J|2`59` z@Q?rWPal5tkq_`IU-=43@2pXsl^gpKkrE&XfEHM#=;He{a>HICzLds|8nzDI!`x%I zhxS9~hl_EO?}2-0W-Z zx{ZhCuM4!+I&-+9r4XT($a{`<7Re{fA=Hq8sQA}i;je&atcl%^K*hgDg6!VEk+=&lqOWF_VALw<5S17~F2?;Gv#+KPd7OoQNQMlNhQ;z!gssHlh8<3Bq<+Lx{Gz)NND{*i}+#dtr=A^i)bgcaTSqy64fd9CeCmFe!Z=Fe3-bX z?cb!`$83K~Ix!<`+$k^6B>HWLRzRvbdyeZ#WZJ{Eh#SjrIk&k;#1UsqMFd@%A~8#A z_!dFcXrXJT7eA`htz&KBY0%3LfT4pZGl%t|!y6bC? z4{HxH`6d5U23w?TZ;DjX?bO(M#CMTkw3E71hM zwLb3(*+nj~`ESLFg4jBcUj@#jm_5u4%w1Jrg+)qKdSdHU#n}q&t4|O?CTHo=Vk=za zh9e$ej#7oLEPFWj{1Vlnb6>vn5*Ze02ekpvrpUsIj^aKGF)N1$Y>8AZ^!{f#deuOqXFEq@odCtQ-9``B=B>%oA&PSkWM}GlFJ3yhW)}2nQC0SeyhQh*L|w z^r^9nq&79->1&_DoAVC)(w@mSvUuMj#WClw(&UdxZ&K_nf(ZdKZw>xIyYktHU4)$z zBLecT;taWyQIB%1*EL{(u+72~JGTW*{dTp8{H8;i?k=)6sxAB{H>$fa6VcIbU4z3p ziatY!l$)QkkJQiUCZc`LB3KK1xP$=>(m(A>NnBiVR4~qBa=F9>FJC}b1QnD}Xo2XV zJ*iGaPgAaV_2=?^MK8{S+K!pwuT8|p87Qb%S&a(aSC@~Gfz~Pa@(H*o` zrPM0Nm_?&+QtNL%zps*!*lhQ$tzkmskw&qr?RP)`01yC4L_t)bNNOBa6J{wzv%SlX zEJQP)r9w)18c4AQIwJGr(Ul}K9Q!~(o0tW+ZaAUJg}Ei5%_7E;*X6S$D;D;jB%&Ut zQExlF*Z~u4pkjwjNFa%O1*xux?UZU1eKz%gmf3@NHY0wxb>&1d({GYUGexs`tBs|O z-cVHk6$v6`o74oEG2v0zaKsKq9!q_>wIo1Dy!8B+0$Q^D>*R0jmvftC$}$Miyi7@n z@#P|VWS%3dl;Ey?KEHJMEbjL9jvh*fpRKpj=w;7$(MR3PX1{{e1JuW_)LX9f`*up2 z)f2<=GaJ7O^?_~T*?+vJfRa?vT{+`E}e zb7xl7;JJUulKO~`7lF0%#)NdZCQLP@p-sG{l}XyCQOFxifME-O!|Dag^wMTCd>aPlI0-Z`SRM zNz1+E&Cb?c7psJk(?+~S`iS?aZfebK zmr|Og*$}%)A=%uZb}x5O`~VtoQK3n87DBR=TvFP|Q(RBojlhS^jNBMzJm~#lLAgcH z;v#mPX1LyiO9?fFh9EJ_!puzjo73CojPI@PGD(j`Yc5j@fm;? z*{z5Qm0hUhrrlfn^x!Th`qw!Ct%a$X1`p2aMTbPwId(hJMq3kl{7(RbYunzC(Xm@# ziL&sM^f7$(D_=n{;nEx?p?BoeKr+Y;0+FHA$c}T3gewZWb6^{ol2U`j5AAjS*~yKi zJN>sO4ZU1i9k6vh@|UjR32cFB7pzTy*k!Ed)CG1g5qtT`C!YW~fyy21aR#_`*Ki75 zq@H96uS;vE+Dk9J^!gibI6Oe*8%Kse{NWGZdFLIJ`GJ(f%@00Bct9cM8u~`rtK660bcf3fm(rxBe?k z>$nz4t?^>J@Y#n0YzeJW3F{Vc-PWJjy|BCbce_D%JUp#)1`o<<^ z@N4A0_C4?L*vAM?ip~#AiUf&v2paWLF1CfsHm0*mI__se)RUCB{p|5^Jk$WNa2x=HNt0K1^TJ3eQM<=Qh1ifd=<~( zOJt%_elqaQ#^&}twL~ba^%mON5UeI*QFS|YZR8|NZ=p@%6{8%V=+r`0^nzq*PCd-S zTQ1B(@!8L;5@2ist1y<^x?5;<3ny{IBLhj3*V$F-gqfVdt2hSFmkO*ZpbQ{qO$|w8WeR!LW9fPa!`D!us_3Re=G#?Z9pqP&qk6NY zEZP3K*KDCpkxzcUE)l|=dkZaRg91~E1kR)!->Tq;)I73Tt_A6KOP^*(Q##}%E|jO& z(C2dx`1tMcLhbKLbF5&)*c{+#dr2&2X#iArfZ@;-30?<|%O@Y{>)>EaDH&0+S@M;D z>w=TybC=G2`{3{e$>k}jo6h{{obkcZGloCW!$n zG=7T{k#>WRvk?t&CY~26{g=){djMMNQ@Qddydw9`eVhTF7m9zZ=PG2m zL?$%hQ2C|%l=IW+yTeCMN4+eaubj@t`PS>%W)-Ir69qaD7i29q+otP+2w^3OGZ0;*O;g_lt{8vK+s0pt| zK&IdS%F8dm^u;fJ>s#M?{q@&3gK&Evn!3eoR8gIB_xfA>NPF$I*Ze`B9RJ|37Oc%D z#4&?~r2^w6=i;8{R>6M50zZ{P-W2^w%EXpciaUW%IRIOu+$!PgA1qgr^Ae<_RowEcWhZN$(@c#SnfB4~tOS55q@k?IkoLPi}K#|Xq zYZ>4bNjD16q)O5`OrU6%NKX%j)H`BPD6e6ULL+*%WwFqv0JLNROln`kMS^ln7UXGn zT#m1i^~d52Tf#z%j`_@Ng6U;XgO>%Q@qS|9&wl2!w}+da-&KsR+Zb=V^GKEK(^--$ zW-%|T4bvt-%X4KXu-^IB?%RLTVKjux7N?I=Q1LnFpL!j@BSp)Gyc4^`sS z-V$h&Awp#={lnDQv!WK-{ET|Dk6a*rvT-^%oZd{e zOBO)8@10o5I$3D37igg+C9~Nqg-nJw*2!Y8YoT8bOD0W>n6}41yB?Epy11=5p-Z-dP{zX>eei_`6SqdPNGQT!HeY(%oylf7 z>Aq0@ur8+~u(P^ErxVWihMawFp-q!+YY=CLHf@63r`wi;TEb;!Ag$U5E)nBV5jJC`3D51%6he? z*r6KeLY9UlZ7(V!VC>dBGCB(j5PX7^Is1G-j>~;sgWB7NY7dw#;61KY%I%achpV+< zucIcsGH0swX{sG=<0|WsWZ~CM7={M1n#gm39jEt@V%r!KsS6kBgv3T^Y7vL<6q*+o zocSjd(>Jk)*$8MC0@|z8+9{$vH^H>J-BPa<;9IaJxSuY^oTXtQl!q+g z-t(tE(_BOS2H4PKKQt3`R52yjPoWb&)9#Ho-T*Z98~*O^{!TZ5E-*y@H83skr$Yk&716mE zBUhT4RO#P{Ya@}!bCbeW=0~hUYyTICOb`f-4uAN;2mS#!Xs{LpZp6e|_^9iqO3kQS zqL}qI6+=FuUU87a{^lFvA@~ux2Pg}NRmPW+nPSKg!XPvt2^px%?g-*gnqWlUJvX!> z;+omBK~Xf;-6SX8+Kl0j(*V-8<=C*tXDpZw{i2taUHNNY`5OFiwdDPV2JRHSf6XHPH|xQ_T>eFl6NyY2wf zYm+(<=c8BhDL^rI|JqL;`jPzJ#*&F zVz)#Z=OV$tTt1aDw_n?TDn=;NhAg;BUP|pu`>OgR6Ob%@n3?h`of-DChL?Ei5w+Qw z%W+(}cV@O;lF)7V`(8{U0PW!tz7nSwEwqcc9H+3UQh-2Li)u*((5~WgY{IuGTU&4T zPrZfKI@90zHTL_yyYI=(sk7t{_iLNaY;Yr$luzG6?{RIps;P5&A@rE!C!mTghW1Ne z^ux4@`I<7uY@w|^ghNw^U0NjTk`5}}$Fz$?7-`F=_a7VZtSQ|fc0iiDF30InK$}En z81`cl1!CzdV4EP@DlQ?^$yOF*iqv#9lzoIxCW$Ak2eg!@O|*^ZA#ugXGo@oxI`A@4 zPk?XNkbJ;KczD&O5ScBsbAv@xu{F>Xu7{|=$C+RI@PXQCnyhUSA3m*cRw8{Jsno(k zOF&DGM+syR%Vg>SZR&GG@eu{IJn8iK9&RILLcC<28b~kf^F4|Rs*dvMfyA(CIL!fQ z>1pWl+9Gu&6pYnA*0)Ng8*U|1%Nmir7H+Mpq^%mlBvYupv`q!HRRF>=Wsxj>rdtc% zev43T&aJ=AzlPMhO7(c%8YcRqDjI4Q$h_>1&^w@oZAk%bEWu7Ni?|$T2?Zj%NaB2S z3%BY(F}u}wkwi12S{I@ieQ1k#$>xT(k=`J;Y_2d*`(RK-6F0-F5aK>4evK^82)VpS zmMZTt>Vh(cBnj6>BM(ur13U;20zhR6y9Yd1v87=hBAm#Q8kMWRjrc$ibc&Qqj!XTgci(*%1%Wu{ z`#j<)M-r85c`c(%i z{-rmCbp%P(=8KD6#~MZc*^PC+Kq&K21H;@Rbb)!qn_4b|u2pab!M3BFEB94Yvp$CY@u?)}}kag}CJW=t06%@$2qbos000mGNkleat_SQacj`aYa1P92;o%N4vCs~4m?sNu4dI@CH~+kAiKt8X*DPW#p0AA_ z(usvu*;*9~ZI5j{BIu#I1 zv&7D=J<^#pAzH|D8D!SE{?#Z3iQ^I% zyu;KxDfNn7AqE5W>rYi&j!P(KeUf@Wn>UqX+7f7$$TV5Se3yDan??Ij0&uQ<2Hg^9 zRuzRNiCu2tlxuyqmnw2TzOmksLEumZPL+R`uWRDr{nrYsln1~i*`kN4PL`{)Q6 zsyH@tAp8IrRm6X14a4#xd4G63DW;_a1x})itB2HlZt4cfJ0LG~@hcH~VsXILL#A3_ z&ZR_=A~_i-u(7*6|0@h3gN2s6nY~&h=DfOJ;%l zDI&qFacXXL!hJ4}AB6s=55r-S-?ha9Q#*!E#8&%o?U7N?@uUW||hMHM&Zr+P<#-U<8+PftPUJ05va?zoA4eO@GBlAAR)x`|sz5 z39)_Ta7gA~F5-P&B=8t> z?#;Sc_`Bcz?!WtY|IV6lgLF+uE2Vq&g{b~~ldRv^s7OE!Q?qyJD=qRFivk;a36%jj z4y>d8uXoJ6rXzOIXA$+O7#(Fq_{U$Np`L069aldjSP3( zTzNnDxuwPQ(k5S{%Ig{?LA!Hd1Lv?{m^kU7Cz}Y;Gy+)kTX<{NaFxXTz#5#Iq23qK z&6tpYG0z|gSUi~J+rlN=yXUmzEx^3IgpF}$Qf=!esob-QCk58`7S(I1O{k*HwWf46 z(N%Lf@GKHOf!cjOoepsxFf{!k(w@~Y-GEMRQ3rhOOTAsf4br~>pat#u>%2{;ALj{B zKR=CB+kW}YuFZiLMi$E_#c|@;8ra|>X&$W)wgJOiq7E>H4-0jvT4*x?Z9QC$EpqoQ zeI5us6qhrXV~dEO%nXOih3*U%k;WVs&qa`HUh<`0EIc3pXj3FYv>r+BbN=+fg^ChE z6E!Tfly5GP=z^4w7HICSXBkKB)Kn$1X1yczR&n;TaQIANX;~uSIVCL~y?RLR?@FC1 zCQpEtqL1}fRu#)?Z|2I(%bmglZ8u0XTdp0bCW%+uBI%>62&RMJMZtofd1sEmb^8}z zMJ%+B+_rH5ODbBGzJNp#%SkzNIj)k}rb=jf>H%$<^4930O=5mY!;u;k`KJ&ts<&O3uE&2*q7xxKsD+m7+NPvXNJ2xa3^9>k+-s*R8p zn+OaRCfOtow|Fpj7TT?HEc%%y=#@l|vqq6Q9<0>I<%rE0Xq$aYXZB};kkkX(Ds@Ay zkxLBCrT`Dx4$s7^6iCN)i>w*!SdN5nY>=yMf;023eb|kn50TFzg@|cil6`d z=Scnf=9_OiAOvt#x(A?5O&Enq)(^8k_=7)i013BVZ^3_c9Oys2^Ugaz`q7WPHCXU- zLp$g{P#>Lp{T1F0!&&_if7aW#h7Bw<4h~M>-3>U(-LgieE~H!Z+o%-4^~M`-pe9Wf zUw>HR{Vgd36axkHg$?Tj+bqHkNorvhVHB`1DuHZK1L zp|jX6@O$UGcv@io?d(E2F;Lxulwd_Wx5mW5l0Z}rJ9%tiawuLD$(@kGoV!H6mK15R zXu$Nwf7^V*0UG^FUqM*rLCF_M01JjiwcJe#H4y*+(5jwNPXZohizJbz-2lGR-k?*| z>#x6#TwgfDU^;$i(mZw2@3jk9S5tqR=<~2-hz_8;rVo~m06w3t55m$rqX4RRn?DFF zhrVeEgE==;63rs5d}NDB&3*0eDxOYyuFn=)b*aG2K>x)vZ0RkuHT;M)DU|YxTR7n_ z;!8rFrZUhXzBgNdWn)QCqLRCw)+Sy++|HmziW*e_Z3(qh>8)Wklo~pvNdljaJFOG< zt6%`KN+mOGpG+QYWT{a}r*4yUBTKj(lRs~8f~aDO1H_$86?y__$h zZ*JYLDT!3g9cPk{jlU93qmw+R)0u^~hP3)GylP}XSe|L272n_*I=<9fXt@RQU&wI;~?igJdxsbF=u)++In<;Wno=R+p1Ah=DF55myx zBH?4#NcvU6)K(_%ztR^8yB)P>_Tv(#e2ua+&I_;C(L#Ia3!YbjF65;=r=YOb6{l3J zdsCL!6xr6^%hy7L2DvJr&0-SZT*Y7weXNtV%fw))mR0^q)|x`5f(0Vx=ddv8WYXn$ z?GvY^UeB1qOBVZ%+VdK2EEGH}^i!89DO5hO(C$bZcare%xJh<>jtIGgh7&VMV0IE^ zA~qT22h0*h7tCvYRt&A4j7!utWSE$R?SzM2>+`WAiWoRk09p%&F9KR510F22R6OO$ zC8Ff5FLjm0!F^vF z+v;yn2UEoRzer9O613wt{}+I{HYDH{T5NBoEwvu2Lz?IQ#JqtU0YzX#GLh`HWtz1n zsX&~)g~J<~#SRCM_H)s($N%|1|K}$^`3d|OkvR#LaNtz{+NEVJ0s+DB=-(q~7A7DU zUjWFh1(cSsCy?VPwONz4dF4=fK51?lZZ7gauVEQxD)1z#%>=t&&r%5n0A#7##?9Wy z(&ABl#erHG$%)Ist^eyQLPugihN-{D_+3k=i!ZCh(^#B~S0aopbSr1cN~@DE4|>{T$C>Blx zDwT*2pliC4>)LUqER<~E!2xzUB zC#aWEES*BZPnAs)K{@pn+T4c;fhCr8%%WL)3+>Pc>;1S)Y#=&PiX9fIl@{^ksgiZG z)*WJ{-q4-IWid%c%4c4_#c%|i{t9wU&6|C_pOSi+%JvMfL05-rsS;U^ai|S|Rx;G4 zVY+ml`8pE|L;Gs;07v2{loU?(44`;&4K!&ZK2Pb{ZKgXGS{;IZZ}%;=FvU#s*?k7>cg_Y zFb8~SQw*&gF2`_K9gV$157TrtzIvc3y|b~z&4!|hf##j zF5)zv`(#=vG!X=}5MWG1DW;#SQfQZY3S3#jg|bAtaW#unqf`j(fdniFErp_fqwrvYNVzq?%7@5agKkio2jBsC9k^Q#?5$jKr;%1NR-aoiq%bUvKzq-?X%YlsQFJxN~7O^5V>_SglF;(xz3#~-n(o)?* zH-8D+cnaTIY#u-zGzAA#o?8}6;{XO0<`fQBHSCs4co)|wSF5lAKrzJ*!Ia`zBwO}B zVV1Y)!gd9b_}hIxfeh_gm$&9{?x#Qf=?5(XR*C3q?sF(&V3dZ^9V7(1B2Z{)-Ul}+ zUF-Ppo8SDV+a$dymPb-20u<@lI?!M+60rH@3jynB73~!H@;}dN zfuIti)eA>O3gh9W1?s@|?(MsR;}8Gv4;|3{;upUF+5t^s`_uKPhVv5Nf(&F(^8L2e zi1tT($mqGR!uP)Sz3+ej`N8P#$-3|qDbu$7FsZ< zHKI9mr&yomSY@>|IB@PhxW+qelBD;WYuA3)2u;vZb-=`IXyQwmI=k$N%dz#!%C&bn zHaR|v7#>Z~-OyU?4T<}p+K+&&m#7y{LBU!eE&;8H@c8A7-T(dC*S>c8 zE2N^PZn@m@-3FHWQ~OITrz=vO?jUyf zw?+}ECR%K)PVeeri+7dAZSianAw=InMnC(l{WGRJ(f4UNntHi!?TNUw@;3Qxz2xymZ=}KaE ztdhopQVrxZ!tcvbhjyW9hk&+}<1E%0TX(0SPD#X7L*v(|M^!@K1PSdLS$;9P6ANt; z9B)w-fLUrGwhsCOGKi;9WOa>8b9Pxs2ILyKiQ}L-JWhIABO??*0?t<+3?}}-_y&k^ zTN_E4o5QFLeo@2;vxp^!Hw^nfhmSrw3^VCVU--fcO~lmPu-BG&&~cz2V1(;VGNsJ` z?X*iX-MA&tZ^qPt={S}EnuRe6?^;@>T!e;N^CgA|2m_b5_^bT`jmdZ%*|yxI468daVUZ9uOz9SVecdJv-}@;1L4RBsA{o%7 zPXG>*0PonifShwFkY}E9!}2^vGV@!cTl3z!5fy$1Fb@L2LuIq;W!iQF1_{J#LdT;m%Ie(Kr00 z6jdYxvz=Ka(j6RoLH7?&G%1C?%{d4a<}eh>G;lD*vk6yYosrNAC z_xqQdEA9C`b_Yb&TA%anr;VJF;^~Vmt$lJe8@BC)j^@@>dOUdSL7ZC~wU@<*K3Jz#vtfP7*{JQR z2X?w~JJ4^1Iw_u;CT=*&Ev-ktGjCCr$j_+{c(D+$iv)?71g{QXvgJkWhc*FPh**m_ z%_99TM=?z15@tqBDqd0~kxmt*&>n278P-F?_#q`{a6+t zy!EAba6dY-Yve_Lu}WFmB-&w%7#1GN*SJy~j!z=7t43CuxZo+Nr``*FSmh$xRmure zuWJDajFf}LXRe6)IMg$?iNm%C;9Mp1rS`V{%T>zINteDVo^G6S7Iqs0PlVaj!hqOl zPN3`*8kL3Upb_DCL~0+v61br0>}acJXSWJ|9iT0ekOn*7Z@C0af^lyRzh4X6+C$V_ z{#^rjpa~aJ5m|>*{}RcExpExRMXEo|&==eXwlB2?Z^H=H0@9*FyoR4M8D$plGLw{9 z+|s&x(Pj~U58Ze*)Mjquz>jC|@|ef3qIF8-FUeB~=|yzz!LyUK?jehB@74+Iu( z_%j11mvAlf2cZ}6_MM_~tMQ9N!spq4LgpmAH@95V?4(Iqnx~R!c?oB#A~2Z8b`}F* z?ft}{A91~g_rzzwf&H(V5fxFsKA%3W&otY@w#p9={wMsRQN#<1Myjj4<=-{e3;_E- z`lCPk&;R*9|J#52Z~dts{NM*}jP*7h;{L^7{Dm8YQKZN3^!LIa8*7bMgKXAN%$M-4 z$)T&dMSSB;YUS0?;elh&U~2*c;1$eGH{?RFUQ1p3nhm+H0F=cfTg9g?_r;T{XiuxC zic4RMV&L`UpSXZ;cYEwvRvw;(59#3&nYX|m(ef?4wJmC`9ctj#m<|@QGQ|QtVkvK} z;ggmlwMi1Ke3{h77&W><;!M5YFXf~pzB5HMl1Utx^OQ$Nr@{mb6mie1y=f~cN=Y^l zK#}@DAT|&Tf+=o&$a-{T_iD!UGA3nt4u=s+2KR1Af(jmK2WLTQG5pwBl#|FMpk{6T zt-JUe%J|yb*{E;QskS=^bDUDMIpNblOZ;FHtQ|h5`$kA5q`?9H-XnJZ>H^3uJx?ES zaD3@YUqZ22${snYvd@pG7^<&e4^>F8NIPOQ1f{NclATSp^#$IB4$n8w%f}whCvuXA zxVfn;1xS(@X1UoZbDk=O28KK=aghp~sn1(hdyuKj2b1Yoqj|vZq7H!>y97?ShEHsX zWDRRXIxq<(`Kt1V2Z`-05}Q!ZGNReJ7US3>)?@YgevXknhrFF5rpAIBmx!$k5!V1V zN}mwxA(DM!EcmGnVb2AijJhAo9(;R=ppqgk)48+ImIzxs&@ARnP3S_syYf2q4huYO z7x8a`=t~c;CGv47pk;nzqCODP($}2lDr;w|_>J@U!#5VTK>UfdKyo5{fR7#we#&Ec z#3U(rzDiKBMJiKRk3}hSIJzfsM#%X<_ymnroa%Ab6sZ*|hSno0p89m|6mCy=DAa(s zadIU>HZ^@KwHMJ7*%2?Wu9Euu7F9D!pSR)`ZrfQ+#KQ|rc;XH(!|?q?Di+=(4Kn%5 zt$C1I3rB>>w1zuemI@Oj$5nD|fxp0hoh4wsMpQaEBbVwDwMk)Fy0vn+4y#H8(5A3f zgSnJ&zf9sTbrbKeCEUpWUGk-+KwmY(N9YtG!Y{ zJ;Ap7BXh(Oc|LaF8gd8^hTOy8+WSYbaiUqA$1|2QIcTw8u=Ect977p9Wgte&?mZwri?p3jVCk;DAnuW8Cyb9zznfvRSychgXPL2c-d zQi96&yz?4WqtoQQW)m(-vzgRJYjB-}_4)hL#-HcHh)8?&)CMbEt!L;W?id4o(;d4p zC13(tmHZ%2+gVpn8`Lh9D0W~y@L06UG&^=STdK;@Nls#;L^D^$z4t}!RnmJVQ-q)JO%(}lR|J9DN$wVlcqjMHb^JXRfKLG6VJ;2ADkgpAR#9i|Pr?!(_dIhiBr@ z0_S<@D@&ywDC%@Q^cN?*hM-b*o7NZ<8qGS0%2WbUn8%@ciOME8K>6n-@?Tse)P<*Z z?)`>p&*-R-Rn$$Pu7o>UGHT^cR4&{XO3YxurjqC6l)QIL8}^3({Lnlnm&m%o zT?*EKBe}*IjJLzK1J}(Qfx5dtYNCs>L=pDu@WT;xjQyLTU z5Q)6ORhNhpC{nKsrWiT{kfLi2Md1iY=@`lF;O)VM0!$o8(moC;rFgVFmWL z&BP+5LF)t_CQx~99Tt*Z*ged`ceT)xFdpKeCZusBNE$@ZD}|b9sV@x z8#5;yR4P?6&SBx4MBUPhqQO4@|M5Tm$N&0Y|Et?$-+lMppZw$}{t9o?ZMJW{^_Dl~ zcmD0){;lsIAF><0OC*%unO%efS=jbL$>8HPVu}{g*Cq+`zO~F=Ib4EI0d497tCHw_ zd4BUHhtNMj@-p~@eM8IBY3UUw-b}tML5H)H@qH7c%xU83ts+wD@g)kN;bnN%JE4MSWavzWL@izVQu=7q}5V zrI0Bdb<}2@^nqiqVoLqYb`0$J1Tf~)hGwzHd`;0Bx(A$AB5yW4fuX!WEgWnWxGrO& zO0P)vN8r<|m&POcvnUgVeRzvdnfz#s*>Is|3>??N%~vUPO*93-2{7PyI!tvm3-AC_ zn16!|(m?FM}E;8w*W#66Fpq(|n}D_mv~CsTv+% z@B+ZX`M+>7$8eky;4ck^Ri#=Ccg?kBwDSS_a{C-QonZdI{q1kNdDf}RDe(XP-~a1? z7Vg>q=KJ6GIrOFf>%ac%pZ@fxrTI2rC29VC5;UH$pHhtvVC-0hOE}^hcB^D1LA*l= z75frN4lsPo7}yjI+B$owhhf`Dt>*rsq>`fon<^lZxPjzwIo9)u3qf&>Z?C;L$dRrQ z;*Q;AU@SKYS+)ubPF@zG1dL3z713n!<7GecSBZf?oAeo3q`gncUQuw9qz6-Tt`; zXscjFels*%nzGLi4wNUXXBOJWhgrlv`N%NmEA{qmeODFz*K+1^oWv{D#Foo3sz|*` z%Ct1azQ`U|aSbh!u!?}TNb#E@-oja;NQxxe$NdT|1`BN! zwr>ZF94W`fHZwCc0QS-M3`zD@}A0Jn%V z9CRFH=}JFkGSaHqlV_X)T9S~(cDu-xB)Qi$@^z&?+XXt}9ULsQ1b|9-lqAbkt&PHA z8$}A6wgZqo$`?M>76k=BBo8e*4;ESuwrq;v1H}z1Uc#pU!>5t<79Pt)!d0xYCHzu_ zOB^gWNwzAJH2# zE|E~1@)l$lh@orfS)H0OKTFuCF|oLL8*i)N;#dM^XZ(t2Soi>=GAfJKrYNDAQnxE$ zOI*VGM|XDo>J5Ibc~C1QpppvmKYjS&hw!ikj|L5RYhVBR*Z=I#{!E|x-~ao6yZsIE zy#Av1-+v$MDNAM=|5vT1{uT?rIA+wWP0NLO;0D8;ydX_7;S=715Mq2oUXz~#&;puT zxQbm{iZ35Ee7|c*##$`&49Gae%B$Qpsur1KmVuGj1L)7+A2y}Z%r-U4*l2Q>B?SpAlSl~Iz~3$q!@RaEVMk~ zc#od+Mw=d@3YR$S(qV~B;uX9^ltGfrRZF--mnmCP5`Dzc$(+(zF^p?ujv+Y5`fepy z>)|iAN|+W7JSw5KFKcnragBg##$x2NK(!=J>6dWKu5wxLa!j%`>j16wc7Sbr=3Q@X zXI_G7N*iNRv(&^wYke}X+NTm7x>_a1EcID=(;Z7=6=_f92CA+oft5b1mc+`|p`J4UO=9!Gm z<=oF%A2e%}2cFYHJ4|T`fgXNp-pG1pop_|HW}`hsUoqU@{!A&I4N(3}eU>JOvgs^3 z9h6*q1dd&0;r)lL0W~Oh=p%p@TaR08>7&hcCflg@@vafokICdInfegZB}!lNOkBnN z^&)YhG?^6f0j^=Ic#w2)obV)=5W%Q+e-qW7JK2fOt~0KZzhTe%o`2zmr*u#PC$ze;Ox>RxK0u^s`Gq{tA_9DLxk+{OUh~J-V*Lwtk!eu zV`y=T>N-|2iHBMtzwpBE03Y;tVrLY=>T)P1$3=B{6|Ys!UQW1uBUc#Ex00WGKP-H`fNna+KKhFPTf}79qPBBb;VySOW-aYb1g$ksNCg-%+Yw zFwbiXNX8DSAyfLOUw{4euYUEbKyFW4;n@@(%hW=x%{I%7&>KAa)vq8?!6%!pC#^&cET|>)n&|(GX8rokcfR8$<%W4S4gwP&c}i|3<=SwaK80E@*C;(| zV)3K0&BU&P3)W-&1YdO6sDs=K4=Q_(3zY!ZW&yiKaV@w5=y~a1`r`W7eHFlo5Gjg^ zM?SiL_~}obDj==Wn&CL`^G)}0jd)HdiM+$W#y-RTlp8|*8(97w<>uz&O+w<#@HkXn z#@&Pkf>cVy3UjKJ@GvCqn$OxA_2q7@G?aG?R(+Sxut|NeK(k1JW|Ba{?{ph1DoFXO zzx&<+Z=p@1 zP)j|M%&Eh2izL;%O4?^qIM4+tpJ#xDJ9-MoC$dmJyNO(7U8d~2${tey+7xQLDpwKx z`c1OLXE9cjv^dE{T%)t(Nvfhb&Qpr-)Z2)tFUXV2v03NQ%HI0a+S(H9rp~y{!4B89 za8UxJgy#4bo;WGAsJBQMlX}s!NP?M7u6lA+x#aQd(r3}|-2vShCoR*Mf8W67FTz>5 z9S2Vz(pgfdObe}bIl7YgeNZ}N7^gjl%dzz{X_LjZ_Kpel%tD*eo-g`zf%Y$J_e~88 zur^}%uN(n#X+jS79!#egxb9B7zW3pB{LVY?99$)*M=Z2?$`3ruMu~6?Bnqi#7Fx5% zEcPlK*9p3(4tP8^WL~vb%(=KbFM8^6X%Y`)z_~0HO%}(8G^XyD z$##$T`OrzN656J0lkkk~=ux|d3AFV2lauJk2+vfzSJi1zF6IBjZ0q-__xp$~a~NrP zEV6G+vHJq%7Dpj_yGS+)g04CNT14SOI%5CJnaeSLqQskfuib&uk{&D$bZA5YX>XGC z!~dz`Pn$wMUyk}iM?w}{IgGkF@`_(1(J{rs6i7H8*~uzPa;e$}h3RHoMU6|2%4|>6 z401*C5nP(6Dd5>52loz=t@jVAad4myE@MB5dY0wP4)k?(2@cSFzA?H?5+HE|QB!*R(q_0o4XI$tD@M z2S6Dmj3JbYifFcOM?L7{amdz7SO}A(gUVrl!*mec0WJ9bs5GN2cteb>91FJSB6TTK z$XhmP5Ua%fXGuCr9$G_7gd0+DkSgjK!p<*52VC4o;xa1ja+Fau$;etlcLj`x54)kv zPpLi{Q1J#}k2mP+^2Qr)eCu1^`r|+T<5ypO)nDo$0XDrx+@HczG=+^Fc2p*e-Mm;o z|9Rkqr>&lf1Ck|jzM=TLon8KRM_f6QMWOQTYp=cLMz+)YzxK7SHAJ^f2rQ7^H$u%6 zfdu-962L+1k^VYG485B}y#qjc80;lniy>pt;sI^~;<4wx(5qYXv3Za>$xAbta&IHQ zv7<77i-R%TgRUY4Gz{4;@SY+S1(wLa?|5yAv<1rXR60Z-He9hM z_3VtUYt;UwY?OMqKAcr%rbj@zljWGyp89K;y5-D5yUh$LoeCz|x?QZKwzZeeGavPV z{E&rw$ore1QD6hFlI-LbS&peIsS=5oB<_n+0(ic+56*1Qx|ZJPgdhb1+7xjm=~1Zm z5HYl{(5AouBo(E6ALE0>S7VRVkkwKYEo0+K$-^})7F?8vduo4`-alDyv*);K?}AaD zRUT;|q{o|$XU6{Ujn_Cd}?Sg89%;zH6&L1a+Rq~$b zyH0Ob7Ig0h6DUrxvi7Qh6tXqt(WS4TI{?~&rzwJ(nFA?vUKHggGL6UnrHEX_&A5c; zi>_wvLtB@~Xce2tPxFP^Qj3j$6TjKiC$+LE(af+G={}m}_rt~aS|I8azNwIHpn4L7`9M6neQR}celut~~1!_fG4@*kN?&Halr34x$MBSIJ5?V+= zJ2-)|C$u^y(V=9?d~pv=RH@KQ1Vl&TJvXWV+7hn6bmPJ)KqyPv(=)X6T6?~(Hmd_r zMiy6d3#U{Cu^f^AW0UTayN@af&Ll3ZIKwiDrKEHv()!6Ybf7>t&l{8 z1KE0QHA3A&^$=-_{2T8;ZCQLSkww5HootRYtu=hP@tLJo;UH=u?qHT+pRD1T;7vK2 z{foc&3pI+?a6QFhV{a_W9uh!K0n~visTQe^G0zBk%u&eu6w_j)4rBZ&B>44yI#99u z*B7?jNV|P(pyO>Sru)g8c>SjNS_98B0}v|NIE<$f2ep5q7FAv`)t_&A0njjbmQRkuc)!j229=wC^Gdt?%PkLZ+v?DCf;^DANq2-E zR}D1n5XfJ-gu_gc92f*$kT_LSh=J5lViAwg55mH52L_ZSk^!m^BsqKg?YB{X2pPP5 z;EU))OC-@{3Iu;UAZu+NCg1+{w_Wk!pa1C}|M6E5Q0@2lB05y|P4vSb{?O5{e~GnQ zB6S&+Vpj<`p}@CDlBXri=2Qm`^O?ebI7J40y@6nF374}X3Fqw0Ld#1<*wkBSt6(ZZ z$Jzs0V$mGFPeW@e7A)d8bCt3^Jo8d7coE9#Nl+p`6Hmu$q#@v0yNVM8x%4Vt<@*U; z$3&g$WTDLn?<~oB%c=reJWHb5g@&-j<=*8u^%y&e*;bW1c4hIot23YaTkeS!kbrI+pF> zR8uCtNis=(Pho4@l9wagdZ4}G)jAc;C;09H)#eFb!)4bL9QNOw4>H}c(Dtu0vBb_@ zH9;M^f+_UWAdk}l&Tq_jvK*gUXgm6s$pppnHtaHJKWU`RlZEz?t4uD(&wQkxp>g2) z4FRo9#IW=gP!#&sP~~4E{EG9C1op(Cvp1W?LQ4%@z2g_apQ^ZJk};a-5GlUWM#9I* zx>I=D6)|@^Jj{J%7pja)mvr5y!qPd?u8$019#Il`ph#gGE-`@(;HZV62vC-Qwuq%s z>5yaRT&ZMBAwR{z+GE#!L-t>G#~dYO_8c=tKkXvbfK4LEOkk%43nHd!@pPMXK+17g z@Y&BEfL3=|Iy{f^zT2i^dsR%vK&Z!=PGc3*z4c&?bMg?e=!;k%EdX79B!>1HxitOyT&phvWrH{2oVZHH z6inQP`a_IUf&*P@x7ILEt$j&Yl1qsKHe@SQNWj+|^Tm9*CG4C|89)e^DDRpnCt)A;&kq@eQ{hdOM$d^2s~x@(-YIU_wl3jzT-u zBpBonp8+jXihBz_aEBlMueU$+WVnE+>m9vsX`_AwUix7DMX-DOh!jO6aU)^<5`^9I z@mn}KFX1}?TOxD>_8b>nvf;z*pmg)Q{=yeN_u`At3wW1YOtEkP^Lre&xi!*n`_Yen zRGKq_KlSFDZ@LbGaj@WYYs+usOX+szEnoDneg$vd9Lbse9>@HYBx)pW;&RkxU!~0!bCOya zr%##!h$j$izdj=W_ZD_nTuXBqcp8PT)`;Jzk&f#kL9>{R6p$6|GoPW3nhyDE=<<iNcdf{emnC8k%Hv$+(*~nP$0Y`>D69 zbKdNZWv`y1S>H$2$llVB2^mhj^P=d$RSl8O5a#38y*YgT7W5GwQi!2V;g6Q?16tBg z>Qy1_)6phm0{~ivqU5s}+I!akXl=4K51-Q^`WtUd{S{vxMy+A7Qdm)R&t?h5Op=vw zk@&_WfHqiD(ameJ#fn(cbT1$KK4yU0w^h;(l{+cWDYjXU0c!0cS9xSq(e)?>md6eH z4P6E8?XVW}O0i?PPtm8nqOhH#6s<+Z<6A^2lWmGobk#XTvosEs$ZMnWc@hilJncP$ z3I;ELc9BSv61oPW7oM$25=|#jiuDU!p%v>@y6&wlnZzsK+VSO4l? zIgY{&4m&}k4xg50UV~M~w^?qsSvMYDBghj*Z<{XI>Qj@39ap;q=8yl$pZtkEde!@K zKy7*{&g6U{Mu<|lf5!H(wk3dS2yF75d>Bky2doaZ^5nT|()x^{eH7qDtsU@j_}_AJ zpn5=#F6`b7&A$BdTW`JPa1M#1R!JtI`DuNm8`5hnfQ&!>_+uop_P5}T*gh753kR4Y z?Hg@k7%6P;Ma+XbE!+{qiB&>RgfjqDqkPLl?*LkTXxX0pX2i{wrpbb50s0R(4Xva% z=yd3F;$ME;F1!NOYrQq!J4;JMyhP}W^(ks{)4#wsVUhe#Ng|g(NK71UePv@BjZM%L z_aicnY78x>BAq3Lx@|Ny^8fop$0iAg`%)d#_-c?=-Yg= z@*j2}^{DuH-g57oI+-KxHMsvYO=P`eF-yH3q>8@=wujG>W;rGq-vhMeER)&L)itVp zAUMUs6s%Y=J&NZ`pAJgKctS$D(fCaj#FaX)qC~UI+zusR{;7L5i__yGX)jVQI@^Kn zy6mBfIfu^M#0S>iueFFvP8BN|A5kr&_Nq$ET8&r(@~-GuMeJHSbHITr&n5tfv`G}cbyR#DV3oQm09u}~ zoYGjGok+Zau?{We;}rRgztHT2egFgBta(H<7ziwcJpSBYQ(n0$LeEYSpeGOJtbR<{XjLz9J}fbBpY$#O);< z_))P5O;wSzlcPr%5;~l6ME36vRXIfdv5r%~JYAP#=6H{8wy1|JBX2 zfAmLxbZwcU{YxJ&$Qzo1+(MwyTlk7Y(8sxp{mZ?8Ex!jJO8N?P;}WH+OcG1f-gB~w zT3u(LNOVAogqb)qynC0ZB#v!+Yo7K`q9A+iGiO`%My=)8knl*zhh=8e#oME z#c6btT+QIL`YiScG%VKaIzWs*=lBM)W|s6z+vm%IkYF5;6pkq_6!9=$C4Qv#a7cv} z@bE1D6jcyrI*XuF4Fcs_k zeR#TW-V(F<1HAl>4k$#I@-yEC!foXJq`-*$q&IGGB|dGnwtqj;UfIAP*(%BQMC zq?;(P8p(A)&U$5;9dc|}$ixK6Xq&^((wTmQcUEx?$bEhao6Ozb{VdjId`|^jb5_g4 zE7BB!eA*eEUJGTnf|ez$ue4ZRBhC&jup2ZC+*3iC;I|rT))k%G~P znVjTN1nNK_BGN=*o4ITX?T&(n+6%-MF5o%ft0Q4&>!4jg!G|a&Swp^gp$VY7$O&$(Gpm91IaC=Gv^E2 zl`iIxTKtV)diiA^&P}R~fqJm#foGtk$-Pzvs1m_cwc#(yDgx{>c+Ly`kn|I@#ciwS=L>V3|eU9>{v?8LWt3U24iCehq z?DWu*VKXT}h(h7s*ipv8hC!9{Q^cYL_bM3QHf>NcD=wc<6ad z-+olng@1$(>izfM_dA^q|NX!J_fF5bnLxq6uyLH!9-3AK@yQ^5OmB@id8i3lda6q8 zE)cLvQ5ZW9q_r>1n3)>V+wdUtpiri+>* z1+;_EocojA};l)*v+S_4Q>Gyyw84{z5SWDcMyIt-g2kjrx69Hu@)2Bt#ozyqMw zGbsmr<++%}Bc=-4Op^h;4ev-eoW)wQ_tp+0VW}OU6_MpQWe4dnOa2&kgA11>6HGZn z(Ih0BL|a}tQjb7813KY&321pyx&E0Keh==HA}WVKh@sR=pM!wc0cal%KwH!*weEg{ zIH7Km2YW{s_%9|9M1lZL(gxnOM2@kw&r_A|c=HZ|QN532r-`t8v8-rEf1Mji6C@it z!xn0fPv$ocL*SP81O1KH-*Bpi+)~3WmMVVyTUwF`3qXshLu3k}h(&dJf>ki~Pk*<` zsff;i?fsd6_K~@*J%~yZJewaMK3B;xrW-Jax~lftD?PuGM5Q(2q(qyC7jfDt?hhMw zl?1=MNb^;Uhx0&82q_(2vd1?`(56xj_akRMiJWb{MvUy*1X>J2{Au6jU$b~=>U^3w z3tS~tQj#UscWYA z^biGyAmLo2@F^bmzbfMNbr=E)L4$@fwxdyAOIEOETFI{bg^{Yk8K*L58V z&$aitAE{chEQ=H=mJ+F2mSZ7t9P5t}I1b_fZoE`Lf;1AOl>`Zpj+1U0=?CfjX$48g z4|vbXLtMmg5!jYs%eJhF5=DuUNQx9y7q&!8-#vS+H})EPjx*O<``qtRmTbR=w+Vba z_nf`gUiF$|j#)7Ljbx-8qV^;=GL3Dwpc)u4Ti4qqP~s8Lb`w6k62Akql&>NOIXjUa zM|o}o;)-n3W}a(=|0q3LP)`)k2OFDn^eC-4=!=)uU^vd<(t68JC+>a6TqQSV;S?lN ze7u1ZgtFXrFFn@pu3ekD)#>v+KS0-itz*2hX1WMF_;nu+ECgeRcV7=bD!SQw0qqk&Ztv zJeV8T+ok(vb28A(gBa}CMne0}E?`bfEp$6yhaO-zVgdZX?YA?N4S+p3|L9N6e)(aB=&&myt^?y;lj-KkB8@E+86K6Y_L)?I3m99x8 zuy5HdTzBHb5AOe9A=F_!{LHs1?oHeQd9>(Ii4qArN*YT1i&cOc;w=w9{4nM-8ba%O z?vLmSM$)G2#r(;lEK+swW6&?Wg=XG!HM>Bgv@K|N5?jkKIT1!4J@ar}&P#CDv_NPt zfuYq_MnFr;6fR-zKkEs4+l_-8bezr=I~_T!i3Rnc@V|z&c#gQZW$RFnqFxDxLl&ec z-Jq$i=FioTVe*Iu_>u{JtuFsdk0HmG&cWzQS2QIk0sTre+*%#>@CZ<|`$3H&np!#! zR)tD~WG&&db#e*mM)C%2@s{*Hy{(y3`dOwVn|M8Rg;L$fIewOxz&S*kaklEuw* zd344dhFh_;oY%aPhh4y85keNAEqku@1hibsSadr0B%rXs$yKgAtt2Lvz=5Y}Gs?a2 zd~A#RNAZ$Ue;T4=ls$fR`}0;?_1GwR%rbIvIs=$*SzvK>iM4K})>bd=5y+_}SS&EK z=pU#!aZF=YM}{`JagDg9#i?3;rW7FzjEkdu46Y^F8CuGzWQwj2Xm`IZt?_~eE1iY4 zJyV@d3~gD1!TIPO(O16~N0a z_q7D;@#271c+wou9@?0E>SuL=pO34vWmowrsB!s5$tM{yZ(o0A!5+3FkLbLPW z(_0td>A;QZ@61poPyc&;>Q09^EtPf`O;wJG`oSfqy=lEb>uTfNyV=e z{H}|G9W_J;w7_<8KpPjM^x!F-!XOt9N+S7r4(?suD(kivR)Jq?5XlcuLn!ijFF9X! zt5~7gB_v$v4rN|Zg5n}QNnG7(x$sn(=5A4%oe-7C8kK4`34xVo;p|Q|$;o=$hCTh| zFMl~V@ySi*ELwalIxZ-+ZG6)X~hCE3s@o>TCB^ zqLs5dDr35tR9r1Id8j@0J1R|23kv0N8qGD83p#|LbZK)1p~+}FVHPt^8A}(iHk%hYDS4H4|_TzQiL8YY}G%kQ-`FA6oWnPVnpc)_q-c1C;b3Km{csOD78OSC;m%wcczlzqs-Dz0(+tYqn3O)cP8>TC z7ZXR}sp4^Bxi9c_w3pT*mksvsJ4Dekk@S;bLAA=fxty)l{ z?f2h*Ka?Zf?up*{6p@vdFwF-R_xd1cr+qtZ$R`ia$hDc;cwkZ}CUwS3cN z&3!}TsFOfPmj#BF(RxHgZw&2?+Yat{uO1`Z;u|BNO|BYK!m1L?bg7B3!9-S<_V?nj zRcz$$4x_MMt-`%5Cm}PSTx%J6s8h z-YEp_DB+S2mTO$w6oR8hfXXh7r5_1hn72xrs{Zt2igGXhmtb?G2HZA)u6cULVSctjdOm<6EYYwp@{F^-V z40nu(eoIgws!=Pu`7wyd+U@30zbk-4rZ_%$2sRbBymZ zwNZIHBO?oJXA0`esGm&^Xk`L6IdvK7;_g8jlo8NQA~NuCZg;9S zN8bkXE^8GW)26I1+^o8tIZm^wH96+h9D$SDUzN~?OLw3rU4}`VJ!UtRzG|L0B^Qgm5MvKnHOrBa> zXrdR&ixT4)HT2t+L$fL=-d=AQOXG&cN6yty<}{q87*Ny=(n)t4P2vwVUNM>gKKxUk z`V?A+Ie*t(ci|EK6pg@-)dQB!&*%XRF$S6-3KJmJc+T|FMCaoJP5o*2OCvNwT(laj z87h&~faQhQZ8oTua7<4N@ z1C{1#-NZwt*?8uuA#r;p1eI86zI)~?8CtwCIlJ4L94{dOy`48Xo&rO=xS>}LCdbyw z#8LXOV9HwtquCUEXs2Lyu2x9FK{zexWOgO-O$k*@XIH#ttN9y*5{ zt*nx{TxEgs+6L=*Dj~{MlWTc%WlgQ+UdkXAN5O@4i(l%b6k7IpRvWdh$&dnDZf%_E zxQpE2+-Q|xl&+gr3aM0^&FtJ^Crg@m@)3jQfD7L09a}vWpW={ z9mjeXM||-B*WFlXbQDgk41{gEhGoq*eCZrCJKJy8!Zx$U5`L^tS3<0(wajyTOL2x4 zXD)gpGPIMMKS)zAcMRS`e9IulQ`Lj8e1_CME}KlU1cvtLj!qpzYuD(F*rK$jI2ih* zAD#MZB12M|U=981(<53&RDUP0nOYL)h54 zWo{?OB*dAtE{TBl;11zAu(Blp+Qm&dx}#YQ5xOQ&q=Y}Unee3LNuFr)hR4@T9>hp^ zp-!sP9#IVkPUD{4V>SZCOHa2Ow@3N7S!)E!II#C;Aq6JWB} zbV$T%s8%%h<>R+`x6sX)cD!;ZB0Wo+Nx~kE<*^34LT}LXcFkT}I~;`ST)9wCsBd}8 zTYl`veoVt5!Iu|6DIUiFQIAWO)vEg7!t?0jT|g8d%COhS7B?1x2YC;$5Z!cH;H3x8 z1iA*0c<{jo?N%3y1?IS{^6OL+6<8QGm2xu?d?=kY0 z78Jl1OpYa0sOC`)n?uClI8rHGQOcRlFtio|ghoZ43TMN$p-rv=C&<)@7x#@^d+7zY zgNU|0>U9~i9BUNJPFBIv46;gHN7XnfJ29f;;iSG2Xc1cOaHb}+7FsOC21~_Sbc#)w zT!$-hL6av3##n=rTHR0yfL7VC*>)M3kAQXxmL}J~k}IJ`Ks(K=Kr_CmGdY%sZ^1^1 zC6J*#1WRda=_A#a&|PcLf+9(WT}nH|W*IbVx7>|wL>(KR-4qjXa8I`kII}A)b!>2I z>Qm06h#b`SQmLr?!C{Aj$o2uCbVhf5PPz;fL2qz5={O6ASx(Vu87Eaa>$)L zGf?tK@(K!N?vE33#M~x@(ul=*BE_p_g^V49--?^VNQJEevs+2Xdn;EZ;L@5LTT5)# zp0S7zr3@;8`L~wQjX&kqhDcx%zpz2vMr2s0us+-sHHp=(JdJ zYv54YWaj*mz?c&396aPxI7CVSqCO2aX=e_3TfMO-Q<^BmPC-wtwlukJkM4svIbJPp zI$vB^VFw-Cj8*2kUbbWvn<~iU%#*D&=8#>A9YH&&(jrW4E5fM9 z;6FJHNeH`nCNmzw51uzi51NwPzH#=eR231mQxaT~N3V(xHztYNx<(n*$fWwMje zSow&eEmR%>>7}ZS=g6+249QPV-bLmFH!~C&&k{xt#(PmFzoFxCaw8cW1tLEq9eA#8FR!53Pir`HT;(xx6BkIl<(??U`?2l3v`faDJ?4_ApPE z8%|btv47Svy8Q);o^=Qr+j9tJXu)uF3LzYF%g`=vZc|!XV-AiqYRl55TgySE!UrX! zN_x|2rP5Tr6kv7=KD5P3Jg`zQLQ8GPjT|B;@r|XW5G8Z)PtIzdXj7Y8Zr3E_#*OC@ z-&l>3yt0JMgzM=!?W9Ywy5U=$|1vp_0zn!8tr*(au{!08D?X^BiSXVW(DHoOBc)%NVygCO@s5NMKGNDGA$%QC0#$hV)v!%m#Hm06w94(^PxS@(DECOV-7L- z2xu8ZlPYo>OpYlgVN;^gL?*}F@$&V8Lf!HzX9)AuY6Q$ZUCUsdXu+1mdf$pwvY#4; z7K=SC!L8BUN?@rTrBte9x$a5Z^G*3Po@Y>g)z`TriY!u(?BaFO>q~4BmR* zXOdOHYtxQk1$tXpD|4EN`-PZ2)`vWdChO#Ocf}*kYCX?RIGD2{bL%!;+|Q7Hr?aOd zrpqO8i_}!SAZn6ugEWtB;ZfHiNhVAJ-UDd7=bn4?Jxv{m5GeW!)st65Id|M~2OejZ zAjUMZs;~zNqMhRtZ-3znUqBmyY3cmNFi}>eETJ_!W(B5#n>$Ul1%l=yO2>^^fv>ec*2X)WE>Rf5~ zRUOq!Nckqy$}#}jcp^sZSKNfG1b^drc*j$43PC9Mq2aa7a9c_^4#TE$`x!KF&DLMnqD^)$p`DrZzG zQTi`?Mwq*knGaD+*V0HKBwn-6pSG8DWtXS!(jGnsk0JHBwSYGH7Hw`+60IXOpu&Vp z$jh2t|5C-v7YNXb_u>?d4NSgK6Jiy2=#9sUwiIqYx$>MBo{{*%{eF+`-9|Z|KT#6M zZP?4$meP`$ngG%w3FBlpb-w9=U5m>Mop-us;4%2zju1MvQHAG_T`5jomKITKoTa7o z*2uXvInE*A*)c>p=GIXHprtTI<4} zoreSmB?uBzU}#IwWvAAzCkI=P+{Ou?I+J6$#|Zdwaz|4c3rTX1HJVEad4$-0;0kCc zG2KgbDFL{`uaHWCe?Z7Y(NK$-_?Aov!yqw61x^KJPnCkR)TFXEf)NOFhcN8e12A&4jwRUrxf9BveR0`|PuF z&ArYwc@Q9N!8bg2u?2(AQjIQ{TBfrB)}0gxI3H+3KDQRj=xsWz7I(DfK8|96Q9t*& z&(SOvZ2^%kHU@Vxz7+rEWJtkM0&jWYi(Ujs4+b8EEH!2_8iFarw=hdBUWAe{qfm`Y zkM&LXiUozw=qUEI}JmSYes9Dwetj;JWOKtzzo_1Z+c?x;^TW0i~s--07*naR55!A z)#%=-6j|CFQia5eXULd?O(u`q%NP_YZwjx&5EKeMFF>1v$uXS^wnMa@EXf+^buMj> zA`Pndl0&}IVlZu_*yrcGCW$T6;6poYBWHdQmf|o&ZaWE1u zMJC6|;u$@;DxJ&rhDXD;*5p_jm{jMc!&^;(U1_`9-Ozp6-Je>9wwwpdr<;r4Y-L-{ z>4bd8^3{rXTUXB#7+Rbf8$(+%*McJRafRwwSK$P-*dZBqs|*Zn73j*%r*HWb!yi6^S31hG}CatdsW1otU8J6PNQ+6HqQyV%0!!@jk^YQzqa zL>EV`8^rOYs%j2-iKYKg$qi{VSAHl$5*Vm4i&NlA^~A%&0@bBN)R!ht@y zPl^aM_1mF!uT_~W5VtJLwzte~QcKgnDsSMpDHMbVU1X)GSJ&#H*i{Y}`zn=p3Fe~& z$&jh}mWs!)j%IPNlG1g)O9B_5Rr9CT`O`KZ+QyDo_-*mT#bRhBWi1{?F|MrC+IY$h zzMT@MnG=`f6dX!NoyZ7QeO;6h(CQI=qrII%6n~P*G$$cjx3MYP%sf?zGScJ<*%UNK znt>zm7Av6Ua8tSwk}4JVxtMm+_Tbl3=AP2pe3f=9i-&UDNwmt+80A=Or}l#6N?FcG z%;pzk9#{O3++QvQwaIUlF2$-`Ls9@qvc4YV~a>8EEjq2Oq>? zhLRz*GjqvYLGq|-Cpv()d#L1BEL_{}QFR##pjD~T!i=I*=h z5+{H!p%LJi(jyTNmpO0I39Md36gU_Gu5jn<>4-53!k>I~#Cx|ioFhFY2-g8ie2*rh zqjI%Ay?&IG9HRTM@=PRiMZUIKHDfAP)z z_uv1{cfJ!N8|#3lD4mcSVP&4HY6V$!QWFn64{VI#03>FlF8un9dPSW4sZV`Mz?fJC zuRsMj4OS7;w{k6VtUYcsM${ZknTSZ?~luRD; zlXR1~rW_*rE_ITmDv#zRFMB?;GCAfrE}piBd&s!YmI2UOklW^JcEMn?B`~ycb00V8 zO%pL?ZSlH)t#CT&`-SIYw=Zt=OG5^Z4%Z-Y$mFU}?hLFy8_51FRU0^mtOGgtURuB; zDOjzSkYVrW`IB->k0du1GHX<`DWV1M)eceT5Jsg0hIV&#k03VQd6Egz$?LE53i48d zHMjtF3G!-sLj;9Q(@7Q=KJvDwb=Y*>ks@n*iq?jKjSRu>~ri^bGB8;Yt@&2Jcgz;50s8 z8QSGYBaX=#T1o=gel9%%4fT4sOWDg-Vfx!QOE8O*p>l4M(-6--FCW_ODuW5`^LkvJ zsm->7YEfM^1@dQdMM(;goLJiI5${s#x13r4kQ?idRV}f&6AB+$f}OUtS`Ytof1pzf z8mGqHcM(>M8%6923#aPT+B4Q?lXi7|uv^UJ)OC0YQ2F4gz4^K6fOgxIvKzI@ z=t<^>$svFRW!WKQ5Fnt109&eJU8cfShYm?kQLnZ*x)K$#2b4Ov*OF!h&m9_MIh@{v z5OaW}L-6R{SQjD86`OwuhLdqPC=+Rhu`k+t*2B=L;GRf%zL5Da~ zV(W`5C-%%U&rtqL9ut^JM0rnkKX1l;VICUtx8_caybUxZ!yrR?ruS)b`v(pT1@|Sy zR$V8PPb1AyPB$@y3fo^-ndQ5_FbZb?%p&z8xxU#W)NDlP(=GuVW|w4!8XP;>BX z)XsAKAKg8gL?ymQH&Tu#MCb7jNb|%KPyG6?|2psw_*DQT4GQ=@mdrnKC%Sj7UY(2V zSgpF%yUC>}R0&woDypQsg@YDv2Qpz7fy?C@rtvEINtC%(9uuUpg#u}~6KrFtfsXBZ z7m*Kl%%f+p7;i(5vAg1z1V1;<#{!+*)^seB9j-sqmEsOXeDa^kQBw+%E5JYgWVGJo zW(XKfOnVF#`t#m?0*OOT>0oG#N~mOO=&wsS~1TLMm=9D5)9GPli%f|0c>M65sw zVxsE5c%ro>gc}`B>*AwvG9%2vGFEpo!IbTBu-%Ft<-$%>ZEi?A&vt_ESjeeXZfmW3 zx-PnU^Lbtu2MADV$xBzU*%Kyrn;``Y4#!OoTUZ7!)3QfC$9v{BNY4~BWn~~^(_WO? z?z*C9%JV@}yTv}=5{iB2Z`8$BQ*NP;&!!CoBX^M`ZJWDg@z=$phe!h=w+q=2$`Vr6 z=2}ORxpi~CMc~7f&Xe2S=W>R>jSFO4Xj33zB%v;Cin96?eme18-OTJ3X*XN4+b8En zS$5L9<|SG5-6=P4Lk$HsQ8?s_0TURpifbp9GDxj#U0 z%_heN=BJ5Zk0h?y$t1z)?3N=I&O6n14xDYMzy??R&aGG-SaS#`rWVb?%Cs913rA8s zM{)@AR9brW*t%QmoD!hbJrW6~kfBE?H-*eJl#96rm)5foMrSwu{pwe~@`u%r6psT| z;U`jy#Tnoge^#4MtN-dt3i=!d)hZ6>T z&5!MjtQ#mr_HWl9!$2L(r;6_ZGa#lDz!1MddM0iM450ldz6AMMYM0_08Vsjkc?hTg z^6HUC9zlI@CmyF1E7t}536KL;kU3WgU$e)*nX1+t7Z3ulG1DdiD~h^g&tPbPkU5n6 zl9;Mg8)j`)KqoJJ(Tn8mX%+aruqx#28rL7y>l@$r^s8R=D%2!ZM)8XK=hm%`cF6cf z-oM?YP4kvlsR@2l&5LvHk-54$mp}?x^){q3;!v~8qQ@vt+^mtAF+hZxfcI~E+uJ%c z%L|pK{*rx2)jLLz1_TZA)n0&;lN_&(bAHdUMhU1hU^YgRAgKVywE}HWInxNRH)p&$@tC}dmPkx-M5BY^01tN(v1gAe zk*fsz z+t??l?UoqK%5prVxIB97@pax>fna?Za>PfmX$ll;tkS{LlTz(Cw`p3;6~k*ya_^{? z-ED@mS~9onCp8)B&zF~;?vD*r=dgykMm)}L3AVJpb|qMX#WOM<*s~V^~utvDV|y{Ty<}`CE9e9QIwr#PRrxQ-sQ=IXvx zZ-r4%id+EP&Yk!ei4oWpCr9p0SG)t?rD&+)GR8ExB^i;PS?^Zhw zSqXL){^jW>$?Lw~H-@sI5R1S#{xr2=UAvx~0ykx0H!iMiOoIi)6rwl9R>ZAa-|zaxq={Ml_&Q>$^>&&sa^(*md z*3Y`*af$MVI&in1aVB&tx9g|U!tc`Z1Un|jmmW4omb$!^StXZBPmyNC9t{zeR>zR? zg=yCb?a@BAv)037luEqNL{PR0vpad4>op09#eAwhj2d+eq44<@=^-vWmT3;DnX?lq zIT&HjZZNsN5m2@^R^XW@H|u=Elk48_TnniR(-5p_u$ny@Q(cxvN(Q+9o_p@0l@ZY0 zTp53&7cM-m#*3QS2+)_r2*g%ERt7!B(TG=|9HLNM;P-e;(kz_DgsFy8CL2chimn3& zix#k`6-)RdS1a6c#~nC*fiyt*;(lNuyb(>Hyu#ADIfr`2KLNi{|CnvnDndhnXeb^B z*kgfsJ2=F7h$kE;UdJDj7`!HGz2ds`*pF!A)u1}HLD$2%%3ueCtr09hLBq(Rp^N(S|; zJ3+4$f=HK;LVUfU#@rPGjD>U!@A@ixX7Uo?9ETo%;`>hF#eTTBm2WN26zzdD%%grs zUmo0@ReI;Ru1j#-+P-xsJ@!fmXjL-Xg`Pj=EfJJDGY((umK+SvQV?fH4*b*)d(@~> z@)*U%Gn{Q|Ny5~!d1>I;%E>mhjAf>gVH?OyKD%2uKU~!C_&5+LED6w3R8ZKC5zuP) zSl4ek1w^5ujUE;^LkL#sa|LLZ>t&$T@#_ClARX>OF^N4AemSQRc8QYC)+N1JpXLglw&`YrST-vbh_4}P}?+URK^gUH<+=r*u z#3tS>aauR%!5ngyn#c3YoAs&X;Hj~Aa6}9AYz{Fscn?A2;=#Asz#(_?Lm%c$M{oc1mY zyQnqGaJ?FgF?smS?D`J{BIX$eIsO|pPv(u9QWc^+nU+_5|M%w_IG1yJeWe3Jksh)@ zrj#t^L9@BIc`8FCfdqpnk2i7>(~<}Bx_RsbQk{~0DeX-m9!%^V&3l<5M+wXv%u6zm z|1?Ej1yE(b^N5mBG`ooQv86fz(&CyN-BSA#G7T!v<%Fu@Svf4x>xSfNuI8F3?G^RH zi#T$u2`f`73>K5HIX2fLle9M9rKSOO(0+B@ChAkn6C)0s*2sK>tM>|F3#eF8tnktZ zXlW1&ocyhCy_Av`-4WSK5ny*0GuB+X!}F+~v`U%cy^t8v^PxLv3QLCEp65jXytvN{ zFZ3i}B<4Aq1BJyE5uUj(mnx&LCe1f*(z=1B;DoZ~c^wJhnJZQBj2jR`8MDl}`ej|X zxi2OdmkB=KSr-De09{bG93t;YjS{yHv*y^FU73{}E&|45WI1)UnzYGs3ZV|UB5?7g zoZi&7kh7xgF*gvNSX{!KoETs3us0ltazELCsKS!xBO_>3(^2M&WF&Mqcb_ zRODTF#B9OWV~ENqNo8@%SV>XqTc$>Q%nsL+yS7@81yc~DPFGMKYnY~%p)Em4Up(+n zY9qLo0nlpnIannm4Zi7#%|}4XRS>u6-HR?i+BT)*%fXO@hsf-S>*C|g4iJyRI?^ZM zri5I?)Sle*kZhb+$vqekp2lNw7oN-N1sXw=hAfI`@r~+FjlvbCzAI&F`*y9mPE+?h zW=;b+tO|EV)GtW(fZ{b;hU5BOt zI<|PuW{+b;sCM-5D?AOQ!?h5Bxi~``Pp)d4b($(#+8jF`Lpp#`t57(2(mM?Ydwv;` zB&#$HjWkVhVs!h-)H3k8reK+0_9k*_R6M6apM!Z(I=@v~h<%kjGpiE*b;oFw0n7m{ zw<9Smx>uC8-Z{i^OyR^CJ48z+2g{DwqS!@os^@{BwGPmh5a8tC`M#6u-UvjOHkdU8 z*%gvib4Q9MtVebgiw;_1Fqzjf)QYl1aMzw|)Fqlt;yi{ZzlwBK!B6@T7w{6^^7PYB zV}Hjv!8DJI6`bAgoW$~SV#!aceYujep0aAbEx6ZG2A$o}9F^p9qKG`Zvsr|cgs-^t zMvCV6@a@`HB(K1y0T5C(AZnUEkoXsX5Wjx2CWDbFCYilbO@fQ7$D+Xi=NyURsfLrK z42m1j&kXWJzO)NBWz|6x_Y*Mlo87F5y13V{hgqfgD~5)v{TtsnR?z!N)~BP3cQ29; z$!St;yBsXE0+Rt<1c||(=as6i!M@XL_F%af1pv_}pL~)A=MO*p@EhLnhASRqfMq;| z{znhL{1vbG3lBbsA;8rA)nENpw209x!Nb$i0SqTdSGtT!4f)y6ewNx0<|1BCjvB&> zwIWu>D=>5D&Z-5qcqD*>C$^1?Uu0d}U!;LMc#wnSfL2?^5^{dbZXHc^721ng&Ha(O zp2b6jv;Ubdid7(`x?^auxN=Cq zQ(9qym7hF+V8_tz0$R==4&3^AY5G>nFa=-1xK7jH^LEu$8kkyIRYE5ZrCTIBX<$YX ztZnJC@sV`K>Myl`K_5CmyDFxqL|ZoUwAR{CYzm!p3U$5&v+d%cIw%@(n>u=k5J~@+ z&&TB01~l9KdaK7%N*32hYQX@vU!66f8=I&NDk0WH-^7Nb0EXiwy+95QXr+hrJ4AZf zV_(Y|3s3DKDI|B)j@|8tSG>qtPB``$Cu2HkQl>Q;;B@l6l{2EeV(s?e+l6vl1H8BR{GLvV3*cowpNLA@5IomD;Bo^T|DYut?kNB z=6te;DsA|Tsg0mv!^%oSgx+|C*|MW|)*8`y)TwdLy)pToFN`MGLUnmO+R7&8ox&ZP z%O{HmwivgOxcW-#&91jwn**<#vE52ZuICzWUR-d}srnn7r@(dQK4r!SBMKd5(L7%prZ0YSa<}fwr zu`;YSN30?_$q$ssNA0JsNLB%_ooLh?>0m2kw4pji?k$ zAS^NW{)$jDR)fHXpHb#(>ScdM7h3x4v(J*~Msol`-}I(8#o*85g=Ru|LBNKg#9+Pk zt#5tHTi#+d78lSg3PeX?&Y(YERWB3>tq1oPN;8i=_ShqjJc6$N_{Tr~<3Il6=z%p< zY27K9)F->@l(D7&voQlPsc73A6qZGci`6S05qAoqt$>c- zlgD+?S;&$pmXWf+;9@PH6DW44iUTdgyw%$oK8kfl3EXfPbBhaEYMrT#zOcCIRPg|E zQyW-V3@!UghyB3=8nY0Y9FrRtrtMm%^8oh~qKlzj-%FFZB{vMMLt=BJN5hbB`-O2l zy2-I(FB7cl{I<$9ajbLDTpm5qkq+I<*5uea4XB;mt+|Uz)0f&97`lpw`%f*~Z-Ea_ zu9fHKqo?n?47oJLkaI&TgQMCUGC;B#qbSyWE&y!uPBM!4(#S_Z8;9cnAwk~0Tmxg%s>Iwh{Cs=0vYMjeZ7G->Ys%SaKkrSBQ)^z~ zU#@V@2J7z9(zCJma_cl(8X>!kZBN(ZY0F@Xp$#^lj9qC9y*p>NYNwV@v$m6cA3iM& zW-*Byl!g6DXRG&{S&O=DX9cadv8$&L7Kgu1twUyVE#VX#;Ca@>BS2e?16qpKo3uH* z;gto>k&QI(X7}zQ{+d31h)a>!JkPjcL&PSR30vwFxPFs-&_PaeZn-NX9ia&ck*&Yz(cs zo!%>#)dehvfLwRc- z%wKq_9?sh0#N*=1o-IOBmAdF>OkBrv5ppW_bSag2aITNnSg$l&rGYMiCBytgL7)PfL(}$^R?3T8H4rkX2M?b4YH|3=LXwA7z?Y1b&ng|NB!>#z@N~}? zm8T^K%lFbo%WCWgN*Lsj7pLYaaN|$f3qjUL1JPLEBFOQ0iWx+y1-QKexF5@bm=lA-6^eIp($d5iy)APIzISrB*b<_>o6|46CkJYxyqN$15CBO; zK~&$Q?1bm+jwMqKJjPMOQ(O!2oG{k{a>pRkxG`yUZE6t_)o^MFh+6P+VSNZADan1k zUd+pd5@-&E*Hf5;ZE8IIwvuBXs<+jIldjqtW4zqjVM->L zJ*%W-5tW&PM|2q&+Q}wMr-_=Jq2*+j2Z|I%_@024CnmSbRi3!9!B=8he7Oc$^o@mp zcBv67xO*!^N+dv}&5^L83;RzAxgw&BrAATnJG;p-RVT?^$biRkU}z~sc0r+{1T(t} znL7DoZ+senGgx9^$jbFhL!0}H?UJ=y9g5#}?uPJZoX_J=u^i2}b0)`(t+*y2aK(+J zz3gT$Ik*h0Wln1Xp-T@YLgO_`pHu`d?$#Jhjg@B=?0gi8!|Js))ou4Olb3N&@z?UQm|hf@5q011R_wXC{b(E{?f zK|4?ei%NB4>|qk6={!Rl3(O8y#}}1A((<_Ao$1gQ{d149nx>PkUFGb$MKrDa102tuX7kT(kZ`UOCWvR?j1C zDLEL|SkOn;4%tow5t+MNXk087Opdi7#Kn>Z*&}ZfrdgYzsvDrV45v1E1Rpt!b>dk? zZ841lHCHqbG(zYg9@vzA2wcrgh-JJ-*>UYn4`+hgNNMs#lLzU=2gtgR^5M1QOiS`tTO6@ z+om&NoR%6K=;+4hRC=M~o~xXj*1%LvloOlr%?t(OUdUl2kr(Rf(ML8o;JIy&xOTw<6cm}A@xFlnj2 z$suA&snO=9)=pC9l$Y+e8IP9RJbmj;Pc+vBg(_~wObo_}Dz=c1#B+ibmU5b}LrZnK zFTsbl1Y70eR436a$yjtOvq=%j(B60oMz)t8jcM_i#yJ35P5_;+o4lAE(57Dfxm6=C zsuFje4Fg*fJA_wp)H=0>Y8L!q*u5MG0@~!U!8)Eea&v0T4o}%u(-0KL20+`5-I+3*HMomr zvFO z@m;ZVR2t7g-c~ncZP;Sc^uP?}=%pDYpE}m(>^a zn>C;;ejU;)y5lI>;I5*hp@0;6SD3Y6r{N#Z7sslnb6^>~6I5wXc2c z+uruJTfPp}#{HZd4DrPYjBhYHfU=n9_;AOoU;XB{yoJ5}^wUq{jkG^xx>wF0H2)`m z@+aT^_O}C6qgD?*@BjcXH+S?8>Xxcn2QSLi;rwRJa?CR4>eNaI#8W}2b@7;iet=Cv zM2p*ptTIy#Gsd-P4r^&N*x_Q2^CZ_O z++t|62hljk(57G>S@uGJJl{*ReT?B`dmv4}Dq3=CRWN&ZTNkiux7zX7^>gakJoM7{ zy>c}<#;DP<2`3Isj=A|T#XtvWwa*C9nhR=?q2(lzF9RPZLpzSexh_fPIh^j#b48{0 zs?LN|X`RISDOi*0r5*T;mFX(h$>?T%d}Chhff9ns=3tAF+9*xqP^LZPSq6I6LInE~ zJa=+#Or!nTvip{9Xi5N?wx_kx3QFPJoI|MjCD4E+U~(0egMV*)T@>JTbmoxy(HXfD zV|fS(+j6jtw-(USQZVj?C$t#GlFF`Nd0ovjU_u?mh+0)nPKr~nAFYe%(f|XEwG_EXb^-cB9c(PAZ z8^SuZVWL=IZ*ok|jqNN>^i3g{7zdBrXmL7MbA{Ld7q@akf608b4m@0FI8b-r&B}GBg0hco1Fca_)@8KJ;d^8FLERhzrRP#|rha!9h zH^^YlOI_H^m3s6vT(kk!qRo{?Rv_qGUI22G<7w8I-3TGMWJy0v{ECB_!LC5_(vS4p zHS;^=?Br@c4Cwv$-+xO_*BBjYv@T{?EV)VoPvZWVO_yUtdWXx87@MGloD${<8Gc9= zM0$ssc!t1fm9Wv_l|^S~61@=5puH@L(+N`)jk@o?`>u|aWp(0x{_~$l-Q*a2tPx5X zP#RJWfhc?6O>chlg$I{If8MAmozYDClXKbQ5zHuX!YrR!8#V!L`NSta!6Si-TyT^N zRtbs;mFL#&Gs@*901rv4oC%D$#xtd`~f83SUM*5r5!uFK}8E)mc& z1XKjH(H460d__5*Qi*a86tvbxk(>jM0z^Evqi7Y63a+LcY{s_Rtg&`m+^M7leL-f~-6`lf`?_X4q#J5cFQHfQpD2^R3P1liRxv(_gKVRa=FWt;?@UTgFMjXue&($zP8s=$I!-zqorkNBTbP8m^2DronX{C!IlOs^p|Gu z6-KtYGfqyuYx~s&rz;-c`CR&MR+HoJdnLt0D(JDFlcA+wy@jAqkyhnNGbpJZRPRUGc zvXm3qbue=^p1fHThXQN>AJWp8DPd<1cP8M?OOt@@LYa>~`slOu!c%W}!yDf8rZ=JO zIGIo;Er@X1P1Of=4(Tok0#aLlM1)dZ1qoj}q9>V2ynSVuzyJF&n^^&BbMQT;fy7g=uchYlg(84UBYQT~JfxLk&(nz-O=BLN z#Z4Ge2uWwb+Btg+A#FG8ic8PXo7`uWUr~LY9MCSF>014uJEa}h?tkgIXPI}GJP%c7 zoES2Mo;~m~Yjsbm9=L^34$X_P>?^ai*0t5Q#ZqkJ zlO|^u6iV<(2Tk^XOjLSWFcsnKjYqge!#~OjE;?IFK6mn*)=>%~)Cg!(5Dl$0mDGDv zFgZ2{wC0dorL7XrVMg`%D{XqYilyr1h;Vb*4A`cb$-TG|sjZ8;zX)ilY}Kh0x1(rs zoCmW;$>N7##dECg{mCuWQ)_ZOc?u2IR#SHq05BCd6R5`ISQD&NR+EF3&T)XnM&{E- zmNlJ5)66;y9LtOI{Ir!-i~B1~b5q*4i_;Bd4;Iqon17O?ovPs&_ox&^>IliQyY5fU z(5kzn>}FW|o1WQtz0JeRUG4>ix@Nm}n>n`YTv1aXD$~H`nO)1|xZ8`&q2~B(4t|5` zKns8{4{1MQZBr|^yb*VzAlSaVp@99((vd$nxa9QU}#s^5;Dz{cER zO5#mwe)DD)O*XmyHB!F)-8c4?i2 zOTeosY>aURrk37UOS?H)22+J`<)%{*=7yflqseiq$CvEs6AGKYk* z7d2z20>&IexSH6%Qw^oVTJiHHdV0=V{zUAmk)DE`0Qo?=yy5~}1O@uoV~;%zMEZ?y z0M??y_uhMNs!^=)FQYdVmwJhB6*mYS1*Z4zyYGJd@y9>)sZTM6EyRtfHjSVc%pq|R z<3-!^zqCAv^uUe+KQpd1`;(_EKABnK>9s z(|i;K(q=e5g<3%dLe0s?3d*8}09y2~wwn8wF`r1!61>TUGF3Iu#TvUPnG-=$Hbo=P zXc@aABD^l-(Xp0Ax%9NC1dy})a-*IrNUQUfws4zAwBwf9%~W(sNputMB=1lTfoxFq z)P*PSIeKs%0!wy?tc$Zdk|k$iY2A=R6pHQ83Q_wlfGZ23;SZhym$bhiYdk)s;4G~s zRi`)&ypu!9#e*j=!SO+&hAPRPQEH;&V8bj4gI5ai5=$FX(Okd22~7DUmPH{T2a-7j zp`YI$YACEFuy6!FYoC`*aGXLy2qCLjz62EJEX^T=GCPgiteOyI)*QlRNr{j{aHbrt zB}RF$oZ2jxWe`utONCFtJI)4uxz>((8Xn2aIE1H9%0;gWPK7V9U3J3`XMK zdD}&s-KS${MfT3YnSvqcsT!s;_6j&d^tCA@iY!j#9z4GHHqdL{@^uc&(pBS9TF6n4 zev3oDl^nDR^=G@zmG-!@=GUN7DFg8pZ!Rs;*s5(U#I+ssxlTZ|Ga#IuMu7nbhoqE4 zNT$t7a+jkn!@S$M`m|k8O3uNq`{>r8=0kk&2sHZ4gCK>=&RiM`ucu8@DrYRi)1KvI z8sJtbJ@QOLklxu10Xj5d?TO>xm<5g4;z?hQovZMfQQp0-=$5nt08W36`#@@??JMe_ zwV=&S+tk%{XqLxME@O1%oH>jZt^hLFO+v3RbK;=*lqi=o`c z-x<5Bt6^wJU(Z;F5&&&+%D0<=*0O(^$=x8vNgii)d|etig9rrT7= z^QxTpqbaR^*TP6pr8ca#tEgcc{J ziO#K@A&3@_b3g}9)np1)YP;HVEiXJ@pi^JrBk881r+HbzqM%5H#H{0fz0`7ohC>-~WEVZ#wx*u9%^@)SY+U z`M?7YJpAy(={thW-`xv!czM0f-GGi_9MN^$-3pE~N6NOT4Y5E&@t8v6`CfR-$3FJ4 zFMjchG`5dyIcoC6r#}tRV@z6$gBsHe3Ia|xnU>8SMTrPmK$H^jN)=Y!zqu}U_TW82 zaYFA@!g2OSUH-N-{P7f2OU$Vw2UMD2_8DnQ^BzH7-GBTbvB=h1^Y zaNoS}XvtJ#5s8)7Y;|!~Hg4;TK$AThlkDNA;4rKzO~Dm}E83i7mhJT7zNzN&ZmCdN zrrH)ZfH zVOy&mu$DuMM8VOMItb*Kfv8DAo?gnS%tV!I51$WZ`Xj2WcfOlm$&xPni+SO`tzhYD!nvpwohTDYY6(guj>lmy-m!pwYnR> z!(s_Cd%mKXdV6xEInR;e`crLC)cTPspmv^v&NX3`4&eOZ%@;NJ)8fwd+MtABr3xvo zJ5#$lQTSYsg?<>c64tPz`fPjrp-NTZIViv8U^E*QC222Yls2(YRf|ye=x)Q>L+m75 zTSRo}JiSu}*uUFjwY0w9x~Zr|WasCng>5IbB;?*$>|@BZN42HYwWHSob=%i&W8>#3 zI86GFO}?49%G8;kFAdsCLK}vmae_sUJ-k#w3>R#8`GY7LMgi@ z$8JESY!ft~l`$K?XT&2N#;V`s5&y~C(0Dl2_?%QC9)qW!q&>;LlmiYPSm@iHNV8Pi z213x{M+m!&K#tnn)4lVZ?|k&5AAPza6F`@H?zsmy6KpU{>vNTGgNXmx&wf_X zEaQc8h;|sp78f4>%2&S%HkJAU)P&^Z?CAu-76MjXhet&PKJbALeE7p328XN!Go&bi zy+Hy4$J+m+E}FkyeNPE$Hrj*z39t9P?|q;D{O38H7;c*1L#+JBM?S&;SL0J(|HD6I ztl-NUSc~R54DlXLbjI6m)V3w6JN5T!mk%B$0!nR4kAL zEIvZVY_58)FU%!OIfk%iLdBQXcvr>!94r zuGtE?CdPe$inht4IG96aZ5{kmw#O@tUzz-)yOk1;-Siam2aj7IKueDU^XND^SaW3e ze~UXlBhZL%IkcXQ!l)6@a_gfpi~5bjEw9VjBSmw%MnGGFE9v51tg4~8lzcj>2SZ$m z8nGeV`eeu;a8+FMD&ux4=ALSZ*TkDbfJP=_IT;(7-qS^_ge0346W)AL{P=bh`dM=B9uB^-Ak!Xo z#w*suKleC9`(X}_f8*P&o!edC#*RvR(AwH9&h{X2+9PJIRe(+{hq*U8%~gi&^cWJk zMXLX15fn%ztr8*YO_r~9&mAR{WR1U_#Lmd3jyRR&C` zCUhM*mQeQS**vHe%di>lg5LNRI|15nbDxnaHl2`mGc>Ba1+0{UuXTjD7BbJtJ@62+ z6PKVM#uIfvIbr_d;$;a+s5pPRrsdrz$5#EyETM@n$?=fThmEqUic5|itp}H2a?HjaJxdnrsr0kDEi$y`fR@w9Co=#55CBO; zK~!)^NOCPL8Tq%UFh01wYdpiM=U^!i-UvFT z09T@v1NO26pc_{i^bhFI$j^}R)mT^nwAn3PEvl2t8r&!z{5d$7rI2MY1q5z`D4-L> z{9snpz}fXjBGCAaS}}zj@2g9DT{o zQA)tHRc7))T*BeZi%u7M{CRo2j128Dm>i$0k2=$$ULfBBbB-~YB+sR5P>$Q`yQV>N zctzPGI6j6cgnJtt7oRk4+kBus4&}Q1hz}640uu2mdc+>`t z<(Jk3BfDE43c&amkBn$7^7L1yl=cUR5PGK_c?{E z3hLMnMwXy0ojn-sFo&CI7SE0poL1sV)IFH?^b~pU*|EK;QU<&3?k%>NK@p}w?3_s8 zVG~OMW?QQSoCf#Z?6Ec^3={`S$r;*X4P(R@x}84DPSorAPaI8&6R}$?q!Eg}tpnOR zhSsX5;EM&J}L zP;DR*@gfFTrm+FQ@PiLN2;hCk9e3Vp^u^q{_na%?dkjyX{azz6tiA zqgYAaKqq-DlgTYLXh|WTSZ<56bI2^5fcC<}N3qE|-X_1a=M>K>bh}6AS~sG4v~^Cl z1jDz#;C5{qB&lp*XbaiV+}PxpXD-<^ozq6SEWw9X*pK5y?+k7oxh8ZGLwj6~7iqIY z5epX?+T`BR8!RbXgy-Zb=4aoj8ab>Y+6XVTvlWMS$wMh}E7lDfi}-8tkj2T-z6OO? z3iwb*U>VX&@V%YH5Rd0Fw^;;pi3qT`LU-HV%M>RA?}zB64#@-XW;s)92^QCTX|?j2 z2^TjmZo6??a{tC?#iJo0&Y3({XAM!dnWU=Knpa16q~znbjIXZcKer5Ra+Bk)*K2Vb zC?eV^`{nrd0<+9=H$OsAf1;OdYNcIB)P0Wqre&3fJi{HJO)W#KEwr0IsiitqPbqf`Y;kassp)z>6E24wSLlaa_7CjXe;1&%zQ*dmB_4A{)mx#(!hqcH?9x zj81*zaFXk@SCOL&7&=>qk&y!R` zA_H`Ry2Smo%#`Rb1>?QsDSYzaTb!yW%sv&9LnexBn7Wt%Ub*ji((u?=>sAfGND%Q~ zvs3;n^Hj7`1^+~hvOc}#ba?4K8034^YqhSuI9?A3Odv) zzveZs`ECU$zTzTQr^ed;UvYsOfArBup%-9ICN%I%U-}aBPGO41J25VAd)wQ7=XZYR zBOmz)05CJnVAL1`ldBZNp#vKu#cAAamnCqv97HXF#pBs*MpQZo@nZ}N1V z{Z@A}@(Gyyv@QnkO7)O(+n9^aQ{bt-`qi)EGkxZ@E-pggcJqFbbqu0a} zjw^2QbJ1LG)6qiBANvs4?zS3lfW{FlVGa@C*j=()V}Di`+DUqWIWV*@xP7(W=lY^& zvW37o)`st+yIl$JY?4#ubn>dG(OoVf>>fRAGB;m^$YN=cpj_wB8q#9xJ2{F7mchl%&)Sio+wu$ zL)AY8$|a6e+5-$-;a9w396?K0Rb%{fTu1Sxw3lHNhT=T-s;;>GiHs(jD6)ZPEZ}i6xE5@$Q!RSdh+i;?V zZ%)tJFqyOa(3%^S*qQ*(V!y>&O~GS@y}}zrq2<8Pngc ze*Jga?U}L*XoX-GrxYj)V!!6@$q7og5Y`x9;#caM*}PX&4@{)|Dd;$W`WRu$YA<1csEjaAB69Tb#ft~JqzmY=24T_;!a4b^I=B>n zxvV(!7Q*N=xEecLIvSC;od2|i!&_`L zQ&A%5n4DcKuDi7=|E+;%zWr?|1!$Z+1xpPMJ?`NSQ$n(DcE#ke0jLpJn@~IC!Xxoe z{-y_-Hc(+&3${-(nHFN?x}IZDsHF)Cm7F|Lg^QhJ?!|Nb2n@__v3c}Z)0Aa-GKryG z-(n>Oh1!ncd82NU6Ud4%U)+9g@<>9-6%9+Eozor|5PXf8Fdo}ea9`1sOKn~#-8Ki~ zE(vg>pi^3g)>`^v3QBhylHHA0M953~c;Tw*gM1dz4aFJc(lDfg_`FIKnb+3l+bGAipdQlLAc%J}p`5`>yNx>ceH@x{4Yb@BYrU*l z271u0S)a5eGh@(-Qll9!)qd~x+crlnZo;(ZnmxBONrKt4WpG^+&{}ofSFAV-hUMB` zBA|`cyH1atYg9VVG}?*DJb{NaAmO-(v~Qg=Y`_EkGOhkaO)y z=P~WM=BE>$G(DZp*fXaV7?;7AGwpF={CDy21arvL$eX7&wXB^dnbUyA$40d+O~WHi ztF<9?+k5P^(jt&@^bV0#VzN%-Y7v&y#%ioHq?A#cddx^4ELYT4hsr&I~{_J_hM?vTN{Yn&_Da< z}|JMO>#e!Jdb;I6>;t}mCt_p927^WFWd1eGbhCpd)Z2KG>g| z3#x%R82C{HWNuho7{o3u@P6RD_^tJB|6J*eaFTKvB2*#r=_+37u?tsL|62SX$T5cT6!=!G?J}vYK5fi;jg$Ou|vSkGG|S4n-uX3 zVrW?)O^)T(VKpx9MMwg~&qPq!13{A&JcjhP$r;+RC&0zdQO^_DOJtNtF@;bZvpe)! zkRePq&#nN~TXe?6cjdiobx|U*po-Q#&7bbNyo9j8Dsu_B?^dyG+H%#Fk)h>(UX&PG zRkiCh3wCRw2sSOlZ8v1cJG%*z{$$^>oQD;=EEdjv*)%aFJc(iu(ioN_YZ- z=f?!25ADoccpURamX}jMNH%0+kTCzkR+NFkyq`4N=xZJN~n!Z_~SG{30IW`ZAAQW`)G)`px zi)*#)3@J2Th-FlJUK{`b5CBO; zK~!L9`BVry%m%&oPQQEp@4jUCeU{8BA2OAA@YQR|jc ze7jlGgos!D!KQ?ic9cim8+DkbJvCDtudacyo*J^K)L7gISrBpBV`yzpQ_xjjKTU26 z6FczWIV^;-be84d?HB=V33}DEr>C%RT$(ntp!PMlkcxHg#&rBra!YrG+a|O9Ev}q7 z)4PEfS8;BmY49G|3G;JlokzM_#TinDpit&ViBzj(APCR|Xydci0@`%C@cCq2tZ7qR zdpl6snwF~~8Kq{ju70WgI{mMDhp=7l#RE3Vn5Wd_D8#O@;}~s~N>IK+$uQV_ z9z{5!81$7NC`?ny%BWO$gZyT-YvTfdI%3w|eD!BQ+`|gW9|Led0>p+8e z3!eRxBzh$tu zW^G9tV{Slk05r%sGgZrN2xoX5*9m?_r@j95ueU$zYi_-inMjt?UT{5L?|kPw(Ji0( z%xCEQjP7C_^Skf98@d2Y5gA-Ix_ zx;dFcdXSnaf;!`tRLe&_nSL3yLOoG=s2{C=JCzLxF#(@!__0>8YVfT!_gJ+uRnEh!zlnE{71#H=bmikZF%FW>{x!ASUO3JFdZ z55Bck%zA8AfRjlXV%r~bBd1_yTEr-A4bLra4f zs_&x@Ekhhj^5K9gT06A~oDbaD%oC?ak&&+k-yRuSa|M%~!9`gFdmSaEt<5wQX(K%g7~O2rzAUoCrhm2b9|WE*?9d+8LCuf*GScf#1fZad8$BQQD6 zIfi@+ImCtH6J6))R}JgA=@$X5#QxL*+Ndp!Po=3eX6ut3H6V}fUeALGQ_oCTK|IjWs3V% za>8Ia<3p>G=Z&5{#gHSCjr&X*0z{Wq`K1c?fR<8VcGuon@#U-1krk!LPLh+!#37)s z{%keml2y`@^p4)7aIds$f^f_Sx%HDuO4VIf0wsWr2ot`7e6P94D9Qe!#-Sneb9C<` znq4g+PCAE;nF%yy4<1w&4??`AdUbNb?YSD?6(1;fuIcIPmPCjiJrdcl{ zz5tdRuLcwZzO_FG7ndl(IdmUXc8s?@Sg-%_KmG^05pDddfAy~doI?!4phHJsb={&x zG&Sd5!^Fab$5SwLT-;DUd)^&k7+KmYDG2T%kIMTww{s0agrP+DGNcn#OY1OI8F~uI zQ6l)6>SBa^25^oQL5`h56-Ecs`&F-c)xjeVPwqjwxD&5$UK7igeFx2q7teIfcu_QD znA~iMi7{UF{ofB!QOze-=cdf%EK%|@9z1m?PlkJ^A~t(AbK)>S8W&q{qTyG^oYW(sM0qO_sMrw~oF>|xXr zu)Vq^*0Wp*Xx9~YW5b-;J`jr4lisGP0;{`U-I zR`!`yYx&jPtDM2K<4j8dmfJNdSv-j#0c`~T6f-D?FvKzbrRto|N;wYgfOH&3`Ovzt zfceO7TlYrLUd(NBb!&y`bS13qdM53Wa`p4+qkioK&F;Yt(5n8DB)I{`Za>%O#nG>_ z_E-;JZFk(q=ErZ;Kjl24wgE8M8J;aZUe4paSXJ#X*0SYkphGPMlv5K96Oevu5?kDZZ8Z4>EkHPmoyt?nO6ySY?VQIJ~cbnP*S%j$CLRoRH zmf+PAbt^1?YQq|zS? z)TU^naOb78M=u@b{G=}&rB77);fEiFuzun3Fr#mn4*110E-*HR_CCNNNZ1gy!OIn= z3odHJMVS**&|F0;&Y@aQ$rF>C9}{*GJQJ^?Se!S^@GD7(yKQ!vOy3h5tL8_KpPXub zPWBc331_#j2I>~?3XSU@R}*WVaEw7kVhW;0jAjh^0}sCZWiNZxPk;K; zr0?v{^!m_;KJ>o#y$|pbW37O+z~OIt)0;q(0(&zO#^ko;xDEFJbLRXd%;rZP`JdX$ z1p8+OK~&a0_0DdTSy5&N3VYMt7(XflF?C2i;8-Fh#_2sL6z=geq04=A!1P5k0cz)JibkIJar7R#ZEA3QZa66D88ymY|3# z8_^3a-0JZrtrHO@)&knju_jHb`07?y-xN$LP$nh}J@ZLyF2VmZISG*5*ECg#&IQXc z(m|`y*%be|#0Lq|_zLD0vOwyVKne1S`>D=3K}}8UFgwGyvT9*_A76@u6E<<}aAIiLc7fY8oyetg*O~50=hO@?O>Uo4YXuW;ORc%e z)aK`8&6kjZn@^_}AjMUjPX-HHxWp1tQnLsy z(tU4xVE&4_6*sOARkA&XHU+5Ab?k1xr9IeFLaaeSh8&Dv$__GbYHls+ z%enU~ja99)eIv28A$O%sAq-V~yaZ}Dok5SK)%;E&97E21XltEE^~*Rp`XPgOF zUz+)4K%QOAZ5W!}+jQ(6JUWsFYZ@|3MUZJ{^wH)gQS!qjyAiS^*s*#VmvOASPK&+Q zbxY|OT7GqVwR)uGFeeHPX}EEVKBZ))O`Q4bXvYY^^Ts#65g6mLip#i%CXwbw6sgL- zyeM(XtM@@d{hkoe$ z>$RGmR-Jl+$eN15yz4>CE90wxR6mpT10b;Fjqoh8M4f1 za?E_xai3i^l*dcqC|CM!0O{b7qAZ}Y>^?&A?9>T2hg?D2!MA`<0Y0$~sj3f@oJ{VV z=9H8Gp|#wR4NjiLCCD72^;kGCI#FQCQzyH`U(LfKuWgx6cdB|hL>p!WWPM|9^P-SQ z=6d==a0A&yoa3SdLPGdr^;vS-1Eo1Inbu}$*PYpeersKHg>ihaeT#OA08rIFId z_o{QmS5mJKdU1j56>ladgrkH(&EAd$zJ;IpqvI*y}Y@cH*ws z5|DOsD|-Gq)d(7#ItoyC^Q$h{iZOZ37`+#{HYg*l2Tdp z&af-5PDW%8*_GqcjeA@;rB#K*jb#dHHp<{N7a>M`SHQ7b7{8o%e6YJEf6J?s9b6H9 z>S@y0MdiHCrR$j#K-AcosYM_;1VB!~3N$t?wz8a@IL;<6QkU|CDlRSS72R#SZRsu@ z4P~&79v67o13&TYI=pJzE$T{k$29F(xu4sFZP2Y)IJ=9V9dR#rUpdYHX>fl_B~R660y>D=x#B%YHV58|((!+SQ?ZdXwWdDiTE1iWV3Yn>mmG z01yC4L_t&Q%f8ZU5A#K85~4&4J1QXvt=G z*YE!B@BaMH|2(SqhBv%HUlRQSyaCq!DddJl!{76s_W+t=ATS)DSTSm73s48hSg0pR zn^WRJe*%I3#&7%vpvV(XJb|a^pNwH5WI_)-^w3JXJ^5skRdx!%03`qbqsi0=T-02+ z_>8_Hp@+5upuYLdZw7FE>Zzx|!M^4-uVGbj=U@3Ne+AW(t1W8<1b(Q|wwWx-{wywx z_;3B@Z~o?Q{T66#{Q2WQ{^O{vR1)uh|NGH=Ky-8_U_T}yhMv*R7(;vZ_$##2Apb1F zkQUdn{o{NShNK4TzIIJ#S@IFcOIvy5ftK2yGNILptSmO+f#2xv>auQDP)1G zl4tBW`&5K(p)Aw7vw7EmLDYI0af#$-2L=AvR;O#;#u|3F(B7BrAsn^_M z*7l@r89uZJesdeUR3gh-@^KN&PG^XSGI$6JesC56(ema9XqRey6)D`wZG0|06BPp> zD`?_$o^vZh{uTX{Lq1{IL?ri-E*|td0@|Zz8BmCI*?^Qm@qe1JsTYpZd7b)h&EuDL z{z^lTo^pm6vs+zp-01*(^&7V`!(9ZlFM9Edz=;abY9`RXAgTihXhpQL5G{lfoJF&{ zu22!9EoiC)Ec6j^{_t4>TH29Kw_<43w6q6it{#H2rxmhbG$;*V3KoMMpgrwxLmkZ5 z_%U2d@V~frolo0xtY`c@HqQ1+v3A$(-X1!neRr7fk-4%UoyQX-w}GR&tw!pG9HId9 zwGS{-ZJ*l&mMK_Lq%&)_?D5_zHV3oY-S);Qp=r>)I>#94Y3K12&bSnmBO{>I+R1~n zaW^^j;L^HXbX^_QeEdn1aB00-;uW(e*rrm?v2KMq(EGM0|Eb^Bx{9S_yK}Y#_nfO| zg`M9v`; zBju2^0e`j9xizJSSfkiZwTc1=C35_<%C*3j6+SVRvQ^1@aciqo1y*8d2NF%9J)7OSGf$vN}OIxzT9^NPs1&(zE!CZd^QS0^lDo zDsDsPpp);t_g=tS)aT)cA7+T)yX(a!028AAm_Inp>4UQhO*^@d@X@Wm7KhZ5TS*NK2lS`Qg*w2@S z!}z8IJq7r4G?Vrh9L<-!_{FcRDj}+S2spWBvC!yC&*hoish(0kCm3GD47YfZLZ;&> z%of^H96hyIeCZ*?e#mawF@=~z{C*<=%I5b)KpWkCIkMd1Ayl3Nw2S*NPl2JO&>0z8 z?jh{SRSR%)GlVId+WjQ=Fq#o-dt!%Dqnzf=#r4qnRtzoMSlX<=sl~D8%5~YLtC`kv z3qt<84DIYD>w2S<1?>6MlH1v7+nUy~5xL^Yy|yu*0Dy%PZj=c+-TBrbrRl@eGWM+V zk{1rg)S6wXOLHJn^t$9EKb3U+bw12DmK!u@pmsO{T5cMg?X+7&ii|;bl^}gy zdiDi#q%?WV5|&1 zofz859R-sclV5r&GG6A{BdLo#oXI;qHccN=fNI}C->NOMUr|jqwNXj6UdAcWm4E48 zvr$vFTMZjDO|@h*H=_1>?xWu{Ak}mRt(7)_Q+Ol6Mng<>duBR=+igJgsWnLM)DxxU zB)hIq-%8>Vw;%WR?nDU9KRfihJrIX478TdXw8zkvHjF~NVRonM?(I;@9c-N>xXWVbX`^XGrgE!lwXe3Fr>BsD*_VkxF zXMWJP_z9H+?TKj#m@&|i zgVLyetI@xXz^k`cH()dnst0I5nCqCEom^yPf{P17&yDP&Mt!3#`h`dCr9lU7!&H3h zTi=Rp0k307ZR*81d01!e27;{Q2IKk12}v$ga(@msCUT>dPLY7NGdULfsuN3x0oS-W zL%VGh7pGW3+Jec@67Suth<1_5aX_=F4Zz^JB#gOXO2s7I(G{hWcwks1d#8b+9i@}_ zy~Iujd$AUBzA3qIBNP!}w)<@Rob>E$-O> z%e5%k=Uw=%p5?Af|DyQcxa4NaU^#<2PZu*f5XZwo}5` zqBK|m>{ha^zzM6AGofqhv+FH!b>#KLIc*@_zTIsy-F|+qEh!v)k`Pi$lXmSYC+*Uy zQE5-VllIWjIF2RoqABg09LL*YkCi=LiGH1$fYMDD<-pM5wfHButhm;NKv&wcb&3i^ zeyQVrabM7>4dt+S$gAXJn~p-E*3zChsR6Wnd(*2qWFOS%cOy~;we{F_@#fvn>U(O_ z1!%dag=$;3!)s10o?=}J6bnidCF!_=p$(YdqRdl*>wX!y;;5q1)aBI!TJWW!Xx5#y zE({%tv`8ccx_DU8QfW-o7*Zw(w70+g?bu!+%`+z_m)4f#2J}lUDmnd&p8#$dTj)>| z43sKPK~~0}ki`Xr@Dv}RtbgzvIjqL9<`A-)q=&$Ovr`s{JY!IrWDB;RrLn-5zwBif z9)ubH@=W5}iNsLJJL`o9m2rgIu5{rvL&w`8)V{RLRa zhNG{Tap%il`Vx*tpuso3@r__U0U>A&4?y_A4}S1NANtToKl;%po_GQ`E3qM|QEIxO&$fb7_EUCcAGf13}Suda0(!2X|7>)$E*O%D7M;{_uz2 z{qA?8dw~Xj_=kV^UGI7qD!{S0uU_~Je8>n@Kq*Oa%3o zx4Z?MGkcQVf~wNDmQgX$ElgU7KdBGGz;SYN5b-_xP@9n?V2V}>IfHWOdde?p;g9ac z9N-F-?HmhdI;F*9q8)Gc9tAmA;wJURSN=*!HuGHLVApF>x2hUjC z|I(Md^c#Ql4f?%P6_P3tqK?&uD+et;0WIIcQ2eYj7k&h^nulw8WC7Z80<_taAzjCZ z_T2o*LE|%aV0^HX-r|&q{a-ruO`9voT0Cz6v&9GLAh)v=Q! zn^gZeg@BrSAKEqWY1o%eVzHfPXa#65J?BRr7}`?GE!!CH)B@Cpw1LbW_*Aaigm)PG z@znxy;hXK=un_8A*shLLvyTQ9U*GCH5OMmcG)Qt&N_Jl+2VJ{MvYa5ePmM0&~i_R3}}R`>f1OC(w<7R1VuLMb*{ZV zpoM_TY#hwHGgUGKdpGa{szujFRFv+Hgo}`>=>ms)0BC{YC=rrqqNyakCGi=uFFgav zCK0mI9I<$+4>}zwD61(RsRwzY{2CjN3ZR@^Z4oK)6L_O0fCtG<+RV=YYCV}HDAj|X z!3jAdQ4}3(N#|~EQMFbCx5cCBKvHL1AM&~nJ@gPheD<@SW$Qp#Np^|EtS;a&f|>7i zoZhFNeDY`i_x~NO073u(Yo0xingSrhSOMVJU-*Szc<+1P`;{+$*{abg*%kB~O;za? zNi0F@IGV_2x0olz3LuA{Zm(xK=Qk4<^DUI@fuaFvo__l2#~**31e#TAOwKVe=EAq{y@DL;0j{_F4}5x;4vcC_xd8R zp=kS(dXam?)B?=r-bzbjM)Ae>G+8H^$p!IhDp*z;6|F?u$`O=JEOB_3VH zL$Xu@RI0i`hM@H3m2xLyEvt)yY8ndYT)EV1;QRY(Nb^$t)vZeBcs2AOj4Q^7Q1}MO zmiaKTjR3@gz(+&wu6e46!zq(7Kr1E&Mi8~4D?Xm(3grUigp~Wr>@h;SbBl+%ghc|X z(lWG52nt1Q4!4@Q_5GG9*D-{mO+nYF`^B`Zu%w*)c6c^0dk3jnd2>VwCLZB@QFp?X z*6>D^u~r(0C;GH!R2*S>#IeZ(@lWR&+8nH^N{juti%zYdNOr$j#^6z(TWe6Ha=NZ4 zEr*jsY!CjKrc_!*xFq948v~;3sC$dl@a6|?87P7>T(L^#Xgo5s*$wqolt8Zy7h{`A z<;siJT)TiaP5|wk#~Oo8eJe$kd}!6%$IIX?maEm(af{K&4!L>Rm>k<6K$HQprs*`7 zwmPI96~vAm8zS-LbUz?dFe*#wR-h}~&&gKKcm}qm*j4moT4`+|J}Munqo>Ap3JfiE ziwc~H4y1jGV(f8yp@gSPg5ALrk6HEPB2uMwj5d}-@WB?K1^F;t&xcn1cIvb9pl-OD z$!|XGyB$L{nLXYqAJluN!RFJfVQ96z=X_NRq$|F>dg%4_xwfVqchep0(LItJ$fX9* zo=~5)J4Sma%OpZ8tD>o#ePd~(N$Fj}ezV68h$E5)Z9+L?t#DEb`K58!pQ*iUICQ4g zD>81L@j=zuTu1Ri>UQa0LT7GuTegr+O>lvTyJWUQ*0D~} zh4)XvDB4;mXyL?3z7IzgY8>U_xOdzt$9<}7Y`=~Bm-@N%I;r*Yp-J4Qb3QS&*wCU% zS1@uMvc)5nCKsRdA{~V?IbPbJP;vL0f@^MSy~=e(!6P;&w#!BzTI`{sK}wZe&GWvJ z)nRa;Z&v@kQc>$=O`3`uAfQ9E6*z>z3YbKZ_cEB!@ZER{NCS9-?xtwp4bKpZp8yn@ ziIjMfz?ernfh7qU`7x7K=FU#)kNwVbMIj|=`7D`3(y;nhW}iHqz#T)X1_y^FYnH-Kq>>Zg7x zHV1E{t1ZwMKoKAo+KXDHYiP2+ix;D3zp7qVOBag@*a zt3=Nz7MO3fGP;w+vQFqJXt*_?WN2A`YX!=9l~#7_PI2?Ie`*u=Suli-hfr#bnY(uh z(5@`&JQ0kL1A^5zwwp zF1_JmcKUsBw|pD8npj#S-k0DG6eVv35X!;-HV1Ox;FpX`V?VH*bAXmR1M!c(nQKUh z@lFjcFEO5EKfCb~}rC!_CWGljGD9J8>>Ko^7#8YK#l)de;e; z7PBi%kH?+7Y{Qh!gV=6Oou1P-ZS>=as5$O*lEOwLK&w^BLz8ol0TC!~a1Z2WRovt_ zPQN9jB;-orCdLTW;(H^YP3~+}6Sf`H&--0kn)ccr0h?OrWns^Ww{=_A)S4XIu;&yH z62R}$5DiF$cYt;Yz6||%o#&&{UUYP`^Bprx?ATZ5y0lvts-8x{AMClc5|EV*OR1b_ zy{W0<`Bv~J0Y3rSJQzxtTeMCgic%~mos^8H?PY5H9%D<*TGOGHSnFPG+s4)0X06gN zozk|M=83k@CB#sy1&Q{Yx-zv?V`F6m(H#UtgG)%6>z#075s#kpPeKLl-Ifs3XxltO zSLfg*TZUj@xsB%^uQ+E;8_`~Xs5(-;#w3pEaDStK_U_68v=pmiKW9ZD@r!>FQWei& zdI&kODUO;)?Hx^y5G9(X!+5Xw)N5%EQ4}K8H z0oB9k+<*W5s1-h-hNyYuDlv}WV}I?}ehvSEEJgikL`s$q!-o=9eE|+ypBOyAI2^?z zq*3nxoDATB^56N+cak%tpCpO`%EGWRni0pBqoz|_+9 z|M!0%lj?VV=Xd`0|MtJV{Re-r>xY-t%l?cmP8bDhM*m=La6@5OX*5bXY0T5o&{ccI z|5XP7Xo^P&8i_n^Wd+8iaIQ5Zh#0B?QkTY*|BoiKXmAN;`|V6bo}X4>mt|M~|X zeDLjWe>>MZZpNPgw+!y}%rnn0R~B>gWRG@E!|WWAZ{^nhhi$>lWKn2ELSqe7&tjD0 z^Crg!cWN+)YQ+hJXw7Bepc0E~p8TeGCT$(4?6k#=x0lxBIGzVn8<8l=1lH;%O=o23 z8CsR554nxs8)Xh1Dw+?)nkcYqOP5nb)}zNCVq>Qoi}g^+avEi@SWX^lHd8Q`Nx?Mk zbdb+Yi>BaPr9*THK1<~cQe8s8s;T3;)9IYn+_(8}aE0$M$lJ=dj7j;(4!iD_lfarC%i0<;W6z*kJSU}$?fQSGv! zm&%?2YFuUdGVT~r6{XFjmUDWxdO7ywq)N*kTJq9EL*>2rNpTjHJ(!n*(dk(2v0cLq zIn6Ymy=JyANt^XsR%$^=N;`NX2lL&r+OfA|J?%=Etp!*d&_>mvwY&XpTgI;7&AzA$ zE!EQ=LmO+DQWLm=_0`@POO7{By$j`OB26K-Q@kAE{Z(>YXxT#~#D;hB0L$qB zttuP=t+l!Fq*Dk0>{MIxjW-8PXgA8;_i3L(zqWEPOr-cZPH(oI4zv_YO3Toe5a&-H zBtz2nmb?frnq;QnLz{!iaUQNX$~olgPK_!={dum9gAXmYMViqvS`7AU{K*t4WFy64 zY92Gf4Wv)pM*BdT$}qhO4pgvYKlWok2D}G;24osTDB&JR_Beof9s@MugitmMtxTfX z7ghxT(JYN8`HC05=tbj<*S4G01tfn)1Rhh z;Z1LP6Oj3?=^D_*d*1V&M;>_u_oE@SUnSkm$w1N`!@AVuu_Vo2Qlrk&f)rnF#_cdg zOO6p`0?+~`{lriF#NYdSe{a5a3P)X-^WSx6X0)11K&u_Cqo$)&V`IWyM)hDF@C{7> zFome!;SCrOtP!q9ddjh{FqtuMxQ7A8FWuGLs^HUYgSM&9%8L2}v65O0 zlY{BtIf^yyL6j@L>3-c^BipaR@YtTG@Mmoe$8wVU&_Xsic%B6btQ04Bv$mIxp^bf; z-3oDXbM)KXRE_>@GA^Uo<2C>XV*cmlLz^0ewquTa%Mxs0Xj3qxpBf+9Nt|tzM7zzi zt3cjkXvbQe6Kd7WG5~Koui7Yk)U@?XbwiGIn{a%jYufl(TRpzOwjGO_TGxhHat^U` z(s>9JxA7&!K#GH|8derGUEMjUwFOHef-=Xt^hwMR1T=vwdqGn7{l6A(j~=Au@aBmd+)tWvI5x@ zk3$%xW|8r19)J9C2$c8LfUeY5mMZhn*YQ}RHz`+v4u;}dfps^p3@xX%!mhGzIpl@c z@gS+oTw6ft7L{Z&RT9p4FOz?uSn`Va5;ez{WMz39=|MK1U91c}hw2-NM@X6xstL`~ z;}mjydY($+YhM5JfBsKk2>>MM3pxn>mbbix6`+CZ_$=V%&;IPs0t8~zC|)!Dtoom@ zihi@%b53r^VOd^Wvy5_lt+Jp{S#y3tXN?Y|7b^&PKpi@KvIBA9Er2(~bqs2)IJ6v1 z>U+szF`a1%0sV8ZyrS(oz!kyIhd%Tn!1#B+``thN(?9)_KlzjPd@hvpi@*4bn85V< zMwep7Ugtrkq}u&ynzpWpUmiS^8mAN8!byr!N5F5`A@nd$)y|FT27I}i=0bk0P!<4~ z$zYh(85a{%9c$ucs5uxS7$b#VqEYu6fa+y0yRA~D%p^wkCRJID8x}!Gazx7LGMLF| z4#Nhl2ZM+8I#yR+)B$e+9Hqko<2f@k5PIN;e&~lVCmGEPNO)y7YAi7z+k5W0hdT+{ z0&bSB>6kXCJjmH&6~u*IsaB(3!Rq z5zijsDFs_xk&SlJ2B!#UwdY0(OdsKu z>HuvH(NNbRo6?PPBLZ3~F)0+0JTW&}zc_3uwPkWVUoXn>_@Sbjvrk?aM}haGS)#*);!R0w@JpU7E*|5V-va-SvWYVx%j@xadMPmdkk%A ztwv)By5fFYdSj&&0j&iXuVTAVD*>>n0-o+O=e-0-b?%+QzpFAGLmRy|AS0v9_!chD zv9a;b2x#MMi8Hp0=X?91dn!!+t2Be%qL}3D<1rM)(8g}bLm*;)$R2Nq&Y1C~#9W8X zhjx`NmpzkX6`q21PwbP_iaq%ZL#q}Yy6-MLXAiO2(L2SCdR zu8e5PZGEW`YY96)@rh4-^rIgI`T_$3F&Bb6rESKxy{x%g=u(TWOqCWqyfnu-;;*2@4wG2;>bWF}IK2#M}vb@fDNmKtOTQv#3EVTtI4ka+RDFSPN- zos1NPKhe7PzW2Q!{_ux?V*%OsK54WzxFTw#lOHr{Wt&S z-~9c*|M#zc5Dfw4_yezc)eqEwTk%4j|KeZ#i`|!#$IB(jzv_29UL5t@ln?kP1_gKz zEk!?I?Ok);3SvDskK4>&=D6uk!5A*V`>x36ZXhD zadDq6$|VfKOupCZHi!Cr{tI8o?mbSD8Kq&`zy9^F$DOMk#2@_;&3&05>PLU{N3k5h z(o+ZV)Mq{eG>e*G$zU>LwqOLI0pZAEtWgw=`m~UzYKTEqi|jHkLnJ52cQ+VPqXyRA z4A{^!U-=5tbg`LJ8$>s|rSTFX#2#wkfc2;2X1Pj*!oj1*bvvw}njfDhqq6ND--_e8 zRa$u~?%=A7`LUYaIA?KxNFAB74=#fMS6Xef1@UWkr`b*fncBRCo4A~|BTZLn^CcFi zS#(-=k_X=@f zT1UIJv9-(dw{h*N+I=&Y#?j|zZieO)hDhn6CSB(ZSoNiqwkb~0f?6FYB3;thIbDD% zRupqMl`EPMuQa%YU(o|;An~GL7eANQ!1&hvUv?_CTazgSubw@YBqb2(adHSbV|62y zN{Aj$+C?pNZ|-akOA{~M1{;AXaGo|$bKN)Nb-quUCsJzStDP%H?~1i5Z3v=nBH3w` zS?sqe)G;XZ@fflh*&a-dmF(s~*O;`Y85wq%ou=u|*aPWIaGf$JXvTMycGoR?Yh3+P z+M{7yfU)@{s4tW23R4?TNDq!v#ai%bgGOnnVJYqM?7+$Rz3pAy+ruwA{eN}0$JXhJ zcs2J)Ur!I_a2>bnG8)HD!Ca-Zi-P}R;+vJJHB8U}ZDBi#1;#aUuEXuj&L78p_o>uU z?(ws((#}kMnS*AN5s&9K7FXAeQzbLF6DGHPvyf;YyMBtbm7&TK!UyEREw-FlAl*zz zd)@@C$*~y`&g?Ol8HVS%>M=_jYpoo{q`?P3yC3qN}020KOvJg}&p?JMU!H9}eGVst0w9-^gNfH4ewb;4w)| z0$7U==;TAySrCcQxQlN`x8pVx&TOUh-~PSd`@Ns}nVM_`+tA+Bjm%cc~QMWCYEgntSr9ZsZc;G2tGk+0`)QMGf*G+ zXS5L|Up8W1bhv{h&e6cCsa z->iwI%{N)Dz8e*0Ytv)}lDlUJy<=`r=UjXT;0%xZ_2gNjIJ?#|r`0X!(vxtKsh&Kx zx#&AO8`FQ71unrkmisl|Sb}M;&amvpMf%3<Go^BSCzl?fV~}(WC`2pXg%#< zc9N3yt{j-#Iiwou#2Vo`-E1BwOxx^qa+BMx>=bTl!QOG%devyJ#F%0ufo zF2@omizu?BJ>i@EL$p5)Hf-B?*-4CuhkA0iUh_DOH$sZ}PBhVFZWt^R)A{-PJMfCC z@%Y~E%k1%!OI7gYHiHGvO`J!iDyFdsA3glxG+6F+1E)@oXm+e;Y2_s1!*b@bR$q|L z^M2(!)dh5;oCf@3*Lc@%#nu^n+YS08Q<+66CAn36oRhqtdnO;JIm|jA0%NQXB}lg^ zh}~207!*{P2CI$Cz-$BEG`1oQS2-g)+CZMC7F6?+QR3tg;JOy2)>E!)RBQszySjRA z9^0_SaX08jCn~V49oBBvl@=>n1MSLgA-f%t&ZA9rX*ol##_CzSnd~;!+C-hp7ByhC zsx85nyEF(nF(PjYTfMHaRwZz5Q|tE|TV4FzEWuSF-jiG-mRoPnCymfnku92;+Kb-77pLgtSG=Dww-n?HD% z7WFA*4sv}Q2A=MubgUjH1jCwY3bSlJQ)%3Yj%J7&;6sSxr3wmkRwO+O5{ZMcRPRBn zz!+~~+!}&FyoGs9WMYgu(I!e|NCju zN$XawNg5SnpqYUQ-6gkAG!~se9Y=A`RmKT}-1>qSz7U`toq*f8Jpplj<}+Wwga6n6 z^(6vMJPW7^jEas0H^>yYfN;1|#1|t*(uj+Rc^C$aD~f=sIIBa|5px~W%8n+iG%Uww z=4yKBOJ0Jh^|L?wv%mS9zxlU*>ZktB-~GGxd@hXLfBmoj^R;J+ z_2M?F<79GgVM19>yj0UBp+h*Ou{vnh`?Y#8=n=C=XcM`u#yVzrHm1d*Njb3`7c#?r zP3{UJbT?JPlW!zk)=!zq

rsPJ3jj?9;LvY)`?+mLfWnWyDQ)r(TsQq!D9$!4jDR)E&r$3{(9Jg1tq zWXt-~ak04xq>%-uQQvZkAgxm{V*YeqRNa*(*^uNRf?3;cEVft7>wmM`qDMPP_3HF| zGO5@AXi1rlg{U%Il1rQXiAOMvTyV4r(5hR~KxY*{4O2_G?9R{9DiJzCIiJa_&|T-g z*VW0sxBN8);v%(3=J~$b+68;tjg60G%y#)<6}O?_of7CNknl6j#n(w<`|O`4p7~0# zJ?^W7pe*JKcHQfioLlm?#Elg#jZ3yzIbpQ zB}mVK0!rZ;+hT(vW9WesWQ{lMwlTGYr`@V6x_7BhVr{FK*{_8%sCdSfmY|D;nSb{H z01yC4L_t&(jLgBilE13wc|Td6G_a%P4CQ65m9oAZ*Zb~Puscg*S9kkN8B}T0o{e$W z{O;}L%I&BORy_QI8+hEWIy5VO_85Y>_!{4;F&^cI5bY1QpfzHBx-BUAX`9{k#@dr^ z9H4Z@(cOF4?2P5Y*fX}bl-gBh#g&poQZ%d7kzv8>Rl`B<#HzPHZ#%Z(kxTUtr7&p~ zF;Uq^!Ko{)KGh{6wutt__YKaEv!VyIj4MkKmL|Bg0ajmR4{KSf90`dQm>J+$$ls7?i8dk8;t@!@!BH^X z0+~=0qC9BlFMsJvr4pxfdIXy7JSV?f7f{x3|MqXc;~nq#hyU;&Uh|Rnz3+X${L8=m zsZV{1*<9F@>=`a*hWW7?gO}=zR6B=pm>8IMcIRr&9{l?9SG?l2uYE0^B`-&;yHtB` zJoU*>euWqnHzdzz%VofgV6Ne3sl(wec(FGy?4LoJ%96W{>|s*SPKC8pZ?Q-`q%&ZU!%|Q=XV#=vL~tBib^}F zir8sr-4jndK@|zTMhQf@Dyj71U|H3HVNlTL1XO6aR6-Y?i&9QXf_7ApGmQ|Z0l*)f zDXmJ?%)DiRpyL|hc+uXt)F8~zR^Ya0pMCb@AOH9p-}pwp)Lar;(UBix9JPy@z?qaX z(_JjVS@AU$ijQ)w3D-lLim##8Peo<@rbX~2pm0U=@N{) z_?9Jj+Khm9wFgc%hghK2YF>4vVE?0UxGSDE;rSGYW-TE#oe;NpPN!UYnIHv^NA_x` zY+enF(?-AOeANU<9y2+<%f!cCt|@2Lb`j~5$BLl2O>(#7H1MSgAS``w_qwf0Q?Y@e zwLn~}pQAVu1&$J6@K%kL>E9weaci={J#53XzHGIujvklQLY4@-_Qh!|qOtt^{5* z2Zu~+v0vE$?I!NVj*1nqc6@aNNCB4zAH@>%6nP-et;L63b7F6lb}NV#NP7sp^q96> zG0)>$O6#rK0jDWMypO*ggUzvS%YmUC-$fV_x@bd2vxm61utTQc;4=l+9u3^?3{1o3 zRt9ZI8TQz6eiM)iew@Inj{q&hIHdkKgCklDr4B5TgmH$>1?$BB{9?wByXhf`92O$Ap>a2*{?4-$Ue+Dyc$=nKUUx zUZM`>?Z9!1(g2o#ib3*BH3be>H3-CjTvPQhq+2WtL@$>rH{-NsK%g~;PzBN?mg$h0 zt1&P`^#I;b(?ASBI7(^@ucmh{s*T$SO;G^`bwI69CE#;>U#g~ok)LUMj9+O8TB@rj z@Dj=)GsX=9K9;L93t_*o1Au&(IwQez-l zossm#C3-Q>wwFDfk63hq8NP9LM|=@Gq}C;YnFmPZGGm!|oDru8eSiP=fB(rRpZvL> z`?+_$>s|lgAN&Km-i2rXAQmcY2SyueZq(odML~ESw3Z7J4T3y^PpIgbXMvbEO>e9n;S>1P%)1lnpRw(F6 zxcNQm$?1X57-+hw-+AYq3`vFeKKkgR_zClY?^-hnU0i^J#b;8r)JmY{Xcw9cT@n}I z4bQunJvq+ZG5C-jw8iJvoUAK{H%vC2j`_0H zc@80|asag3;by1!rIe~yPgmC{rNEaS+t5LaTS}|6#eF+DVOZvEo^?F33Rym=o?}q0 z5X99P7L~_S>q9$vGR9P~@z^tIk9wMd4Y?RvEfxz0zqBDhwPeYn$uY~!&U@?6=~jd- zr;q?`l&-qlQebFf=X2G_Ianl~ z6G5KuwL5$^U@Z&0P;$i1N5zg_E$ziSb#cbhK!(O9tMGH%iJ{dAC5ib3HQ%?DZ5B!M zZY>E`TIR%D88l5aaBfyaX|3@`NnMwnxw<78$1&|`2g;r|vi8gpOsoZHwRlxY*_BL# zy|lH_$fCh#Xh^a>NqwwXYC%*f(rfhn@SRP_vmNkKjvg zlKe-A7TNgFmeQ+=#^qppiVukdHUipIjbxajhTf0nF>EBYa08;9;R6pm02HK{@(OHq zSrcgzj?yS}O*OeJv?~T6Bm|=AGQc5Y4l%6@{#E!Ed{3d4_$qsPQffeH6-?qqsc2W8 zuo`XRGwMchnQ2RNG|vueg_ zCKOMV2qNw!agFbpoB)49M?j7gy-JjeA|C(bCs6_|%wPAq*MaB;XyiQrGYoFbc(b_q zqUw8++l%Iq+S5o7DILb#gn2xwI8@JOMnfMSdqP+m_!C2r~tbICT(;u7CB;$PEthvN!5?_K2 zbrqOEP1j%pqLk?~uTWC>iM9sM{qb}BvSVl|S8=5)SP?rad&F-d9G*-apk*QK(ijgW z)!0Ex$bBM!ovw6aD?u^L8#bI%2KaxK9aO7Fp?_PrpeVbUh;{drSQbP-GT*O*|S#7!Q>1WKDQQVBeFFo80Y9i zOH|{+hYbvE3eJJWCGy$BACjVv&+6v2FQys&$@#+xAc>G4qPTw@K#O;2-`h1qkZQ)9 zp*?t%GIa}8MP-kn?J(y_pv<;dV?Y}PN+pJkHQ5zAqI#vYB3;@e7PH}9UU z-Qcp$yI{Dh_PHB0F>c&;gBiTU<&hSEG9q_dP?P;n6+YPRWdESZlR$Lb*A6lZ{ z+|YmxcNFWN_82W2Fl4-I+;Xp&30;4-)o9#hRd`&OT_NcVifG@S;=W|9$#JZ0?#(h; zpUqBW++@^_HLl-j>@v4HF|-oN%1N70)KVMRFx5C#(%PL?_lGhYZO$|Vmu4Z{EqAAP zIin*eZJej%UheFc#p8|ZK|awU(;r*9eTImMR zPMe29vwb-|+t+HhXY^Sm@XsF5k_ctEol6hIeCd&aliNdb?*_VnXv^qIkX-3UDqlxX zE{qC;3nDc{RW$ntUj1rd4-&kzHD%X8+ypG7`7sXwn#D4)9w}Bl#cJT~xSyR%n^Fqs zWW82SxCSw%Bua@HuRv*(74Xxc=1_%fjq+zt0gPr+_T`y`4@BMgOeXeFi$w`|FI^mO zuZd6C=_m&W-c&7)C{oyW_4>dEKJdsRkNma2_SgRDKmDh-y!qYle)n(v)^CxY1QY($ zlTSk5LNS!4;JL%KS6zf zaS=e`xVhDt3X^o^;17(*SPMz_uhvedgwjx zdC!0OFaHHd*!~1ps(EM`YfUMgiBVT@TSwtoLp`G{0OUaC9H7sA?sNF?=}&(etBHm1 zSF8m;_6<7+@vmP9rSO0^Y&^7!Udj!nwHxWV_DNefhtV; z6ku>Ue;#}6|EBHFer-Fh^H6-$oNJ#$Qj|qC>?um5NRgt|SawWHPGAJEUkn6(&qEOS zAxM4!@{j-lg5TRk{(}1&;0DM;kbCnIB*=x6AV}xPjucsaLsFt7HexGNq}cDhX4M_D zzBRt}Rn=Vk9LaJ?I9z+J*;F%X)c8jGxUa&44?gI+Du2$y4?pakcS?Zk9jFcf74DJi z^6hq4DiieY-S`Y_;JtO=y@squxIQ?;!A+xXeB^XAoda`Z4Y!43JDDUCOl;e>t&VMT zCbn(c6Wg|piEW#=-&^(lfv&Eu>T~v9Ywh(wek-H&GXjR0jGARks6_torDDW;MwQNy z(vK8%aT(e5oi84y{aG`0;L=kV`~(IoTU0L!xdWt(Eh@GC@=SVc&BBGkKPAvP;4gOW zrze5e-w|!z=4vyLunO0gBO-FUu(6#*JwADH4)ysz(nn`e?Mev&`qxUXacwjHrv+fH ztE%PR98wvDsA&alJ18c$;vFw9Y0Vsws^6ZvAlTx3G$mn6g5O}J6^EchV!#BbhWR~l zry3`=%VjFdtXLeh+_bb1gqxAua}2JjszP80~JG|g5} zt1pR9F^bJ3kYcTnhA&H7=aYqFO3fztP8TW45u6E>77q`zO0TB|({Dg#N7DyGv$f_X zVCLoy2*Z<%qq)9w>RC@o;1&858ebd{HC;88l8-=f(`v(Ev>k<6cKnN672d!6H15d1 zg%!PiE88$b+)+4#R4HADt?5N-mbCj=EUn@|=D;zKn?I2^{es7Nc!!lcS!VSQLg=<(ZFdiqNnVPm&o`UJ6FExIcUYqm{#kx zQ&t?*1n!s$=!8x*XhMRZb^R*!m2yrwCy9H8SDdN=RdrSdU2za)m8b?3K*}Edo(h6e zLi?Sc3K(3aA_~Sat)Pm;%YAR}b=>SY!+%^)$)tDn$iD# zc$oV!=y*ZFe+wJxh4e>P;^sd~0~q9KIMaPQ@qTXmaSKFopXsB_-ubJz*0uopS9scL z+A?b4%$1y%p!Wj7mYo(_o|hjXyXnKWfg6ynSgEGE_#U=6={0=tBA8CtM*19oM@B5fOa zo@8755-we%wnrX83Td*G^YAH&j%Ku}hxFtyz+YVzhRhr#s$74V}ug->$ zuT`(f$JZkbVVC)>cX_`IXSbj%Q;q9>%lz-pUaR0+rQQJ6nnB#;UYJtP2Idq8k3oNl z_(z_$Yy5#BQzh*9g1o({cB>?hf=>=^%Ylh91pTxBtynVYGR`>rHqVzyf!BqHG3)_v zUiRf0O_e%Qw1Qqi(?S!fhzx##Ub?n76RZuIC#|6pw8i5d+Sjg5HU^yjS|&7^FxS+x z^ttd~f$W0a`Cl>1*GXob4q9UJiIHXFk;7vL4vWb@1aw99CW$ZN!Eixp^{Zui$u3hk zi>=elF9khDwEqa6XW`@&PkypUWc@IOv8UGux^=nk=;^-u$A=RPT@c`eAP5d5RvsSC zI*uw+@2SM?OCuNVM6Pl0hhKOC)E|NWOjgieCvU@pm0VciOSVFe5)*-s&LknclA-V*vUlRzsa5rfaY@ljnbR_6)MPs)PQV!)%w zGW^IG)BWwR`c1^bCjB$VYouh$<*q<=m`mX$FS;$s}dZk zeyCaoyCb?oqFXf{?|==Gc7+V%T5@eC+}~B*VEH}@LV#tlA>v3(ck8Rz*kfdFPF8wW{F z`w9&*B!|u{Ml3 z$JlLFYo=)OV=pETY35P=`{SLmiB{<<6BAGwl_3$31G?N!oh)Q;dr4L4=N7*QL1lpJ zuxYrT%3E3(jLAV=%K#dF3m1i7>l|OCs3C0M|0s;SgtCtBLB+aZI=gYcm<}UV&I)Vu zm+yKZB{-!!-jcf=uM~u|ePh8OpA1uX@G#BUZpF|u=$x4~{L6}R)IHzKRAokxJeU~q zpmx@X7Nqgy+y6)V$qDb~{r_-mHA8}?`;s_#9*S)^mYDa4V~Cka{f`PoF8H;Zuos^`la zYNtp0Dg238r2Ty%d_yUFX&E z`;qTy)tFJ13*c9b<8q(Feb4XuwU!F*93U(`i=+7?hDi)XyUrwS_x=nfs9bN&r5HBR zgtweH2qS-m&{0B9y{cP*evQ6n*Vo07&}tJ`v&1E#tjF{{Bw~<(BdV5{AAD z1>Q({hOa+qd=G0rrmsKbImU874k$M1&!CiB{J*1nZaFSe=fY0@{y{E?OK=BiT|Yg0 zJ)9-M}~5Bi)rfI2vqZ^vF11+mz@g%ZbELr%hu< zQ{np27VfELw&Y-av8|hAdhdGsGeqL;`uppeB$g?l&heyM9d{YY4(W?npE+nV0O`1l zIPkox-e<5{0WAQ`DL^ya=a-A7t7o;)U2^qw^Z3)v4=ylMjk9cuf=?+Ui&6(JsI`SN zQ@T9U5qkNg%k&W15!3Sv3i<$0=LO+PiLVz3T-L$hCt049%f3dGUJHTauzX1Lw7ZB9 zw|EjOEYyiV9>;yc6G|wv73PS-g89-0e}&KlW#B1({3M^#*_To%$|i#iSPQAl)FK$+ z49|{OK1CZVmbIDA%9TPhFfccDLDC>Dm^BD&X? zZo5t)vNDOOFhJ-&4oca*Ii8VHl<68#9=RWe!m0Q04sISpg_Qiq=DvBREvqBBg54qSH$mK&4^9-MlLV=K@=G&Kn-;mXU+7ED zNTuP-Cy~E7OEP{3{WG*Pwn+BL0(D+YENfm!;V(`iIa=gWy}P2M(6!1}Qx^f;`CjCm zOG(xLlU?!>2Hpee1Bge#77CE0$?lAn?eS)D%zh9js+DqaM*zd1>tX1mnJ(#qXNv^X!jDjWIlYv+oR9Z&2t>J7W{J~cVr$>gXO~QSkmA*5@>%! zzr1Xh!va7V3=c%XsK+CbTKpvG$YB~}m&3tudp|LjndGo@^mh~_)t24E_T2MpDdKu{ zMBtdN!*q)zj|seV?0oh56q@{dJ;EMa%PaJV3>}zI4&jdvczZuNLZjobLOMf7e&~xgu`dd^7R7A&K8@;0@Bu`etfU`=aag!mfYAjCC5+^oI?>ODM|#wtKn^1= zw@^G6=#b!~9;zsNpRRpMg6w?-0!}mrfvb8dl+A8+ zRqCb04_cf;4kpW;=FxN=(Y_gY)y86%9FjXwnM5m-osPN_LJ!(5g};###neS{N_cDQ zot~1vjtbv_1)aOzFaM>!296L?LUrtFf4!f0(dD7vKHiyg!v{EkFR*eWc*V3D&4Y8j z@F(0FxP#Av5&ECynS)lYWnaQ{Qj9qvum*7clj@YU{M|4f@7^STx45Efvr)}C<|U8X zx8Z>f2*{a`dFsN1UC9VEx@K$iwo5*V-RDEBvHpZ zCg^yxi%e8a&%R&@N*dyCHgN(ZZ+awilNwE=WGLPvr|grK!c`)RU*x5Qqgo%BcOICY z;|`^WW?9)BX5H+(u&LX;KU_Dpw16T>f|Oee3d?bsMridfe+w>;j+fkS=g5Lq_7ina6 z!v(*SNn-JT5|)6=*_n^xDZt?8I~Pu19Qij%W^LvXhl*ODS&mgfW-m5oqDc zYPv68iaPlci&^M0NoC8gCdT8}m3i;gTk{hhQA)DD-I@rUX({4=VR2>6l@|>i2anBG zC0>l=(*46TS2$f&g+SrTjieh^4Q{G<;EF(pILU%MR`yax`!$Te-TZ6#Sp~;8oVxOm z^wnh;;!-fBb&b|_Vl2gw{jb@4A%h@hs`1{|6)gS~h7=yB%##o`cSm=+-}ODo^JDRA?_&|l}Z)Kf?sD){nvAKXld3J;i^og9>dYz); z^zimrP;)Nu)YjP}u(30ryh-f*Ju7I*uuD_JkPy3)rBZA5g!&@iGr9D$QuoQScvsbF!4&h&Czes_2KM2g}9A z{g{Ps`0ie>1)NlUpDMF;lIbGV0+=~N>kdQC+#y&#)6aY@G;jYlOU_E@zFSnWYg5Lm3=#~h?H&RX#?1e{U$l-QT1Xn% zEFGovpQ9B;k&4XDYD$`^zV8-=PE8%dy+H6E_#n!RzSNwjlug$#k|;`pTr@_o=IwzI z`7f8ksPopel^gyoLE-il&*&U`eRXTIsAc3zzGNc-l16M zrn{ZNH^jsUQd`N={c*_f?)8=3bMGGK06C?x8>#=X2Mk8su2&EJ$=$4fi=8x{y@`C9t`vP@-cd-qF9E~S~!A5S7TLwY(FL&Qr9lOjr%hEm}8I5s1 z!Ez0kVdECk5ByS`0RQ91)5~9R;fLJ$e3V(${ilK}ccbL8S%(`$dlj#Do!+W$gNpZC zH}zm;pxNFKypB0kmQsjBa_jj!Y7|C%{x!tioh~-f>7bcM)K6d zmPsq8biciN=gy0k? z{&o}#vqiJYYI6puFhxvcRyD%KOlhl@6zOG-&G!-gR2g7!yp@i-2kju91?PP_$<_b9 z#84>0lx|ePmc4S6X(`z8=e`TZxm82*!2}E|;KACrEFsW~)f@8ZbV$X-` z#`H|*!XK>x(J!aOb9Zbp$qX8y*?&$<@Wv5LvOVn)2a^drC-0HPl};=`t~*!3y!oR$ zf-x$QY*E~l<=!wGZyXm8BY?N$5v{hjcmCE`RD@MhbCfnl2Q-3gtcH) z5$PJSo*eF)-FK|JLWE&GwL6>Luxam|#(nKm%-5aa0FIJ5Y^- z|I5U6wx&!69pUdR4;#CXjS=K`xdreK^o;EYaN^P{?X$N~X~NW7H2M_>juL;;Y8vqe zSB5SlfU`?E+Q(V-@n8&sLR@c#k5@vp;FF9s_f_CyKmf1D_il`0)8v@ozZzC*;TQCxR*8l?(ou3$(GIeMPS72wY4QVV z^mb)QRIWyo6k9vwA;bfz!CxU>!6@PZjr!;p%HN;{bOG6f7%*H|zbw05>}+Ge$gyPS zfp;a-y1;F<&rKi!?Gk3!v>>(`%Fr3e+J>U&R&-e2;zvtJ@0P;5QcCA|C zr3bhY90LO!J=VUvN1jtWz%b)XFYLl@R!zWw#&w{(ef3gooXuov+K>;5bcE%D<15<@ z(Fi+)sDc{v!1Pc~fXEBpoC`U0^IZ%T>y_3S{p`I-!W(PZ5G3(!4zQE{6G_IYCg0D# z>oEKIH#k*^!?S@yi2&#?P@fgP=Z!#R5w3uEY0;#<#|&twRyy|6Xw(AaCGk*^UYgx3 z%fAmKQ8}_9qYJml!=qMX7|KF`NjMUYtrGF z3fR{MJDhkN>2!4#lRVmoIYGQfWD+yAEnLdJWT7Dm=f|@={X%|Hwf4@fGJN&CzZ!bk zGO(Tv+07-nQGHpb-;w}8L8ifrNA=v=4V|01UMrYZ7>w_p=Ip`xF^L$6GT5?_1T0-MV!pekK=ncGbn469jSTjH$ z;1#h%5~E|pc4L)(Ad>6@2%eM5HSJfYpohN1D}b+;SM8SbLTj&@2X@$7MzCU58(4V@ zz5Zr-^3W0b2lkYyPn~!Wik1e7khNgM{BIoOv!ab0Rz>{JFRtivXW4)a`fIMA>0cIZ zh*nf|P|fIc*-v2jHJt}5%pP*FE$%Ejq%+H;j|20td@<8*c8JX{exAv?=biDiSYx8u z(As5)XH_v`WloHU2Ho4|!uOV=7L4*TI2$=~X)Lb?Xs--%X>`bgHz1nEJU@v$kfDt? zP01~D+ti$`3l&n}ZX%qL&FI3!O6Rm8+VRGF63> zlZE>%OAK}nX0qywV(nyZ4pzEHkmA5uoLAt(fFO_t=jxVQF-X5?8`})$K*2VT7(f>r z*fKKI*3eu37s~n1YyZG$Dad2|3%@{!D$q}K{8}SW8U53ma4Ekq48ETbbvJ~XwwH)f zSH{FtO%bX$hqBKs|h~~;#SNe}Zfl2lEDdFV_PO1K1vrkPc;6gs)?{ zCgPLzdn+U(R|3u6T6T`b!Wf#{iQuN~mtl^L_OQvZb+4@r_H({(U@*C-y5u6`1g4+k z1ftB+KXiP^L>g29sw!gVB~gk?u?WRc2Uz%Rur*RdR!}pM;lXL zOxIm6+BHS0#n&7BymST8i(o&j8e-xP{PpfIR z{}T#74;nOfAbgE&o=GeeU=co8KNx%_wUEudE<1=HL8z&->M0j7h(}M)<*LOuaZBV8 zKRw2;jA*<`rOd#(MGs9x6^Ty;X;s|p3JXuSC9@4@r92;ZBZZ2ZvNOK+1Mbb>i)y16 z^LA{e%Jz8f`}1VUy*hp*yX{%|JjAEFlSlktBS~YT`vI6oJQiT2#hBd5xW0dT$9w_dDhK}n6 z)x4mMgEh_G$!3x0W2pA7?yrJ13euzLW&R@+Iph+P=Dd@>OIak3%WOV#K1<}#Zb30s zX`7v1CAT(uE~{!-4j94m7rP!f%_s{WW}=>uw*J5yEB|!JqalOJ&YeRS4nVupwmyvuRFkw1&`SWehNtYJWjsq2q&f%XL2o^X9K;z8LY0zk>g-yx zxmWU58(4N($@JFB8%Ar~!0bQEG}>9t=S5Nt*lm(d%v;$iS4Pyk<*uuf2m$a|>-aKx zq}TF>+qZT1q_ZG?e649y+t3*pB&=?Fzfct7;wVfw{)1BBY(#tr4hQj&iO1cK`Dg!K zwf$B#<8{RH6&<+(tWS*1Vz%pgTt)_d@h#ZYImaLov0Vwa1A7DnelEtnKGlxO^y0Vz zOgAx;o*U@5SD|;Qawyg!!_`o2LN)nCrm5>ES(9Eke_61kz9S=TYNn~zJSLI zzQ_A-KuY7?Ai4sfJJb9OfQ&>RY4LP3*w+lnS{s%R@AQ4G^= z&h@e_r6cZx_G{mkqw^dsc2zkW};`(fhZv5dX(X(fQq>^6-;D<7Rt_i*V9&aopu5?c_3 z&o&2Hqmzk221S+tDeYY@!&#axd$V&5#{bg-zKhxR=#28S`+s{{(lwIgK@J?Fsu4^1 zAlY&k2hmnZ%Evz{ne&ii)A$F;WO7f7qKZqt))9DLj3a8?Y2`>4mJogK^3s&C@a+t} zh%hU{(gsWU!qTv=X}}udV*(;Ctjpip3>WjD^)Y7!rtxV(@$OVKEh;xs*~yRr7F9V_ zD$z+yWAeP=!I)XEdEfPo?Rv+iDu1P_fX+Kw{$H`?^?5=Y(>k(s!Wes>a`It}H%RNl zhAUX$wg3{?(m^f4AVb_koC7ulpO%)_FzZybIOm5bd>ic?feDbNU5?lxH~P$A=gq>g zs3eui*VI{O?3bg|t`>QstYRi^8V_a`?7rGwgrb~IP_GT+ipS3+mG~3RTgFA(*l2x7 zlpd#SMuk{H-9PfuE)ybfmB(tq%I+(t9X`T-TxvrUD#Km-8fT}NsAsLnU5R3gNBBZKpVOOFws=6g_9~1OPxQ+eMQCM}>H~N5b zUzUcoB_Z0S15)>$!uFSzXqTaR3E=MU9*~Rjr1mFCw@o5mVx(*USn(QMZbH|i>|d2w z4}R>B0d#79qd&abZ$3|f&xjSD%N3n4molV)#8D1~4A{H~#mF29QP=bx@RkCSHj-a~L%&e?#(H?NtfRpODfBL~2rCWXXh5 zgj{jH`{0fpm}ZDh*cWvjqlNoey}gfi7#Ku4gUl8cY7atk&^>>Tz}=IDo)3X#w6?jn z8Z|b1iPe|e7TSw1V}G7T+j#S^B5@KOaCqo z>E=}Yi8WFce0kUz6u|!p)k(apFPuw*H^x0HZWKg!JSV@6@d72p5NT^Fth$u20%# zZ2eanbPi<}tMyFIEhmxt@H){kdM8C|eOPt~{!(uE!%%N^+gaxZCL*9;Ui8cWhJ)Yh zm>Nd^dv%2W2?)aC3JHakfyDX)?YAQ&FSYnhmh_h=Jbfm?5v!QLu8?aI99&nf5_-si zAJoDbqye`AXF@cMu&M;*)PZu$ zK(7qDt{Y>|>eu#+*dh2)BR9P+B`gqk7r~cbk@;P+EL=$pSuOA{JKm4YBCfJc6rcC$ zfYDzvJ#l5e`$e3}D`5|leEx^iW!&(pQ`wfequ>rkmEGiHviU?hA|}AWK=P6+OJBOz zQx?fcFb@H;?(oKTm{s2LpYXpnynE8U40)w-Ty5}Okd4h43yx>b!(Scze=Q1}mFi~X z#XQC%@7yZpjr(!}Elg9>OWW;Ih1?Xhm+2Tm|2&b^%@V&Zvm-M#N;gVV6a(>wdfu|EoJc0lJH@P)lO;qUPm3O~ z7XBqJ&0JfjLBZ_d>O+Gm@MmCM={Cf!(6!@<_i+l=unZKuxnQ;_#IlyNpXro*bKIO& z4N1`Oww6t>`1(zB!fL|vON~PR%Fa!-|46->X`360jN$%Ur*gX9b&%)?Lqn#=K$+ds zbv~ahJ+rrJ4H9NI6PGH;EQ6ZGyv?LbUe4my5qSk}!X1Lwwaevwka95F94kk}ldA8~ zw-1DsVvc$q_@x!0C3{>F)7ti&2p?RG+#qy&7-a)EdFx*f4oPx0rUv>OenPY!+k% zwd*l=2X%+Q%jh%utHzj4zB_Tel>f2(`)m9A{r{s&Sm2H7bp&`hRaYdVB4r;3+pQHt zzD^J?Ksg}K2bo%2Cmg3!le{TRS(I`q2-P+J7+TZzf_0Tx1ITn;)TB@2Ye<+Pci1!6On`E01PC8Ke3wgidb43Wf^ zz?b=3J6VFJ0}@spmg@*b$({oz-Iy@QR6OA(K(O+@cTJHfZI0%gquRU{%$=D&OJ4Hl zVxySN`XFq%t49u5+D5?Z33`O4#X=mG`C84|A7xy|PDzBS;9yJ%qMS*ILx42mVGR;s zN0G~Mxc!G{AUxDoeI%IEy7SE?Q%H)je$jd@f4X-A<_G0xS{OgR*pdXRrN=}HVF5?U zLYiTNEu30rm5pI?p+_lq)U0o|SQSIrZm+JRiJ)bgSU8J>GUZFa=0i^A6Be{99YO*Z z<0X03S>f|G+uHqvw7J^9suOJiUBo zr0ySLscL+9`>!|F5}Ev$7yC6QIPB|aYi^FCMgHB<=cHlwj-+N{fvRAL6`hzXjcit2 zBMSvSitO51OsdDCO_|i;*@PRH`!ncETPxc~t*GL+_9=gr$+8|hO7-DBH+b#AyLhlS zVU~$JJ9v%1-lU*J>2%5mQ5t6l8c>}i==_^qg|jku>RmUjYFM|q;{^p%Rbm>?08}#h zbtk7&v+^wUh1KGAD0~2#-~?(honMu0!ry|V8p0p4(KH*fU35N8v-8VCPX45!luf#q zlO`d_gcD{6bRM@ApH)Qh|AD`c1-^evsDFLRFm#^?KPj`Uad$ty>({6!trX;QTbJAU zH}>98%Bc-EQAaLJv#7;V8BlW?y*i_$a7nnOdy68ZgrV+nCQ72Q&Is!adlJ!iEWyA6 z454!>l&VGX*R`$h3nS%+7#Rj P$*EwNEN$V}|0Lw)L=fC=T5XrJ$c+z<56c{#QH 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%0AB?PCDZy1I%4_W@aI$ou^ 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%0DFhD0NwDI{~OEgun*u|I3HHn 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 Wk0LKP515T!`yT{uZq;5^HJmVtqR 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 z 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ν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

3Mz+wLB?t+YAN>Ldur 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 From e60174fe3a81d9b9f34a2086903f4a53cad52e5e Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 24 Feb 2026 17:59:21 +0000 Subject: [PATCH 29/90] chore(version): Update package versions to 4.17.5 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d34105bf4f..757db5f0be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +### Bug Fixes + +- move crosshairs implementation to absolute camera instead of delta ([#2627](https://github.com/cornerstonejs/cornerstone3D/issues/2627)) ([1798953](https://github.com/cornerstonejs/cornerstone3D/commit/1798953dfb8921f3acf73e47976367da22088e63)) + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package root diff --git a/commit.txt b/commit.txt index ab8a970b4e..9d221b33bc 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -659a2bd0856aa4a11a4c0ddb165a43db1c589d57 \ No newline at end of file +1798953dfb8921f3acf73e47976367da22088e63 \ No newline at end of file diff --git a/lerna.json b/lerna.json index db7b7327a8..b317b1c85e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.17.4", + "version": "4.17.5", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 150ebe375a..58a1d0a2f4 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index c1f1b5b13d..dd422586e2 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.17.4", + "version": "4.17.5", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.4", - "@cornerstonejs/tools": "4.17.4" + "@cornerstonejs/core": "4.17.5", + "@cornerstonejs/tools": "4.17.5" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index edbcaed4d6..1426e9f949 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 0af55c99c8..ef314b72ca 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.17.4", + "version": "4.17.5", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.4", - "@cornerstonejs/tools": "4.17.4" + "@cornerstonejs/core": "4.17.5", + "@cornerstonejs/tools": "4.17.5" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 696dc0d2f8..ac603f30bf 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index f989ff34c8..b22d1a9455 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.17.4", + "version": "4.17.5", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index b584e1ead0..385a2a14ec 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index a6efbd49d8..6051ca7c4c 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.17.4", + "version": "4.17.5", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.4", + "@cornerstonejs/core": "4.17.5", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 31cc772b82..e07e53f185 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index cb82ef3a9f..bf7a8683eb 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.17.4", + "version": "4.17.5", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.4", - "@cornerstonejs/tools": "4.17.4", + "@cornerstonejs/core": "4.17.5", + "@cornerstonejs/tools": "4.17.5", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 774ea6eba6..e0af61c31f 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index c26dd293af..d6f4804ece 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.17.4", + "version": "4.17.5", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.4" + "@cornerstonejs/core": "4.17.5" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 126e6c4291..ca82542ded 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 768dba7390..6552267720 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.17.4", + "version": "4.17.5", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.4", - "@cornerstonejs/tools": "4.17.4", + "@cornerstonejs/core": "4.17.5", + "@cornerstonejs/tools": "4.17.5", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index a7a6e5b1b5..eacf717015 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) + +### Bug Fixes + +- move crosshairs implementation to absolute camera instead of delta ([#2627](https://github.com/cornerstonejs/cornerstone3D/issues/2627)) ([1798953](https://github.com/cornerstonejs/cornerstone3D/commit/1798953dfb8921f3acf73e47976367da22088e63)) + ## [4.17.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.3...v4.17.4) (2026-02-23) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 3ecb7855b2..ad433e3a9f 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.17.4", + "version": "4.17.5", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.4", + "@cornerstonejs/core": "4.17.5", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 1d4eec247e..54411fce62 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.4'; +export const version = '4.17.5'; diff --git a/version.json b/version.json index cbe4929008..fb708724ac 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.17.4", - "commit": "659a2bd0856aa4a11a4c0ddb165a43db1c589d57" + "version": "4.17.5", + "commit": "1798953dfb8921f3acf73e47976367da22088e63" } \ No newline at end of file diff --git a/version.txt b/version.txt index 5ef30ebbc3..4e206ee9f9 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.17.4 \ No newline at end of file +4.17.5 \ No newline at end of file From fe0a613d222b3e3a18ba990c16392c5c570eb27c Mon Sep 17 00:00:00 2001 From: TFRadicalImaging <115191433+TFRadicalImaging@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:10:25 -0300 Subject: [PATCH 30/90] feat(core): add ECGViewport for DICOM waveform rendering (#2621) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(core): add ECGViewport for DICOM waveform rendering Add a new ECG viewport type that renders 12-lead ECG traces from DICOM Waveform data using a canvas-based custom rendering pipeline (same pattern as VideoViewport and WSIViewport). - ECGViewport class with grid, trace, and label rendering - Pan (left-drag) and Zoom (right-drag) tool support - Per-channel trace visibility toggle - Supports InlineBinary, BulkDataURI, and retrieveBulkData data sources - Typed WaveformSequenceInput interface for the setEcg() API - Interactive example with 12-lead ECG demo data * Added tools * Add default ultrasound directional tool * feat(ecg): add ECG metadata provider, refactor viewport, and add tests Extract waveform parsing logic from ECGViewport into ECGHelpers in dicomImageLoader with proper metadata provider integration. Simplify the viewport to consume parsed metadata instead of raw DICOM JSON. Add unit tests for both ECGViewport and ECGHelpers. * fix: Measurements * fix(tools): restrict ECG Region calibration to physicalUnitsYDirection === -1 * fix(ecg): use correct viewportType key in karma test setup The ECG viewport karma tests were failing with 'viewport.setEcg is not a function' because createViewports() destructures viewportType (not type), causing the viewport to be created as a StackViewport by default. * fix(ecg): resolve TypeScript errors in ECGHelpers after WADORSMetaDataElement type tightening The main merge introduced stricter typing on WADORSMetaDataElement, causing build errors where Record was used for InlineBinary/BulkDataURI values and channel definition sequence items. * fix(probe): restore voxelManager value lookup for non-ECG/US modalities When adding ECG branch to ProbeTool, the default value assignment (voxelManager.getAtIJKPoint) was removed from the common path and only kept inside the US branch, leaving CT/MR/etc. without a value → undefined. --------- Co-authored-by: Bill Wallace --- packages/core/examples/ecg/index.ts | 201 +++++ .../core/src/RenderingEngine/ECGViewport.ts | 844 ++++++++++++++++++ .../helpers/viewportTypeToViewportClass.ts | 2 + packages/core/src/enums/MetadataModules.ts | 1 + packages/core/src/enums/ViewportType.ts | 4 + packages/core/src/index.ts | 2 + .../core/src/types/ECGViewportProperties.ts | 7 + packages/core/src/types/ECGViewportTypes.ts | 40 + packages/core/src/types/IECGViewport.ts | 3 + packages/core/src/types/IImageCalibration.ts | 2 +- packages/core/src/types/index.ts | 15 + packages/core/test/ecgViewport_test.js | 200 +++++ .../src/__tests__/ECGHelpers.spec.ts | 235 +++++ .../imageLoader/wadors/metaData/ECGHelpers.ts | 326 +++++++ .../wadors/metaData/metaDataProvider.ts | 63 +- .../tools/src/tools/annotation/ProbeTool.ts | 25 +- .../annotation/UltrasoundDirectionalTool.ts | 8 +- .../tools/src/utilities/getCalibratedUnits.ts | 41 +- utils/ExampleRunner/example-info.json | 4 + utils/demo/helpers/addManipulationBindings.ts | 2 + utils/demo/helpers/annotationTools.ts | 4 + 21 files changed, 2001 insertions(+), 28 deletions(-) create mode 100644 packages/core/examples/ecg/index.ts create mode 100644 packages/core/src/RenderingEngine/ECGViewport.ts create mode 100644 packages/core/src/types/ECGViewportProperties.ts create mode 100644 packages/core/src/types/ECGViewportTypes.ts create mode 100644 packages/core/src/types/IECGViewport.ts create mode 100644 packages/core/test/ecgViewport_test.js create mode 100644 packages/dicomImageLoader/src/__tests__/ECGHelpers.spec.ts create mode 100644 packages/dicomImageLoader/src/imageLoader/wadors/metaData/ECGHelpers.ts diff --git a/packages/core/examples/ecg/index.ts b/packages/core/examples/ecg/index.ts new file mode 100644 index 0000000000..e3b9f0df6f --- /dev/null +++ b/packages/core/examples/ecg/index.ts @@ -0,0 +1,201 @@ +import type { Types } from '@cornerstonejs/core'; +import { RenderingEngine, Enums } from '@cornerstonejs/core'; +import * as cornerstoneTools from '@cornerstonejs/tools'; +import { + initDemo, + setTitleAndDescription, + addCheckboxToToolbar, + addButtonToToolbar, + addDropdownToToolbar, + createImageIdsAndCacheMetaData, + getLocalUrl, + annotationTools, +} from '../../../../utils/demo/helpers'; + +// This is for debugging purposes +console.warn( + 'Click on index.ts to open source code for this example --------->' +); + +const { ViewportType } = Enums; +const { ToolGroupManager } = cornerstoneTools; + +// ======== Constants ======= // +const renderingEngineId = 'myRenderingEngine'; +const viewportId = 'ecgViewport'; +const toolGroupId = 'ecgToolGroup'; + +const StudyInstanceUID = '1.3.76.13.65829.2.20130125082826.1072139.2'; +const SeriesInstanceUID = '1.3.6.1.4.1.20029.40.20130125105919.5407.1'; +const wadoRsRoot = + getLocalUrl() || 'https://d14fa38qiwhyfd.cloudfront.net/dicomweb'; + +// ======== Set up page ======== // +setTitleAndDescription( + 'ECG Viewport', + 'Displays a 12-lead ECG from DICOM Waveform data. Left-click to use annotation tools (select from dropdown). Right-drag to pan, scroll to zoom. Use checkboxes to toggle traces.' +); + +const content = document.getElementById('content'); +const element = document.createElement('div'); +element.id = 'cornerstone-element'; +// Initial size — will be resized to match ECG content dimensions +element.style.width = '900px'; +element.style.height = '600px'; + +content.appendChild(element); + +// Prevent browser context menu so right-drag can be used for pan +element.oncontextmenu = (e) => e.preventDefault(); + +/** + * Runs the demo + */ +async function run() { + await initDemo(); + + // Use the standard pipeline to fetch and cache DICOM metadata + const imageIds = await createImageIdsAndCacheMetaData({ + StudyInstanceUID, + SeriesInstanceUID, + wadoRsRoot, + }); + + // ECG series have a single instance — use the first imageId + const ecgImageId = imageIds[0]; + + // ======== Set up tools ======== // + const { PanTool, ZoomTool } = cornerstoneTools; + const { MouseBindings } = cornerstoneTools.Enums; + + cornerstoneTools.addTool(PanTool); + cornerstoneTools.addTool(ZoomTool); + // LengthTool has no `tool` in annotationTools config (it's registered + // by addManipulationBindings in other examples), so register it explicitly. + cornerstoneTools.addTool(cornerstoneTools.LengthTool); + for (const [, config] of annotationTools) { + if (config.tool) { + cornerstoneTools.addTool(config.tool); + } + } + + const toolGroup = ToolGroupManager.createToolGroup(toolGroupId); + toolGroup.addTool(PanTool.toolName); + toolGroup.addTool(ZoomTool.toolName, { + minZoomScale: 0.001, + maxZoomScale: 4000, + }); + + const { UltrasoundDirectionalTool } = cornerstoneTools; + for (const [toolName, config] of annotationTools) { + const toolConfig = + toolName === UltrasoundDirectionalTool.toolName + ? { ...config.configuration, displayBothAxesDistances: true } + : config.configuration; + if (config.baseTool) { + if (!toolGroup.hasTool(config.baseTool)) { + toolGroup.addTool( + config.baseTool, + annotationTools.get(config.baseTool)?.configuration + ); + } + toolGroup.addToolInstance(toolName, config.baseTool, toolConfig); + } else if (!toolGroup.hasTool(toolName)) { + toolGroup.addTool(toolName, toolConfig); + } + if (config.passive) { + toolGroup.setToolPassive(toolName); + } + } + + // Pan: right-drag + toolGroup.setToolActive(PanTool.toolName, { + bindings: [{ mouseButton: MouseBindings.Secondary }], + }); + // Zoom: scroll wheel (two-finger scroll on trackpad) + toolGroup.setToolActive(ZoomTool.toolName, { + bindings: [{ mouseButton: MouseBindings.Wheel }], + }); + + // ======== Create rendering engine and ECG viewport ======== // + const renderingEngine = new RenderingEngine(renderingEngineId); + + const viewportInput = { + viewportId, + type: ViewportType.ECG, + element, + defaultOptions: { + background: [0, 0, 0] as Types.Point3, + }, + }; + + renderingEngine.enableElement(viewportInput); + + // Bind tool group to this viewport + toolGroup.addViewport(viewportId, renderingEngineId); + + const viewport = renderingEngine.getViewport( + viewportId + ) as Types.IECGViewport; + + // Load ECG data into the viewport (calibration is resolved via metadata provider in ECGViewport) + await viewport.setEcg(ecgImageId); + + // Resize element to match ECG content dimensions + const { width: ecgWidth, height: ecgHeight } = + viewport.getContentDimensions(); + element.style.width = `${ecgWidth}px`; + element.style.height = `${ecgHeight}px`; + renderingEngine.resize(); + + // ======== UI Controls ======== // + + // Annotation tool dropdown — activates on left-click + let activeAnnotationTool: string | null = null; + + function activateAnnotationTool(toolName: string) { + const tg = ToolGroupManager.getToolGroup(toolGroupId); + if (activeAnnotationTool) { + tg.setToolPassive(activeAnnotationTool); + } + tg.setToolActive(toolName, { + bindings: [{ mouseButton: MouseBindings.Primary }], + }); + activeAnnotationTool = toolName; + } + + addDropdownToToolbar({ + options: { map: annotationTools }, + onSelectedValueChange: (newToolName) => { + activateAnnotationTool(newToolName as string); + }, + }); + + // Activate the first annotation tool on load + const firstToolName = annotationTools.keys().next().value; + if (firstToolName) { + activateAnnotationTool(firstToolName); + } + + // Reset camera button + addButtonToToolbar({ + title: 'Reset View', + onClick: () => { + viewport.resetCamera(); + }, + }); + + // Trace toggle checkboxes + const channels = viewport.getVisibleChannels(); + channels.forEach((channel, index) => { + addCheckboxToToolbar({ + title: channel.name, + checked: channel.visible, + onChange: (checked: boolean) => { + viewport.setChannelVisibility(index, checked); + }, + }); + }); +} + +run(); diff --git a/packages/core/src/RenderingEngine/ECGViewport.ts b/packages/core/src/RenderingEngine/ECGViewport.ts new file mode 100644 index 0000000000..f0317e5125 --- /dev/null +++ b/packages/core/src/RenderingEngine/ECGViewport.ts @@ -0,0 +1,844 @@ +import type { mat4 } from 'gl-matrix'; +import { Events as EVENTS, MetadataModules } from '../enums'; +import type { + Point3, + Point2, + ICamera, + InternalECGCamera, + ECGViewportInput, + ECGChannel, + ECGWaveformData, + ECGViewportProperties, + ViewReferenceSpecifier, +} from '../types'; +import { Transform } from './helpers/cpuFallback/rendering/transform'; +import triggerEvent from '../utilities/triggerEvent'; +import Viewport from './Viewport'; +import { getOrCreateCanvas } from './helpers'; +import * as metaData from '../metaData'; + +// Rendering constants ported from ecg-dicom reference +const SECONDS_WIDTH = 150; // pixels per second of ECG data +const CHANNEL_SPACING = 5; // vertical spacing between channels in world units +/** Index-space size for amplitude axis so tools (e.g. Probe) use indexWithinDimensions; Int16 range. */ +const ECG_AMPLITUDE_INDEX_SIZE = 65536; + +// Colors +const COLOR_GRID_MAJOR = '#7f0000'; // dark red +const COLOR_GRID_MINOR = '#3f0000'; // darker red +const COLOR_BASELINE = '#7F4C00'; // brown +const COLOR_TRACE = '#ffffff'; // white +const COLOR_LABEL = '#ffff00'; // yellow +const COLOR_BACKGROUND = '#000000'; // black + +/** + * Computes min and max values for an Int16Array. + */ +function computeMinMax(data: Int16Array): { min: number; max: number } { + let min = 0; + let max = 0; + for (let i = 0; i < data.length; i++) { + if (data[i] < min) { + min = data[i]; + } + if (data[i] > max) { + max = data[i]; + } + } + return { min, max }; +} + +/** + * Pre-computed layout information for a single visible channel. + */ +interface ChannelLayout { + channel: ECGChannel; + itemHeight: number; + yOffset: number; + baseline: number; +} + +/** + * ECGViewport renders DICOM ECG waveform data on an HTML canvas. + * Based on the VideoViewport custom rendering pipeline pattern. + */ +class ECGViewport extends Viewport { + readonly uid: string; + readonly renderingEngineId: string; + readonly canvasContext: CanvasRenderingContext2D; + + private imageId: string | null = null; + private channels: ECGChannel[] = []; + private waveformData: ECGWaveformData | null = null; + private ecgWidth = 0; + private ecgHeight = 0; + private channelScale = 0; // world units per data unit + + private ecgCamera: InternalECGCamera = { + panWorld: [0, 0], + parallelScale: 1, + }; + + constructor(props: ECGViewportInput) { + super({ + ...props, + canvas: props.canvas || getOrCreateCanvas(props.element), + }); + this.canvasContext = this.canvas.getContext('2d'); + this.renderingEngineId = props.renderingEngineId; + + this.element.setAttribute('data-viewport-uid', this.id); + this.element.setAttribute( + 'data-rendering-engine-uid', + this.renderingEngineId + ); + + this.addEventListeners(); + this.resize(); + } + + public static get useCustomRenderingPipeline() { + return true; + } + + private addEventListeners() { + this.canvas.addEventListener( + EVENTS.ELEMENT_DISABLED, + this.elementDisabledHandler + ); + } + + private removeEventListeners() { + this.canvas.removeEventListener( + EVENTS.ELEMENT_DISABLED, + this.elementDisabledHandler + ); + } + + private elementDisabledHandler() { + this.removeEventListeners(); + } + + /** + * Loads ECG data from a DICOM imageId by retrieving metadata via the + * ecgModule metadata provider. + * + * @param imageId - A DICOM image ID whose metadata includes waveform data + */ + public async setEcg(imageId: string): Promise { + this.imageId = imageId; + const ecgModule = metaData.get(MetadataModules.ECG, imageId); + + if (!ecgModule?.waveformData?.retrieveBulkData) { + throw new Error( + `[ECGViewport] No ECG waveform data for imageId: ${imageId}` + ); + } + + const { + numberOfWaveformChannels: numberOfChannels, + numberOfWaveformSamples: numberOfSamples, + samplingFrequency, + waveformBitsAllocated: bitsAllocated = 16, + waveformSampleInterpretation: sampleInterpretation = 'SS', + multiplexGroupLabel, + channelDefinitionSequence: channelDefinitions = [], + } = ecgModule; + + const channelArrays: Int16Array[] = + await ecgModule.waveformData.retrieveBulkData(); + + // Build channel descriptors with cached min/max + this.channels = []; + for (let i = 0; i < numberOfChannels; i++) { + const channelDef = channelDefinitions[i] || {}; + const name = + channelDef.channelSourceSequence?.codeMeaning || + channelDef.ChannelSourceSequence?.CodeMeaning || + `Channel ${i + 1}`; + const data = channelArrays[i] || new Int16Array(0); + const { min, max } = computeMinMax(data); + this.channels.push({ name, data, visible: true, min, max }); + } + + this.waveformData = { + channels: this.channels, + numberOfChannels, + numberOfSamples, + samplingFrequency, + bitsAllocated, + sampleInterpretation, + multiplexGroupLabel, + }; + + // Set calibration from metadata (e.g. sequenceOfEcgRegions from wadors) for measurement tools + this.calibration = metaData.get(MetadataModules.CALIBRATION, imageId); + + // Calculate ECG width from sample count and frequency + this.ecgWidth = Math.ceil( + (numberOfSamples * SECONDS_WIDTH) / samplingFrequency + ); + + this.computeChannelScale(); + this.recalculateHeight(); + this.refreshRenderValues(); + this.renderFrame(); + } + + /** + * Toggle visibility of a specific channel. + */ + public setChannelVisibility(index: number, visible: boolean): void { + if (index >= 0 && index < this.channels.length) { + this.channels[index].visible = visible; + this.computeChannelScale(); + this.recalculateHeight(); + this.refreshRenderValues(); + this.renderFrame(); + } + } + + /** + * Returns the current channel visibility state. + */ + public getVisibleChannels(): { name: string; visible: boolean }[] { + return this.channels.map((ch) => ({ + name: ch.name, + visible: ch.visible, + })); + } + + /** + * Returns the parsed waveform data. + */ + public getWaveformData(): ECGWaveformData | null { + return this.waveformData; + } + + /** + * Returns the computed ECG content dimensions in world pixels. + */ + public getContentDimensions(): { width: number; height: number } { + return { width: this.ecgWidth, height: this.ecgHeight }; + } + + /** + * Computes a per-channel amplitude scale so the total stacked height + * has a reasonable aspect ratio relative to the ECG width. + * Target: total height = ecgWidth * (canvas height / canvas width), + * so the initial fit-to-canvas fills the viewport. + */ + private computeChannelScale(): void { + const visibleChannels = this.channels.filter( + (c) => c.visible && c.data.length > 0 + ); + if (visibleChannels.length === 0 || this.ecgWidth === 0) { + this.channelScale = 0; + return; + } + + // Find the maximum amplitude range across all visible channels + let maxRange = 1; + for (const channel of visibleChannels) { + const range = channel.max - channel.min; + maxRange = Math.max(maxRange, range); + } + + // Target: total ECG height matches canvas aspect ratio relative to width + const canvasAspect = + this.canvas.offsetHeight && this.canvas.offsetWidth + ? this.canvas.offsetHeight / this.canvas.offsetWidth + : 2 / 3; + const targetTotalHeight = this.ecgWidth * canvasAspect; + const totalSpacing = CHANNEL_SPACING * visibleChannels.length; + const heightPerChannel = + (targetTotalHeight - totalSpacing) / visibleChannels.length; + + // Scale: world pixels per data unit, with 1.25x padding for amplitude headroom + this.channelScale = heightPerChannel / (maxRange * 1.25); + } + + private recalculateHeight(): void { + const scale = this.channelScale; + let totalHeight = 0; + for (const channel of this.channels) { + if (!channel.visible || channel.data.length === 0) { + continue; + } + const itemHeight = (channel.max - channel.min) * scale * 1.25; + totalHeight += itemHeight + CHANNEL_SPACING; + } + this.ecgHeight = totalHeight; + } + + /** + * Computes the vertical layout for each visible channel. + * Returns pre-calculated positions used by drawTraces and drawLabels. + */ + private computeChannelLayouts(): ChannelLayout[] { + const scale = this.channelScale; + const layouts: ChannelLayout[] = []; + let yOffset = 0; + + for (const channel of this.channels) { + if (!channel.visible || channel.data.length === 0) { + continue; + } + const itemHeight = (channel.max - channel.min) * scale * 1.25; + yOffset += itemHeight + CHANNEL_SPACING; + const baseline = yOffset + channel.min * scale; + layouts.push({ channel, itemHeight, yOffset, baseline }); + } + + return layouts; + } + + public setProperties(props: ECGViewportProperties): void { + if (props.visibleChannels !== undefined) { + for (let i = 0; i < this.channels.length; i++) { + this.channels[i].visible = props.visibleChannels.includes(i); + } + this.computeChannelScale(); + this.recalculateHeight(); + this.refreshRenderValues(); + this.renderFrame(); + } + } + + public getProperties = (): ECGViewportProperties => { + return { + visibleChannels: this.channels + .map((ch, i) => (ch.visible ? i : -1)) + .filter((i) => i >= 0), + }; + }; + + public resetProperties(): void { + for (const channel of this.channels) { + channel.visible = true; + } + this.computeChannelScale(); + this.recalculateHeight(); + this.refreshRenderValues(); + this.renderFrame(); + } + + public setCamera(camera: ICamera): void { + const { parallelScale, focalPoint } = camera; + + if (parallelScale) { + this.ecgCamera.parallelScale = + this.element.clientHeight / 2 / parallelScale; + } + + if (focalPoint !== undefined) { + const focalPointCanvas = this.worldToCanvas(focalPoint); + const canvasCenter: Point2 = [ + this.element.clientWidth / 2, + this.element.clientHeight / 2, + ]; + + const panWorldDelta: Point2 = [ + (focalPointCanvas[0] - canvasCenter[0]) / this.ecgCamera.parallelScale, + (focalPointCanvas[1] - canvasCenter[1]) / this.ecgCamera.parallelScale, + ]; + + this.ecgCamera.panWorld = [ + this.ecgCamera.panWorld[0] - panWorldDelta[0], + this.ecgCamera.panWorld[1] - panWorldDelta[1], + ]; + } + + this.canvasContext.fillStyle = COLOR_BACKGROUND; + this.canvasContext.fillRect(0, 0, this.canvas.width, this.canvas.height); + + this.renderFrame(); + } + + public getCamera(): ICamera { + const { parallelScale } = this.ecgCamera; + + const canvasCenter: Point2 = [ + this.element.clientWidth / 2, + this.element.clientHeight / 2, + ]; + + const canvasCenterWorld = this.canvasToWorld(canvasCenter); + + return { + parallelProjection: true, + focalPoint: canvasCenterWorld, + position: [0, 0, 0], + viewUp: [0, -1, 0], + parallelScale: this.element.clientHeight / 2 / parallelScale, + viewPlaneNormal: [0, 0, 1], + }; + } + + public resetCamera = (): boolean => { + this.refreshRenderValues(); + this.canvasContext.fillRect(0, 0, this.canvas.width, this.canvas.height); + this.renderFrame(); + return true; + }; + + public getFrameOfReferenceUID = (): string => { + return `ecg-viewport-${this.id}`; + }; + + public resize = (): void => { + const canvas = this.canvas; + const { clientWidth, clientHeight } = canvas; + + if (canvas.width !== clientWidth || canvas.height !== clientHeight) { + canvas.width = clientWidth; + canvas.height = clientHeight; + } + + if (this.waveformData) { + this.computeChannelScale(); + this.recalculateHeight(); + } + this.refreshRenderValues(); + this.renderFrame(); + }; + + public canvasToWorld = ( + canvasPos: Point2, + destPos: Point3 = [0, 0, 0] + ): Point3 => { + if (!this.waveformData) { + destPos[0] = 0; + destPos[1] = 0; + destPos[2] = 0; + return destPos; + } + + const scale = this.getWorldToCanvasRatio(); + const pan: Point2 = this.ecgCamera.panWorld; + const layouts = this.computeChannelLayouts(); + + // Convert canvas to world coordinates + const subCanvasPos: Point2 = [ + canvasPos[0] / scale - pan[0], + canvasPos[1] / scale - pan[1], + ]; + + // Determine which channel the y position falls into + let z = 0; + for (let i = 0; i < layouts.length; i++) { + const layout = layouts[i]; + if (subCanvasPos[1] <= layout.yOffset) { + z = i; + break; + } + if (i === layouts.length - 1) { + z = i; + } + } + + // Compute x (sample index) + const x = Math.max( + 0, + Math.min( + this.waveformData.numberOfSamples - 1, + (subCanvasPos[0] * this.waveformData.numberOfSamples) / this.ecgWidth + ) + ); + + // Compute y (amplitude) + const layout = layouts[z]; + const y = (layout.baseline - subCanvasPos[1]) / this.channelScale; + + destPos[0] = x; + destPos[1] = y; + destPos[2] = z; + return destPos; + }; + + public worldToCanvas = (worldPos: Point3): Point2 => { + if (!this.waveformData) { + return [0, 0]; + } + + const scale = this.getWorldToCanvasRatio(); + const pan: Point2 = this.ecgCamera.panWorld; + const layouts = this.computeChannelLayouts(); + const z = Math.round(worldPos[2]); + + if (z < 0 || z >= layouts.length) { + return [0, 0]; + } + + const layout = layouts[z]; + const canvasX = + (worldPos[0] / this.waveformData.numberOfSamples) * + this.ecgWidth * + scale + + pan[0] * scale; + const canvasY = + (layout.baseline - worldPos[1] * this.channelScale) * scale + + pan[1] * scale; + + return [canvasX, canvasY]; + }; + + public getPan(): Point2 { + const panWorld = this.ecgCamera.panWorld; + return [panWorld[0], panWorld[1]]; + } + + public getRotation = () => 0; + + public getNumberOfSlices = (): number => { + return 1; + }; + + public getCurrentImageIdIndex = (): number => { + return 0; + }; + + public getCurrentImageId = (): string | undefined => { + return this.imageId; + }; + + public getViewReferenceId(_specifier?: ViewReferenceSpecifier): string { + return `imageId:${this.imageId}`; + } + + public hasImageURI(imageURI: string): boolean { + return this.imageId?.includes(imageURI) ?? false; + } + + /** + * All annotations created on this ECG viewport are always viewable. + * The base implementation filters by plane distance, but ECG uses the + * z coordinate for channel index rather than spatial position, so the + * plane check incorrectly rejects annotations on non-zero channels. + */ + public isReferenceViewable(viewRef: { + FrameOfReferenceUID?: string; + }): boolean { + if ( + viewRef.FrameOfReferenceUID && + viewRef.FrameOfReferenceUID !== this.getFrameOfReferenceUID() + ) { + return false; + } + return true; + } + + public getSliceIndex = (): number => { + return 0; + }; + + public getImageIds = (): string[] => { + return this.imageId ? [this.imageId] : []; + }; + + public scroll = (): void => { + // No-op for ECG viewport - not a stack of images + }; + + public customRenderViewportToCanvas = () => { + this.renderFrame(); + }; + + public updateCameraClippingPlanesAndRange() { + // No-op for ECG + } + + private refreshRenderValues() { + if (!this.ecgWidth || !this.ecgHeight) { + return; + } + + let worldToCanvasRatio = this.canvas.offsetWidth / this.ecgWidth; + if (this.ecgHeight * worldToCanvasRatio > this.canvas.offsetHeight) { + worldToCanvasRatio = this.canvas.offsetHeight / this.ecgHeight; + } + + const drawWidth = Math.floor(this.ecgWidth * worldToCanvasRatio); + const drawHeight = Math.floor(this.ecgHeight * worldToCanvasRatio); + + const xOffsetCanvas = (this.canvas.offsetWidth - drawWidth) / 2; + const yOffsetCanvas = (this.canvas.offsetHeight - drawHeight) / 2; + + const xOffsetWorld = xOffsetCanvas / worldToCanvasRatio; + const yOffsetWorld = yOffsetCanvas / worldToCanvasRatio; + + this.ecgCamera.panWorld = [xOffsetWorld, yOffsetWorld]; + this.ecgCamera.parallelScale = worldToCanvasRatio; + } + + private getWorldToCanvasRatio() { + return this.ecgCamera.parallelScale; + } + + protected getTransform() { + const panWorld: Point2 = this.ecgCamera.panWorld; + const dpr = window.devicePixelRatio || 1; + const worldToCanvasRatio: number = this.getWorldToCanvasRatio(); + const canvasToWorldRatio: number = 1.0 / worldToCanvasRatio; + const halfCanvas = [ + this.canvas.offsetWidth / 2, + this.canvas.offsetHeight / 2, + ]; + const halfCanvasWorldCoordinates = [ + halfCanvas[0] * canvasToWorldRatio, + halfCanvas[1] * canvasToWorldRatio, + ]; + const transform = new Transform(); + + transform.scale(dpr, dpr); + transform.translate(halfCanvas[0], halfCanvas[1]); + transform.scale(worldToCanvasRatio, worldToCanvasRatio); + transform.translate(panWorld[0], panWorld[1]); + transform.translate( + -halfCanvasWorldCoordinates[0], + -halfCanvasWorldCoordinates[1] + ); + return transform; + } + + /** + * Renders the full ECG frame: background, grid, traces, and labels. + */ + private renderFrame = () => { + if (!this.waveformData) { + return; + } + + const dpr = window.devicePixelRatio || 1; + const transform = this.getTransform(); + const m: number[] = transform.getMatrix(); + const ctx = this.canvasContext; + + ctx.resetTransform(); + ctx.fillStyle = COLOR_BACKGROUND; + ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); + + // Apply the world-to-canvas transformation + ctx.setTransform( + m[0] / dpr, + m[1] / dpr, + m[2] / dpr, + m[3] / dpr, + m[4] / dpr, + m[5] / dpr + ); + + const layouts = this.computeChannelLayouts(); + this.drawGrid(ctx); + this.drawTraces(ctx, layouts); + this.drawLabels(ctx, layouts); + + ctx.resetTransform(); + + triggerEvent(this.element, EVENTS.IMAGE_RENDERED, { + element: this.element, + viewportId: this.id, + viewport: this, + renderingEngineId: this.renderingEngineId, + }); + }; + + /** + * Draws the ECG paper grid. + */ + private drawGrid(ctx: CanvasRenderingContext2D): void { + const scale = this.channelScale; + const pxWidth = this.ecgWidth; + const pxHeight = this.ecgHeight; + + if (scale <= 0) { + return; + } + + // Adaptive horizontal grid: standard ECG minor = 100 uV, but double + // the unit until lines are at least 8 world-pixels apart. + const MIN_LINE_SPACING = 8; + let hGridUnit = 100; // data units per minor horizontal line + while (hGridUnit * scale < MIN_LINE_SPACING) { + hGridUnit *= 2; + } + const minorH = hGridUnit * scale; + const majorH = minorH * 5; + + // Vertical grid: time-based, minor = 0.04s, major = 0.2s + const minorV = SECONDS_WIDTH / 25; + const majorV = SECONDS_WIDTH / 5; + + // Minor grid lines + ctx.strokeStyle = COLOR_GRID_MINOR; + ctx.lineWidth = 0.5; + ctx.beginPath(); + + // Horizontal minor lines (skip every 5th — those are major) + const hLines = Math.floor(pxHeight / minorH); + for (let h = 1; h <= hLines; h++) { + if (h % 5 !== 0) { + const y = h * minorH; + ctx.moveTo(0, y); + ctx.lineTo(pxWidth, y); + } + } + + // Vertical minor lines (skip every 5th — those are major) + const vLines = Math.floor(pxWidth / minorV); + for (let v = 1; v <= vLines; v++) { + if (v % 5 !== 0) { + const x = v * minorV; + ctx.moveTo(x, 0); + ctx.lineTo(x, pxHeight); + } + } + ctx.stroke(); + + // Major grid lines + ctx.strokeStyle = COLOR_GRID_MAJOR; + ctx.lineWidth = 1; + ctx.beginPath(); + + // Horizontal major lines + const hMajorLines = Math.floor(pxHeight / majorH); + for (let h = 1; h <= hMajorLines; h++) { + const y = h * majorH; + ctx.moveTo(0, y); + ctx.lineTo(pxWidth, y); + } + + // Vertical major lines + const vMajorLines = Math.floor(pxWidth / majorV); + for (let v = 1; v <= vMajorLines; v++) { + const x = v * majorV; + ctx.moveTo(x, 0); + ctx.lineTo(x, pxHeight); + } + ctx.stroke(); + } + + /** + * Draws ECG trace polylines for each visible channel. + */ + private drawTraces( + ctx: CanvasRenderingContext2D, + layouts: ChannelLayout[] + ): void { + const scale = this.channelScale; + const pxWidth = this.ecgWidth; + + for (const { channel, baseline } of layouts) { + // Draw baseline reference line + ctx.strokeStyle = COLOR_BASELINE; + ctx.lineWidth = 2; + ctx.beginPath(); + ctx.moveTo(0, baseline); + ctx.lineTo(pxWidth, baseline); + ctx.stroke(); + + // Draw trace + ctx.strokeStyle = COLOR_TRACE; + ctx.lineWidth = 1; + ctx.beginPath(); + for (let i = 0; i < channel.data.length; i++) { + const x = (i * pxWidth) / channel.data.length; + const y = baseline - channel.data[i] * scale; + if (i === 0) { + ctx.moveTo(x, y); + } else { + ctx.lineTo(x, y); + } + } + ctx.stroke(); + } + } + + /** + * Draws channel name labels. + */ + private drawLabels( + ctx: CanvasRenderingContext2D, + layouts: ChannelLayout[] + ): void { + // Font size in world coordinates that appears as ~14 screen pixels + const worldToCanvas = this.getWorldToCanvasRatio(); + const fontSize = 14 / worldToCanvas; + + for (const { channel, itemHeight, yOffset } of layouts) { + // Label position: top of this channel's area + const labelY = yOffset - itemHeight + fontSize; + + ctx.font = `${fontSize}px monospace`; + // Background rect for readability + const textWidth = ctx.measureText(channel.name).width; + ctx.fillStyle = COLOR_BACKGROUND; + ctx.fillRect(5, labelY - fontSize, textWidth + 4, fontSize + 4); + // Label text + ctx.fillStyle = COLOR_LABEL; + ctx.fillText(channel.name, 5, labelY); + } + } + + /** + * Returns image data for tool compatibility (e.g. ZoomTool, ProbeTool). + * ECG world coordinates: x = sample index, y = amplitude (raw), z = channel number. + * Amplitude is mapped to index [0, ECG_AMPLITUDE_INDEX_SIZE) so indexWithinDimensions works; + * drawing across channels remains out of bounds and gets clipped. + */ + public getImageData() { + if (!this.waveformData) { + return null; + } + + const nSamples = this.waveformData.numberOfSamples; + const nChannels = this.waveformData.numberOfChannels; + const dimensions = [nSamples, ECG_AMPLITUDE_INDEX_SIZE, nChannels]; + const spacing = [1, 1, 1]; + const origin = [0, 0, 0]; + const direction = [1, 0, 0, 0, 1, 0, 0, 0, 1]; + const amplitudeOffset = ECG_AMPLITUDE_INDEX_SIZE / 2; + + const imageData = { + getDirection: () => direction, + getDimensions: () => dimensions, + getRange: () => [0, 1] as Point2, + getSpacing: () => spacing, + worldToIndex: (point: Point3) => { + return [point[0], point[1] + amplitudeOffset, point[2]] as Point3; + }, + indexToWorld: (point: Point3) => { + return [point[0], point[1] - amplitudeOffset, point[2]] as Point3; + }, + }; + + return { + dimensions, + spacing, + origin, + direction, + imageData, + hasPixelSpacing: false, + calibration: this.calibration, + preScale: { scaled: false }, + metadata: { Modality: 'ECG' }, + }; + } + + public getSliceViewInfo(): { + width: number; + height: number; + sliceIndex: number; + slicePlane: number; + sliceToIndexMatrix: mat4; + indexToSliceMatrix: mat4; + } { + throw new Error('Method not implemented for ECG viewport.'); + } + + getMiddleSliceData = () => { + throw new Error('Method not implemented for ECG viewport.'); + }; +} + +export default ECGViewport; diff --git a/packages/core/src/RenderingEngine/helpers/viewportTypeToViewportClass.ts b/packages/core/src/RenderingEngine/helpers/viewportTypeToViewportClass.ts index e37f79e009..3b33e64ef4 100644 --- a/packages/core/src/RenderingEngine/helpers/viewportTypeToViewportClass.ts +++ b/packages/core/src/RenderingEngine/helpers/viewportTypeToViewportClass.ts @@ -5,6 +5,7 @@ import ViewportType from '../../enums/ViewportType'; import VolumeViewport3D from '../VolumeViewport3D'; import VideoViewport from '../VideoViewport'; import WSIViewport from '../WSIViewport'; +import ECGViewport from '../ECGViewport'; import type { ViewportInput, IViewport } from '../../types/IViewport'; interface ViewportConstructor { @@ -20,6 +21,7 @@ const viewportTypeToViewportClass: { [ViewportType.VOLUME_3D]: VolumeViewport3D, [ViewportType.VIDEO]: VideoViewport, [ViewportType.WHOLE_SLIDE]: WSIViewport, + [ViewportType.ECG]: ECGViewport, }; export default viewportTypeToViewportClass; diff --git a/packages/core/src/enums/MetadataModules.ts b/packages/core/src/enums/MetadataModules.ts index 24c655065a..f3930cc78b 100644 --- a/packages/core/src/enums/MetadataModules.ts +++ b/packages/core/src/enums/MetadataModules.ts @@ -26,6 +26,7 @@ enum MetadataModules { PET_SERIES = 'petSeriesModule', SOP_COMMON = 'sopCommonModule', ULTRASOUND_ENHANCED_REGION = 'ultrasoundEnhancedRegionModule', + ECG = 'ecgModule', VOI_LUT = 'voiLutModule', /** * The frame module is used to get information on the number of frames diff --git a/packages/core/src/enums/ViewportType.ts b/packages/core/src/enums/ViewportType.ts index 1bc4c3f8f7..479ec06cfd 100644 --- a/packages/core/src/enums/ViewportType.ts +++ b/packages/core/src/enums/ViewportType.ts @@ -21,6 +21,10 @@ enum ViewportType { * Whole slide imaging viewport */ WHOLE_SLIDE = 'wholeSlide', + /** + * ECG waveform viewport for displaying DICOM ECG traces + */ + ECG = 'ecg', } export default ViewportType; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 33a5d6f039..a841d84046 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -17,6 +17,7 @@ import BaseVolumeViewport from './RenderingEngine/BaseVolumeViewport'; import StackViewport from './RenderingEngine/StackViewport'; import VideoViewport from './RenderingEngine/VideoViewport'; import WSIViewport from './RenderingEngine/WSIViewport'; +import ECGViewport from './RenderingEngine/ECGViewport'; import Viewport from './RenderingEngine/Viewport'; import eventTarget from './eventTarget'; import { version } from './version'; @@ -126,6 +127,7 @@ export { StackViewport, VideoViewport, WSIViewport, + ECGViewport, RenderingEngine, BaseRenderingEngine, TiledRenderingEngine, diff --git a/packages/core/src/types/ECGViewportProperties.ts b/packages/core/src/types/ECGViewportProperties.ts new file mode 100644 index 0000000000..e07aac95a1 --- /dev/null +++ b/packages/core/src/types/ECGViewportProperties.ts @@ -0,0 +1,7 @@ +import type { ViewportProperties } from './ViewportProperties'; + +type ECGViewportProperties = ViewportProperties & { + visibleChannels?: number[]; +}; + +export type { ECGViewportProperties as default }; diff --git a/packages/core/src/types/ECGViewportTypes.ts b/packages/core/src/types/ECGViewportTypes.ts new file mode 100644 index 0000000000..29b2b82daa --- /dev/null +++ b/packages/core/src/types/ECGViewportTypes.ts @@ -0,0 +1,40 @@ +import type { ViewportType } from '../enums'; +import type Point2 from './Point2'; + +export interface InternalECGCamera { + panWorld?: Point2; + parallelScale?: number; +} + +export interface ECGViewportInput { + id: string; + renderingEngineId: string; + type: ViewportType; + element: HTMLDivElement; + sx: number; + sy: number; + sWidth: number; + sHeight: number; + defaultOptions: unknown; + canvas: HTMLCanvasElement; +} + +export interface ECGChannel { + name: string; + data: Int16Array; + visible: boolean; + /** Cached minimum sample value */ + min: number; + /** Cached maximum sample value */ + max: number; +} + +export interface ECGWaveformData { + channels: ECGChannel[]; + numberOfChannels: number; + numberOfSamples: number; + samplingFrequency: number; + bitsAllocated: number; + sampleInterpretation: string; + multiplexGroupLabel: string; +} diff --git a/packages/core/src/types/IECGViewport.ts b/packages/core/src/types/IECGViewport.ts new file mode 100644 index 0000000000..21a92ce350 --- /dev/null +++ b/packages/core/src/types/IECGViewport.ts @@ -0,0 +1,3 @@ +import type ECGViewport from '../RenderingEngine/ECGViewport'; + +export type IECGViewport = ECGViewport; diff --git a/packages/core/src/types/IImageCalibration.ts b/packages/core/src/types/IImageCalibration.ts index 795865ee72..2dd1b1e810 100644 --- a/packages/core/src/types/IImageCalibration.ts +++ b/packages/core/src/types/IImageCalibration.ts @@ -34,7 +34,7 @@ export interface IImageCalibration { type: CalibrationTypes; /** A tooltip which can be used to explain the calibration information */ tooltip?: string; - /** The DICOM defined ultrasound regions. Used for non-distance spacing units. */ + /** The DICOM defined ultrasound regions. Used for non-distance spacing units (US and ECG). */ sequenceOfUltrasoundRegions?: Record[]; } diff --git a/packages/core/src/types/index.ts b/packages/core/src/types/index.ts index e939c15054..2d08f25c6e 100644 --- a/packages/core/src/types/index.ts +++ b/packages/core/src/types/index.ts @@ -119,10 +119,18 @@ import type { Color, ColorLUT } from './Color'; import type VideoViewportProperties from './VideoViewportProperties'; import type WSIViewportProperties from './WSIViewportProperties'; import type { IVideoViewport } from './IVideoViewport'; +import type { IECGViewport } from './IECGViewport'; import type { InternalVideoCamera, VideoViewportInput, } from './VideoViewportTypes'; +import type { + InternalECGCamera, + ECGViewportInput, + ECGChannel, + ECGWaveformData, +} from './ECGViewportTypes'; +import type ECGViewportProperties from './ECGViewportProperties'; import type { ISurface } from './ISurface'; import type BoundsIJK from './BoundsIJK'; import type { ImageVolumeProps } from './ImageVolumeProps'; @@ -158,6 +166,7 @@ export type { ICamera, IStackViewport, IVideoViewport, + IECGViewport, IWSIViewport, IVolumeViewport, IEnabledElement, @@ -275,6 +284,12 @@ export type { // video InternalVideoCamera, VideoViewportInput, + // ecg + InternalECGCamera, + ECGViewportInput, + ECGChannel, + ECGWaveformData, + ECGViewportProperties, BoundsIJK, BoundsLPS, Color, diff --git a/packages/core/test/ecgViewport_test.js b/packages/core/test/ecgViewport_test.js new file mode 100644 index 0000000000..fb14184a42 --- /dev/null +++ b/packages/core/test/ecgViewport_test.js @@ -0,0 +1,200 @@ +import * as cornerstone3D from '../src/index'; +import * as testUtils from '../../../utils/test/testUtils'; + +const { Enums, metaData } = cornerstone3D; +const { ViewportType, Events } = Enums; + +const renderingEngineId = cornerstone3D.utilities.uuidv4(); +const viewportId = 'ECG_VIEWPORT'; + +describe('ECGViewport', () => { + let renderingEngine; + let element; + + beforeEach(function () { + const testEnv = testUtils.setupTestEnvironment({ + renderingEngineId, + viewportId, + type: ViewportType.ECG, + }); + renderingEngine = testEnv.renderingEngine; + element = testUtils.createViewports(renderingEngine, { + viewportId, + viewportType: ViewportType.ECG, + }); + }); + + afterEach(function () { + testUtils.cleanupTestEnvironment({ + renderingEngineId, + viewportIds: [viewportId], + }); + }); + + describe('setEcg with synthetic data', () => { + it('Should render ECG and fire IMAGE_RENDERED event', (done) => { + const fakeImageId = 'ecg://test/image-001'; + const numberOfChannels = 2; + const numberOfSamples = 100; + const samplingFrequency = 500; + + // Create synthetic waveform data: simple sine-like Int16Arrays + const channelArrays = []; + for (let c = 0; c < numberOfChannels; c++) { + const data = new Int16Array(numberOfSamples); + for (let i = 0; i < numberOfSamples; i++) { + // Sine wave with amplitude ~1000 + data[i] = Math.round( + 1000 * Math.sin((i / numberOfSamples) * Math.PI * 2) + ); + } + channelArrays.push(data); + } + + // Register fake ECG metadata provider + metaData.addProvider((type, imageId) => { + if (type !== Enums.MetadataModules.ECG || imageId !== fakeImageId) { + return; + } + return { + numberOfWaveformChannels: numberOfChannels, + numberOfWaveformSamples: numberOfSamples, + samplingFrequency, + waveformBitsAllocated: 16, + waveformSampleInterpretation: 'SS', + multiplexGroupLabel: 'ECG', + channelDefinitionSequence: [ + { channelSourceSequence: { codeMeaning: 'Channel 1' } }, + { channelSourceSequence: { codeMeaning: 'Channel 2' } }, + ], + waveformData: { + retrieveBulkData: () => Promise.resolve(channelArrays), + }, + }; + }, 100); + + const viewport = renderingEngine.getViewport(viewportId); + + element.addEventListener(Events.IMAGE_RENDERED, () => { + // Viewport should have loaded the waveform data + const waveformData = viewport.getWaveformData(); + expect(waveformData).toBeDefined(); + expect(waveformData.numberOfChannels).toBe(numberOfChannels); + expect(waveformData.numberOfSamples).toBe(numberOfSamples); + expect(waveformData.samplingFrequency).toBe(samplingFrequency); + + done(); + }); + + try { + viewport.setEcg(fakeImageId); + } catch (e) { + done.fail(e); + } + }); + + it('Should convert between canvas and world coordinates', (done) => { + const fakeImageId = 'ecg://test/image-002'; + const numberOfChannels = 2; + const numberOfSamples = 100; + const samplingFrequency = 500; + + const channelArrays = []; + for (let c = 0; c < numberOfChannels; c++) { + const data = new Int16Array(numberOfSamples); + for (let i = 0; i < numberOfSamples; i++) { + data[i] = Math.round( + 1000 * Math.sin((i / numberOfSamples) * Math.PI * 2) + ); + } + channelArrays.push(data); + } + + metaData.addProvider((type, imageId) => { + if (type !== Enums.MetadataModules.ECG || imageId !== fakeImageId) { + return; + } + return { + numberOfWaveformChannels: numberOfChannels, + numberOfWaveformSamples: numberOfSamples, + samplingFrequency, + waveformBitsAllocated: 16, + waveformSampleInterpretation: 'SS', + multiplexGroupLabel: 'ECG', + channelDefinitionSequence: [ + { channelSourceSequence: { codeMeaning: 'Channel 1' } }, + { channelSourceSequence: { codeMeaning: 'Channel 2' } }, + ], + waveformData: { + retrieveBulkData: () => Promise.resolve(channelArrays), + }, + }; + }, 100); + + const viewport = renderingEngine.getViewport(viewportId); + + element.addEventListener(Events.IMAGE_RENDERED, () => { + // Test worldToCanvas / canvasToWorld round-trip + const worldPoint = [50, 500, 0]; // sample 50, amplitude 500, channel 0 + const canvasPoint = viewport.worldToCanvas(worldPoint); + const worldPointBack = viewport.canvasToWorld(canvasPoint); + + // Should round-trip (allowing for some floating-point error) + expect(Math.abs(worldPointBack[0] - worldPoint[0])).toBeLessThan(1); + expect(Math.abs(worldPointBack[1] - worldPoint[1])).toBeLessThan(1); + expect(Math.abs(worldPointBack[2] - worldPoint[2])).toBeLessThan(1); + + done(); + }); + + try { + viewport.setEcg(fakeImageId); + } catch (e) { + done.fail(e); + } + }); + + it('Should return 0 for getCurrentImageIdIndex', (done) => { + const fakeImageId = 'ecg://test/image-003'; + const numberOfChannels = 1; + const numberOfSamples = 50; + const samplingFrequency = 500; + + const channelArrays = [new Int16Array(numberOfSamples)]; + + metaData.addProvider((type, imageId) => { + if (type !== Enums.MetadataModules.ECG || imageId !== fakeImageId) { + return; + } + return { + numberOfWaveformChannels: numberOfChannels, + numberOfWaveformSamples: numberOfSamples, + samplingFrequency, + waveformBitsAllocated: 16, + waveformSampleInterpretation: 'SS', + multiplexGroupLabel: 'ECG', + channelDefinitionSequence: [ + { channelSourceSequence: { codeMeaning: 'Channel 1' } }, + ], + waveformData: { + retrieveBulkData: () => Promise.resolve(channelArrays), + }, + }; + }, 100); + + const viewport = renderingEngine.getViewport(viewportId); + + element.addEventListener(Events.IMAGE_RENDERED, () => { + expect(viewport.getCurrentImageIdIndex()).toBe(0); + expect(viewport.getSliceIndex()).toBe(0); + done(); + }); + + try { + viewport.setEcg(fakeImageId); + } catch (e) { + done.fail(e); + } + }); + }); +}); diff --git a/packages/dicomImageLoader/src/__tests__/ECGHelpers.spec.ts b/packages/dicomImageLoader/src/__tests__/ECGHelpers.spec.ts new file mode 100644 index 0000000000..289e2e13cb --- /dev/null +++ b/packages/dicomImageLoader/src/__tests__/ECGHelpers.spec.ts @@ -0,0 +1,235 @@ +import { getECGModule } from '../imageLoader/wadors/metaData/ECGHelpers'; + +describe('ECGHelpers', () => { + describe('getECGModule', () => { + it('should return null when no WaveformSequence is found', () => { + const metadata = {}; + const result = getECGModule(metadata); + expect(result).toBeNull(); + }); + + it('should parse ECG module from DICOM metadata with InlineBinary data', async () => { + // Create a simple 16-bit signed short waveform: 2 channels, 10 samples each + const numberOfChannels = 2; + const numberOfSamples = 10; + const buffer = new ArrayBuffer(numberOfChannels * numberOfSamples * 2); + const view = new Int16Array(buffer); + + // Fill with simple pattern: channel 0 = [0, 100, 200, ...], channel 1 = [0, -100, -200, ...] + for (let i = 0; i < numberOfSamples; i++) { + view[i * numberOfChannels + 0] = i * 100; + view[i * numberOfChannels + 1] = -i * 100; + } + + const base64Data = btoa(String.fromCharCode(...new Uint8Array(buffer))); + + const metadata = { + '54000100': { + Value: [ + { + '003A0005': { Value: [numberOfChannels] }, + '003A0010': { Value: [numberOfSamples] }, + '003A001A': { Value: [500] }, // 500 Hz sampling + '54001004': { Value: [16] }, // 16 bits allocated + '54001006': { Value: ['SS'] }, // Signed short + '003A0020': { Value: ['ECG'] }, + '003A0200': { + Value: [ + { + '003A0208': { + Value: [ + { + '00080104': { Value: ['Lead I'] }, + }, + ], + }, + }, + { + '003A0208': { + Value: [ + { + '00080104': { Value: ['Lead II'] }, + }, + ], + }, + }, + ], + }, + '54001010': { + InlineBinary: base64Data, + }, + }, + ], + }, + }; + + const result = getECGModule(metadata); + + expect(result).not.toBeNull(); + expect(result?.numberOfWaveformChannels).toBe(numberOfChannels); + expect(result?.numberOfWaveformSamples).toBe(numberOfSamples); + expect(result?.samplingFrequency).toBe(500); + expect(result?.waveformBitsAllocated).toBe(16); + expect(result?.waveformSampleInterpretation).toBe('SS'); + expect(result?.multiplexGroupLabel).toBe('ECG'); + expect(result?.channelDefinitionSequence.length).toBe(2); + expect( + result?.channelDefinitionSequence[0].channelSourceSequence?.codeMeaning + ).toBe('Lead I'); + expect( + result?.channelDefinitionSequence[1].channelSourceSequence?.codeMeaning + ).toBe('Lead II'); + }); + + it('should have a retrieveBulkData function that decodes InlineBinary data', async () => { + const numberOfChannels = 2; + const numberOfSamples = 5; + const buffer = new ArrayBuffer(numberOfChannels * numberOfSamples * 2); + const view = new Int16Array(buffer); + + // Simple pattern + for (let i = 0; i < numberOfSamples; i++) { + view[i * numberOfChannels + 0] = i * 100; + view[i * numberOfChannels + 1] = -i * 100; + } + + const base64Data = btoa(String.fromCharCode(...new Uint8Array(buffer))); + + const metadata = { + '54000100': { + Value: [ + { + '003A0005': { Value: [numberOfChannels] }, + '003A0010': { Value: [numberOfSamples] }, + '003A001A': { Value: [500] }, + '54001004': { Value: [16] }, + '54001006': { Value: ['SS'] }, + '003A0020': { Value: ['ECG'] }, + '003A0200': { Value: [] }, + '54001010': { + InlineBinary: base64Data, + }, + }, + ], + }, + }; + + const ecgModule = getECGModule(metadata); + expect(ecgModule).not.toBeNull(); + expect(ecgModule?.waveformData.retrieveBulkData).toBeDefined(); + + const channelArrays = await ecgModule!.waveformData.retrieveBulkData(); + + expect(channelArrays.length).toBe(numberOfChannels); + expect(channelArrays[0].length).toBe(numberOfSamples); + expect(channelArrays[1].length).toBe(numberOfSamples); + + // Verify decoded data + expect(channelArrays[0][0]).toBe(0); + expect(channelArrays[0][1]).toBe(100); + expect(channelArrays[1][0]).toBe(0); + expect(channelArrays[1][1]).toBe(-100); + }); + + it('should throw error when no data source is found', async () => { + const metadata = { + '54000100': { + Value: [ + { + '003A0005': { Value: [2] }, + '003A0010': { Value: [10] }, + '003A001A': { Value: [500] }, + '003A0200': { Value: [] }, + '54001010': {}, // No data source + }, + ], + }, + }; + + const ecgModule = getECGModule(metadata); + expect(ecgModule).not.toBeNull(); + + // The retrieveBulkData function should throw when called + try { + await ecgModule!.waveformData.retrieveBulkData(); + throw new Error('Expected retrieveBulkData to throw'); + } catch (error) { + expect((error as Error).message).toContain( + '[ECGHelpers] No data source found in WaveformData' + ); + } + }); + + it('should handle metadata with default values', () => { + const numberOfChannels = 1; + const numberOfSamples = 20; + + const metadata = { + '54000100': { + Value: [ + { + '003A0005': { Value: [numberOfChannels] }, + '003A0010': { Value: [numberOfSamples] }, + '003A001A': { Value: [250] }, + // Missing optional fields + '003A0200': { Value: [] }, + '54001010': { Value: [] }, // Empty Value array + }, + ], + }, + }; + + const result = getECGModule(metadata); + + expect(result).not.toBeNull(); + expect(result?.waveformBitsAllocated).toBe(16); // Default + expect(result?.waveformSampleInterpretation).toBe('SS'); // Default + expect(result?.multiplexGroupLabel).toBe('ECG'); // Default + }); + + it('should parse channel definitions correctly', () => { + const metadata = { + '54000100': { + Value: [ + { + '003A0005': { Value: [3] }, + '003A0010': { Value: [100] }, + '003A001A': { Value: [500] }, + '003A0200': { + Value: [ + { + '003A0208': { + Value: [{ '00080104': { Value: ['Channel A'] } }], + }, + }, + { + '003A0208': { + Value: [{ '00080104': { Value: ['Channel B'] } }], + }, + }, + { + // Channel without source sequence + }, + ], + }, + '54001010': { Value: [] }, + }, + ], + }, + }; + + const result = getECGModule(metadata); + + expect(result?.channelDefinitionSequence.length).toBe(3); + expect( + result?.channelDefinitionSequence[0].channelSourceSequence?.codeMeaning + ).toBe('Channel A'); + expect( + result?.channelDefinitionSequence[1].channelSourceSequence?.codeMeaning + ).toBe('Channel B'); + expect( + result?.channelDefinitionSequence[2].channelSourceSequence?.codeMeaning + ).toBe('Unknown'); + }); + }); +}); diff --git a/packages/dicomImageLoader/src/imageLoader/wadors/metaData/ECGHelpers.ts b/packages/dicomImageLoader/src/imageLoader/wadors/metaData/ECGHelpers.ts new file mode 100644 index 0000000000..79c70a7099 --- /dev/null +++ b/packages/dicomImageLoader/src/imageLoader/wadors/metaData/ECGHelpers.ts @@ -0,0 +1,326 @@ +import type { WADORSMetaDataElement } from '../../../types'; +import getValue from './getValue'; +import getNumberValue from './getNumberValue'; +import getSequenceItems from './getSequenceItems'; + +// DICOM tags for the Waveform module +const TAG = { + WaveformSequence: '54000100', + NumberOfWaveformChannels: '003A0005', + NumberOfWaveformSamples: '003A0010', + SamplingFrequency: '003A001A', + MultiplexGroupLabel: '003A0020', + ChannelDefinitionSequence: '003A0200', + ChannelSourceSequence: '003A0208', + CodeMeaning: '00080104', + WaveformBitsAllocated: '54001004', + WaveformSampleInterpretation: '54001006', + WaveformData: '54001010', +} as const; + +export interface EcgModule { + numberOfWaveformChannels: number; + numberOfWaveformSamples: number; + samplingFrequency: number; + waveformBitsAllocated: number; + waveformSampleInterpretation: string; + multiplexGroupLabel: string; + channelDefinitionSequence: Array<{ + channelSourceSequence?: { codeMeaning?: string }; + }>; + waveformData: { + retrieveBulkData: () => Promise; + }; +} + +/** + * Decodes a base64 string to a Uint8Array. + */ +function base64ToUint8Array(base64: string): Uint8Array { + const binaryString = atob(base64); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} + +/** + * Converts raw waveform buffer to per-channel Int16Array data. + * Handles interleaved 16-bit signed short format. + */ +function convertBuffer( + dataSrc: ArrayBuffer | Uint8Array, + numberOfChannels: number, + numberOfSamples: number, + bits: number, + type: string +): Int16Array[] { + const data = new Uint8Array(dataSrc); + + if (bits === 16 && type === 'SS') { + const ret: Int16Array[] = []; + const bytesPerSample = 2; + const totalBytes = bytesPerSample * numberOfChannels * numberOfSamples; + const length = Math.min(data.length, totalBytes); + + for (let channel = 0; channel < numberOfChannels; channel++) { + const buffer = new Int16Array(numberOfSamples); + ret.push(buffer); + let sampleI = 0; + for ( + let sample = 2 * channel; + sample < length; + sample += 2 * numberOfChannels + ) { + const highByte = data[sample + 1]; + const lowByte = data[sample]; + const sign = highByte & 0x80; + buffer[sampleI++] = sign + ? 0xffff0000 | (highByte << 8) | lowByte + : (highByte << 8) | lowByte; + } + } + return ret; + } + + console.warn( + `[ECGHelpers] Unsupported waveform format: ${bits}-bit ${type}. Only 16-bit SS is supported.` + ); + return []; +} + +/** + * Decodes multipart/related response to extract binary parts. + */ +function multipartDecode(response: ArrayBuffer): ArrayBuffer[] { + const message = new Uint8Array(response); + const separator = new TextEncoder().encode('\r\n\r\n'); + + // Find the header separator + const headerIndex = findToken(message, separator, 0, 1000); + if (headerIndex === -1) { + return [response]; + } + + const headerStr = new TextDecoder().decode(message.slice(0, headerIndex)); + const boundaryString = identifyBoundary(headerStr); + if (!boundaryString) { + return [response]; + } + + const boundary = new TextEncoder().encode(boundaryString); + const components: ArrayBuffer[] = []; + let offset = headerIndex + separator.length; + + let boundaryIndex = findToken(message, boundary, offset); + while (boundaryIndex !== -1) { + const contentStart = findToken(message, separator, boundaryIndex, 1000); + if (contentStart === -1) { + break; + } + const dataStart = contentStart + separator.length; + const nextBoundary = findToken(message, boundary, dataStart); + const dataEnd = nextBoundary === -1 ? message.length : nextBoundary - 2; + components.push(response.slice(dataStart, dataEnd)); + if (nextBoundary === -1) { + break; + } + offset = nextBoundary; + boundaryIndex = findToken(message, boundary, offset + boundary.length); + if (boundaryIndex === -1) { + break; + } + } + + return components.length > 0 ? components : [response]; +} + +function findToken( + message: Uint8Array, + token: Uint8Array, + startIndex: number, + maxLength?: number +): number { + const end = maxLength + ? Math.min(message.length, startIndex + maxLength) + : message.length; + for (let i = startIndex; i < end - token.length + 1; i++) { + let found = true; + for (let j = 0; j < token.length; j++) { + if (message[i + j] !== token[j]) { + found = false; + break; + } + } + if (found) { + return i; + } + } + return -1; +} + +function identifyBoundary(header: string): string | null { + const match = header.match(/boundary=([^\s;]+)/i); + if (match) { + return `--${match[1].replace(/"/g, '')}`; + } + return null; +} + +/** + * Creates a closure that retrieves bulk waveform data from various sources + * (InlineBinary, BulkDataURI, or dicomweb-client retrieveBulkData). + * + * @returns A function that returns a Promise resolving to the decoded channel arrays. + * @throws If no data source is found. + */ +function makeRetrieveBulkData( + waveformData: Record, + numberOfChannels: number, + numberOfSamples: number, + bitsAllocated: number, + sampleInterpretation: string, + wadoRsRoot?: string, + studyUID?: string +): () => Promise { + return async () => { + // Method 1: Already decoded Value + if (waveformData.Value) { + return waveformData.Value as Int16Array[]; + } + + // Method 2: InlineBinary (base64) + if (waveformData.InlineBinary) { + const raw = base64ToUint8Array(waveformData.InlineBinary as string); + return convertBuffer( + raw, + numberOfChannels, + numberOfSamples, + bitsAllocated, + sampleInterpretation + ); + } + + // Method 3: retrieveBulkData function (from dicomweb-client) + if (typeof waveformData.retrieveBulkData === 'function') { + const bulkdata = await waveformData.retrieveBulkData(); + return convertBuffer( + bulkdata, + numberOfChannels, + numberOfSamples, + bitsAllocated, + sampleInterpretation + ); + } + + // Method 4: BulkDataURI + if (waveformData.BulkDataURI) { + let url = waveformData.BulkDataURI as string; + if (url.indexOf(':') === -1 && wadoRsRoot) { + url = studyUID + ? `${wadoRsRoot}/studies/${studyUID}/${url}` + : `${wadoRsRoot}/${url}`; + } + const response = await fetch(url); + const buffer = await response.arrayBuffer(); + const contentType = response.headers.get('content-type') || ''; + const decoded = contentType.includes('multipart') + ? multipartDecode(buffer)[0] + : buffer; + return convertBuffer( + decoded, + numberOfChannels, + numberOfSamples, + bitsAllocated, + sampleInterpretation + ); + } + + throw new Error('[ECGHelpers] No data source found in WaveformData'); + }; +} + +/** + * Parses the DICOM WaveformSequence and returns an EcgModule object. + * + * @param metadata - The DICOM metadata object + * @param wadoRsRoot - Optional WADO-RS root URL for BulkDataURI resolution + * @param studyUID - Optional Study Instance UID for BulkDataURI path construction + * @returns EcgModule object or null if no waveform data is found + */ +export function getECGModule( + metadata: Record, + wadoRsRoot?: string, + studyUID?: string +): EcgModule | null { + const waveformSeqItems = getSequenceItems(metadata[TAG.WaveformSequence]); + if (!waveformSeqItems || waveformSeqItems.length === 0) { + return null; + } + + const waveform = waveformSeqItems[0]; + + const numberOfChannels = getNumberValue( + waveform[TAG.NumberOfWaveformChannels] + ) as number; + const numberOfSamples = getNumberValue( + waveform[TAG.NumberOfWaveformSamples] + ) as number; + const samplingFrequency = getNumberValue( + waveform[TAG.SamplingFrequency] + ) as number; + const waveformBitsAllocated = + getNumberValue(waveform[TAG.WaveformBitsAllocated]) ?? 16; + const waveformSampleInterpretation = + (getValue(waveform[TAG.WaveformSampleInterpretation]) as string) ?? 'SS'; + const multiplexGroupLabel = + (getValue(waveform[TAG.MultiplexGroupLabel]) as string) ?? 'ECG'; + + // Parse channel definitions + const channelDefItems = getSequenceItems( + waveform[TAG.ChannelDefinitionSequence] + ); + const channelDefinitionSequence = (channelDefItems || []).map( + (channelDef) => { + const channelDefRecord = channelDef as unknown as Record; + const sourceSeqItems = getSequenceItems( + channelDefRecord[TAG.ChannelSourceSequence] + ); + const sourceSeq = + (sourceSeqItems?.[0] as unknown as Record) || {}; + const codeMeaning = getValue( + sourceSeq[TAG.CodeMeaning] as WADORSMetaDataElement + ) as string; + + return { + channelSourceSequence: { + codeMeaning: codeMeaning || 'Unknown', + }, + }; + } + ); + + const waveformDataObj = waveform[TAG.WaveformData] || {}; + + return { + numberOfWaveformChannels: numberOfChannels, + numberOfWaveformSamples: numberOfSamples, + samplingFrequency, + waveformBitsAllocated, + waveformSampleInterpretation, + multiplexGroupLabel, + channelDefinitionSequence, + waveformData: { + retrieveBulkData: makeRetrieveBulkData( + waveformDataObj, + numberOfChannels, + numberOfSamples, + waveformBitsAllocated, + waveformSampleInterpretation, + wadoRsRoot, + studyUID + ), + }, + }; +} diff --git a/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts b/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts index 5967b7a2d8..9224a51f15 100644 --- a/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts +++ b/packages/dicomImageLoader/src/imageLoader/wadors/metaData/metaDataProvider.ts @@ -1,4 +1,3 @@ -import * as dicomParser from 'dicom-parser'; import { Enums, utilities, @@ -21,11 +20,9 @@ import { } from './extractPositioningFromMetadata'; import { getImageTypeSubItemFromMetadata } from './NMHelpers'; import isNMReconstructable from '../../isNMReconstructable'; -import { - getInstanceModule, - instanceModuleNames, -} from '../../getInstanceModule'; +import { instanceModuleNames } from '../../getInstanceModule'; import { getUSEnhancedRegions } from './USHelpers'; +import { getECGModule } from './ECGHelpers'; function metaDataProvider(type, imageId) { const { MetadataModules } = Enums; @@ -209,6 +206,22 @@ function metaDataProvider(type, imageId) { return getUSEnhancedRegions(metaData); } + if (type === MetadataModules.ECG) { + // Extract wadoRsRoot and studyUID from the imageId for BulkDataURI resolution + const imageUri = imageId.replace('wadors:', ''); + const studiesIndex = imageUri.indexOf('/studies/'); + let wadoRsRoot: string | undefined; + let studyUID: string | undefined; + if (studiesIndex !== -1) { + wadoRsRoot = imageUri.substring(0, studiesIndex); + const afterStudies = imageUri.substring(studiesIndex + 9); + const nextSlash = afterStudies.indexOf('/'); + studyUID = + nextSlash !== -1 ? afterStudies.substring(0, nextSlash) : afterStudies; + } + return getECGModule(metaData, wadoRsRoot, studyUID); + } + if (type === MetadataModules.CALIBRATION) { const modality = getValue(metaData['00080060']); @@ -218,6 +231,46 @@ function metaDataProvider(type, imageId) { sequenceOfUltrasoundRegions: enhancedRegion, }; } + + // ECG waveform: use sequenceOfUltrasoundRegions for time (seconds) and amplitude (mV) + const imageUri = imageId.replace('wadors:', ''); + const studiesIndex = imageUri.indexOf('/studies/'); + let wadoRsRoot; + let studyUID; + if (studiesIndex !== -1) { + wadoRsRoot = imageUri.substring(0, studiesIndex); + const afterStudies = imageUri.substring(studiesIndex + 9); + const nextSlash = afterStudies.indexOf('/'); + studyUID = + nextSlash !== -1 ? afterStudies.substring(0, nextSlash) : afterStudies; + } + const ecgModule = getECGModule(metaData, wadoRsRoot, studyUID); + if (ecgModule) { + const { numberOfWaveformSamples, samplingFrequency } = ecgModule; + const physicalDeltaX = 1 / (samplingFrequency || 1); + // Typical ECG: raw Int16 in µV or similar; 0.001 mV per raw unit (1 µV/LSB) + const physicalDeltaY = 0.001; + // Match ECGViewport getImageData(): amplitude mapped to index [0, 65536), offset 32768 + const ECG_AMPLITUDE_INDEX_SIZE = 65536; + const ECG_AMPLITUDE_OFFSET = 32768; + return { + sequenceOfUltrasoundRegions: [ + { + regionLocationMinX0: 0, + regionLocationMaxX1: numberOfWaveformSamples, + regionLocationMinY0: 0, + regionLocationMaxY1: ECG_AMPLITUDE_INDEX_SIZE - 1, + referencePixelX0: 0, + referencePixelY0: ECG_AMPLITUDE_OFFSET, + physicalDeltaX, + physicalDeltaY, + physicalUnitsXDirection: 4, // seconds + physicalUnitsYDirection: -1, // mV (extension unit) + regionDataType: 1, + }, + ], + }; + } } if (type === MetadataModules.IMAGE_URL) { diff --git a/packages/tools/src/tools/annotation/ProbeTool.ts b/packages/tools/src/tools/annotation/ProbeTool.ts index 2f2406614f..807072a885 100644 --- a/packages/tools/src/tools/annotation/ProbeTool.ts +++ b/packages/tools/src/tools/annotation/ProbeTool.ts @@ -607,7 +607,7 @@ class ProbeTool extends AnnotationTool { const { dimensions, imageData, metadata, voxelManager } = image; - const modality = metadata.Modality; + const modality = metadata?.Modality; let ijk = transformWorldToIndex(imageData, worldPos); ijk = vec3.round(ijk, ijk); @@ -615,11 +615,9 @@ class ProbeTool extends AnnotationTool { if (csUtils.indexWithinDimensions(ijk, dimensions)) { this.isHandleOutsideImage = false; - let value = voxelManager.getAtIJKPoint(ijk); - // Index[2] for stackViewport is always 0, but for visualization - // we reset it to be imageId index - if (targetId.startsWith('imageId:')) { + // we reset it to be imageId index (skip for ECG; channel is already in ijk[2]) + if (targetId.startsWith('imageId:') && modality !== 'ECG') { const imageId = targetId.split('imageId:')[1]; const imageURI = csUtils.imageIdToURI(imageId); const viewports = csUtils.getViewportsWithImageURI(imageURI); @@ -629,17 +627,23 @@ class ProbeTool extends AnnotationTool { ijk[2] = viewport.getCurrentImageIdIndex(); } - let modalityUnit; + let value: number | number[]; + let modalityUnit: string | string[]; - if (modality === 'US') { + if (modality === 'ECG') { + const calibratedResults = getCalibratedProbeUnitsAndValue(image, [ + ijk, + ]); + value = calibratedResults.values; + modalityUnit = calibratedResults.units; + } else if (modality === 'US') { + value = voxelManager?.getAtIJKPoint(ijk); const calibratedResults = getCalibratedProbeUnitsAndValue(image, [ ijk, ]); - const hasEnhancedRegionValues = calibratedResults.values.every( - (value) => value !== null + (v) => v !== null ); - value = ( hasEnhancedRegionValues ? calibratedResults.values : value ) as number; @@ -647,6 +651,7 @@ class ProbeTool extends AnnotationTool { ? calibratedResults.units : 'raw'; } else { + value = voxelManager?.getAtIJKPoint(ijk); modalityUnit = getPixelValueUnits( modality, annotation.metadata.referencedImageId, diff --git a/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts b/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts index 72056d9b9a..0acb38203b 100644 --- a/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts +++ b/packages/tools/src/tools/annotation/UltrasoundDirectionalTool.ts @@ -3,6 +3,7 @@ import { getEnabledElement, utilities as csUtils, StackViewport, + ECGViewport, } from '@cornerstonejs/core'; import type { Types } from '@cornerstonejs/core'; @@ -116,9 +117,12 @@ class UltrasoundDirectionalTool extends AnnotationTool { const enabledElement = getEnabledElement(element); const { viewport } = enabledElement; - if (!(viewport instanceof StackViewport)) { + if ( + !(viewport instanceof StackViewport) && + !(viewport instanceof ECGViewport) + ) { throw new Error( - 'UltrasoundDirectionalTool can only be used on a StackViewport' + 'UltrasoundDirectionalTool can only be used on a StackViewport or ECGViewport' ); } diff --git a/packages/tools/src/utilities/getCalibratedUnits.ts b/packages/tools/src/utilities/getCalibratedUnits.ts index a81f31f11e..6be7c609c9 100644 --- a/packages/tools/src/utilities/getCalibratedUnits.ts +++ b/packages/tools/src/utilities/getCalibratedUnits.ts @@ -17,6 +17,7 @@ const SUPPORTED_REGION_DATA_TYPES = [ const SUPPORTED_PROBE_VARIANT = [ '4,3', // x: seconds & y : cm '4,7', // x: seconds & y : cm/sec + '4,-1', // x: seconds & y : mV (ECG) ]; /** @@ -35,6 +36,8 @@ const UNIT_MAPPING = { 8: 'cm\xb2', 9: 'cm\xb2/s', 0xc: 'degrees', + /** Extension for ECG amplitude (not in DICOM table). */ + [-1]: 'mV', }; const EPS = 1e-3; @@ -100,24 +103,39 @@ const getCalibratedLengthUnitsAndScale = (image, handles) => { handle[0] <= region.regionLocationMaxX1 && handle[1] >= region.regionLocationMinY0 && handle[1] <= region.regionLocationMaxY1 - ) && SUPPORTED_REGION_DATA_TYPES.includes(region.regionDataType) + ) && + (SUPPORTED_REGION_DATA_TYPES.includes(region.regionDataType) || + SUPPORTED_PROBE_VARIANT.includes( + `${region.physicalUnitsXDirection},${region.physicalUnitsYDirection}` + )) ); - // If we are not in a region at all we should show the underlying calibration - // which might be the mm spacing for the image if ( region && region.physicalUnitsXDirection === region.physicalUnitsYDirection ) { const physicalDeltaX = Math.abs(region.physicalDeltaX); const physicalDeltaY = Math.abs(region.physicalDeltaY); - - // 1 to 1 aspect ratio, we use just one of them scale = 1 / physicalDeltaX; scaleY = 1 / physicalDeltaY; + + // 1 to 1 aspect ratio, we use just one of them calibrationType = 'US Region'; unit = UNIT_MAPPING[region.physicalUnitsXDirection] || 'unknown'; areaUnit = unit + SQUARE; + } else if (region && region.physicalUnitsYDirection === -1) { + const physicalDeltaX = Math.abs(region.physicalDeltaX); + const physicalDeltaY = Math.abs(region.physicalDeltaY); + scale = 1 / physicalDeltaX; + scaleY = 1 / physicalDeltaY; + + calibrationType = 'ECG Region'; + unit = + UNIT_MAPPING[region.physicalUnitsXDirection] || + UNIT_MAPPING[region.physicalUnitsYDirection] || + 'unknown'; + areaUnit = + (UNIT_MAPPING[region.physicalUnitsYDirection] || 'px') + SQUARE; } } else if (calibration.scale) { scale = calibration.scale; @@ -149,11 +167,13 @@ const getCalibratedProbeUnitsAndValue = (image, handles) => { } if (calibration.sequenceOfUltrasoundRegions) { - // for Probe tool const supportedRegionsMetadata = calibration.sequenceOfUltrasoundRegions.filter( (region) => - SUPPORTED_REGION_DATA_TYPES.includes(region.regionDataType) && + (SUPPORTED_REGION_DATA_TYPES.includes(region.regionDataType) || + SUPPORTED_PROBE_VARIANT.includes( + `${region.physicalUnitsXDirection},${region.physicalUnitsYDirection}` + )) && SUPPORTED_PROBE_VARIANT.includes( `${region.physicalUnitsXDirection},${region.physicalUnitsYDirection}` ) @@ -188,11 +208,12 @@ const getCalibratedProbeUnitsAndValue = (image, handles) => { (imageIndex[0] - region.regionLocationMinX0 - referencePixelX0) * physicalDeltaX; - calibrationType = 'US Region'; + calibrationType = + region.physicalUnitsYDirection === -1 ? 'ECG Region' : 'US Region'; values = [xValue, yValue]; units = [ - UNIT_MAPPING[region.physicalUnitsXDirection], - UNIT_MAPPING[region.physicalUnitsYDirection], + UNIT_MAPPING[region.physicalUnitsXDirection] ?? 'unknown', + UNIT_MAPPING[region.physicalUnitsYDirection] ?? 'unknown', ]; } diff --git a/utils/ExampleRunner/example-info.json b/utils/ExampleRunner/example-info.json index fa2bc0c7aa..df04dcb200 100644 --- a/utils/ExampleRunner/example-info.json +++ b/utils/ExampleRunner/example-info.json @@ -341,6 +341,10 @@ "name": "Whole Slide Imaging", "description": "Display WSI Series" }, + "ecg": { + "name": "ECG Viewport", + "description": "Displays a 12-lead ECG from DICOM Waveform data." + }, "wsiAnnotationTools": { "name": "WSI Annotation Tools", "description": "WSI with length and other annotation tools" diff --git a/utils/demo/helpers/addManipulationBindings.ts b/utils/demo/helpers/addManipulationBindings.ts index fb80bed3c0..44153c71e5 100644 --- a/utils/demo/helpers/addManipulationBindings.ts +++ b/utils/demo/helpers/addManipulationBindings.ts @@ -25,6 +25,8 @@ export type ToolBinding = { passive?: boolean; // Initial bindings bindings?: Types.IToolBinding[]; + // Sets as the default active tool on primary mouse button + selected?: boolean; }; /** diff --git a/utils/demo/helpers/annotationTools.ts b/utils/demo/helpers/annotationTools.ts index fa11a1c749..a37a4c018d 100644 --- a/utils/demo/helpers/annotationTools.ts +++ b/utils/demo/helpers/annotationTools.ts @@ -16,6 +16,7 @@ const { EraserTool, KeyImageTool, VideoRedactionTool, + UltrasoundDirectionalTool, } = cornerstoneTools; const annotationTools = new Map(); @@ -39,5 +40,8 @@ annotationTools.set(PlanarFreehandROITool.toolName, { annotationTools.set(EraserTool.toolName, { tool: EraserTool }); annotationTools.set(KeyImageTool.toolName, { tool: KeyImageTool }); annotationTools.set(VideoRedactionTool.toolName, { tool: VideoRedactionTool }); +annotationTools.set(UltrasoundDirectionalTool.toolName, { + tool: UltrasoundDirectionalTool, +}); export default annotationTools; From 905d5b2ca2b4265d6fb03399e23442144ff4364e Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 25 Feb 2026 16:14:24 +0000 Subject: [PATCH 31/90] chore(version): Update package versions to 4.18.0 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 6 ++++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 77 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 757db5f0be..d44b63ad7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +### Features + +- **core:** add ECGViewport for DICOM waveform rendering ([#2621](https://github.com/cornerstonejs/cornerstone3D/issues/2621)) ([7c91439](https://github.com/cornerstonejs/cornerstone3D/commit/7c914397b228b380d0f236f3f940170599fceab3)) + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 9d221b33bc..ff29517aa9 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -1798953dfb8921f3acf73e47976367da22088e63 \ No newline at end of file +7c914397b228b380d0f236f3f940170599fceab3 \ No newline at end of file diff --git a/lerna.json b/lerna.json index b317b1c85e..98eafb96cb 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.17.5", + "version": "4.18.0", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 58a1d0a2f4..9ed164e9cb 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index dd422586e2..9ec885b057 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.17.5", + "version": "4.18.0", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.5", - "@cornerstonejs/tools": "4.17.5" + "@cornerstonejs/core": "4.18.0", + "@cornerstonejs/tools": "4.18.0" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 1426e9f949..eb89b80ced 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index ef314b72ca..e56c7c90c2 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.17.5", + "version": "4.18.0", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.5", - "@cornerstonejs/tools": "4.17.5" + "@cornerstonejs/core": "4.18.0", + "@cornerstonejs/tools": "4.18.0" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index ac603f30bf..be1dd7f453 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +### Features + +- **core:** add ECGViewport for DICOM waveform rendering ([#2621](https://github.com/cornerstonejs/cornerstone3D/issues/2621)) ([7c91439](https://github.com/cornerstonejs/cornerstone3D/commit/7c914397b228b380d0f236f3f940170599fceab3)) + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index b22d1a9455..0b68d601e8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.17.5", + "version": "4.18.0", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 385a2a14ec..04fa13e9cd 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +### Features + +- **core:** add ECGViewport for DICOM waveform rendering ([#2621](https://github.com/cornerstonejs/cornerstone3D/issues/2621)) ([7c91439](https://github.com/cornerstonejs/cornerstone3D/commit/7c914397b228b380d0f236f3f940170599fceab3)) + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 6051ca7c4c..490022a8b3 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.17.5", + "version": "4.18.0", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.5", + "@cornerstonejs/core": "4.18.0", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index e07e53f185..58b6d07631 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index bf7a8683eb..fdb1efaba2 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.17.5", + "version": "4.18.0", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.5", - "@cornerstonejs/tools": "4.17.5", + "@cornerstonejs/core": "4.18.0", + "@cornerstonejs/tools": "4.18.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index e0af61c31f..e3fe677eca 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index d6f4804ece..724ed8930b 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.17.5", + "version": "4.18.0", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.5" + "@cornerstonejs/core": "4.18.0" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index ca82542ded..4749fd447a 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 6552267720..afc0d85f51 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.17.5", + "version": "4.18.0", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.5", - "@cornerstonejs/tools": "4.17.5", + "@cornerstonejs/core": "4.18.0", + "@cornerstonejs/tools": "4.18.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index eacf717015..13cbd40dd3 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) + +### Features + +- **core:** add ECGViewport for DICOM waveform rendering ([#2621](https://github.com/cornerstonejs/cornerstone3D/issues/2621)) ([7c91439](https://github.com/cornerstonejs/cornerstone3D/commit/7c914397b228b380d0f236f3f940170599fceab3)) + ## [4.17.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.4...v4.17.5) (2026-02-24) ### Bug Fixes diff --git a/packages/tools/package.json b/packages/tools/package.json index ad433e3a9f..a04be5f265 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.17.5", + "version": "4.18.0", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.17.5", + "@cornerstonejs/core": "4.18.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 54411fce62..002243184f 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.17.5'; +export const version = '4.18.0'; diff --git a/version.json b/version.json index fb708724ac..279fda7dac 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.17.5", - "commit": "1798953dfb8921f3acf73e47976367da22088e63" + "version": "4.18.0", + "commit": "7c914397b228b380d0f236f3f940170599fceab3" } \ No newline at end of file diff --git a/version.txt b/version.txt index 4e206ee9f9..ef8ffbdd9b 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.17.5 \ No newline at end of file +4.18.0 \ No newline at end of file From b1c84f6683292c9a4db1ce044f5bf47b0a65c830 Mon Sep 17 00:00:00 2001 From: Ghadeer Albattarni <165973963+GhadeerAlbattarni@users.noreply.github.com> Date: Wed, 25 Feb 2026 12:44:45 -0500 Subject: [PATCH 32/90] fix(tools): prevent ANNOTATION_COMPLETED re-firing on PlanarFreehandROI text click (#2631) Add a movingTextBox guard in completeDrawOpenContour and completeDrawClosedContour so we do not fire triggerContourAnnotationCompleted when the user only clicked the text box. --- .../tools/annotation/planarFreehandROITool/drawLoop.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts b/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts index 78d3d28c12..8faf51932e 100644 --- a/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts +++ b/packages/tools/src/tools/annotation/planarFreehandROITool/drawLoop.ts @@ -237,7 +237,7 @@ function completeDrawClosedContour( return false; } - const { annotation, viewportIdsToRender } = this.commonData; + const { annotation, viewportIdsToRender, movingTextBox } = this.commonData; const enabledElement = getEnabledElement(element); const { viewport } = enabledElement; @@ -267,7 +267,7 @@ function completeDrawClosedContour( const { textBox } = annotation.data.handles; - if (!textBox?.hasMoved) { + if (!textBox?.hasMoved && !movingTextBox) { triggerContourAnnotationCompleted(annotation, contourHoleProcessingEnabled); } @@ -330,7 +330,7 @@ function completeDrawOpenContour( return false; } - const { annotation, viewportIdsToRender } = this.commonData; + const { annotation, viewportIdsToRender, movingTextBox } = this.commonData; const enabledElement = getEnabledElement(element); const { viewport } = enabledElement; @@ -379,7 +379,7 @@ function completeDrawOpenContour( ); } - if (!textBox.hasMoved) { + if (!textBox.hasMoved && !movingTextBox) { triggerContourAnnotationCompleted(annotation, contourHoleProcessingEnabled); } From 468393b0b7fc2e8316c3a8760284b713401ce704 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 25 Feb 2026 17:48:23 +0000 Subject: [PATCH 33/90] chore(version): Update package versions to 4.18.1 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d44b63ad7d..a952369cfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +### Bug Fixes + +- **tools:** prevent ANNOTATION_COMPLETED re-firing on PlanarFreehandROI text click ([#2631](https://github.com/cornerstonejs/cornerstone3D/issues/2631)) ([d09bce9](https://github.com/cornerstonejs/cornerstone3D/commit/d09bce920c738d72f5a1b06e7dde7b6638d53395)) + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) ### Features diff --git a/commit.txt b/commit.txt index ff29517aa9..7f79804992 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -7c914397b228b380d0f236f3f940170599fceab3 \ No newline at end of file +d09bce920c738d72f5a1b06e7dde7b6638d53395 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 98eafb96cb..9ebb44dd4d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.18.0", + "version": "4.18.1", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 9ed164e9cb..5637000433 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/adapters + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 9ec885b057..50fca6fc7a 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.18.0", + "version": "4.18.1", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.0", - "@cornerstonejs/tools": "4.18.0" + "@cornerstonejs/core": "4.18.1", + "@cornerstonejs/tools": "4.18.1" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index eb89b80ced..39b76a48cc 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/ai + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index e56c7c90c2..b8256128bc 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.18.0", + "version": "4.18.1", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.0", - "@cornerstonejs/tools": "4.18.0" + "@cornerstonejs/core": "4.18.1", + "@cornerstonejs/tools": "4.18.1" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index be1dd7f453..6b9aefb0fc 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/core + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) ### Features diff --git a/packages/core/package.json b/packages/core/package.json index 0b68d601e8..7bf5c77cca 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.18.0", + "version": "4.18.1", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 04fa13e9cd..ee0325d9a4 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) ### Features diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 490022a8b3..0aa8e274ad 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.18.0", + "version": "4.18.1", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.0", + "@cornerstonejs/core": "4.18.1", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 58b6d07631..24914ec0f4 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index fdb1efaba2..b288b1f417 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.18.0", + "version": "4.18.1", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.0", - "@cornerstonejs/tools": "4.18.0", + "@cornerstonejs/core": "4.18.1", + "@cornerstonejs/tools": "4.18.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index e3fe677eca..11764d8727 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 724ed8930b..4c8424e91b 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.18.0", + "version": "4.18.1", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.0" + "@cornerstonejs/core": "4.18.1" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 4749fd447a..412da78f67 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index afc0d85f51..ad2fd601f4 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.18.0", + "version": "4.18.1", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.0", - "@cornerstonejs/tools": "4.18.0", + "@cornerstonejs/core": "4.18.1", + "@cornerstonejs/tools": "4.18.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 13cbd40dd3..c240a9d817 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) + +### Bug Fixes + +- **tools:** prevent ANNOTATION_COMPLETED re-firing on PlanarFreehandROI text click ([#2631](https://github.com/cornerstonejs/cornerstone3D/issues/2631)) ([d09bce9](https://github.com/cornerstonejs/cornerstone3D/commit/d09bce920c738d72f5a1b06e7dde7b6638d53395)) + # [4.18.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.17.5...v4.18.0) (2026-02-25) ### Features diff --git a/packages/tools/package.json b/packages/tools/package.json index a04be5f265..e174890a59 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.18.0", + "version": "4.18.1", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.0", + "@cornerstonejs/core": "4.18.1", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 002243184f..fdcb11c123 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.0'; +export const version = '4.18.1'; diff --git a/version.json b/version.json index 279fda7dac..9e80114cd3 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.18.0", - "commit": "7c914397b228b380d0f236f3f940170599fceab3" + "version": "4.18.1", + "commit": "d09bce920c738d72f5a1b06e7dde7b6638d53395" } \ No newline at end of file diff --git a/version.txt b/version.txt index ef8ffbdd9b..5288623ab6 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.18.0 \ No newline at end of file +4.18.1 \ No newline at end of file From 7a6a150a36d924495b7dc39352409e0043b8449f Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 25 Feb 2026 18:03:45 -0500 Subject: [PATCH 34/90] fix: Centralize aspect ratio handling for flicker removal (#2634) --- .../ContextPoolRenderingEngine.ts | 24 +++----- .../helpers/getOrCreateCanvas.ts | 61 +++++++++++++++++++ 2 files changed, 69 insertions(+), 16 deletions(-) diff --git a/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts b/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts index 949349268b..8df47a5797 100644 --- a/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts +++ b/packages/core/src/RenderingEngine/ContextPoolRenderingEngine.ts @@ -9,7 +9,9 @@ import VolumeViewport from './VolumeViewport'; import StackViewport from './StackViewport'; import VolumeViewport3D from './VolumeViewport3D'; import viewportTypeUsesCustomRenderingPipeline from './helpers/viewportTypeUsesCustomRenderingPipeline'; -import getOrCreateCanvas from './helpers/getOrCreateCanvas'; +import getOrCreateCanvas, { + updateCanvasSizeAndAspectRatio, +} from './helpers/getOrCreateCanvas'; import type IStackViewport from '../types/IStackViewport'; import type IVolumeViewport from '../types/IVolumeViewport'; @@ -59,6 +61,7 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { const canvasesDrivenByVtkJs = viewportsDrivenByVtkJs.map((vp) => vp.canvas); const canvas = getOrCreateCanvas(viewportInputEntry.element); + updateCanvasSizeAndAspectRatio(canvas); canvasesDrivenByVtkJs.push(canvas); const internalViewportEntry = { ...viewportInputEntry, canvas }; @@ -172,13 +175,9 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { getOrCreateCanvas(vp.element) ); - vtkDrivenCanvases.forEach((canvas) => { - const devicePixelRatio = window.devicePixelRatio || 1; - - const rect = canvas.getBoundingClientRect(); - canvas.width = rect.width * devicePixelRatio; - canvas.height = rect.height * devicePixelRatio; - }); + vtkDrivenCanvases.forEach((canvas) => + updateCanvasSizeAndAspectRatio(canvas) + ); for (let i = 0; i < viewportInputEntries.length; i++) { const vtkDrivenViewportInputEntry = viewportInputEntries[i]; @@ -532,14 +531,7 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine { // Update on-screen canvas size only when the VTK render result is available, // so the displayed size matches the rendered size and aspect ratio without flicker. - if ( - canvas.width !== dWidth || - (canvas.height !== dHeight && dWidth >= 1 && dHeight >= 1) - ) { - canvas.width = dWidth; - canvas.height = dHeight; - canvas.style.aspectRatio = `${dWidth} / ${dHeight}`; - } + updateCanvasSizeAndAspectRatio(canvas, { width: dWidth, height: dHeight }); const onScreenContext = canvas.getContext('2d'); diff --git a/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts b/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts index c4e65541e9..af9d9ac368 100644 --- a/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts +++ b/packages/core/src/RenderingEngine/helpers/getOrCreateCanvas.ts @@ -65,6 +65,67 @@ export function setCanvasCreator(canvasCreatorArg) { canvasCreator = canvasCreatorArg; } +/** + * Extent to match when updating from a render result (e.g. offscreen canvas or viewport size). + */ +export type ViewportCanvasExtent = + | HTMLCanvasElement + | { width: number; height: number }; + +/** + * Updates an on-screen viewport canvas size and aspect ratio so it fills + * correctly and resizes without flicker. Handles two cases: + * + * 1. No extent/offscreen: size from the canvas's displayed rect (e.g. when + * enabling viewports or after layout change). Returns undefined. + * + * 2. Extent or offscreen canvas provided: size to match the rendered extent. + * Returns true if the canvas was updated (caller should redraw), false if + * it already matched. + * + * @param canvas - The on-screen canvas to update. + * @param extentOrOffscreen - Optional. When an HTMLCanvasElement, use its + * width/height as the target extent. When an object with width and height + * (e.g. viewport sWidth/sHeight when the offscreen canvas is shared), use that. + * @returns undefined when no extent/offscreen (element-rect update); + * true when canvas was updated (rendering/redraw needed); + * false when canvas already matched the extent. + */ +export function updateCanvasSizeAndAspectRatio( + canvas: HTMLCanvasElement, + extentOrOffscreen?: ViewportCanvasExtent +): boolean | undefined { + if (extentOrOffscreen === undefined) { + const devicePixelRatio = window.devicePixelRatio || 1; + const rect = canvas.getBoundingClientRect(); + const w = Math.round(rect.width * devicePixelRatio); + const h = Math.round(rect.height * devicePixelRatio); + if (w > 0 && h > 0) { + canvas.width = w; + canvas.height = h; + canvas.style.aspectRatio = `${w} / ${h}`; + } + return undefined; + } + + const { width: targetW, height: targetH } = extentOrOffscreen; + + if (targetW < 1 || targetH < 1) { + return false; + } + + const needsUpdate = canvas.width !== targetW || canvas.height !== targetH; + + if (needsUpdate) { + canvas.width = targetW; + canvas.height = targetH; + canvas.style.aspectRatio = `${targetW} / ${targetH}`; + return true; + } + + return false; +} + /** * Create a canvas or returns the one that already exists for a given element. * It first checks if the element has a canvas, if not it creates one and returns it. From e96d3afe420e06814dd2edb358139d6e6cb3e0ad Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Wed, 25 Feb 2026 23:07:11 +0000 Subject: [PATCH 35/90] chore(version): Update package versions to 4.18.2 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a952369cfd..bb37d8ccff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +### Bug Fixes + +- Centralize aspect ratio handling for flicker removal ([#2634](https://github.com/cornerstonejs/cornerstone3D/issues/2634)) ([4db0984](https://github.com/cornerstonejs/cornerstone3D/commit/4db0984dfc191d92a227c92c323d89ac47c90c30)) + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 7f79804992..ea3a8e1b2d 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -d09bce920c738d72f5a1b06e7dde7b6638d53395 \ No newline at end of file +4db0984dfc191d92a227c92c323d89ac47c90c30 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 9ebb44dd4d..59b6a6e566 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.18.1", + "version": "4.18.2", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 5637000433..63fccf7e35 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 50fca6fc7a..2fa4efe051 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.18.1", + "version": "4.18.2", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.1", - "@cornerstonejs/tools": "4.18.1" + "@cornerstonejs/core": "4.18.2", + "@cornerstonejs/tools": "4.18.2" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 39b76a48cc..c48b47cf8b 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index b8256128bc..4386c49b27 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.18.1", + "version": "4.18.2", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.1", - "@cornerstonejs/tools": "4.18.1" + "@cornerstonejs/core": "4.18.2", + "@cornerstonejs/tools": "4.18.2" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 6b9aefb0fc..55796b7ccf 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +### Bug Fixes + +- Centralize aspect ratio handling for flicker removal ([#2634](https://github.com/cornerstonejs/cornerstone3D/issues/2634)) ([4db0984](https://github.com/cornerstonejs/cornerstone3D/commit/4db0984dfc191d92a227c92c323d89ac47c90c30)) + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 7bf5c77cca..6f5e091385 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.18.1", + "version": "4.18.2", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index ee0325d9a4..2f34fa5012 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 0aa8e274ad..92168c727f 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.18.1", + "version": "4.18.2", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.1", + "@cornerstonejs/core": "4.18.2", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 24914ec0f4..8781971330 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index b288b1f417..16c7bb8d95 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.18.1", + "version": "4.18.2", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.1", - "@cornerstonejs/tools": "4.18.1", + "@cornerstonejs/core": "4.18.2", + "@cornerstonejs/tools": "4.18.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 11764d8727..c82bdf638b 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 4c8424e91b..869511669e 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.18.1", + "version": "4.18.2", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.1" + "@cornerstonejs/core": "4.18.2" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 412da78f67..771b769359 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index ad2fd601f4..d0f9cc2d1e 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.18.1", + "version": "4.18.2", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.1", - "@cornerstonejs/tools": "4.18.1", + "@cornerstonejs/core": "4.18.2", + "@cornerstonejs/tools": "4.18.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index c240a9d817..cba12d35c4 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.18.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.0...v4.18.1) (2026-02-25) ### Bug Fixes diff --git a/packages/tools/package.json b/packages/tools/package.json index e174890a59..a7a49bf3f7 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.18.1", + "version": "4.18.2", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.1", + "@cornerstonejs/core": "4.18.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index fdcb11c123..44d21d2ebe 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.1'; +export const version = '4.18.2'; diff --git a/version.json b/version.json index 9e80114cd3..771bfb56a8 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.18.1", - "commit": "d09bce920c738d72f5a1b06e7dde7b6638d53395" + "version": "4.18.2", + "commit": "4db0984dfc191d92a227c92c323d89ac47c90c30" } \ No newline at end of file diff --git a/version.txt b/version.txt index 5288623ab6..e9c8cf37f9 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.18.1 \ No newline at end of file +4.18.2 \ No newline at end of file From 15e2c6de70231deec547e971ec1d95eaa7c98a85 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Wed, 25 Feb 2026 21:06:26 -0500 Subject: [PATCH 36/90] fix(RectangleROI Adapter): Assume that ConceptNameCodeSequence is a single element array. (#2636) --- .../adapters/Cornerstone3D/RectangleROI.ts | 192 +++++++++--------- 1 file changed, 92 insertions(+), 100 deletions(-) diff --git a/packages/adapters/src/adapters/Cornerstone3D/RectangleROI.ts b/packages/adapters/src/adapters/Cornerstone3D/RectangleROI.ts index be2ec6f0c6..3d1a8a0156 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/RectangleROI.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/RectangleROI.ts @@ -1,121 +1,113 @@ -import { utilities } from "dcmjs"; +import { utilities } from 'dcmjs'; -import { toScoords } from "../helpers"; -import MeasurementReport from "./MeasurementReport"; -import BaseAdapter3D from "./BaseAdapter3D"; -import { extractAllNUMGroups, restoreAdditionalMetrics } from "./metricHandler"; +import { toScoords } from '../helpers'; +import MeasurementReport from './MeasurementReport'; +import BaseAdapter3D from './BaseAdapter3D'; +import { extractAllNUMGroups, restoreAdditionalMetrics } from './metricHandler'; const { Polyline: TID300Polyline } = utilities.TID300; export class RectangleROI extends BaseAdapter3D { - static { - this.init("RectangleROI", TID300Polyline); - // Register using the Cornerstone 1.x name so this tool is used to load it - this.registerLegacy(); - this.registerType("DCM:111030", "POLYLINE", 4); - this.registerType("DCM:111030", "POLYLINE", 5); - } + static { + this.init('RectangleROI', TID300Polyline); + // Register using the Cornerstone 1.x name so this tool is used to load it + this.registerLegacy(); + this.registerType('DCM:111030', 'POLYLINE', 4); + this.registerType('DCM:111030', 'POLYLINE', 5); + } - public static isValidMeasurement(measurement) { - const graphicItem = this.getGraphicItem(measurement); - const pointsCount = this.getPointsCount(graphicItem); - return ( - this.getGraphicType(graphicItem) === "POLYLINE" && - (pointsCount === 4 || pointsCount === 5) - ); - } + public static isValidMeasurement(measurement) { + const graphicItem = this.getGraphicItem(measurement); + const pointsCount = this.getPointsCount(graphicItem); + return ( + this.getGraphicType(graphicItem) === 'POLYLINE' && + (pointsCount === 4 || pointsCount === 5) + ); + } - public static getMeasurementData( + public static getMeasurementData( + MeasurementGroup, + sopInstanceUIDToImageIdMap, + metadata + ) { + const { state, worldCoords, referencedImageId, ReferencedFrameNumber } = + MeasurementReport.getSetupMeasurementData( MeasurementGroup, sopInstanceUIDToImageIdMap, - metadata - ) { - const { state, worldCoords, referencedImageId, ReferencedFrameNumber } = - MeasurementReport.getSetupMeasurementData( - MeasurementGroup, - sopInstanceUIDToImageIdMap, - metadata, - this.toolType - ); + metadata, + this.toolType + ); - // If the rectangle is closed (5 points with first point repeated), remove the duplicate - const points = - worldCoords.length === 5 ? worldCoords.slice(0, 4) : worldCoords; + // If the rectangle is closed (5 points with first point repeated), remove the duplicate + const points = + worldCoords.length === 5 ? worldCoords.slice(0, 4) : worldCoords; - const areaGroup = MeasurementGroup.ContentSequence.find( - g => - g.ValueType === "NUM" && - g.ConceptNameCodeSequence[0].CodeMeaning === "Area" - ); + const areaGroup = MeasurementGroup.ContentSequence.find( + (g) => + g.ValueType === 'NUM' && + g.ConceptNameCodeSequence.CodeMeaning === 'Area' + ); - const referencedSOPInstanceUID = state.sopInstanceUid; - const allNUMGroups = extractAllNUMGroups( - MeasurementGroup, - referencedSOPInstanceUID - ); - const measurementNUMGroups = - allNUMGroups[referencedSOPInstanceUID] || {}; + const referencedSOPInstanceUID = state.sopInstanceUid; + const allNUMGroups = extractAllNUMGroups( + MeasurementGroup, + referencedSOPInstanceUID + ); + const measurementNUMGroups = allNUMGroups[referencedSOPInstanceUID] || {}; - const cachedStats = referencedImageId - ? { - [`imageId:${referencedImageId}`]: { - area: - areaGroup?.MeasuredValueSequence?.[0]?.NumericValue || - 0, - areaUnit: - areaGroup?.MeasuredValueSequence?.[0] - ?.MeasurementUnitsCodeSequence?.CodeValue, - ...restoreAdditionalMetrics(measurementNUMGroups) - } - } - : {}; - state.annotation.data = { - ...state.annotation.data, - handles: { - ...state.annotation.data.handles, - points: [points[0], points[1], points[3], points[2]] - }, - cachedStats, - frameNumber: ReferencedFrameNumber - }; - return state; - } + const cachedStats = referencedImageId + ? { + [`imageId:${referencedImageId}`]: { + area: areaGroup?.MeasuredValueSequence?.[0]?.NumericValue || 0, + areaUnit: + areaGroup?.MeasuredValueSequence?.[0] + ?.MeasurementUnitsCodeSequence?.CodeValue, + ...restoreAdditionalMetrics(measurementNUMGroups), + }, + } + : {}; + const handlesPoints = [points[0], points[1], points[3], points[2]]; + state.annotation.data = { + ...state.annotation.data, + handles: { + ...state.annotation.data.handles, + points: handlesPoints, + }, + cachedStats, + frameNumber: ReferencedFrameNumber, + }; + return state; + } - static getTID300RepresentationArguments(tool, is3DMeasurement = false) { - const { data, finding, findingSites, metadata } = tool; + static getTID300RepresentationArguments(tool, is3DMeasurement = false) { + const { data, finding, findingSites, metadata } = tool; - const { referencedImageId } = metadata; - const scoordProps = { - is3DMeasurement, - referencedImageId - }; + const { referencedImageId } = metadata; + const scoordProps = { + is3DMeasurement, + referencedImageId, + }; - const corners = toScoords(scoordProps, data.handles.points); + const corners = toScoords(scoordProps, data.handles.points); - const { area, perimeter, max, mean, stdDev, areaUnit, modalityUnit } = - data.cachedStats[`imageId:${referencedImageId}`] || {}; + const { area, perimeter, max, mean, stdDev, areaUnit, modalityUnit } = + data.cachedStats[`imageId:${referencedImageId}`] || {}; - return { - points: [ - corners[0], - corners[1], - corners[3], - corners[2], - corners[0] - ], - area, - perimeter, - max, - mean, - stdDev, - areaUnit, - modalityUnit, - trackingIdentifierTextValue: this.trackingIdentifierTextValue, - finding, - findingSites: findingSites || [], - use3DSpatialCoordinates: is3DMeasurement - }; - } + return { + points: [corners[0], corners[1], corners[3], corners[2], corners[0]], + area, + perimeter, + max, + mean, + stdDev, + areaUnit, + modalityUnit, + trackingIdentifierTextValue: this.trackingIdentifierTextValue, + finding, + findingSites: findingSites || [], + use3DSpatialCoordinates: is3DMeasurement, + }; + } } export default RectangleROI; From eee3f5b86f84ec09504fc656535c6bed0dc4284d Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Thu, 26 Feb 2026 02:10:12 +0000 Subject: [PATCH 37/90] chore(version): Update package versions to 4.18.3 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 6 ++++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb37d8ccff..856a23936b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +### Bug Fixes + +- **RectangleROI Adapter:** Assume that ConceptNameCodeSequence is a single element array. ([#2636](https://github.com/cornerstonejs/cornerstone3D/issues/2636)) ([dd2e8d3](https://github.com/cornerstonejs/cornerstone3D/commit/dd2e8d32a1da346a3bc3d9adc33d4050be1ea8cb)) + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) ### Bug Fixes diff --git a/commit.txt b/commit.txt index ea3a8e1b2d..b0acb450d5 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -4db0984dfc191d92a227c92c323d89ac47c90c30 \ No newline at end of file +dd2e8d32a1da346a3bc3d9adc33d4050be1ea8cb \ No newline at end of file diff --git a/lerna.json b/lerna.json index 59b6a6e566..2731b9eaaa 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.18.2", + "version": "4.18.3", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 63fccf7e35..905146a036 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +### Bug Fixes + +- **RectangleROI Adapter:** Assume that ConceptNameCodeSequence is a single element array. ([#2636](https://github.com/cornerstonejs/cornerstone3D/issues/2636)) ([dd2e8d3](https://github.com/cornerstonejs/cornerstone3D/commit/dd2e8d32a1da346a3bc3d9adc33d4050be1ea8cb)) + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 2fa4efe051..3c4cce1f62 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.18.2", + "version": "4.18.3", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.2", - "@cornerstonejs/tools": "4.18.2" + "@cornerstonejs/core": "4.18.3", + "@cornerstonejs/tools": "4.18.3" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index c48b47cf8b..8754848e51 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 4386c49b27..7c23052a42 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.18.2", + "version": "4.18.3", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.2", - "@cornerstonejs/tools": "4.18.2" + "@cornerstonejs/core": "4.18.3", + "@cornerstonejs/tools": "4.18.3" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 55796b7ccf..95131fb90f 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) ### Bug Fixes diff --git a/packages/core/package.json b/packages/core/package.json index 6f5e091385..fec953840e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.18.2", + "version": "4.18.3", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 2f34fa5012..a3b9f31783 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 92168c727f..49836935c5 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.18.2", + "version": "4.18.3", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.2", + "@cornerstonejs/core": "4.18.3", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 8781971330..ce45deda53 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 16c7bb8d95..c457acf02a 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.18.2", + "version": "4.18.3", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.2", - "@cornerstonejs/tools": "4.18.2", + "@cornerstonejs/core": "4.18.3", + "@cornerstonejs/tools": "4.18.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index c82bdf638b..0d8d26f3c9 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 869511669e..4ae300d9dc 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.18.2", + "version": "4.18.3", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.2" + "@cornerstonejs/core": "4.18.3" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 771b769359..c2257a704b 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index d0f9cc2d1e..95cf079a55 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.18.2", + "version": "4.18.3", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.2", - "@cornerstonejs/tools": "4.18.2", + "@cornerstonejs/core": "4.18.3", + "@cornerstonejs/tools": "4.18.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index cba12d35c4..053c17dad7 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.18.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.1...v4.18.2) (2026-02-25) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index a7a49bf3f7..7e74ec18d1 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.18.2", + "version": "4.18.3", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.2", + "@cornerstonejs/core": "4.18.3", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 44d21d2ebe..1e2688a593 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.2'; +export const version = '4.18.3'; diff --git a/version.json b/version.json index 771bfb56a8..d53034e6d9 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.18.2", - "commit": "4db0984dfc191d92a227c92c323d89ac47c90c30" + "version": "4.18.3", + "commit": "dd2e8d32a1da346a3bc3d9adc33d4050be1ea8cb" } \ No newline at end of file diff --git a/version.txt b/version.txt index e9c8cf37f9..5255dcf3bd 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.18.2 \ No newline at end of file +4.18.3 \ No newline at end of file From e2d99273cb16d31ba20147ff588584fb53dade26 Mon Sep 17 00:00:00 2001 From: "Martin Bellehumeur, M. Eng." <23396581+mbellehumeur@users.noreply.github.com> Date: Fri, 27 Feb 2026 19:10:33 +0100 Subject: [PATCH 38/90] Feature/ rotate clipping planes in volume cropping tool (#2547) * feat(rendering): Add function to calculate acquisition plane reformat orientation based on image orientation patient values * feat(volumeCropping): Enhance volume cropping tool with clipping plane functionality and UI improvements - Updated the volume cropping tool to include toggles for clipping planes and handles. - Improved instructions for user interaction with clipping planes. - Added new utility functions for handling clipping planes, including copying and calculating adaptive sphere radius. - Introduced constants for clipping plane indices and tolerances. - Enhanced the tool's ability to handle rotated volumes and maintain proper clipping plane orientation. - Added new utility functions for line intersection and color conversion. - Refactored existing code for better clarity and maintainability. * refactor(getCameraVectors): Remove unused getAcquisitionPlaneReformatOrientation function and its documentation * refactor(volumeCroppingTool): Remove commented-out code and improve clarity in clipping plane updates * Removed 'virtual' annotations from control tool -remnamnts from the crosshair tool * refactor(volumeCroppingTool): Remove commented-out code for clarity in toggle button functionality * refactor(volumeCroppingControlTool): Remove unused methods and variables * refactor(volumeCroppingTool): Simplify sphere and clipping plane updates - Removed redundant code for updating sphere positions and clipping planes. - Introduced utility methods for better clarity and maintainability. - Enhanced error handling by using a consistent error variable naming convention. - Improved the organization of the code related to corner and face sphere calculations. * refactor(volumeCroppingControlTool): Manage event listeners for tool state changes - Added event listener for VOLUMECROPPING_TOOL_CHANGED when the tool is enabled. - Removed event listener to prevent memory leaks when the tool is disabled. - Cleaned up commented-out code for better clarity in viewport initialization and tool selection logic. * refactor(volumeCroppingTool): Enhance code structure for clipping plane management - Introduced utility methods for retrieving volume actors and mappers. - Simplified clipping plane application logic by consolidating related functionality. - Improved error handling in viewport retrieval and ensured safe access to viewports info. - Cleaned up redundant code for better maintainability and clarity. * refactor(volumeCroppingControlTool): Clean up commented code and improve clarity - Removed unnecessary comments throughout the code to enhance readability. - Streamlined the logic for handling annotations and viewport updates. - Improved organization of event listener management for tool state changes. * Applied Agents.md * Use existing ImageToWorld * refactor(VolumeCroppingTool): Simplify diagonal calculation using vec3.distance * refactor(VolumeCroppingTool): Replace manual normalization with vec3.normalize for direction vectors * refactor(VolumeCroppingTool): Remove calculateNewCornerPosition function and simplify corner position calculation * refactor(VolumeCroppingTool): Optimize line extension calculation using vec3.scaleAndAdd * refactor(VolumeCroppingTool): Enhance orientation detection by utilizing vec3.dot for improved accuracy * refactor(VolumeCroppingTool): Modularize 3D drawing utilities by adding addLine3DBetweenPoints and calculateAdaptiveSphereRadius functions * feat(colorUtilities): Add convertColorArrayToRgbString utility and integrate it into core package * feat(volumeCroppingTool): Add shift-drag to ratate the clipping planes --------- Co-authored-by: Bill Wallace --- .../RenderingEngine/BaseRenderingEngine.ts | 13 +- packages/core/src/index.ts | 2 + .../utilities/convertColorArrayToRgbString.ts | 14 + packages/core/src/utilities/index.ts | 2 + .../examples/volumeCroppingTool/index.ts | 61 +- .../src/tools/VolumeCroppingControlTool.ts | 1322 +++-------- .../tools/src/tools/VolumeCroppingTool.ts | 1959 ++++++++++------- .../draw3D/addLine3DBetweenPoints.ts | 58 + .../draw3D/calculateAdaptiveSphereRadius.ts | 26 + packages/tools/src/utilities/draw3D/index.ts | 2 + packages/tools/src/utilities/index.ts | 2 + .../computePlanePlaneIntersection.ts | 64 + .../src/utilities/volumeCropping/constants.ts | 62 + .../volumeCropping/copyClippingPlanes.ts | 16 + .../extractVolumeDirectionVectors.ts | 36 + .../findLineBoundsIntersection.ts | 96 + .../getColorKeyForPlaneIndex.ts | 23 + .../getOrientationFromNormal.ts | 39 + .../src/utilities/volumeCropping/index.ts | 9 + .../volumeCropping/parseCornerKey.ts | 23 + .../src/utilities/volumeCropping/types.ts | 10 + 21 files changed, 2052 insertions(+), 1787 deletions(-) create mode 100644 packages/core/src/utilities/convertColorArrayToRgbString.ts create mode 100644 packages/tools/src/utilities/draw3D/addLine3DBetweenPoints.ts create mode 100644 packages/tools/src/utilities/draw3D/calculateAdaptiveSphereRadius.ts create mode 100644 packages/tools/src/utilities/draw3D/index.ts create mode 100644 packages/tools/src/utilities/volumeCropping/computePlanePlaneIntersection.ts create mode 100644 packages/tools/src/utilities/volumeCropping/constants.ts create mode 100644 packages/tools/src/utilities/volumeCropping/copyClippingPlanes.ts create mode 100644 packages/tools/src/utilities/volumeCropping/extractVolumeDirectionVectors.ts create mode 100644 packages/tools/src/utilities/volumeCropping/findLineBoundsIntersection.ts create mode 100644 packages/tools/src/utilities/volumeCropping/getColorKeyForPlaneIndex.ts create mode 100644 packages/tools/src/utilities/volumeCropping/getOrientationFromNormal.ts create mode 100644 packages/tools/src/utilities/volumeCropping/index.ts create mode 100644 packages/tools/src/utilities/volumeCropping/parseCornerKey.ts create mode 100644 packages/tools/src/utilities/volumeCropping/types.ts diff --git a/packages/core/src/RenderingEngine/BaseRenderingEngine.ts b/packages/core/src/RenderingEngine/BaseRenderingEngine.ts index 2a3313e791..5ecae8e570 100644 --- a/packages/core/src/RenderingEngine/BaseRenderingEngine.ts +++ b/packages/core/src/RenderingEngine/BaseRenderingEngine.ts @@ -27,6 +27,7 @@ import type { import { OrientationAxis } from '../enums'; import type { VtkOffscreenMultiRenderWindow } from '../types'; import { StatsOverlay } from './helpers/stats'; +import { convertColorArrayToRgbString } from '../utilities/convertColorArrayToRgbString'; // Rendering engines seem to not like rendering things less than 2 pixels per side export const VIEWPORT_MIN_SIZE = 2; @@ -483,15 +484,9 @@ abstract class BaseRenderingEngine { backgroundColor: [number, number, number] ): void { const ctx = canvas.getContext('2d'); - - // Default to black if no background color is set - let fillStyle: string; - if (backgroundColor) { - const rgb = backgroundColor.map((f) => Math.floor(255 * f)); - fillStyle = `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`; - } else { - fillStyle = 'black'; - } + const fillStyle = backgroundColor + ? convertColorArrayToRgbString(backgroundColor) + : 'black'; // We draw over the previous stack with the background color while we // wait for the next stack to load diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index a841d84046..f78d5dd753 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -80,6 +80,7 @@ import * as utilities from './utilities'; import { registerImageLoader } from './loaders/imageLoader'; // since it is used by CSWIL right now import triggerEvent from './utilities/triggerEvent'; +import { convertColorArrayToRgbString } from './utilities/convertColorArrayToRgbString'; import { cornerstoneStreamingImageVolumeLoader } from './loaders/cornerstoneStreamingImageVolumeLoader'; import { cornerstoneStreamingDynamicImageVolumeLoader } from './loaders/cornerstoneStreamingDynamicImageVolumeLoader'; import { cornerstoneMeshLoader } from './loaders/cornerstoneMeshLoader'; @@ -148,6 +149,7 @@ export { // event helpers eventTarget, triggerEvent, + convertColorArrayToRgbString, // Image Loader imageLoader, registerImageLoader, // Todo: remove this after CSWIL uses imageLoader now diff --git a/packages/core/src/utilities/convertColorArrayToRgbString.ts b/packages/core/src/utilities/convertColorArrayToRgbString.ts new file mode 100644 index 0000000000..1d8e4e89aa --- /dev/null +++ b/packages/core/src/utilities/convertColorArrayToRgbString.ts @@ -0,0 +1,14 @@ +/** + * Converts a color array [r, g, b] (values 0-1) to an RGB string. + * If the input is already a string, it returns it as-is. + * + * @param colorArr - Color as array [r, g, b] or RGB string + * @returns RGB string in format "rgb(r, g, b)" + */ +export function convertColorArrayToRgbString( + colorArr: number[] | string +): string { + return Array.isArray(colorArr) + ? `rgb(${colorArr.map((v) => Math.round(v * 255)).join(',')})` + : colorArr; +} diff --git a/packages/core/src/utilities/index.ts b/packages/core/src/utilities/index.ts index 16f0473628..fcba9af39f 100644 --- a/packages/core/src/utilities/index.ts +++ b/packages/core/src/utilities/index.ts @@ -65,6 +65,7 @@ import VoxelManager from './VoxelManager'; import RLEVoxelMap from './RLEVoxelMap'; import roundNumber, { roundToPrecision } from './roundNumber'; import convertToGrayscale from './convertToGrayscale'; +import { convertColorArrayToRgbString } from './convertColorArrayToRgbString'; import getViewportImageIds from './getViewportImageIds'; import { getRandomSampleFromArray } from './getRandomSampleFromArray'; import { getVolumeId } from './getVolumeId'; @@ -133,6 +134,7 @@ export { getViewportModality, windowLevel, convertToGrayscale, + convertColorArrayToRgbString, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, diff --git a/packages/tools/examples/volumeCroppingTool/index.ts b/packages/tools/examples/volumeCroppingTool/index.ts index 70de70e81f..754f726d81 100644 --- a/packages/tools/examples/volumeCroppingTool/index.ts +++ b/packages/tools/examples/volumeCroppingTool/index.ts @@ -35,7 +35,7 @@ const { CrosshairsTool, } = cornerstoneTools; -const { MouseBindings } = csToolsEnums; +const { MouseBindings, KeyboardBindings } = csToolsEnums; const { ViewportType } = Enums; // Define a unique id for the volume @@ -70,7 +70,7 @@ const renderingEngineId = 'myRenderingEngine'; // ======== Set up page ======== // setTitleAndDescription( 'Volume Cropping', - 'Here we demonstrate how to crop a 3D volume with 6 clipping planes aligned on the x,y and z axes.' + 'Here we demonstrate how to crop a volume with 6 clipping planes. Use shift-drag to rotate the clipping planes.' ); const size = '400px'; @@ -135,23 +135,40 @@ content.appendChild(viewportGrid); const instructions = document.createElement('p'); instructions.innerText = ` Basic controls: - - Click/Drag the spheres in VRT or reference lines in the orthographic viewports. - - Rotate , pan or zoom the 3D viewport using the mouse. + - Click/Drag the spheres in 3D or reference lines in the orthographic viewports. + - Rotate, pan or zoom the 3D viewport using the mouse. + - Shift+Drag in the 3D viewport to rotate the crop mapping (clipping planes). - Use the scroll wheel to scroll through the slices in the orthographic viewports. + - Toggle the clipping planes, handles, and rotate clipping planes on drag. `; content.append(instructions); addToggleButtonToToolbar({ - title: 'Toggle 3D handles', + title: 'Toggle Clipping Planes', + defaultToggle: true, + onClick: (toggle) => { + const toolGroupVRT = + cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); + const croppingTool = toolGroupVRT.getToolInstance('VolumeCropping'); + if ( + croppingTool && + typeof croppingTool.setClippingPlanesVisible === 'function' + ) { + croppingTool.setClippingPlanesVisible( + !croppingTool.getClippingPlanesVisible() + ); + } + }, +}); + +addToggleButtonToToolbar({ + title: 'Toggle Handles', defaultToggle: false, onClick: (toggle) => { - // Get the tool group for the 3D viewport const toolGroupVRT = cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); - // Get the VolumeCroppingTool instance from the tool group const croppingTool = toolGroupVRT.getToolInstance('VolumeCropping'); - // Call setHandlesVisible on the tool instance if (croppingTool && typeof croppingTool.setHandlesVisible === 'function') { croppingTool.setHandlesVisible(!croppingTool.getHandlesVisible()); } @@ -159,22 +176,19 @@ addToggleButtonToToolbar({ }); addToggleButtonToToolbar({ - title: 'Toggle Cropping Planes', + title: 'Toggle Rotate Clipping Planes on drag (without shift)', defaultToggle: false, onClick: (toggle) => { - // Get the tool group for the 3D viewport const toolGroupVRT = cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); - // Get the VolumeCroppingTool instance from the tool group const croppingTool = toolGroupVRT.getToolInstance('VolumeCropping'); - // Call setClippingPlanesVisible on the tool instance if ( croppingTool && - typeof croppingTool.setClippingPlanesVisible === 'function' + typeof croppingTool.setRotatePlanesOnDrag === 'function' && + typeof croppingTool.getRotatePlanesOnDrag === 'function' ) { - croppingTool.setClippingPlanesVisible( - !croppingTool.getClippingPlanesVisible() - ); + const currentState = croppingTool.getRotatePlanesOnDrag(); + croppingTool.setRotatePlanesOnDrag(!currentState); } }, }); @@ -367,9 +381,7 @@ async function run(numViewports = getNumViewportsFromUrl()) { overlayMarkerType: OrientationMarkerTool.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE, }); - // toolGroupVRT.setToolActive(OrientationMarkerTool.toolName); - const isMobile = window.matchMedia('(any-pointer:coarse)').matches; const viewport = renderingEngine.getViewport(viewportId4) as VolumeViewport3D; renderingEngine.renderViewports(activeViewportIds); await setVolumesForViewports( @@ -390,15 +402,28 @@ async function run(numViewports = getNumViewportsFromUrl()) { corners: [0, 0, 1], }, showCornerSpheres: true, + showClippingPlanes: true, initialCropFactor: 0.2, }); toolGroupVRT.setToolActive(VolumeCroppingTool.toolName, { bindings: [ + { mouseButton: MouseBindings.Primary }, { mouseButton: MouseBindings.Primary, + modifierKey: KeyboardBindings.Shift, }, ], }); + + // Explicitly enable clipping planes (onSetToolActive forces them to false by default) + const croppingTool = toolGroupVRT.getToolInstance('VolumeCropping'); + if ( + croppingTool && + typeof croppingTool.setClippingPlanesVisible === 'function' + ) { + croppingTool.setClippingPlanesVisible(true); + } + viewport.setZoom(1.2); viewport.render(); }); diff --git a/packages/tools/src/tools/VolumeCroppingControlTool.ts b/packages/tools/src/tools/VolumeCroppingControlTool.ts index 1db0f07e4d..e09ba67bca 100644 --- a/packages/tools/src/tools/VolumeCroppingControlTool.ts +++ b/packages/tools/src/tools/VolumeCroppingControlTool.ts @@ -1,6 +1,5 @@ -import { vec2, vec3 } from 'gl-matrix'; +import { vec2 } from 'gl-matrix'; import vtkMath from '@kitware/vtk.js/Common/Core/Math'; -import type vtkPlane from '@kitware/vtk.js/Common/DataModel/Plane'; import { AnnotationTool } from './base'; @@ -9,17 +8,14 @@ import { getRenderingEngine, getEnabledElementByIds, getEnabledElement, - utilities as csUtils, Enums, CONSTANTS, triggerEvent, eventTarget, + convertColorArrayToRgbString, } from '@cornerstonejs/core'; -import { - getToolGroup, - getToolGroupForViewport, -} from '../store/ToolGroupManager'; +import { getToolGroup } from '../store/ToolGroupManager'; import { addAnnotation, @@ -38,7 +34,6 @@ import { resetElementCursor, hideElementCursor, } from '../cursors/elementCursor'; -import liangBarksyClip from '../utilities/math/vec2/liangBarksyClip'; import * as lineSegment from '../utilities/math/line'; import type { @@ -53,8 +48,17 @@ import type { } from '../types'; import { isAnnotationLocked } from '../stateManagement/annotation/annotationLocking'; import triggerAnnotationRenderForViewportIds from '../utilities/triggerAnnotationRenderForViewportIds'; - -const { RENDERING_DEFAULTS } = CONSTANTS; +import { + type ClippingPlane, + NUM_CLIPPING_PLANES, + LINE_INTERSECTION_TOLERANCE, + POINT_PROXIMITY_THRESHOLD_PIXELS, + copyClippingPlanes, + getColorKeyForPlaneIndex, + getOrientationFromNormal, + computePlanePlaneIntersection, + findLineBoundsIntersection, +} from '../utilities/volumeCropping'; type ReferenceLine = [ viewport: { @@ -65,33 +69,23 @@ type ReferenceLine = [ startPoint: Types.Point2, endPoint: Types.Point2, type: 'min' | 'max', + planeIndex?: number, // 0=XMIN, 1=XMAX, 2=YMIN, 3=YMAX, 4=ZMIN, 5=ZMAX ]; interface VolumeCroppingAnnotation extends Annotation { data: { handles: { - activeOperation: number | null; // 0 translation, 1 rotation handles, 2 slab thickness handles - toolCenter: Types.Point3; - toolCenterMin: Types.Point3; - toolCenterMax: Types.Point3; + activeOperation: number | null; // OPERATION.DRAG, OPERATION.ROTATE, etc. + activeType?: 'min' | 'max'; // Which plane set is being dragged + activePlaneIndex?: number; // Which specific plane is being dragged (0-5) + // Clipping planes stored directly - ordered as [XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX] + clippingPlanes: ClippingPlane[]; }; activeViewportIds: string[]; // a list of the viewport ids connected to the reference lines being translated viewportId: string; referenceLines: ReferenceLine[]; // set in renderAnnotation - clippingPlanes?: vtkPlane[]; // clipping planes for the viewport - clippingPlaneReferenceLines?: ReferenceLine[]; orientation?: string; // AXIAL, CORONAL, SAGITTAL }; - isVirtual?: boolean; - virtualNormal?: Types.Point3; -} - -function defaultReferenceLineColor() { - return 'rgb(0, 200, 0)'; -} - -function defaultReferenceLineControllable() { - return true; } const OPERATION = { @@ -121,9 +115,9 @@ const OPERATION = { * // Configure with custom colors and settings * toolGroup.setToolConfiguration(VolumeCroppingControlTool.toolName, { * lineColors: { - * AXIAL: [1.0, 0.0, 0.0], // Red for axial views - * CORONAL: [0.0, 1.0, 0.0], // Green for coronal views - * SAGITTAL: [1.0, 1.0, 0.0], // Yellow for sagittal views + * AXIAL: [1.0, 0.0, 0.0], // Red for Z-axis planes + * CORONAL: [0.0, 1.0, 0.0], // Green for Y-axis planes + * SAGITTAL: [1.0, 1.0, 0.0], // Yellow for X-axis planes * }, * lineWidth: 2.0, * extendReferenceLines: true, @@ -139,13 +133,8 @@ const OPERATION = { * @extends AnnotationTool * * @property {string} seriesInstanceUID - Frame of reference for the tool - * @property {VolumeCroppingAnnotation[]} _virtualAnnotations - Store virtual annotations for missing viewport orientations (e.g., CT_CORONAL when only axial and sagittal are present) * @property {string} toolName - Static tool identifier: 'VolumeCroppingControl' - * @property {Array} sphereStates - Array of sphere state objects for 3D volume manipulation handles - * @property {number|null} draggingSphereIndex - Index of currently dragged sphere, null when not dragging - * @property {Types.Point3} toolCenter - Center point of the cropping volume in world coordinates [x, y, z] - * @property {Types.Point3} toolCenterMin - Minimum bounds of the cropping volume in world coordinates [xMin, yMin, zMin] - * @property {Types.Point3} toolCenterMax - Maximum bounds of the cropping volume in world coordinates [xMax, yMax, zMax] + * @property {ClippingPlane[]} clippingPlanes - Array of 6 clipping planes ordered as [XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX] * @property {Function} _getReferenceLineColor - Optional callback to determine reference line color per viewport * @property {Function} _getReferenceLineControllable - Optional callback to determine if reference lines are interactive per viewport * @@ -164,9 +153,10 @@ const OPERATION = { * @property {boolean} mobile.enabled - Enable mobile touch interactions (default: false) * @property {number} mobile.opacity - Opacity for mobile interactions (default: 0.8) * @property {Object} lineColors - Color configuration for different viewport orientations - * @property {number[]} lineColors.AXIAL - RGB color array for axial viewport lines [r, g, b] (default: [1.0, 0.0, 0.0]) - * @property {number[]} lineColors.CORONAL - RGB color array for coronal viewport lines [r, g, b] (default: [0.0, 1.0, 0.0]) - * @property {number[]} lineColors.SAGITTAL - RGB color array for sagittal viewport lines [r, g, b] (default: [1.0, 1.0, 0.0]) + * @property {number[]} lineColors.AXIAL - RGB color array for Z-axis planes [r, g, b] (default: [1.0, 0.0, 0.0]) + * @property {number[]} lineColors.CORONAL - RGB color array for Y-axis planes [r, g, b] (default: [0.0, 1.0, 0.0]) + * @property {number[]} lineColors.SAGITTAL - RGB color array for X-axis planes [r, g, b] (default: [1.0, 1.0, 0.0]) + * Note: These keys use orientation names for API compatibility, but refer to volume axes (X, Y, Z), not viewport orientations. * @property {number[]} lineColors.UNKNOWN - RGB color array for unknown orientation lines [r, g, b] (default: [0.0, 0.0, 1.0]) * @property {number} lineWidth - Default width of reference lines in pixels (default: 1.5) * @property {number} lineWidthActive - Width of reference lines when actively dragging in pixels (default: 2.5) @@ -183,21 +173,9 @@ const OPERATION = { * - Limited to orthogonal viewport orientations (axial, coronal, sagittal)l */ class VolumeCroppingControlTool extends AnnotationTool { - // Store virtual annotations (e.g., for missing orientations like CT_CORONAL) - _virtualAnnotations: VolumeCroppingAnnotation[] = []; static toolName; seriesInstanceUID?: string; - sphereStates: { - point: Types.Point3; - axis: string; - uid: string; - sphereSource; - sphereActor; - }[] = []; - draggingSphereIndex: number | null = null; - toolCenter: Types.Point3 = [0, 0, 0]; - toolCenterMin: Types.Point3 = [0, 0, 0]; - toolCenterMax: Types.Point3 = [0, 0, 0]; + clippingPlanes: ClippingPlane[] = []; _getReferenceLineColor?: (viewportId: string) => string; _getReferenceLineControllable?: (viewportId: string) => boolean; constructor( @@ -220,9 +198,9 @@ class VolumeCroppingControlTool extends AnnotationTool { opacity: 0.8, }, lineColors: { - AXIAL: [1.0, 0.0, 0.0], // Red for axial - CORONAL: [0.0, 1.0, 0.0], // Green for coronal - SAGITTAL: [1.0, 1.0, 0.0], // Yellow for sagittal + AXIAL: [1.0, 0.0, 0.0], // Red for Z-axis planes + CORONAL: [0.0, 1.0, 0.0], // Green for Y-axis planes + SAGITTAL: [1.0, 1.0, 0.0], // Yellow for X-axis planes UNKNOWN: [0.0, 0.0, 1.0], // Blue for unknown }, lineWidth: 1.5, @@ -234,10 +212,9 @@ class VolumeCroppingControlTool extends AnnotationTool { this._getReferenceLineColor = toolProps.configuration?.getReferenceLineColor || - defaultReferenceLineColor; + (() => 'rgb(0, 200, 0)'); this._getReferenceLineControllable = - toolProps.configuration?.getReferenceLineControllable || - defaultReferenceLineControllable; + toolProps.configuration?.getReferenceLineControllable || (() => true); const viewportsInfo = getToolGroup(this.toolGroupId)?.viewportsInfo; @@ -248,12 +225,14 @@ class VolumeCroppingControlTool extends AnnotationTool { if (viewportsInfo && viewportsInfo.length > 0) { const { viewportId, renderingEngineId } = viewportsInfo[0]; - const enabledElement = getEnabledElementByIds( - viewportId, - renderingEngineId - ); const renderingEngine = getRenderingEngine(renderingEngineId); + if (!renderingEngine) { + return; + } const viewport = renderingEngine.getViewport(viewportId); + if (!viewport) { + return; + } const volumeActors = viewport.getActors(); if (!volumeActors || !volumeActors.length) { console.warn( @@ -263,66 +242,11 @@ class VolumeCroppingControlTool extends AnnotationTool { } const imageData = volumeActors[0].actor.getMapper().getInputData(); if (imageData) { - const dimensions = imageData.getDimensions(); - const spacing = imageData.getSpacing(); - const origin = imageData.getOrigin(); this.seriesInstanceUID = imageData.seriesInstanceUID || 'unknown'; - const cropFactor = this.configuration.initialCropFactor ?? 0.2; - this.toolCenter = [ - origin[0] + cropFactor * (dimensions[0] - 1) * spacing[0], - origin[1] + cropFactor * (dimensions[1] - 1) * spacing[1], - origin[2] + cropFactor * (dimensions[2] - 1) * spacing[2], - ]; - const maxCropFactor = 1 - cropFactor; - this.toolCenterMin = [ - origin[0] + cropFactor * (dimensions[0] - 1) * spacing[0], - origin[1] + cropFactor * (dimensions[1] - 1) * spacing[1], - origin[2] + cropFactor * (dimensions[2] - 1) * spacing[2], - ]; - this.toolCenterMax = [ - origin[0] + maxCropFactor * (dimensions[0] - 1) * spacing[0], - origin[1] + maxCropFactor * (dimensions[1] - 1) * spacing[1], - origin[2] + maxCropFactor * (dimensions[2] - 1) * spacing[2], - ]; } } } - _updateToolCentersFromViewport(viewport) { - const volumeActors = viewport.getActors(); - if (!volumeActors || !volumeActors.length) { - return; - } - const imageData = volumeActors[0].actor.getMapper().getInputData(); - if (!imageData) { - return; - } - this.seriesInstanceUID = imageData.seriesInstanceUID || 'unknown'; - const dimensions = imageData.getDimensions(); - const spacing = imageData.getSpacing(); - const origin = imageData.getOrigin(); - const cropFactor = this.configuration.initialCropFactor ?? 0.2; - const cropStart = cropFactor / 2; - const cropEnd = 1 - cropFactor / 2; - this.toolCenter = [ - origin[0] + - ((cropStart + cropEnd) / 2) * (dimensions[0] - 1) * spacing[0], - origin[1] + - ((cropStart + cropEnd) / 2) * (dimensions[1] - 1) * spacing[1], - origin[2] + - ((cropStart + cropEnd) / 2) * (dimensions[2] - 1) * spacing[2], - ]; - this.toolCenterMin = [ - origin[0] + cropStart * (dimensions[0] - 1) * spacing[0], - origin[1] + cropStart * (dimensions[1] - 1) * spacing[1], - origin[2] + cropStart * (dimensions[2] - 1) * spacing[2], - ]; - this.toolCenterMax = [ - origin[0] + cropEnd * (dimensions[0] - 1) * spacing[0], - origin[1] + cropEnd * (dimensions[1] - 1) * spacing[1], - origin[2] + cropEnd * (dimensions[2] - 1) * spacing[2], - ]; - } /** * Gets the camera from the viewport, and adds annotation for the viewport * to the annotationManager. If any annotation is found in the annotationManager, it @@ -333,10 +257,7 @@ class VolumeCroppingControlTool extends AnnotationTool { initializeViewport = ({ renderingEngineId, viewportId, - }: Types.IViewportId): { - normal: Types.Point3; - point: Types.Point3; - } => { + }: Types.IViewportId): void => { if (!renderingEngineId || !viewportId) { console.warn( 'VolumeCroppingControlTool: Missing renderingEngineId or viewportId' @@ -352,9 +273,18 @@ class VolumeCroppingControlTool extends AnnotationTool { } const { viewport } = enabledElement; - this._updateToolCentersFromViewport(viewport); + + // Update seriesInstanceUID from viewport + const volumeActors = viewport.getActors(); + if (volumeActors && volumeActors.length > 0) { + const imageData = volumeActors[0].actor.getMapper().getInputData(); + if (imageData) { + this.seriesInstanceUID = imageData.seriesInstanceUID || 'unknown'; + } + } + const { element } = viewport; - const { position, focalPoint, viewPlaneNormal } = viewport.getCamera(); + const { position, focalPoint } = viewport.getCamera(); // Check if there is already annotation for this viewport let annotations = this._getAnnotations(enabledElement); @@ -369,7 +299,7 @@ class VolumeCroppingControlTool extends AnnotationTool { } // Determine orientation from camera normal, fallback to viewportId string - const orientation = this._getOrientationFromNormal( + const orientation = getOrientationFromNormal( viewport.getCamera().viewPlaneNormal ); @@ -382,11 +312,12 @@ class VolumeCroppingControlTool extends AnnotationTool { }, data: { handles: { - toolCenter: this.toolCenter, - toolCenterMin: this.toolCenterMin, - toolCenterMax: this.toolCenterMax, + activeOperation: null, // OPERATION.DRAG, OPERATION.ROTATE, etc. + clippingPlanes: + this.clippingPlanes.length > 0 + ? copyClippingPlanes(this.clippingPlanes) + : [], // Will be populated from VolumeCroppingTool }, - activeOperation: null, // 0 translation, 1 rotation handles, 2 slab thickness handles activeViewportIds: [], // a list of the viewport ids connected to the reference lines being translated viewportId, referenceLines: [], // set in renderAnnotation @@ -395,10 +326,6 @@ class VolumeCroppingControlTool extends AnnotationTool { }; addAnnotation(annotation, element); - return { - normal: viewPlaneNormal, - point: viewport.canvasToWorld([100, 100]), - }; }; _getViewportsInfo = () => { @@ -407,18 +334,12 @@ class VolumeCroppingControlTool extends AnnotationTool { }; onSetToolInactive() { - console.debug( - `VolumeCroppingControlTool: onSetToolInactive called for tool ${this.getToolName()}` - ); + // Tool inactive state is managed by BaseTool } onSetToolActive() { - // console.debug( - // `VolumeCroppingControlTool: onSetToolActive called for tool ${this.getToolName()}` - // ); const viewportsInfo = this._getViewportsInfo(); - // Check if any annotation exists before proceeding let anyAnnotationExists = false; for (const vpInfo of viewportsInfo) { const enabledElement = getEnabledElementByIds( @@ -435,7 +356,7 @@ class VolumeCroppingControlTool extends AnnotationTool { this._unsubscribeToViewportNewVolumeSet(viewportsInfo); this._subscribeToViewportNewVolumeSet(viewportsInfo); // Request the volume cropping tool to send current planes - this._computeToolCenter(viewportsInfo); + this._initializeViewports(viewportsInfo); triggerEvent(eventTarget, Events.VOLUMECROPPINGCONTROL_TOOL_CHANGED, { toolGroupId: this.toolGroupId, viewportsInfo: viewportsInfo, @@ -460,33 +381,28 @@ class VolumeCroppingControlTool extends AnnotationTool { }); } - // Render after removing annotations to clear reference lines enabledElement.viewport.render(); } } } onSetToolEnabled() { - console.debug( - `VolumeCroppingControlTool: onSetToolEnabled called for tool ${this.getToolName()}` + eventTarget.addEventListener( + Events.VOLUMECROPPING_TOOL_CHANGED, + this._onSphereMoved ); - const viewportsInfo = this._getViewportsInfo(); - - //this._computeToolCenter(viewportsInfo); } onSetToolDisabled() { - console.debug( - `VolumeCroppingControlTool: onSetToolDisabled called for tool ${this.getToolName()}` - ); const viewportsInfo = this._getViewportsInfo(); this._unsubscribeToViewportNewVolumeSet(viewportsInfo); - // has no value when the tool is disabled - // since viewports can change (zoom, pan, scroll) - // between disabled and enabled/active states. - // so we just remove the annotations from the state + eventTarget.removeEventListener( + Events.VOLUMECROPPING_TOOL_CHANGED, + this._onSphereMoved + ); + viewportsInfo.forEach(({ renderingEngineId, viewportId }) => { const enabledElement = getEnabledElementByIds( viewportId, @@ -540,373 +456,53 @@ class VolumeCroppingControlTool extends AnnotationTool { viewport.render(); } - this._computeToolCenter(viewportsInfo); + this._initializeViewports(viewportsInfo); }; - computeToolCenter = () => { - const viewportsInfo = this._getViewportsInfo(); - }; - - _computeToolCenter = (viewportsInfo): void => { - if (!viewportsInfo || !viewportsInfo[0]) { + _initializeViewports = (viewportsInfo: Types.IViewportId[]): void => { + if (!viewportsInfo?.length || !viewportsInfo[0]) { console.warn( - ' _computeToolCenter : No valid viewportsInfo for computeToolCenter.' + 'VolumeCroppingControlTool: No valid viewportsInfo for initialization.' ); return; } - // Support any missing orientation - const orientationIds = ['AXIAL', 'CORONAL', 'SAGITTAL']; - // Get present orientations from viewportsInfo - const presentOrientations = viewportsInfo - .map((vp) => { - if (vp.renderingEngineId) { - const renderingEngine = getRenderingEngine(vp.renderingEngineId); - const viewport = renderingEngine.getViewport(vp.viewportId); - if (viewport && viewport.getCamera) { - const orientation = this._getOrientationFromNormal( - viewport.getCamera().viewPlaneNormal - ); - if (orientation) { - return orientation; - } - } - } - return null; - }) - .filter(Boolean); - const missingOrientation = orientationIds.find( - (id) => !presentOrientations.includes(id) - ); - - // Initialize present viewports - - const presentNormals: Types.Point3[] = []; - const presentCenters: Types.Point3[] = []; - // Find present viewport infos by matching orientation, not viewportId - const presentViewportInfos = viewportsInfo.filter((vp) => { - let orientation = null; - if (vp.renderingEngineId) { - const renderingEngine = getRenderingEngine(vp.renderingEngineId); - const viewport = renderingEngine.getViewport(vp.viewportId); - if (viewport && viewport.getCamera) { - orientation = this._getOrientationFromNormal( - viewport.getCamera().viewPlaneNormal - ); - } - } - return orientation && orientationIds.includes(orientation); - }); - presentViewportInfos.forEach((vpInfo) => { - const { normal, point } = this.initializeViewport(vpInfo); - presentNormals.push(normal); - presentCenters.push(point); + viewportsInfo.forEach((vpInfo) => { + this.initializeViewport(vpInfo); }); - // If all three orientations are present, nothing to synthesize - if (presentViewportInfos.length === 2 && missingOrientation) { - // Synthesize virtual annotation for the missing orientation - const virtualNormal: Types.Point3 = [0, 0, 0]; - vec3.cross(virtualNormal, presentNormals[0], presentNormals[1]); - vec3.normalize(virtualNormal, virtualNormal); - const virtualCenter: Types.Point3 = [ - (presentCenters[0][0] + presentCenters[1][0]) / 2, - (presentCenters[0][1] + presentCenters[1][1]) / 2, - (presentCenters[0][2] + presentCenters[1][2]) / 2, - ]; - const orientation = null; - const virtualAnnotation: VolumeCroppingAnnotation = { - highlighted: false, - metadata: { - cameraPosition: [...virtualCenter], - cameraFocalPoint: [...virtualCenter], - toolName: this.getToolName(), - }, - data: { - handles: { - activeOperation: null, - toolCenter: this.toolCenter, - toolCenterMin: this.toolCenterMin, - toolCenterMax: this.toolCenterMax, - }, - activeViewportIds: [], - viewportId: missingOrientation, - referenceLines: [], - orientation, - }, - isVirtual: true, - virtualNormal, - }; - this._virtualAnnotations = [virtualAnnotation]; - } else if (presentViewportInfos.length === 1) { - // Synthesize two virtual annotations for the two missing orientations - // Get present orientation from camera normal - let presentOrientation = null; - const vpInfo = presentViewportInfos[0]; - if (vpInfo.renderingEngineId) { - const renderingEngine = getRenderingEngine(vpInfo.renderingEngineId); - const viewport = renderingEngine.getViewport(vpInfo.viewportId); - if (viewport && viewport.getCamera) { - presentOrientation = this._getOrientationFromNormal( - viewport.getCamera().viewPlaneNormal - ); - } - } - const presentCenter = presentCenters[0]; - // Map canonical normals to orientation strings - const canonicalNormals = { - AXIAL: [0, 0, 1], - CORONAL: [0, 1, 0], - SAGITTAL: [1, 0, 0], - }; - // missingIds: AXIAL, CORONAL, SAGITTAL - const missingIds = orientationIds.filter( - (id) => id !== presentOrientation - ); - const virtualAnnotations: VolumeCroppingAnnotation[] = missingIds.map( - (orientation) => { - // Use orientation string to get canonical normal - const normal = canonicalNormals[orientation]; - const virtualAnnotation = { - highlighted: false, - metadata: { - cameraPosition: [...presentCenter], - cameraFocalPoint: [...presentCenter], - toolName: this.getToolName(), - }, - data: { - handles: { - activeOperation: null, - toolCenter: this.toolCenter, - toolCenterMin: this.toolCenterMin, - toolCenterMax: this.toolCenterMax, - }, - activeViewportIds: [], - viewportId: orientation, // Use orientation string for virtual annotation - referenceLines: [], - orientation, - }, - isVirtual: true, - virtualNormal: normal, - }; - - return virtualAnnotation; - } - ); - this._virtualAnnotations = virtualAnnotations; - } - - if (viewportsInfo && viewportsInfo.length) { - triggerAnnotationRenderForViewportIds( - viewportsInfo.map(({ viewportId }) => viewportId) - ); - } + triggerAnnotationRenderForViewportIds( + viewportsInfo.map(({ viewportId }) => viewportId) + ); }; - /** - * Utility function to map a camera normal to an orientation string. - * Returns 'AXIAL', 'CORONAL', 'SAGITTAL', or null if not matched. - */ - _getOrientationFromNormal(normal: Types.Point3): string | null { - if (!normal) { - return null; - } - // Canonical normals - const canonical = { - AXIAL: [0, 0, 1], - CORONAL: [0, 1, 0], - SAGITTAL: [1, 0, 0], - }; - // Use a tolerance for floating point comparison - const tol = 1e-2; - for (const [key, value] of Object.entries(canonical)) { - if ( - Math.abs(normal[0] - value[0]) < tol && - Math.abs(normal[1] - value[1]) < tol && - Math.abs(normal[2] - value[2]) < tol - ) { - return key; - } - // Also check negative direction - if ( - Math.abs(normal[0] + value[0]) < tol && - Math.abs(normal[1] + value[1]) < tol && - Math.abs(normal[2] + value[2]) < tol - ) { - return key; - } + _syncWithVolumeCroppingTool(originalClippingPlanes: ClippingPlane[]) { + if ( + !originalClippingPlanes || + originalClippingPlanes.length < NUM_CLIPPING_PLANES + ) { + return; } - return null; - } - _syncWithVolumeCroppingTool(originalClippingPlanes) { - // Sync our tool centers with the clipping plane bounds - const planes = originalClippingPlanes; - if (planes.length >= 6) { - this.toolCenterMin = [ - planes[0].origin[0], // XMIN - planes[2].origin[1], // YMIN - planes[4].origin[2], // ZMIN - ]; - this.toolCenterMax = [ - planes[1].origin[0], // XMAX - planes[3].origin[1], // YMAX - planes[5].origin[2], // ZMAX - ]; - this.toolCenter = [ - (this.toolCenterMin[0] + this.toolCenterMax[0]) / 2, - (this.toolCenterMin[1] + this.toolCenterMax[1]) / 2, - (this.toolCenterMin[2] + this.toolCenterMax[2]) / 2, - ]; - // Update annotations based on their specific orientation - const viewportsInfo = this._getViewportsInfo(); - viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { - const enabledElement = getEnabledElementByIds( - viewportId, - renderingEngineId - ); - if (enabledElement) { - const annotations = this._getAnnotations(enabledElement); - annotations.forEach((annotation) => { - if ( - annotation.data && - annotation.data.handles && - annotation.data.orientation - ) { - const orientation = annotation.data.orientation; - - // Update tool centers based on the specific orientation - if (orientation === 'AXIAL') { - // Axial views see X and Y clipping planes - annotation.data.handles.toolCenterMin = [ - planes[0].origin[0], // XMIN - planes[2].origin[1], // YMIN - annotation.data.handles.toolCenterMin[2], // Keep existing Z - ]; - annotation.data.handles.toolCenterMax = [ - planes[1].origin[0], // XMAX - planes[3].origin[1], // YMAX - annotation.data.handles.toolCenterMax[2], // Keep existing Z - ]; - } else if (orientation === 'CORONAL') { - // Coronal views see X and Z clipping planes - annotation.data.handles.toolCenterMin = [ - planes[0].origin[0], // XMIN - annotation.data.handles.toolCenterMin[1], // Keep existing Y - planes[4].origin[2], // ZMIN - ]; - annotation.data.handles.toolCenterMax = [ - planes[1].origin[0], // XMAX - annotation.data.handles.toolCenterMax[1], // Keep existing Y - planes[5].origin[2], // ZMAX - ]; - } else if (orientation === 'SAGITTAL') { - // Sagittal views see Y and Z clipping planes - annotation.data.handles.toolCenterMin = [ - annotation.data.handles.toolCenterMin[0], // Keep existing X - planes[2].origin[1], // YMIN - planes[4].origin[2], // ZMIN - ]; - annotation.data.handles.toolCenterMax = [ - annotation.data.handles.toolCenterMax[0], // Keep existing X - planes[3].origin[1], // YMAX - planes[5].origin[2], // ZMAX - ]; - } - - // Update the tool center as midpoint - annotation.data.handles.toolCenter = [ - (annotation.data.handles.toolCenterMin[0] + - annotation.data.handles.toolCenterMax[0]) / - 2, - (annotation.data.handles.toolCenterMin[1] + - annotation.data.handles.toolCenterMax[1]) / - 2, - (annotation.data.handles.toolCenterMin[2] + - annotation.data.handles.toolCenterMax[2]) / - 2, - ]; - } - }); - } - }); + this.clippingPlanes = copyClippingPlanes(originalClippingPlanes); - // Update virtual annotations as well - if (this._virtualAnnotations && this._virtualAnnotations.length > 0) { - this._virtualAnnotations.forEach((annotation) => { - if ( - annotation.data && - annotation.data.handles && - annotation.data.orientation - ) { - const orientation = annotation.data.orientation.toUpperCase(); - - // Apply the same orientation-specific logic to virtual annotations - if (orientation === 'AXIAL') { - annotation.data.handles.toolCenterMin = [ - planes[0].origin[0], // XMIN - planes[2].origin[1], // YMIN - annotation.data.handles.toolCenterMin[2], - ]; - annotation.data.handles.toolCenterMax = [ - planes[1].origin[0], // XMAX - planes[3].origin[1], // YMAX - annotation.data.handles.toolCenterMax[2], - ]; - } else if (orientation === 'CORONAL') { - annotation.data.handles.toolCenterMin = [ - planes[0].origin[0], // XMIN - annotation.data.handles.toolCenterMin[1], - planes[4].origin[2], // ZMIN - ]; - annotation.data.handles.toolCenterMax = [ - planes[1].origin[0], // XMAX - annotation.data.handles.toolCenterMax[1], - planes[5].origin[2], // ZMAX - ]; - } else if (orientation === 'SAGITTAL') { - annotation.data.handles.toolCenterMin = [ - annotation.data.handles.toolCenterMin[0], - planes[2].origin[1], // YMIN - planes[4].origin[2], // ZMIN - ]; - annotation.data.handles.toolCenterMax = [ - annotation.data.handles.toolCenterMax[0], - planes[3].origin[1], // YMAX - planes[5].origin[2], // ZMAX - ]; - } - - annotation.data.handles.toolCenter = [ - (annotation.data.handles.toolCenterMin[0] + - annotation.data.handles.toolCenterMax[0]) / - 2, - (annotation.data.handles.toolCenterMin[1] + - annotation.data.handles.toolCenterMax[1]) / - 2, - (annotation.data.handles.toolCenterMin[2] + - annotation.data.handles.toolCenterMax[2]) / - 2, - ]; + const viewportsInfo = this._getViewportsInfo(); + viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + if (enabledElement) { + const annotations = this._getAnnotations(enabledElement); + annotations.forEach((annotation) => { + if (annotation.data?.handles) { + annotation.data.handles.clippingPlanes = copyClippingPlanes( + this.clippingPlanes + ); } }); } + }); - // Trigger re-render to show updated reference lines - triggerAnnotationRenderForViewportIds( - viewportsInfo.map(({ viewportId }) => viewportId) - ); - } - } - - setToolCenter(toolCenter: Types.Point3, handleType): void { - if (handleType === 'min') { - this.toolCenterMin = [...toolCenter]; - } else if (handleType === 'max') { - this.toolCenterMax = [...toolCenter]; - } - const viewportsInfo = this._getViewportsInfo(); - - // assuming all viewports are in the same rendering engine triggerAnnotationRenderForViewportIds( viewportsInfo.map(({ viewportId }) => viewportId) ); @@ -946,7 +542,6 @@ class VolumeCroppingControlTool extends AnnotationTool { const { data } = filteredAnnotations[0]; const viewportIdArray = []; - // put all the draggable reference lines in the viewportIdArray const referenceLines = data.referenceLines || []; for (let i = 0; i < referenceLines.length; ++i) { @@ -959,11 +554,9 @@ class VolumeCroppingControlTool extends AnnotationTool { continue; } viewportIdArray.push(otherViewport.id); - i++; } data.activeViewportIds = [...viewportIdArray]; - // set translation operation data.handles.activeOperation = OPERATION.DRAG; evt.preventDefault(); @@ -975,7 +568,7 @@ class VolumeCroppingControlTool extends AnnotationTool { } cancel = () => { - console.log('Not implemented yet'); + // Cancel operation - to be implemented if needed }; /** @@ -995,7 +588,14 @@ class VolumeCroppingControlTool extends AnnotationTool { canvasCoords: Types.Point2, proximity: number ): boolean => { - if (this._pointNearTool(element, annotation, canvasCoords, 6)) { + if ( + this._pointNearTool( + element, + annotation, + canvasCoords, + POINT_PROXIMITY_THRESHOLD_PIXELS + ) + ) { return true; } @@ -1023,8 +623,6 @@ class VolumeCroppingControlTool extends AnnotationTool { handle: ToolHandle, interactionType: InteractionTypes ): void { - // You can customize this logic as needed - // For now, just call toolSelectedCallback if you want default behavior this.toolSelectedCallback(evt, annotation, interactionType); } @@ -1055,16 +653,13 @@ class VolumeCroppingControlTool extends AnnotationTool { continue; } - const previousActiveOperation = data.handles.activeOperation; - const previousActiveViewportIds = - data.activeViewportIds && data.activeViewportIds.length > 0 - ? [...data.activeViewportIds] - : []; - - // This init are necessary, because when we move the mouse they are not cleaned by _endCallback data.activeViewportIds = []; - let near = false; - near = this._pointNearTool(element, annotation, canvasCoords, 6); + const near = this._pointNearTool( + element, + annotation, + canvasCoords, + POINT_PROXIMITY_THRESHOLD_PIXELS + ); const nearToolAndNotMarkedActive = near && !highlighted; const notNearToolAndMarkedActive = !near && highlighted; @@ -1086,18 +681,13 @@ class VolumeCroppingControlTool extends AnnotationTool { // Use orientation property for matching let orientation = null; if (enabledElement.viewport && enabledElement.viewport.getCamera) { - orientation = this._getOrientationFromNormal( + orientation = getOrientationFromNormal( enabledElement.viewport.getCamera().viewPlaneNormal ); } - // Filter annotations for this orientation, including virtual annotations + // Filter annotations for this orientation const filtered = annotations.filter((annotation) => { - // Always include virtual annotations for reference line rendering - if (annotation.isVirtual) { - return true; - } - // Match by orientation property if ( annotation.data.orientation && orientation && @@ -1127,7 +717,7 @@ class VolumeCroppingControlTool extends AnnotationTool { const s2_x = q2[0] - q1[0]; const s2_y = q2[1] - q1[1]; const denom = -s2_x * s1_y + s1_x * s2_y; - if (Math.abs(denom) < 1e-8) { + if (Math.abs(denom) < LINE_INTERSECTION_TOLERANCE) { return null; } // Parallel const s = (-s1_y * (p1[0] - q1[0]) + s1_x * (p1[1] - q1[1])) / denom; @@ -1139,17 +729,12 @@ class VolumeCroppingControlTool extends AnnotationTool { } const viewportsInfo = this._getViewportsInfo(); if (!viewportsInfo || viewportsInfo.length === 0) { - // No viewports available return false; } let renderStatus = false; const { viewport, renderingEngine } = enabledElement; const { element } = viewport; - let annotations = this._getAnnotations(enabledElement); - // If we have virtual annotations , always include them - if (this._virtualAnnotations && this._virtualAnnotations.length) { - annotations = annotations.concat(this._virtualAnnotations); - } + const annotations = this._getAnnotations(enabledElement); const camera = viewport.getCamera(); const filteredToolAnnotations = this.filterInteractableAnnotationsForElement(element, annotations); @@ -1157,7 +742,6 @@ class VolumeCroppingControlTool extends AnnotationTool { // viewport Annotation: use the first annotation for the current viewport const viewportAnnotation = filteredToolAnnotations[0]; if (!viewportAnnotation || !viewportAnnotation.data) { - // No annotation for this viewport return renderStatus; } @@ -1174,209 +758,90 @@ class VolumeCroppingControlTool extends AnnotationTool { ); const data = viewportAnnotation.data; - // Get all other annotations except the current viewport's - const otherViewportAnnotations = annotations; - const volumeCroppingCenterCanvasMin = viewport.worldToCanvas( - this.toolCenterMin - ); - const volumeCroppingCenterCanvasMax = viewport.worldToCanvas( - this.toolCenterMax - ); - - const referenceLines = []; - - // get canvas information for points and lines (canvas box, canvas horizontal distances) - const canvasBox = [0, 0, clientWidth, clientHeight]; - - otherViewportAnnotations.forEach((annotation) => { - const data = annotation.data; - // Type guard for isVirtual property - const isVirtual = - 'isVirtual' in annotation && - (annotation as { isVirtual?: boolean }).isVirtual === true; - data.handles.toolCenter = this.toolCenter; - let otherViewport, - otherCamera, - clientWidth, - clientHeight, - otherCanvasDiagonalLength, - otherCanvasCenter, - otherViewportCenterWorld; - if (isVirtual) { - // Synthesize a virtual viewport/camera for any missing orientation - const realViewports = viewportsInfo.filter( - (vp) => vp.viewportId !== data.viewportId - ); - if (realViewports.length === 2) { - const vp1 = renderingEngine.getViewport(realViewports[0].viewportId); - const vp2 = renderingEngine.getViewport(realViewports[1].viewportId); - const normal1 = vp1.getCamera().viewPlaneNormal; - const normal2 = vp2.getCamera().viewPlaneNormal; - const virtualNormal = vec3.create(); - vec3.cross(virtualNormal, normal1, normal2); - vec3.normalize(virtualNormal, virtualNormal); - otherCamera = { - viewPlaneNormal: virtualNormal, - position: data.handles.toolCenter, - focalPoint: data.handles.toolCenter, - viewUp: [0, 1, 0], - }; - clientWidth = viewport.canvas.clientWidth; - clientHeight = viewport.canvas.clientHeight; - otherCanvasDiagonalLength = Math.sqrt( - clientWidth * clientWidth + clientHeight * clientHeight - ); - otherCanvasCenter = [clientWidth * 0.5, clientHeight * 0.5]; - otherViewportCenterWorld = data.handles.toolCenter; - otherViewport = { - id: data.viewportId, - canvas: viewport.canvas, - canvasToWorld: () => data.handles.toolCenter, - }; - } else { - // Only one real viewport: use canonical normal from virtual annotation - const virtualNormal = (annotation as VolumeCroppingAnnotation) - .virtualNormal ?? [0, 0, 1]; - otherCamera = { - viewPlaneNormal: virtualNormal, - position: data.handles.toolCenter, - focalPoint: data.handles.toolCenter, - viewUp: [0, 1, 0], - }; - clientWidth = viewport.canvas.clientWidth; - clientHeight = viewport.canvas.clientHeight; - otherCanvasDiagonalLength = Math.sqrt( - clientWidth * clientWidth + clientHeight * clientHeight - ); - otherCanvasCenter = [clientWidth * 0.5, clientHeight * 0.5]; - otherViewportCenterWorld = data.handles.toolCenter; - otherViewport = { - id: data.viewportId, - canvas: viewport.canvas, - canvasToWorld: () => data.handles.toolCenter, - }; - } + let clippingPlanes = viewportAnnotation.data.handles.clippingPlanes; + if (!clippingPlanes || clippingPlanes.length < NUM_CLIPPING_PLANES) { + // Try to use this.clippingPlanes if annotation doesn't have them yet + if ( + this.clippingPlanes && + this.clippingPlanes.length >= NUM_CLIPPING_PLANES + ) { + clippingPlanes = this.clippingPlanes; + data.handles.clippingPlanes = copyClippingPlanes(this.clippingPlanes); } else { - otherViewport = renderingEngine.getViewport(data.viewportId as string); - otherCamera = otherViewport.getCamera(); - clientWidth = otherViewport.canvas.clientWidth; - clientHeight = otherViewport.canvas.clientHeight; - otherCanvasDiagonalLength = Math.sqrt( - clientWidth * clientWidth + clientHeight * clientHeight - ); - otherCanvasCenter = [clientWidth * 0.5, clientHeight * 0.5]; - otherViewportCenterWorld = - otherViewport.canvasToWorld(otherCanvasCenter); + return false; } + } - const otherViewportControllable = this._getReferenceLineControllable( - otherViewport.id - ); + const { viewPlaneNormal, focalPoint } = camera; + const referenceLines: ReferenceLine[] = []; + const planeTypes: Array<'min' | 'max'> = [ + 'min', + 'max', + 'min', + 'max', + 'min', + 'max', + ]; - const direction = [0, 0, 0]; - vtkMath.cross( - camera.viewPlaneNormal as [number, number, number], - otherCamera.viewPlaneNormal as [number, number, number], - direction as [number, number, number] - ); - vtkMath.normalize(direction as [number, number, number]); - vtkMath.multiplyScalar( - direction as [number, number, number], - otherCanvasDiagonalLength - ); + // Draw all clipping planes as reference lines + // PLANEINDEX: XMIN=0, XMAX=1, YMIN=2, YMAX=3, ZMIN=4, ZMAX=5 + for (let planeIndex = 0; planeIndex < NUM_CLIPPING_PLANES; planeIndex++) { + const clippingPlane = clippingPlanes[planeIndex]; - const pointWorld0: [number, number, number] = [0, 0, 0]; - vtkMath.add( - otherViewportCenterWorld as [number, number, number], - direction as [number, number, number], - pointWorld0 - ); - const pointWorld1: [number, number, number] = [0, 0, 0]; - vtkMath.subtract( - otherViewportCenterWorld as [number, number, number], - direction as [number, number, number], - pointWorld1 + // Compute intersection of clipping plane with viewport view plane + const intersection = computePlanePlaneIntersection( + clippingPlane, + viewPlaneNormal, + focalPoint ); - const pointCanvas0 = viewport.worldToCanvas(pointWorld0 as Types.Point3); - const otherViewportCenterCanvas = viewport.worldToCanvas([ - otherViewportCenterWorld[0] ?? 0, - otherViewportCenterWorld[1] ?? 0, - otherViewportCenterWorld[2] ?? 0, - ] as [number, number, number] as Types.Point3); - - const canvasUnitVectorFromCenter = vec2.create(); - vec2.subtract( - canvasUnitVectorFromCenter, - pointCanvas0, - otherViewportCenterCanvas - ); - vec2.normalize(canvasUnitVectorFromCenter, canvasUnitVectorFromCenter); + if (!intersection) { + continue; // Planes are parallel, skip + } - const canvasVectorFromCenterLong = vec2.create(); - vec2.scale( - canvasVectorFromCenterLong, - canvasUnitVectorFromCenter, - canvasDiagonalLength * 100 + // Find where the intersection line crosses viewport bounds + const lineBounds = findLineBoundsIntersection( + intersection.point, + intersection.direction, + viewport ); - // For min - const refLinesCenterMin = otherViewportControllable - ? vec2.clone(volumeCroppingCenterCanvasMin) - : vec2.clone(otherViewportCenterCanvas); - const refLinePointMinOne = vec2.create(); - const refLinePointMinTwo = vec2.create(); - vec2.add( - refLinePointMinOne, - refLinesCenterMin, - canvasVectorFromCenterLong - ); - vec2.subtract( - refLinePointMinTwo, - refLinesCenterMin, - canvasVectorFromCenterLong - ); - liangBarksyClip(refLinePointMinOne, refLinePointMinTwo, canvasBox); - referenceLines.push([ - otherViewport, - refLinePointMinOne, - refLinePointMinTwo, - 'min', - ]); + if (!lineBounds) { + continue; + } - // For max center - const refLinesCenterMax = otherViewportControllable - ? vec2.clone(volumeCroppingCenterCanvasMax) - : vec2.clone(otherViewportCenterCanvas); - const refLinePointMaxOne = vec2.create(); - const refLinePointMaxTwo = vec2.create(); - vec2.add( - refLinePointMaxOne, - refLinesCenterMax, - canvasVectorFromCenterLong - ); - vec2.subtract( - refLinePointMaxTwo, - refLinesCenterMax, - canvasVectorFromCenterLong - ); - liangBarksyClip(refLinePointMaxOne, refLinePointMaxTwo, canvasBox); + // Create reference line for this clipping plane referenceLines.push([ - otherViewport, - refLinePointMaxOne, - refLinePointMaxTwo, - 'max', + { + id: viewport.id, + canvas: viewport.canvas, + }, + lineBounds.start, + lineBounds.end, + planeTypes[planeIndex], + planeIndex, ]); - }); + } data.referenceLines = referenceLines; + // Draw the reference lines const viewportColor = this._getReferenceLineColor(viewport.id); - const color = + const defaultColor = viewportColor !== undefined ? viewportColor : 'rgb(200, 200, 200)'; referenceLines.forEach((line, lineIndex) => { + const [otherViewport, startPoint, endPoint, type, planeIndex] = line; + + if ( + planeIndex === undefined || + planeIndex < 0 || + planeIndex >= NUM_CLIPPING_PLANES + ) { + return; + } + // Calculate intersections with other lines in this viewport const intersections = []; for (let j = 0; j < referenceLines.length; ++j) { @@ -1385,8 +850,8 @@ class VolumeCroppingControlTool extends AnnotationTool { } const otherLine = referenceLines[j]; const intersection = lineIntersection2D( - line[1], - line[2], + startPoint, + endPoint, otherLine[1], otherLine[2] ); @@ -1398,39 +863,14 @@ class VolumeCroppingControlTool extends AnnotationTool { } } - // get color for the reference line using orientation - const otherViewport = line[0]; - let orientation = null; - // Try to get orientation from annotation data or viewportId - if (otherViewport && otherViewport.id) { - // Try to get from annotation if available - const annotationForViewport = annotations.find( - (a) => a.data.viewportId === otherViewport.id - ); - if (annotationForViewport && annotationForViewport.data.orientation) { - orientation = String( - annotationForViewport.data.orientation - ).toUpperCase(); - } else { - // Fallback: try to infer from viewportId - const idUpper = otherViewport.id.toUpperCase(); - if (idUpper.includes('AXIAL')) { - orientation = 'AXIAL'; - } else if (idUpper.includes('CORONAL')) { - orientation = 'CORONAL'; - } else if (idUpper.includes('SAGITTAL')) { - orientation = 'SAGITTAL'; - } - } - } - // Use lineColors from configuration + const colorKey = getColorKeyForPlaneIndex(planeIndex); + const lineColors = this.configuration.lineColors || {}; - const colorArr = lineColors[orientation] || - lineColors.unknown || [1.0, 0.0, 0.0]; // fallback to red + const colorArr = colorKey + ? lineColors[colorKey] || lineColors.UNKNOWN || [1.0, 0.0, 0.0] + : [1.0, 0.0, 0.0]; // fallback to red // Convert [r,g,b] to rgb string if needed - const color = Array.isArray(colorArr) - ? `rgb(${colorArr.map((v) => Math.round(v * 255)).join(',')})` - : colorArr; + const color = convertColorArrayToRgbString(colorArr); const viewportControllable = this._getReferenceLineControllable( otherViewport.id @@ -1448,57 +888,64 @@ class VolumeCroppingControlTool extends AnnotationTool { lineWidth = this.configuration.activeLineWidth ?? 2.5; } - const lineUID = `${lineIndex}`; - if (viewportControllable) { - if (intersections.length === 2) { - drawLineSvg( - svgDrawingHelper, - annotationUID, - lineUID, - intersections[0].point, - intersections[1].point, - { - color, - lineWidth, - } - ); - } - if ( - this.configuration.extendReferenceLines && - intersections.length === 2 - ) { - if ( - this.configuration.extendReferenceLines && - intersections.length === 2 - ) { - // Sort intersections by distance from line start - const sortedIntersections = intersections - .map((intersection) => ({ - ...intersection, - distance: vec2.distance(line[1], intersection.point), - })) - .sort((a, b) => a.distance - b.distance); - - // Draw dashed lines in correct order - drawLineSvg( - svgDrawingHelper, - annotationUID, - lineUID + '_dashed_before', - line[1], - sortedIntersections[0].point, - { color, lineWidth, lineDash: [4, 4] } - ); - - drawLineSvg( - svgDrawingHelper, - annotationUID, - lineUID + '_dashed_after', - sortedIntersections[1].point, - line[2], - { color, lineWidth, lineDash: [4, 4] } - ); + const lineUID = `plane_${planeIndex}`; + if (intersections.length === 2) { + // Draw line between intersections + drawLineSvg( + svgDrawingHelper, + annotationUID, + lineUID, + intersections[0].point, + intersections[1].point, + { + color, + lineWidth, } - } + ); + } else { + // Draw full line if no intersections + drawLineSvg( + svgDrawingHelper, + annotationUID, + lineUID, + startPoint, + endPoint, + { + color, + lineWidth, + } + ); + } + + // Draw dashed extensions if configured + if ( + this.configuration.extendReferenceLines && + intersections.length === 2 + ) { + const sortedIntersections = intersections + .map((intersection) => ({ + ...intersection, + distance: vec2.distance(startPoint, intersection.point), + })) + .sort((a, b) => a.distance - b.distance); + + drawLineSvg( + svgDrawingHelper, + annotationUID, + lineUID + '_dashed_before', + startPoint, + sortedIntersections[0].point, + { color, lineWidth, lineDash: [4, 4] } + ); + + drawLineSvg( + svgDrawingHelper, + annotationUID, + lineUID + '_dashed_after', + sortedIntersections[1].point, + endPoint, + { color, lineWidth, lineDash: [4, 4] } + ); } }); @@ -1523,7 +970,7 @@ class VolumeCroppingControlTool extends AnnotationTool { circleUID, referenceColorCoordinates as Types.Point2, circleRadius, - { color, fill: color } + { color: defaultColor, fill: defaultColor } ); } @@ -1554,40 +1001,7 @@ class VolumeCroppingControlTool extends AnnotationTool { if (evt.detail.seriesInstanceUID !== this.seriesInstanceUID) { return; } - // This is called when a sphere is moved - const { draggingSphereIndex, toolCenter } = evt.detail; - const newMin: [number, number, number] = [...this.toolCenterMin]; - const newMax: [number, number, number] = [...this.toolCenterMax]; - // face spheres - if (draggingSphereIndex >= 0 && draggingSphereIndex <= 5) { - const axis = Math.floor(draggingSphereIndex / 2); - const isMin = draggingSphereIndex % 2 === 0; - (isMin ? newMin : newMax)[axis] = toolCenter[axis]; - this.setToolCenter(newMin, 'min'); - this.setToolCenter(newMax, 'max'); - return; - } - // corner spheres - if (draggingSphereIndex >= 6 && draggingSphereIndex <= 13) { - const idx = draggingSphereIndex; - if (idx < 10) { - newMin[0] = toolCenter[0]; - } else { - newMax[0] = toolCenter[0]; - } - if ([6, 7, 10, 11].includes(idx)) { - newMin[1] = toolCenter[1]; - } else { - newMax[1] = toolCenter[1]; - } - if (idx % 2 === 0) { - newMin[2] = toolCenter[2]; - } else { - newMax[2] = toolCenter[2]; - } - this.setToolCenter(newMin, 'min'); - this.setToolCenter(newMax, 'max'); - } + return; } }; @@ -1596,25 +1010,23 @@ class VolumeCroppingControlTool extends AnnotationTool { if (viewportsInfo && viewportsInfo.length > 0) { const { viewportId, renderingEngineId } = viewportsInfo[0]; const renderingEngine = getRenderingEngine(renderingEngineId); + if (!renderingEngine) { + return; + } const viewport = renderingEngine.getViewport(viewportId); + if (!viewport) { + return; + } const volumeActors = viewport.getActors(); if (volumeActors.length > 0) { const imageData = volumeActors[0].actor.getMapper().getInputData(); if (imageData) { this.seriesInstanceUID = imageData.seriesInstanceUID; - this._updateToolCentersFromViewport(viewport); - // Update all annotations' handles.toolCenter - const annotations = - getAnnotations(this.getToolName(), viewportId) || []; - annotations.forEach((annotation) => { - if (annotation.data && annotation.data.handles) { - annotation.data.handles.toolCenter = [...this.toolCenter]; - } - }); + // Clipping planes will be updated from VolumeCroppingTool via events } } } - this._computeToolCenter(viewportsInfo); + this._initializeViewports(viewportsInfo); triggerEvent(eventTarget, Events.VOLUMECROPPINGCONTROL_TOOL_CHANGED, { toolGroupId: this.toolGroupId, viewportsInfo: viewportsInfo, @@ -1652,90 +1064,7 @@ class VolumeCroppingControlTool extends AnnotationTool { }); } - _getAnnotationsForViewportsWithDifferentCameras = ( - enabledElement, - annotations - ) => { - const { viewportId, renderingEngine, viewport } = enabledElement; - - const otherViewportAnnotations = annotations.filter( - (annotation) => annotation.data.viewportId !== viewportId - ); - - if (!otherViewportAnnotations || !otherViewportAnnotations.length) { - return []; - } - - const camera = viewport.getCamera(); - const { viewPlaneNormal, position } = camera; - - const viewportsWithDifferentCameras = otherViewportAnnotations.filter( - (annotation) => { - const { viewportId } = annotation.data; - const targetViewport = renderingEngine.getViewport(viewportId); - const cameraOfTarget = targetViewport.getCamera(); - - return !( - csUtils.isEqual( - cameraOfTarget.viewPlaneNormal, - viewPlaneNormal, - 1e-2 - ) && csUtils.isEqual(cameraOfTarget.position, position, 1) - ); - } - ); - - return viewportsWithDifferentCameras; - }; - - _filterViewportWithSameOrientation = ( - enabledElement, - referenceAnnotation, - annotations - ) => { - const { renderingEngine } = enabledElement; - const { data } = referenceAnnotation; - const viewport = renderingEngine.getViewport(data.viewportId); - - const linkedViewportAnnotations = annotations.filter((annotation) => { - const { data } = annotation; - const otherViewport = renderingEngine.getViewport(data.viewportId); - const otherViewportControllable = this._getReferenceLineControllable( - otherViewport.id - ); - - return otherViewportControllable === true; - }); - - if (!linkedViewportAnnotations || !linkedViewportAnnotations.length) { - return []; - } - - const camera = viewport.getCamera(); - const viewPlaneNormal = camera.viewPlaneNormal; - vtkMath.normalize(viewPlaneNormal); - - const otherViewportsAnnotationsWithSameCameraDirection = - linkedViewportAnnotations.filter((annotation) => { - const { viewportId } = annotation.data; - const otherViewport = renderingEngine.getViewport(viewportId); - const otherCamera = otherViewport.getCamera(); - const otherViewPlaneNormal = otherCamera.viewPlaneNormal; - vtkMath.normalize(otherViewPlaneNormal); - - return ( - csUtils.isEqual(viewPlaneNormal, otherViewPlaneNormal, 1e-2) && - csUtils.isEqual(camera.viewUp, otherCamera.viewUp, 1e-2) - ); - }); - - return otherViewportsAnnotationsWithSameCameraDirection; - }; - _activateModify = (element) => { - // mobile sometimes has lingering interaction even when touchEnd triggers - // this check allows for multiple handles to be active which doesn't affect - // tool usage. state.isInteractingWithTool = !this.configuration.mobile?.enabled; element.addEventListener(Events.MOUSE_UP, this._endCallback); @@ -1813,113 +1142,98 @@ class VolumeCroppingControlTool extends AnnotationTool { } const { handles } = viewportAnnotation.data; + const clippingPlanes = handles.clippingPlanes; - if (handles.activeOperation === OPERATION.DRAG) { - if (handles.activeType === 'min') { - this.toolCenterMin[0] += delta[0]; - this.toolCenterMin[1] += delta[1]; - this.toolCenterMin[2] += delta[2]; + if ( + handles.activeOperation === OPERATION.DRAG && + clippingPlanes && + clippingPlanes.length >= NUM_CLIPPING_PLANES + ) { + // If we have a specific plane index, update only that plane + if ( + handles.activePlaneIndex !== undefined && + handles.activePlaneIndex >= 0 && + handles.activePlaneIndex < NUM_CLIPPING_PLANES + ) { + const planeIndex = handles.activePlaneIndex; + const plane = clippingPlanes[planeIndex]; + + // Move the plane along its normal direction + // Project delta onto the plane's normal + const normal = plane.normal; + const dotProd = vtkMath.dot(delta, normal); + const moveDistance = dotProd; + + // Move origin along normal + plane.origin[0] += normal[0] * moveDistance; + plane.origin[1] += normal[1] * moveDistance; + plane.origin[2] += normal[2] * moveDistance; + } else if (handles.activeType === 'min') { + clippingPlanes[0].origin[0] += delta[0]; // XMIN + clippingPlanes[2].origin[1] += delta[1]; // YMIN + clippingPlanes[4].origin[2] += delta[2]; // ZMIN } else if (handles.activeType === 'max') { - this.toolCenterMax[0] += delta[0]; - this.toolCenterMax[1] += delta[1]; - this.toolCenterMax[2] += delta[2]; - } else { - this.toolCenter[0] += delta[0]; - this.toolCenter[1] += delta[1]; - this.toolCenter[2] += delta[2]; + clippingPlanes[1].origin[0] += delta[0]; // XMAX + clippingPlanes[3].origin[1] += delta[1]; // YMAX + clippingPlanes[5].origin[2] += delta[2]; // ZMAX } + + this.clippingPlanes = copyClippingPlanes(clippingPlanes); + + // Update all annotations with the new clipping planes const viewportsInfo = this._getViewportsInfo(); + viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + if (enabledElement) { + const annotations = this._getAnnotations(enabledElement); + annotations.forEach((annotation) => { + if (annotation.data?.handles) { + annotation.data.handles.clippingPlanes = copyClippingPlanes( + this.clippingPlanes + ); + } + }); + } + }); + triggerAnnotationRenderForViewportIds( viewportsInfo.map(({ viewportId }) => viewportId) ); + triggerEvent(eventTarget, Events.VOLUMECROPPINGCONTROL_TOOL_CHANGED, { toolGroupId: this.toolGroupId, - toolCenter: this.toolCenter, - toolCenterMin: this.toolCenterMin, - toolCenterMax: this.toolCenterMax, + clippingPlanes: this.clippingPlanes, handleType: handles.activeType, - viewportOrientation: [], seriesInstanceUID: this.seriesInstanceUID, }); } }; - _applyDeltaShiftToSelectedViewportCameras( - renderingEngine, - viewportsAnnotationsToUpdate, - delta - ) { - // update camera for the other viewports. - // NOTE1: The lines then are rendered by the onCameraModified - viewportsAnnotationsToUpdate.forEach((annotation) => { - this._applyDeltaShiftToViewportCamera(renderingEngine, annotation, delta); - }); - } - - _applyDeltaShiftToViewportCamera( - renderingEngine: Types.IRenderingEngine, - annotation, - delta - ) { - const { data } = annotation; - - const viewport = renderingEngine.getViewport(data.viewportId); - const camera = viewport.getCamera(); - const normal = camera.viewPlaneNormal; - - // Project delta over camera normal - // (we don't need to pan, we need only to scroll the camera as in the wheel stack scroll tool) - const dotProd = vtkMath.dot(delta, normal); - const projectedDelta: Types.Point3 = [...normal]; - vtkMath.multiplyScalar(projectedDelta, dotProd); - - if ( - Math.abs(projectedDelta[0]) > 1e-3 || - Math.abs(projectedDelta[1]) > 1e-3 || - Math.abs(projectedDelta[2]) > 1e-3 - ) { - const newFocalPoint: Types.Point3 = [0, 0, 0]; - const newPosition: Types.Point3 = [0, 0, 0]; - - vtkMath.add(camera.focalPoint, projectedDelta, newFocalPoint); - vtkMath.add(camera.position, projectedDelta, newPosition); - - viewport.setCamera({ - focalPoint: newFocalPoint, - position: newPosition, - }); - viewport.render(); - } - } - _pointNearTool(element, annotation, canvasCoords, proximity) { const { data } = annotation; - // You must have referenceLines available in annotation.data. - // If not, you can recompute them here or store them in renderAnnotation. - // For this example, let's assume you store them as data.referenceLines. const referenceLines = data.referenceLines; const viewportIdArray = []; if (referenceLines) { for (let i = 0; i < referenceLines.length; ++i) { - // Each line: [otherViewport, refLinePointOne, refLinePointMinOne, ...] - const otherViewport = referenceLines[i][0]; - // First segment - const start1 = referenceLines[i][1]; - const end1 = referenceLines[i][2]; - const type = referenceLines[i][3]; // 'min' or 'max' - - const distance1 = lineSegment.distanceToPoint(start1, end1, [ + const [otherViewport, startPoint, endPoint, type, planeIndex] = + referenceLines[i]; + + const distance = lineSegment.distanceToPoint(startPoint, endPoint, [ canvasCoords[0], canvasCoords[1], ]); - if (distance1 <= proximity) { + if (distance <= proximity) { viewportIdArray.push(otherViewport.id); - data.handles.activeOperation = 1; // DRAG + data.handles.activeOperation = OPERATION.DRAG; data.handles.activeType = type; + data.handles.activePlaneIndex = planeIndex; } } } @@ -1929,7 +1243,7 @@ class VolumeCroppingControlTool extends AnnotationTool { this.editData = { annotation, }; - return data.handles.activeOperation === 1 ? true : false; + return data.handles.activeOperation === OPERATION.DRAG ? true : false; } } diff --git a/packages/tools/src/tools/VolumeCroppingTool.ts b/packages/tools/src/tools/VolumeCroppingTool.ts index f8bda9c21a..bd3768e230 100644 --- a/packages/tools/src/tools/VolumeCroppingTool.ts +++ b/packages/tools/src/tools/VolumeCroppingTool.ts @@ -1,6 +1,4 @@ import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; -import vtkPoints from '@kitware/vtk.js/Common/Core/Points'; -import vtkCellArray from '@kitware/vtk.js/Common/Core/CellArray'; import { mat3, mat4, vec3 } from 'gl-matrix'; import vtkMath from '@kitware/vtk.js/Common/Core/Math'; import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; @@ -26,32 +24,19 @@ import { Events } from '../enums'; import type { EventTypes, PublicToolProps, ToolProps } from '../types'; -const PLANEINDEX = { - XMIN: 0, - XMAX: 1, - YMIN: 2, - YMAX: 3, - ZMIN: 4, - ZMAX: 5, -}; -const SPHEREINDEX = { - // cube faces - XMIN: 0, - XMAX: 1, - YMIN: 2, - YMAX: 3, - ZMIN: 4, - ZMAX: 5, - // cube corners - XMIN_YMIN_ZMIN: 6, - XMIN_YMIN_ZMAX: 7, - XMIN_YMAX_ZMIN: 8, - XMIN_YMAX_ZMAX: 9, - XMAX_YMIN_ZMIN: 10, - XMAX_YMIN_ZMAX: 11, - XMAX_YMAX_ZMIN: 12, - XMAX_YMAX_ZMAX: 13, -}; +import { + PLANEINDEX, + SPHEREINDEX, + NUM_CLIPPING_PLANES, + extractVolumeDirectionVectors, + parseCornerKey, + type ClippingPlane, + copyClippingPlanes, +} from '../utilities/volumeCropping'; +import { + addLine3DBetweenPoints, + calculateAdaptiveSphereRadius, +} from '../utilities/draw3D'; /** * VolumeCroppingTool provides manipulatable spheres and real-time volume cropping capabilities. @@ -59,12 +44,16 @@ const SPHEREINDEX = { * * @remarks * This tool creates a complete 3D cropping interface with: - * - 6 face spheres for individual axis cropping + * - 6 face spheres for individual axis cropping (along volume's X, Y, Z axes) * - 8 corner spheres for multi-axis cropping * - 12 edge lines connecting corner spheres * - Real-time clipping plane updates * - Synchronization with VolumeCroppingControlTool working on the same series instance UID for cross-viewport interaction + * - Support for volumes with any orientation (including oblique/rotated volumes) * + * The tool automatically adapts to the volume's orientation by using the volume's direction matrix. + * Clipping planes are aligned with the volume's intrinsic axes (X, Y, Z) rather than world axes, + * ensuring proper cropping regardless of how the volume is oriented in 3D space. * * @example * ```typescript @@ -78,9 +67,9 @@ const SPHEREINDEX = { * showHandles: true, * initialCropFactor: 0.1, * sphereColors: { - * SAGITTAL: [1.0, 1.0, 0.0], // Yellow for sagittal (X-axis) spheres - * CORONAL: [0.0, 1.0, 0.0], // Green for coronal (Y-axis) spheres - * AXIAL: [1.0, 0.0, 0.0], // Red for axial (Z-axis) spheres + * SAGITTAL: [1.0, 1.0, 0.0], // Yellow for X-axis (typically sagittal) spheres + * CORONAL: [0.0, 1.0, 0.0], // Green for Y-axis (typically coronal) spheres + * AXIAL: [1.0, 0.0, 0.0], // Red for Z-axis (typically axial) spheres * CORNERS: [0.0, 0.0, 1.0] // Blue for corner spheres * }, * sphereRadius: 10, @@ -106,8 +95,6 @@ const SPHEREINDEX = { * // Toggle clipping effect * tool.setClippingPlanesVisible(!planesVisible); * - * console.log(`Handles: ${!handlesVisible ? 'shown' : 'hidden'}`); - * console.log(`Cropping: ${!planesVisible ? 'active' : 'disabled'}`); * } * * // Common UI scenarios @@ -132,11 +119,11 @@ const SPHEREINDEX = { * @property {Map} _resizeObservers - Map of ResizeObserver instances for viewport resize handling * @property {Function} _viewportAddedListener - Event listener for new viewport additions * @property {boolean} _hasResolutionChanged - Flag tracking if rendering resolution has been modified during interaction - * @property {Array} originalClippingPlanes - Array of clipping plane objects with origin and normal vectors + * @property {ClippingPlane[]} originalClippingPlanes - Array of clipping plane objects with origin and normal vectors * @property {number|null} draggingSphereIndex - Index of currently dragged sphere, null when not dragging - * @property {Types.Point3} toolCenter - Center point of the cropping volume in world coordinates [x, y, z] * @property {number[]|null} cornerDragOffset - 3D offset vector for corner sphere dragging [dx, dy, dz] * @property {number|null} faceDragOffset - 1D offset value for face sphere dragging along single axis + * @property {boolean} rotatePlanesOnDrag - If true, dragging rotates clipping planes instead of camera (default: false) * @property {Array} sphereStates - Array of sphere state objects containing position, VTK actors, and metadata * @property {Object} edgeLines - Dictionary of edge line actors connecting corner spheres for wireframe visualization * @@ -172,9 +159,15 @@ const SPHEREINDEX = { * @property {number} grabSpherePixelDistance - Pixel distance threshold for sphere selection (default: 20) * @property {number} rotateIncrementDegrees - Rotation increment for camera rotation (default: 2) * @property {number} rotateSampleDistanceFactor - Sample distance multiplier during rotation for performance (default: 2) + * @property {number} rotateClippingPlanesIncrementDegrees - Rotation increment for clipping planes rotation (default: 5) * * @events - * @event VOLUMECROPPING_TOOL_CHANGED - Fired when sphere positions change or clipping planes are updated + * @event VOLUMECROPPING_TOOL_CHANGED - Fired when sphere positions change or clipping planes are updated. + * Event detail includes: + * - originalClippingPlanes: ClippingPlane[] - Array of 6 clipping planes [XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX] + * - seriesInstanceUID: string - Series instance UID for event filtering + * - viewportId?: string - Optional viewport ID + * - renderingEngineId?: string - Optional rendering engine ID * @event VOLUMECROPPINGCONTROL_TOOL_CHANGED - Listens for changes from VolumeCroppingControlTool * @event VOLUME_VIEWPORT_NEW_VOLUME - Listens for new volume loading to reinitialize cropping bounds * @event TOOLGROUP_VIEWPORT_ADDED - Listens for new viewport additions to extend resize observation @@ -184,6 +177,8 @@ const SPHEREINDEX = { * - **setClippingPlanesVisible(visible: boolean)**: Enable/disable volume clipping planes * - **getHandlesVisible()**: Get current handle visibility state * - **getClippingPlanesVisible()**: Get current clipping plane visibility state + * - **setRotatePlanesOnDrag(enable: boolean)**: Enable/disable rotating clipping planes on drag (default: false) + * - **getRotatePlanesOnDrag()**: Get current rotate planes on drag state * * * @see {@link VolumeCroppingControlTool} - Companion tool for 2D viewport reference lines @@ -199,11 +194,17 @@ class VolumeCroppingTool extends BaseTool { _resizeObservers = new Map(); _viewportAddedListener: (evt) => void; _hasResolutionChanged = false; - originalClippingPlanes: { origin: number[]; normal: number[] }[] = []; + originalClippingPlanes: ClippingPlane[] = []; draggingSphereIndex: number | null = null; - toolCenter: Types.Point3 = [0, 0, 0]; + rotatePlanesOnDrag: boolean = false; // If true, dragging rotates clipping planes instead of camera cornerDragOffset: [number, number, number] | null = null; faceDragOffset: number | null = null; + // Store volume direction vectors for non-axis-aligned volumes + volumeDirectionVectors: { + xDir: Types.Point3; // First axis direction (rows) + yDir: Types.Point3; // Second axis direction (columns) + zDir: Types.Point3; // Third axis direction (slices) + } | null = null; // Store spheres for show/hide actor. sphereStates: { point: Types.Point3; @@ -246,6 +247,7 @@ class VolumeCroppingTool extends BaseTool { grabSpherePixelDistance: 20, //pixels threshold for closeness to the sphere being grabbed rotateIncrementDegrees: 2, rotateSampleDistanceFactor: 2, // Factor to increase sample distance (lower resolution) when rotating + rotateClippingPlanesIncrementDegrees: 5, // Rotation increment for clipping planes (higher = faster rotation) }, } ) { @@ -255,88 +257,99 @@ class VolumeCroppingTool extends BaseTool { } onSetToolActive() { - // console.debug('Setting tool active: volumeCropping', this.sphereStates); - if (this.sphereStates && this.sphereStates.length > 0) { - if (this.configuration.showHandles) { - this.setHandlesVisible(false); - this.setClippingPlanesVisible(false); - // console.debug('Setting tool active: hiding controls'); - } else { - this.setHandlesVisible(true); - this.setClippingPlanesVisible(true); - // console.debug('Setting tool active: showing controls'); - } - } else { - const viewportsInfo = this._getViewportsInfo(); - const subscribeToElementResize = () => { - viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { - if (!this._resizeObservers.has(viewportId)) { - const { viewport } = getEnabledElementByIds( + // Always set up the infrastructure (resize observers, event listeners, etc.) + // but don't show handles or clipping planes by default + // They should only be shown via hotkeys or the VolumeCropping component + // Rotation is already enabled via mouseDragCallback, so no additional setup needed + const viewportsInfo = this._getViewportsInfo(); + + const subscribeToElementResize = () => { + viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { + if (!this._resizeObservers.has(viewportId)) { + const { viewport } = getEnabledElementByIds( + viewportId, + renderingEngineId + ) || { viewport: null }; + if (!viewport) { + return; + } + const { element } = viewport; + const resizeObserver = new ResizeObserver(() => { + const element = getEnabledElementByIds( viewportId, renderingEngineId - ) || { viewport: null }; - if (!viewport) { + ); + if (!element) { return; } - const { element } = viewport; - const resizeObserver = new ResizeObserver(() => { - const element = getEnabledElementByIds( - viewportId, - renderingEngineId - ); - if (!element) { - return; - } - const { viewport } = element; - const viewPresentation = viewport.getViewPresentation(); - viewport.resetCamera(); - viewport.setViewPresentation(viewPresentation); - viewport.render(); - }); - resizeObserver.observe(element); - this._resizeObservers.set(viewportId, resizeObserver); - } - }); - }; + const { viewport } = element; + const viewPresentation = viewport.getViewPresentation(); + viewport.resetCamera(); + viewport.setViewPresentation(viewPresentation); + viewport.render(); + }); + resizeObserver.observe(element); + this._resizeObservers.set(viewportId, resizeObserver); + } + }); + }; - subscribeToElementResize(); + subscribeToElementResize(); - this._viewportAddedListener = (evt) => { - if (evt.detail.toolGroupId === this.toolGroupId) { - subscribeToElementResize(); - } - }; + this._viewportAddedListener = (evt) => { + if (evt.detail.toolGroupId === this.toolGroupId) { + subscribeToElementResize(); + } + }; - eventTarget.addEventListener( - Events.TOOLGROUP_VIEWPORT_ADDED, - this._viewportAddedListener - ); + eventTarget.addEventListener( + Events.TOOLGROUP_VIEWPORT_ADDED, + this._viewportAddedListener + ); - this._unsubscribeToViewportNewVolumeSet(viewportsInfo); - this._subscribeToViewportNewVolumeSet(viewportsInfo); + this._unsubscribeToViewportNewVolumeSet(viewportsInfo); + this._subscribeToViewportNewVolumeSet(viewportsInfo); + + // Initialize 3D viewports if not already initialized + if (this.sphereStates && this.sphereStates.length === 0) { + this.originalClippingPlanes = []; this._initialize3DViewports(viewportsInfo); + } + // Explicitly disable clipping planes and handles after initialization + // They should only be shown via hotkeys or the VolumeCropping component + // This ensures that even if _initialize3DViewports added clipping planes, + // they will be removed if the configuration says they should be hidden + this.configuration.showClippingPlanes = false; + this.configuration.showHandles = false; + + const viewport = this._getViewport(); + if ( + viewport && + this.originalClippingPlanes && + this.originalClippingPlanes.length > 0 + ) { + this._updateClippingPlanes(viewport); if (this.sphereStates && this.sphereStates.length > 0) { - this.setHandlesVisible(true); - } else { - //console.warn('Setting tool active: no spheres! trying to initialize'); - this.originalClippingPlanes = []; - this._initialize3DViewports(viewportsInfo); + this._updateHandlesVisibility(); } + viewport.render(); } + + // DO NOT show handles or clipping planes by default + // They should only be shown via hotkeys or the VolumeCropping component + // Rotation is already enabled via mouseDragCallback, so no additional setup needed } onSetToolConfiguration = (): void => { - console.debug('Setting tool settoolconfiguration : volumeCropping'); - //this._init(); + // Configuration is handled in constructor and onSetToolActive }; onSetToolEnabled = (): void => { - console.debug('Setting tool enabled: volumeCropping'); + // Tool enabled state is managed by BaseTool }; onSetToolDisabled() { - // console.debug('Setting tool disabled: volumeCropping'); // Disconnect all resize observers this._resizeObservers.forEach((resizeObserver, viewportId) => { resizeObserver.disconnect(); @@ -365,7 +378,6 @@ class VolumeCroppingTool extends BaseTool { }; preMouseDownCallback = (evt: EventTypes.InteractionEventType) => { - //console.debug('VolumeCroppingTool.preMouseDownCallback called'); const eventDetail = evt.detail; const { element } = eventDetail; const enabledElement = getEnabledElement(element); @@ -403,10 +415,20 @@ class VolumeCroppingTool extends BaseTool { ]; this.faceDragOffset = null; } else { - // For face spheres, only store the offset along the axis of movement - const axisIdx = { x: 0, y: 1, z: 2 }[sphereState.axis]; + // For face spheres, store the offset along the volume axis of movement + const directionVector = this._getDirectionVectorForAxis( + sphereState.axis + ); + const delta = [ + sphereState.point[0] - mouseWorld[0], + sphereState.point[1] - mouseWorld[1], + sphereState.point[2] - mouseWorld[2], + ]; + // Project offset onto axis direction this.faceDragOffset = - sphereState.point[axisIdx] - mouseWorld[axisIdx]; + delta[0] * directionVector[0] + + delta[1] * directionVector[1] + + delta[2] * directionVector[2]; this.cornerDragOffset = null; } @@ -489,44 +511,13 @@ class VolumeCroppingTool extends BaseTool { */ setHandlesVisible(visible: boolean) { this.configuration.showHandles = visible; - // Before showing, update sphere positions to match clipping planes if (visible) { - // Update face spheres from the current clipping planes - this.sphereStates[SPHEREINDEX.XMIN].point[0] = - this.originalClippingPlanes[PLANEINDEX.XMIN].origin[0]; - this.sphereStates[SPHEREINDEX.XMAX].point[0] = - this.originalClippingPlanes[PLANEINDEX.XMAX].origin[0]; - this.sphereStates[SPHEREINDEX.YMIN].point[1] = - this.originalClippingPlanes[PLANEINDEX.YMIN].origin[1]; - this.sphereStates[SPHEREINDEX.YMAX].point[1] = - this.originalClippingPlanes[PLANEINDEX.YMAX].origin[1]; - this.sphereStates[SPHEREINDEX.ZMIN].point[2] = - this.originalClippingPlanes[PLANEINDEX.ZMIN].origin[2]; - this.sphereStates[SPHEREINDEX.ZMAX].point[2] = - this.originalClippingPlanes[PLANEINDEX.ZMAX].origin[2]; - - // Update all sphere actors' positions - [ - SPHEREINDEX.XMIN, - SPHEREINDEX.XMAX, - SPHEREINDEX.YMIN, - SPHEREINDEX.YMAX, - SPHEREINDEX.ZMIN, - SPHEREINDEX.ZMAX, - ].forEach((idx) => { - const s = this.sphereStates[idx]; - s.sphereSource.setCenter(...s.point); - s.sphereSource.modified(); - }); - - // Update corners and edges as well + this._updateFaceSpheresFromClippingPlanes(); this._updateCornerSpheres(); } - // Show/hide actors this._updateHandlesVisibility(); - // Render const viewportsInfo = this._getViewportsInfo(); const [viewport3D] = viewportsInfo; const renderingEngine = getRenderingEngine(viewport3D.renderingEngineId); @@ -615,17 +606,83 @@ class VolumeCroppingTool extends BaseTool { this.configuration.showClippingPlanes = visible; const viewport = this._getViewport(); this._updateClippingPlanes(viewport); + + if (this.sphereStates && this.sphereStates.length > 0) { + this.configuration.showHandles = visible; + this._updateHandlesVisibility(); + } + + if ( + visible && + viewport && + this.originalClippingPlanes?.length >= NUM_CLIPPING_PLANES + ) { + this._notifyClippingPlanesChanged(viewport); + } + viewport.render(); } + /** + * Gets whether dragging rotates clipping planes instead of the camera. + * + * @returns {boolean} True if dragging rotates clipping planes, false if it rotates the camera + * + * @example + * ```typescript + * const isRotatingPlanes = volumeCroppingTool.getRotatePlanesOnDrag(); + * if (isRotatingPlanes) { + * console.log('Dragging will rotate clipping planes'); + * } else { + * console.log('Dragging will rotate camera'); + * } + * ``` + */ + getRotatePlanesOnDrag(): boolean { + return this.rotatePlanesOnDrag; + } + + /** + * Sets whether dragging should rotate clipping planes instead of the camera. + * + * When enabled, dragging the mouse will rotate the clipping planes around the volume. + * When disabled, dragging will rotate the camera view (default behavior). + * + * @param enable - Whether to enable (true) or disable (false) rotating planes on drag + * + * @example + * ```typescript + * // Enable rotating clipping planes on drag + * volumeCroppingTool.setRotatePlanesOnDrag(true); + * + * // Disable to use default camera rotation + * volumeCroppingTool.setRotatePlanesOnDrag(false); + * ``` + * + * @remarks + * - Default is false (camera rotation) + * - When enabled, the clipping planes rotate around the volume center + * - The rotation increment is controlled by rotateClippingPlanesIncrementDegrees configuration + */ + setRotatePlanesOnDrag(enable: boolean): void { + this.rotatePlanesOnDrag = enable; + const viewport = this._getViewport(); + if (viewport) { + viewport.render(); + } + } + _dragCallback(evt: EventTypes.InteractionEventType): void { const { element, currentPoints, lastPoints } = evt.detail; if (this.draggingSphereIndex !== null) { - // crop handles this._onMouseMoveSphere(evt); } else { - // rotate + const shiftKey = (evt.detail.event as MouseEvent)?.shiftKey ?? false; + if (this.rotatePlanesOnDrag === true || shiftKey) { + this._rotateClippingPlanes(evt); + return; + } const currentPointsCanvas = currentPoints.canvas; const lastPointsCanvas = lastPoints.canvas; const { rotateIncrementDegrees } = this.configuration; @@ -647,7 +704,6 @@ class VolumeCroppingTool extends BaseTool { ]; const center: Types.Point2 = [width * 0.5, height * 0.5]; - // NOTE: centerWorld corresponds to the focal point in cornerstone3D const centerWorld = viewport.canvasToWorld(center); const normalizedCenter = [0.5, 0.5]; @@ -709,161 +765,166 @@ class VolumeCroppingTool extends BaseTool { return false; } - // Get viewport and world coordinates const { viewport, world } = this._getViewportAndWorldCoords(evt); if (!viewport || !world) { return false; } - // Handle sphere movement based on type WITHOUT updating clipping planes yet if (sphereState.isCorner) { - // Calculate and update just the dragged corner position - const newCorner = this._calculateNewCornerPosition(world); - this._updateSpherePosition(sphereState, newCorner); + const newCorner = this.cornerDragOffset + ? vec3.add([0, 0, 0], world, this.cornerDragOffset) + : world; + const oldCorner = sphereState.point; - // Update related corners - const axisFlags = this._parseCornerKey(sphereState.uid); - this._updateRelatedCorners(sphereState, newCorner, axisFlags); + const axisFlags = parseCornerKey(sphereState.uid); + const { xDir, yDir, zDir } = this._getDirectionVectors(); + + if (!xDir || !yDir || !zDir) return false; + + const delta = [ + newCorner[0] - oldCorner[0], + newCorner[1] - oldCorner[1], + newCorner[2] - oldCorner[2], + ]; + + const deltaX = + delta[0] * xDir[0] + delta[1] * xDir[1] + delta[2] * xDir[2]; + const deltaY = + delta[0] * yDir[0] + delta[1] * yDir[1] + delta[2] * yDir[2]; + const deltaZ = + delta[0] * zDir[0] + delta[1] * zDir[1] + delta[2] * zDir[2]; + + if (axisFlags.isXMin) { + const faceXMin = this.sphereStates[SPHEREINDEX.XMIN]; + const newPoint: Types.Point3 = [ + faceXMin.point[0] + deltaX * xDir[0], + faceXMin.point[1] + deltaX * xDir[1], + faceXMin.point[2] + deltaX * xDir[2], + ]; + this._updateSpherePosition(SPHEREINDEX.XMIN, newPoint); + } else if (axisFlags.isXMax) { + const faceXMax = this.sphereStates[SPHEREINDEX.XMAX]; + const newPoint: Types.Point3 = [ + faceXMax.point[0] + deltaX * xDir[0], + faceXMax.point[1] + deltaX * xDir[1], + faceXMax.point[2] + deltaX * xDir[2], + ]; + this._updateSpherePosition(SPHEREINDEX.XMAX, newPoint); + } + + if (axisFlags.isYMin) { + const faceYMin = this.sphereStates[SPHEREINDEX.YMIN]; + const newPoint: Types.Point3 = [ + faceYMin.point[0] + deltaY * yDir[0], + faceYMin.point[1] + deltaY * yDir[1], + faceYMin.point[2] + deltaY * yDir[2], + ]; + this._updateSpherePosition(SPHEREINDEX.YMIN, newPoint); + } else if (axisFlags.isYMax) { + const faceYMax = this.sphereStates[SPHEREINDEX.YMAX]; + const newPoint: Types.Point3 = [ + faceYMax.point[0] + deltaY * yDir[0], + faceYMax.point[1] + deltaY * yDir[1], + faceYMax.point[2] + deltaY * yDir[2], + ]; + this._updateSpherePosition(SPHEREINDEX.YMAX, newPoint); + } + + if (axisFlags.isZMin) { + const faceZMin = this.sphereStates[SPHEREINDEX.ZMIN]; + const newPoint: Types.Point3 = [ + faceZMin.point[0] + deltaZ * zDir[0], + faceZMin.point[1] + deltaZ * zDir[1], + faceZMin.point[2] + deltaZ * zDir[2], + ]; + this._updateSpherePosition(SPHEREINDEX.ZMIN, newPoint); + } else if (axisFlags.isZMax) { + const faceZMax = this.sphereStates[SPHEREINDEX.ZMAX]; + const newPoint: Types.Point3 = [ + faceZMax.point[0] + deltaZ * zDir[0], + faceZMax.point[1] + deltaZ * zDir[1], + faceZMax.point[2] + deltaZ * zDir[2], + ]; + this._updateSpherePosition(SPHEREINDEX.ZMAX, newPoint); + } - // Update face spheres and corners - this._updateFaceSpheresFromCorners(); this._updateCornerSpheres(); + this._updateFaceSpheresFromCorners(); } else { - // Update face sphere position - const axisIdx = { x: 0, y: 1, z: 2 }[sphereState.axis]; - let newValue = world[axisIdx]; - if (this.faceDragOffset !== null) { - newValue += this.faceDragOffset; - } - sphereState.point[axisIdx] = newValue; - sphereState.sphereSource.setCenter(...sphereState.point); - sphereState.sphereSource.modified(); + const directionVector = this._getDirectionVectorForAxis(sphereState.axis); + + const delta = [ + world[0] - sphereState.point[0], + world[1] - sphereState.point[1], + world[2] - sphereState.point[2], + ]; + + const distanceAlongAxis = + delta[0] * directionVector[0] + + delta[1] * directionVector[1] + + delta[2] * directionVector[2]; + + const adjustedDistance = + this.faceDragOffset !== null + ? distanceAlongAxis + this.faceDragOffset + : distanceAlongAxis; + + const newPoint: Types.Point3 = [ + sphereState.point[0] + adjustedDistance * directionVector[0], + sphereState.point[1] + adjustedDistance * directionVector[1], + sphereState.point[2] + adjustedDistance * directionVector[2], + ]; + this._updateSpherePosition(this.draggingSphereIndex, newPoint); - // Update corners from face spheres this._updateCornerSpheresFromFaces(); this._updateFaceSpheresFromCorners(); this._updateCornerSpheres(); } - // // THEN update clipping planes this._updateClippingPlanesFromFaceSpheres(viewport); - - // Final render and event trigger viewport.render(); - - this._triggerToolChangedEvent(sphereState); + this._notifyClippingPlanesChanged(); return true; }; _onControlToolChange = (evt) => { const viewport = this._getViewport(); - if (!evt.detail.toolCenter) { - triggerEvent(eventTarget, Events.VOLUMECROPPING_TOOL_CHANGED, { - originalClippingPlanes: this.originalClippingPlanes, - viewportId: viewport.id, - renderingEngineId: viewport.renderingEngineId, - seriesInstanceUID: this.seriesInstanceUID, - }); - } else { - if (evt.detail.seriesInstanceUID !== this.seriesInstanceUID) { - return; - } - const isMin = evt.detail.handleType === 'min'; - const toolCenter = isMin - ? evt.detail.toolCenterMin - : evt.detail.toolCenterMax; - const normals = isMin - ? [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1], - ] - : [ - [-1, 0, 0], - [0, -1, 0], - [0, 0, -1], - ]; - const planeIndices = isMin - ? [PLANEINDEX.XMIN, PLANEINDEX.YMIN, PLANEINDEX.ZMIN] - : [PLANEINDEX.XMAX, PLANEINDEX.YMAX, PLANEINDEX.ZMAX]; - const sphereIndices = isMin - ? [SPHEREINDEX.XMIN, SPHEREINDEX.YMIN, SPHEREINDEX.ZMIN] - : [SPHEREINDEX.XMAX, SPHEREINDEX.YMAX, SPHEREINDEX.ZMAX]; - const axes = ['x', 'y', 'z']; - const orientationAxes = [ - Enums.OrientationAxis.SAGITTAL, - Enums.OrientationAxis.CORONAL, - Enums.OrientationAxis.AXIAL, - ]; - // Update planes and spheres for each axis - for (let i = 0; i < 3; ++i) { - const origin: [number, number, number] = [0, 0, 0]; - origin[i] = toolCenter[i]; - const plane = vtkPlane.newInstance({ - origin, - normal: normals[i] as [number, number, number], - }); - this.originalClippingPlanes[planeIndices[i]].origin = plane.getOrigin(); + if (evt.detail.seriesInstanceUID !== this.seriesInstanceUID) { + return; + } - // Update face sphere - this.sphereStates[sphereIndices[i]].point[i] = plane.getOrigin()[i]; - this.sphereStates[sphereIndices[i]].sphereSource.setCenter( - ...this.sphereStates[sphereIndices[i]].point - ); - this.sphereStates[sphereIndices[i]].sphereSource.modified(); + if ( + evt.detail.clippingPlanes && + evt.detail.clippingPlanes.length >= NUM_CLIPPING_PLANES + ) { + this.originalClippingPlanes = copyClippingPlanes( + evt.detail.clippingPlanes + ); - // Update center for other face spheres (not on this axis) - const otherSphere = this.sphereStates.find( - (s, idx) => s.axis === axes[i] && idx !== sphereIndices[i] - ); - const newCenter = (otherSphere.point[i] + plane.getOrigin()[i]) / 2; - this.sphereStates.forEach((state) => { - if ( - !state.isCorner && - state.axis !== axes[i] && - !evt.detail.viewportOrientation.includes(orientationAxes[i]) - ) { - state.point[i] = newCenter; - state.sphereSource.setCenter(state.point); - state.sphereActor.getProperty().setColor(state.color); - state.sphereSource.modified(); - } - }); + this._updateFaceSpheresFromClippingPlanes(); + this._updateCornerSpheresFromFaces(); + this._updateFaceSpheresFromCorners(); + this._updateCornerSpheres(); - // Update vtk clipping plane origin - const volumeActor = viewport.getDefaultActor()?.actor; - if (volumeActor) { - const mapper = volumeActor.getMapper() as vtkVolumeMapper; - const clippingPlanes = mapper.getClippingPlanes(); - if (clippingPlanes) { - clippingPlanes[planeIndices[i]].setOrigin(plane.getOrigin()); - } - } + const mapper = this._getVolumeMapper(viewport); + if (mapper) { + this._applyClippingPlanesToMapper(mapper); } - this._updateCornerSpheres(); viewport.render(); + this._notifyClippingPlanesChanged(viewport); + } else { + this._notifyClippingPlanesChanged(viewport); } }; + _updateClippingPlanes(viewport) { - // Get the actor and transformation matrix const actorEntry = viewport.getDefaultActor(); - if (!actorEntry || !actorEntry.actor) { - // Only warn once per session for missing actor - if (!viewport._missingActorWarned) { - console.warn( - 'VolumeCroppingTool._updateClippingPlanes: No default actor found in viewport.' - ); - viewport._missingActorWarned = true; - } - return; - } const actor = actorEntry.actor; const mapper = actor.getMapper(); const matrix = actor.getMatrix(); - // Only update if clipping planes are visible if (!this.configuration.showClippingPlanes) { mapper.removeAllClippingPlanes(); return; @@ -883,8 +944,6 @@ class VolumeCroppingTool extends BaseTool { return; } - // Only remove/add if the number of planes has changed or matrix has changed - // (Assume matrix changes frequently, so always update for now) mapper.removeAllClippingPlanes(); // Preallocate arrays for transformed origins/normals @@ -933,62 +992,20 @@ class VolumeCroppingTool extends BaseTool { }); } - _addLine3DBetweenPoints( - viewport, - point1, - point2, - color: [number, number, number] = [0.7, 0.7, 0.7], - uid = '' - ) { - // Avoid creating a line if the points are the same - if ( - point1[0] === point2[0] && - point1[1] === point2[1] && - point1[2] === point2[2] - ) { - return { actor: null, source: null }; - } - const points = vtkPoints.newInstance(); - points.setNumberOfPoints(2); - points.setPoint(0, point1[0], point1[1], point1[2]); - points.setPoint(1, point2[0], point2[1], point2[2]); - - const lines = vtkCellArray.newInstance({ values: [2, 0, 1] }); - const polyData = vtkPolyData.newInstance(); - polyData.setPoints(points); - polyData.setLines(lines); - - const mapper = vtkMapper.newInstance(); - mapper.setInputData(polyData); - const actor = vtkActor.newInstance(); - actor.setMapper(mapper); - actor.getProperty().setColor(...color); - actor.getProperty().setLineWidth(0.5); // Thinner line - actor.getProperty().setOpacity(1.0); - actor.getProperty().setInterpolationToFlat(); // No shading - actor.getProperty().setAmbient(1.0); // Full ambient - actor.getProperty().setDiffuse(0.0); // No diffuse - actor.getProperty().setSpecular(0.0); // No specular - actor.setVisibility(this.configuration.showHandles); - viewport.addActor({ actor, uid }); - return { actor, source: polyData }; - } - _getViewportsInfo = () => { - const viewports = getToolGroup(this.toolGroupId).viewportsInfo; - return viewports; + const toolGroup = getToolGroup(this.toolGroupId); + return toolGroup?.viewportsInfo || []; }; _addSphere( - viewport, - point, - axis, - position, - cornerKey = null, - adaptiveRadius - ) { + viewport: Types.IVolumeViewport, + point: Types.Point3, + axis: string, + position: string, + cornerKey: string | null = null, + adaptiveRadius: number + ): void { // Generate a unique UID for each sphere based on its axis and position - // Use cornerKey for corners, otherwise axis+position for faces const uid = cornerKey ? `corner_${cornerKey}` : `${axis}_${position}`; const sphereState = this.sphereStates.find((s) => s.uid === uid); if (sphereState) { @@ -1007,17 +1024,18 @@ class VolumeCroppingTool extends BaseTool { if (cornerKey) { color = sphereColors.CORNERS || [0.0, 0.0, 1.0]; // Use corners color from config, fallback to blue } else if (axis === 'z') { - color = sphereColors.AXIAL || [1.0, 0.0, 0.0]; // Z-axis = AXIAL planes + color = sphereColors.AXIAL || [1.0, 0.0, 0.0]; // Z-axis (slice direction) = AXIAL planes } else if (axis === 'x') { - color = sphereColors.SAGITTAL || [1.0, 1.0, 0.0]; // X-axis = SAGITTAL planes + color = sphereColors.SAGITTAL || [1.0, 1.0, 0.0]; // X-axis (row direction) = SAGITTAL planes } else if (axis === 'y') { - color = sphereColors.CORONAL || [0.0, 1.0, 0.0]; // Y-axis = CORONAL planes + color = sphereColors.CORONAL || [0.0, 1.0, 0.0]; // Y-axis (column direction) = CORONAL planes } - // Store or update the sphere position + const idx = this.sphereStates.findIndex((s) => s.uid === uid); + const pointCopy: Types.Point3 = [point[0], point[1], point[2]]; if (idx === -1) { this.sphereStates.push({ - point: point.slice(), + point: pointCopy, axis, uid, sphereSource, @@ -1026,53 +1044,75 @@ class VolumeCroppingTool extends BaseTool { color, }); } else { - this.sphereStates[idx].point = point.slice(); + this.sphereStates[idx].point = pointCopy; this.sphereStates[idx].sphereSource = sphereSource; } - // Remove existing actor with this UID if present - const existingActors = viewport.getActors(); - const existing = existingActors.find((a) => a.uid === uid); - if (existing) { - //viewport.removeActor(uid); - return; - } sphereActor.getProperty().setColor(color); sphereActor.setVisibility(this.configuration.showHandles); viewport.addActor({ actor: sphereActor, uid: uid }); } + /** - * Calculate an adaptive sphere radius based on the diagonal of the volume. - * This allows the sphere size to scale with the volume size. - * @param diagonal The diagonal length of the volume in world coordinates. - * @returns The calculated adaptive radius, clamped between min and max limits. + * Get the direction vector for a given axis ('x', 'y', or 'z'). + * @param axis - The axis identifier + * @returns The direction vector in world space */ - _calculateAdaptiveSphereRadius(diagonal): number { - // Get base radius from configuration (acts as a scaling factor) - const baseRadius = - this.configuration.sphereRadius !== undefined - ? this.configuration.sphereRadius - : 8; - - // Scale radius as a percentage of diagonal (adjustable factor) - const scaleFactor = this.configuration.sphereRadiusScale || 0.01; // 1% of diagonal by default - const adaptiveRadius = diagonal * scaleFactor; - - // Apply min/max limits to prevent too small or too large spheres - const minRadius = this.configuration.minSphereRadius || 2; - const maxRadius = this.configuration.maxSphereRadius || 50; - - return Math.max(minRadius, Math.min(maxRadius, adaptiveRadius)); + _getDirectionVectorForAxis(axis: string): Types.Point3 { + // After rotation, use the current plane normals instead of original volume direction vectors + // This ensures spheres move along the rotated planes + if ( + this.originalClippingPlanes && + this.originalClippingPlanes.length >= NUM_CLIPPING_PLANES + ) { + switch (axis) { + case 'x': + // Use XMIN plane normal (points in +X direction) + return this.originalClippingPlanes[PLANEINDEX.XMIN] + .normal as Types.Point3; + case 'y': + // Use YMIN plane normal (points in +Y direction) + return this.originalClippingPlanes[PLANEINDEX.YMIN] + .normal as Types.Point3; + case 'z': + // Use ZMIN plane normal (points in +Z direction) + return this.originalClippingPlanes[PLANEINDEX.ZMIN] + .normal as Types.Point3; + default: + return [1, 0, 0]; + } + } + + if (!this.volumeDirectionVectors) { + if (axis === 'x') return [1, 0, 0]; + if (axis === 'y') return [0, 1, 0]; + if (axis === 'z') return [0, 0, 1]; + return [1, 0, 0]; + } + + switch (axis) { + case 'x': + return this.volumeDirectionVectors.xDir; + case 'y': + return this.volumeDirectionVectors.yDir; + case 'z': + return this.volumeDirectionVectors.zDir; + default: + return [1, 0, 0]; + } } - _initialize3DViewports = (viewportsInfo): void => { - if (!viewportsInfo || !viewportsInfo.length || !viewportsInfo[0]) { + _initialize3DViewports = (viewportsInfo: Types.IViewportId[]): void => { + if (!viewportsInfo?.length || !viewportsInfo[0]) { console.warn( 'VolumeCroppingTool: No viewportsInfo available for initialization of volumecroppingtool.' ); return; } const viewport = this._getViewport(); + if (!viewport) { + return; + } const volumeActors = viewport.getActors(); if (!volumeActors || volumeActors.length === 0) { console.warn( @@ -1086,131 +1126,108 @@ class VolumeCroppingTool extends BaseTool { return; } this.seriesInstanceUID = imageData.seriesInstanceUID || 'unknown'; - const worldBounds = imageData.getBounds(); // Already in world coordinates - const cropFactor = this.configuration.initialCropFactor || 0.1; - // Calculate cropping bounds using world bounds - const xRange = worldBounds[1] - worldBounds[0]; - const yRange = worldBounds[3] - worldBounds[2]; - const zRange = worldBounds[5] - worldBounds[4]; + this.volumeDirectionVectors = extractVolumeDirectionVectors(imageData); + const { xDir, yDir, zDir } = this.volumeDirectionVectors; - const xMin = worldBounds[0] + cropFactor * xRange; - const xMax = worldBounds[1] - cropFactor * xRange; - const yMin = worldBounds[2] + cropFactor * yRange; - const yMax = worldBounds[3] - cropFactor * yRange; - const zMin = worldBounds[4] + cropFactor * zRange; - const zMax = worldBounds[5] - cropFactor * zRange; + // Get volume bounds and dimensions in index space + const dimensions = imageData.getDimensions(); - const planes: vtkPlane[] = []; + const cropFactor = this.configuration.initialCropFactor || 0.1; - // X min plane (cuts everything left of xMin) - const planeXmin = vtkPlane.newInstance({ - origin: [xMin, 0, 0], - normal: [1, 0, 0], + // Calculate cropping range in index space + const xMin = cropFactor * dimensions[0]; + const xMax = (1 - cropFactor) * dimensions[0]; + const yMin = cropFactor * dimensions[1]; + const yMax = (1 - cropFactor) * dimensions[1]; + const zMin = cropFactor * dimensions[2]; + const zMax = (1 - cropFactor) * dimensions[2]; + + // Calculate center of each face in index space + const xCenter = (xMin + xMax) / 2; + const yCenter = (yMin + yMax) / 2; + const zCenter = (zMin + zMax) / 2; + + // Calculate world positions for face centers + const faceXMin = imageData.indexToWorld([xMin, yCenter, zCenter]); + const faceXMax = imageData.indexToWorld([xMax, yCenter, zCenter]); + const faceYMin = imageData.indexToWorld([xCenter, yMin, zCenter]); + const faceYMax = imageData.indexToWorld([xCenter, yMax, zCenter]); + const faceZMin = imageData.indexToWorld([xCenter, yCenter, zMin]); + const faceZMax = imageData.indexToWorld([xCenter, yCenter, zMax]); + + // Create clipping planes with normals based on volume orientation + const planeXMin = vtkPlane.newInstance({ + origin: faceXMin, + normal: xDir, // Normal points in +X direction }); - const planeXmax = vtkPlane.newInstance({ - origin: [xMax, 0, 0], - normal: [-1, 0, 0], + const planeXMax = vtkPlane.newInstance({ + origin: faceXMax, + normal: [-xDir[0], -xDir[1], -xDir[2]], // Normal points in -X direction }); - const planeYmin = vtkPlane.newInstance({ - origin: [0, yMin, 0], - normal: [0, 1, 0], + const planeYMin = vtkPlane.newInstance({ + origin: faceYMin, + normal: yDir, // Normal points in +Y direction }); - const planeYmax = vtkPlane.newInstance({ - origin: [0, yMax, 0], - normal: [0, -1, 0], + const planeYMax = vtkPlane.newInstance({ + origin: faceYMax, + normal: [-yDir[0], -yDir[1], -yDir[2]], // Normal points in -Y direction }); - const planeZmin = vtkPlane.newInstance({ - origin: [0, 0, zMin], - normal: [0, 0, 1], + const planeZMin = vtkPlane.newInstance({ + origin: faceZMin, + normal: zDir, // Normal points in +Z direction }); - const planeZmax = vtkPlane.newInstance({ - origin: [0, 0, zMax], - normal: [0, 0, -1], + const planeZMax = vtkPlane.newInstance({ + origin: faceZMax, + normal: [-zDir[0], -zDir[1], -zDir[2]], // Normal points in -Z direction }); - const mapper = viewport - .getDefaultActor() - .actor.getMapper() as vtkVolumeMapper; - planes.push(planeXmin); - planes.push(planeXmax); - planes.push(planeYmin); - planes.push(planeYmax); - planes.push(planeZmin); - planes.push(planeZmax); - - const originalPlanes = planes.map((plane) => ({ - origin: [...plane.getOrigin()], - normal: [...plane.getNormal()], + + const planes: vtkPlane[] = [ + planeXMin, + planeXMax, + planeYMin, + planeYMax, + planeZMin, + planeZMax, + ]; + + const originalPlanes: ClippingPlane[] = planes.map((plane) => ({ + origin: [...plane.getOrigin()] as Types.Point3, + normal: [...plane.getNormal()] as Types.Point3, })); this.originalClippingPlanes = originalPlanes; - const sphereXminPoint = [xMin, (yMax + yMin) / 2, (zMax + zMin) / 2]; - const sphereXmaxPoint = [xMax, (yMax + yMin) / 2, (zMax + zMin) / 2]; - const sphereYminPoint = [(xMax + xMin) / 2, yMin, (zMax + zMin) / 2]; - const sphereYmaxPoint = [(xMax + xMin) / 2, yMax, (zMax + zMin) / 2]; - const sphereZminPoint = [(xMax + xMin) / 2, (yMax + yMin) / 2, zMin]; - const sphereZmaxPoint = [(xMax + xMin) / 2, (yMax + yMin) / 2, zMax]; - const adaptiveRadius = this._calculateAdaptiveSphereRadius( - Math.sqrt(xRange * xRange + yRange * yRange + zRange * zRange) - ); - this._addSphere( - viewport, - sphereXminPoint, - 'x', - 'min', - null, - adaptiveRadius - ); - this._addSphere( - viewport, - sphereXmaxPoint, - 'x', - 'max', - null, - adaptiveRadius - ); - this._addSphere( - viewport, - sphereYminPoint, - 'y', - 'min', - null, - adaptiveRadius - ); - this._addSphere( - viewport, - sphereYmaxPoint, - 'y', - 'max', - null, - adaptiveRadius - ); - this._addSphere( - viewport, - sphereZminPoint, - 'z', - 'min', - null, - adaptiveRadius - ); - this._addSphere( - viewport, - sphereZmaxPoint, - 'z', - 'max', - null, - adaptiveRadius + + // Calculate world diagonal for adaptive sphere radius + const diag0 = imageData.indexToWorld([0, 0, 0]); + const diag1 = imageData.indexToWorld([ + dimensions[0], + dimensions[1], + dimensions[2], + ]); + const diagonal = vec3.distance(diag0, diag1); + const adaptiveRadius = calculateAdaptiveSphereRadius( + diagonal, + this.configuration ); + this._addSphere(viewport, faceXMin, 'x', 'min', null, adaptiveRadius); + this._addSphere(viewport, faceXMax, 'x', 'max', null, adaptiveRadius); + this._addSphere(viewport, faceYMin, 'y', 'min', null, adaptiveRadius); + this._addSphere(viewport, faceYMax, 'y', 'max', null, adaptiveRadius); + this._addSphere(viewport, faceZMin, 'z', 'min', null, adaptiveRadius); + this._addSphere(viewport, faceZMax, 'z', 'max', null, adaptiveRadius); + + // Calculate all 8 corners in world space const corners = [ - [xMin, yMin, zMin], - [xMin, yMin, zMax], - [xMin, yMax, zMin], - [xMin, yMax, zMax], - [xMax, yMin, zMin], - [xMax, yMin, zMax], - [xMax, yMax, zMin], - [xMax, yMax, zMax], + imageData.indexToWorld([xMin, yMin, zMin]), + imageData.indexToWorld([xMin, yMin, zMax]), + imageData.indexToWorld([xMin, yMax, zMin]), + imageData.indexToWorld([xMin, yMax, zMax]), + imageData.indexToWorld([xMax, yMin, zMin]), + imageData.indexToWorld([xMax, yMin, zMax]), + imageData.indexToWorld([xMax, yMax, zMin]), + imageData.indexToWorld([xMax, yMax, zMax]), ]; const cornerKeys = [ @@ -1238,45 +1255,50 @@ class VolumeCroppingTool extends BaseTool { // draw the lines between corners // All 12 edges as pairs of corner keys const edgeCornerPairs = [ - // X edges + // X edges (along first axis) ['XMIN_YMIN_ZMIN', 'XMAX_YMIN_ZMIN'], ['XMIN_YMIN_ZMAX', 'XMAX_YMIN_ZMAX'], ['XMIN_YMAX_ZMIN', 'XMAX_YMAX_ZMIN'], ['XMIN_YMAX_ZMAX', 'XMAX_YMAX_ZMAX'], - // Y edges + // Y edges (along second axis) ['XMIN_YMIN_ZMIN', 'XMIN_YMAX_ZMIN'], ['XMIN_YMIN_ZMAX', 'XMIN_YMAX_ZMAX'], ['XMAX_YMIN_ZMIN', 'XMAX_YMAX_ZMIN'], ['XMAX_YMIN_ZMAX', 'XMAX_YMAX_ZMAX'], - // Z edges + // Z edges (along third axis) ['XMIN_YMIN_ZMIN', 'XMIN_YMIN_ZMAX'], ['XMIN_YMAX_ZMIN', 'XMIN_YMAX_ZMAX'], ['XMAX_YMIN_ZMIN', 'XMAX_YMIN_ZMAX'], ['XMAX_YMAX_ZMIN', 'XMAX_YMAX_ZMAX'], ]; - edgeCornerPairs.forEach(([key1, key2], i) => { + edgeCornerPairs.forEach(([key1, key2]) => { const state1 = this.sphereStates.find((s) => s.uid === `corner_${key1}`); const state2 = this.sphereStates.find((s) => s.uid === `corner_${key2}`); if (state1 && state2) { const uid = `edge_${key1}_${key2}`; - const { actor, source } = this._addLine3DBetweenPoints( + const { actor, source } = addLine3DBetweenPoints( viewport, state1.point, state2.point, [0.7, 0.7, 0.7], - uid + uid, + this.configuration.showHandles ); this.edgeLines[uid] = { actor, source, key1, key2 }; } }); - mapper.addClippingPlane(planeXmin); - mapper.addClippingPlane(planeXmax); - mapper.addClippingPlane(planeYmin); - mapper.addClippingPlane(planeYmax); - mapper.addClippingPlane(planeZmin); - mapper.addClippingPlane(planeZmax); + const mapper = viewport + .getDefaultActor() + .actor.getMapper() as vtkVolumeMapper; + + mapper.addClippingPlane(planeXMin); + mapper.addClippingPlane(planeXMax); + mapper.addClippingPlane(planeYMin); + mapper.addClippingPlane(planeYMax); + mapper.addClippingPlane(planeZMin); + mapper.addClippingPlane(planeZMax); eventTarget.addEventListener( Events.VOLUMECROPPINGCONTROL_TOOL_CHANGED, @@ -1297,244 +1319,189 @@ class VolumeCroppingTool extends BaseTool { return { viewport, world }; }; - _getViewport = () => { - const [viewport3D] = this._getViewportsInfo(); - const renderingEngine = getRenderingEngine(viewport3D.renderingEngineId); - return renderingEngine.getViewport(viewport3D.viewportId); - }; - - // Handle corner sphere movement - _handleCornerSphereMovement = (sphereState, world, viewport) => { - // Calculate new position with offset - const newCorner = this._calculateNewCornerPosition(world); - - // Update the dragged corner - this._updateSpherePosition(sphereState, newCorner); - - // Parse corner key to determine axes - const axisFlags = this._parseCornerKey(sphereState.uid); - - // Update related corners efficiently - this._updateRelatedCorners(sphereState, newCorner, axisFlags); - - // Update dependent elements - this._updateAfterCornerMovement(viewport); - }; - - // Handle face sphere movement - _handleFaceSphereMovement = (sphereState, world, viewport) => { - const axisIdx = { x: 0, y: 1, z: 2 }[sphereState.axis]; - let newValue = world[axisIdx]; - - if (this.faceDragOffset !== null) { - newValue += this.faceDragOffset; - } - - // Update only the relevant axis - sphereState.point[axisIdx] = newValue; - sphereState.sphereSource.setCenter(...sphereState.point); - sphereState.sphereSource.modified(); - - // Update dependent elements - this._updateAfterFaceMovement(viewport); - }; - - // Calculate new corner position with offset - _calculateNewCornerPosition = (world) => { - let newCorner = [world[0], world[1], world[2]]; - - if (this.cornerDragOffset) { - newCorner = [ - world[0] + this.cornerDragOffset[0], - world[1] + this.cornerDragOffset[1], - world[2] + this.cornerDragOffset[2], - ]; + _getViewport = (): Types.IVolumeViewport | null => { + const viewportsInfo = this._getViewportsInfo(); + if (!viewportsInfo || viewportsInfo.length === 0) { + return null; } - - return newCorner; - }; - - // Parse corner key to determine which axes are min/max - _parseCornerKey = (uid) => { - const cornerKey = uid.replace('corner_', ''); - return { - isXMin: cornerKey.includes('XMIN'), - isXMax: cornerKey.includes('XMAX'), - isYMin: cornerKey.includes('YMIN'), - isYMax: cornerKey.includes('YMAX'), - isZMin: cornerKey.includes('ZMIN'), - isZMax: cornerKey.includes('ZMAX'), - }; - }; - - // Update sphere position - _updateSpherePosition = (sphereState, newPosition) => { - sphereState.point = newPosition; - sphereState.sphereSource.setCenter(...newPosition); - sphereState.sphereSource.modified(); - }; - - // Update related corners that share axes - _updateRelatedCorners = (draggedSphere, newCorner, axisFlags) => { - this.sphereStates.forEach((state) => { - if (!state.isCorner || state === draggedSphere) { - return; - } - - const key = state.uid.replace('corner_', ''); - const shouldUpdate = this._shouldUpdateCorner(key, axisFlags); - - if (shouldUpdate) { - this._updateCornerCoordinates(state, newCorner, key, axisFlags); - } - }); - }; - - // Determine if a corner should be updated - _shouldUpdateCorner = (cornerKey, axisFlags) => { - return ( - (axisFlags.isXMin && cornerKey.includes('XMIN')) || - (axisFlags.isXMax && cornerKey.includes('XMAX')) || - (axisFlags.isYMin && cornerKey.includes('YMIN')) || - (axisFlags.isYMax && cornerKey.includes('YMAX')) || - (axisFlags.isZMin && cornerKey.includes('ZMIN')) || - (axisFlags.isZMax && cornerKey.includes('ZMAX')) - ); + const [viewport3D] = viewportsInfo; + const renderingEngine = getRenderingEngine(viewport3D.renderingEngineId); + const viewport = renderingEngine?.getViewport(viewport3D.viewportId); + return (viewport as Types.IVolumeViewport) || null; }; - // Update individual corner coordinates - _updateCornerCoordinates = (state, newCorner, cornerKey, axisFlags) => { - // X axis updates - if ( - (axisFlags.isXMin && cornerKey.includes('XMIN')) || - (axisFlags.isXMax && cornerKey.includes('XMAX')) - ) { - state.point[0] = newCorner[0]; - } + _getVolumeActor( + viewport?: Types.IVolumeViewport + ): Types.VolumeActor | undefined { + const vp = viewport || this._getViewport(); + return vp?.getDefaultActor()?.actor as Types.VolumeActor | undefined; + } - // Y axis updates - if ( - (axisFlags.isYMin && cornerKey.includes('YMIN')) || - (axisFlags.isYMax && cornerKey.includes('YMAX')) - ) { - state.point[1] = newCorner[1]; - } + _getVolumeMapper( + viewport?: Types.IVolumeViewport + ): vtkVolumeMapper | undefined { + const actor = this._getVolumeActor(viewport); + return actor?.getMapper() as vtkVolumeMapper | undefined; + } - // Z axis updates - if ( - (axisFlags.isZMin && cornerKey.includes('ZMIN')) || - (axisFlags.isZMax && cornerKey.includes('ZMAX')) - ) { - state.point[2] = newCorner[2]; + _applyClippingPlanesToMapper(mapper: vtkVolumeMapper): void { + mapper.removeAllClippingPlanes(); + for (let i = 0; i < NUM_CLIPPING_PLANES; ++i) { + const plane = vtkPlane.newInstance({ + origin: this.originalClippingPlanes[i].origin as [ + number, + number, + number, + ], + normal: this.originalClippingPlanes[i].normal as [ + number, + number, + number, + ], + }); + mapper.addClippingPlane(plane); } - - // Apply changes - state.sphereSource.setCenter(...state.point); - state.sphereSource.modified(); - }; - - // Update after corner movement - _updateAfterCornerMovement = (viewport) => { - this._updateFaceSpheresFromCorners(); - this._updateCornerSpheres(); - this._updateClippingPlanesFromFaceSpheres(viewport); - }; - - // Update after face movement - _updateAfterFaceMovement = (viewport) => { - this._updateCornerSpheresFromFaces(); - // this._updateFaceSpheresFromCorners(); - // this._updateCornerSpheres(); - this._updateClippingPlanesFromFaceSpheres(viewport); - }; - - // Trigger tool changed event - _triggerToolChangedEvent = (sphereState) => { - triggerEvent(eventTarget, Events.VOLUMECROPPING_TOOL_CHANGED, { - toolCenter: sphereState.point, - axis: sphereState.isCorner ? 'corner' : sphereState.axis, - draggingSphereIndex: this.draggingSphereIndex, - seriesInstanceUID: this.seriesInstanceUID, - }); - }; + } _updateClippingPlanesFromFaceSpheres(viewport) { const mapper = viewport.getDefaultActor().actor.getMapper(); // Update origins in originalClippingPlanes - this.originalClippingPlanes[0].origin = [ + this.originalClippingPlanes[PLANEINDEX.XMIN].origin = [ ...this.sphereStates[SPHEREINDEX.XMIN].point, ]; - this.originalClippingPlanes[1].origin = [ + this.originalClippingPlanes[PLANEINDEX.XMAX].origin = [ ...this.sphereStates[SPHEREINDEX.XMAX].point, ]; - this.originalClippingPlanes[2].origin = [ + this.originalClippingPlanes[PLANEINDEX.YMIN].origin = [ ...this.sphereStates[SPHEREINDEX.YMIN].point, ]; - this.originalClippingPlanes[3].origin = [ + this.originalClippingPlanes[PLANEINDEX.YMAX].origin = [ ...this.sphereStates[SPHEREINDEX.YMAX].point, ]; - this.originalClippingPlanes[4].origin = [ + this.originalClippingPlanes[PLANEINDEX.ZMIN].origin = [ ...this.sphereStates[SPHEREINDEX.ZMIN].point, ]; - this.originalClippingPlanes[5].origin = [ + this.originalClippingPlanes[PLANEINDEX.ZMAX].origin = [ ...this.sphereStates[SPHEREINDEX.ZMAX].point, ]; - mapper.removeAllClippingPlanes(); - for (let i = 0; i < 6; ++i) { - const origin = this.originalClippingPlanes[i].origin as [ - number, - number, - number, - ]; - const normal = this.originalClippingPlanes[i].normal as [ - number, - number, - number, - ]; - const plane = vtkPlane.newInstance({ - origin, - normal, - }); - mapper.addClippingPlane(plane); - } + this._applyClippingPlanesToMapper(mapper); } _updateCornerSpheresFromFaces() { - // Get face sphere positions - const xMin = this.sphereStates[SPHEREINDEX.XMIN].point[0]; - const xMax = this.sphereStates[SPHEREINDEX.XMAX].point[0]; - const yMin = this.sphereStates[SPHEREINDEX.YMIN].point[1]; - const yMax = this.sphereStates[SPHEREINDEX.YMAX].point[1]; - const zMin = this.sphereStates[SPHEREINDEX.ZMIN].point[2]; - const zMax = this.sphereStates[SPHEREINDEX.ZMAX].point[2]; + const { xDir, yDir, zDir } = this._getDirectionVectors(); + if (!xDir || !yDir || !zDir) return; + + const faceXMin = this.sphereStates[SPHEREINDEX.XMIN].point; + const faceXMax = this.sphereStates[SPHEREINDEX.XMAX].point; + const faceYMin = this.sphereStates[SPHEREINDEX.YMIN].point; + const faceYMax = this.sphereStates[SPHEREINDEX.YMAX].point; + const faceZMin = this.sphereStates[SPHEREINDEX.ZMIN].point; + const faceZMax = this.sphereStates[SPHEREINDEX.ZMAX].point; const corners = [ - { key: 'XMIN_YMIN_ZMIN', pos: [xMin, yMin, zMin] }, - { key: 'XMIN_YMIN_ZMAX', pos: [xMin, yMin, zMax] }, - { key: 'XMIN_YMAX_ZMIN', pos: [xMin, yMax, zMin] }, - { key: 'XMIN_YMAX_ZMAX', pos: [xMin, yMax, zMax] }, - { key: 'XMAX_YMIN_ZMIN', pos: [xMax, yMin, zMin] }, - { key: 'XMAX_YMIN_ZMAX', pos: [xMax, yMin, zMax] }, - { key: 'XMAX_YMAX_ZMIN', pos: [xMax, yMax, zMin] }, - { key: 'XMAX_YMAX_ZMAX', pos: [xMax, yMax, zMax] }, + { + key: 'XMIN_YMIN_ZMIN', + pos: this._calculateCornerFromFaces( + faceXMin, + faceYMin, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMIN_YMIN_ZMAX', + pos: this._calculateCornerFromFaces( + faceXMin, + faceYMin, + faceZMax, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMIN_YMAX_ZMIN', + pos: this._calculateCornerFromFaces( + faceXMin, + faceYMax, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMIN_YMAX_ZMAX', + pos: this._calculateCornerFromFaces( + faceXMin, + faceYMax, + faceZMax, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMIN_ZMIN', + pos: this._calculateCornerFromFaces( + faceXMax, + faceYMin, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMIN_ZMAX', + pos: this._calculateCornerFromFaces( + faceXMax, + faceYMin, + faceZMax, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMAX_ZMIN', + pos: this._calculateCornerFromFaces( + faceXMax, + faceYMax, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMAX_ZMAX', + pos: this._calculateCornerFromFaces( + faceXMax, + faceYMax, + faceZMax, + xDir, + yDir, + zDir + ), + }, ]; for (const corner of corners) { - const state = this.sphereStates.find( + const stateIndex = this.sphereStates.findIndex( (s) => s.uid === `corner_${corner.key}` ); - if (state) { - state.point[0] = corner.pos[0]; - state.point[1] = corner.pos[1]; - state.point[2] = corner.pos[2]; - state.sphereSource.setCenter(...state.point); - state.sphereSource.modified(); + if (stateIndex !== -1) { + this._updateSpherePosition(stateIndex, corner.pos); } } } _updateFaceSpheresFromCorners() { - // Get all corner points + if (!this.volumeDirectionVectors) return; + const corners = [ this.sphereStates[SPHEREINDEX.XMIN_YMIN_ZMIN].point, this.sphereStates[SPHEREINDEX.XMIN_YMIN_ZMAX].point, @@ -1546,110 +1513,163 @@ class VolumeCroppingTool extends BaseTool { this.sphereStates[SPHEREINDEX.XMAX_YMAX_ZMAX].point, ]; - const xs = corners.map((p) => p[0]); - const ys = corners.map((p) => p[1]); - const zs = corners.map((p) => p[2]); - - const xMin = Math.min(...xs), - xMax = Math.max(...xs); - const yMin = Math.min(...ys), - yMax = Math.max(...ys); - const zMin = Math.min(...zs), - zMax = Math.max(...zs); - - // Face spheres should always be at the center of their face - this.sphereStates[SPHEREINDEX.XMIN].point = [ - xMin, - (yMin + yMax) / 2, - (zMin + zMax) / 2, - ]; - this.sphereStates[SPHEREINDEX.XMAX].point = [ - xMax, - (yMin + yMax) / 2, - (zMin + zMax) / 2, - ]; - this.sphereStates[SPHEREINDEX.YMIN].point = [ - (xMin + xMax) / 2, - yMin, - (zMin + zMax) / 2, - ]; - this.sphereStates[SPHEREINDEX.YMAX].point = [ - (xMin + xMax) / 2, - yMax, - (zMin + zMax) / 2, - ]; - this.sphereStates[SPHEREINDEX.ZMIN].point = [ - (xMin + xMax) / 2, - (yMin + yMax) / 2, - zMin, - ]; - this.sphereStates[SPHEREINDEX.ZMAX].point = [ - (xMin + xMax) / 2, - (yMin + yMax) / 2, - zMax, - ]; + const faceXMin = this._averagePoints([ + corners[0], + corners[1], + corners[2], + corners[3], + ]); + const faceXMax = this._averagePoints([ + corners[4], + corners[5], + corners[6], + corners[7], + ]); + const faceYMin = this._averagePoints([ + corners[0], + corners[1], + corners[4], + corners[5], + ]); + const faceYMax = this._averagePoints([ + corners[2], + corners[3], + corners[6], + corners[7], + ]); + const faceZMin = this._averagePoints([ + corners[0], + corners[2], + corners[4], + corners[6], + ]); + const faceZMax = this._averagePoints([ + corners[1], + corners[3], + corners[5], + corners[7], + ]); - [ - SPHEREINDEX.XMIN, - SPHEREINDEX.XMAX, - SPHEREINDEX.YMIN, - SPHEREINDEX.YMAX, - SPHEREINDEX.ZMIN, - SPHEREINDEX.ZMAX, - ].forEach((idx) => { - const s = this.sphereStates[idx]; - s.sphereSource.setCenter(...s.point); - s.sphereSource.modified(); - }); + this._updateSpherePosition(SPHEREINDEX.XMIN, faceXMin); + this._updateSpherePosition(SPHEREINDEX.XMAX, faceXMax); + this._updateSpherePosition(SPHEREINDEX.YMIN, faceYMin); + this._updateSpherePosition(SPHEREINDEX.YMAX, faceYMax); + this._updateSpherePosition(SPHEREINDEX.ZMIN, faceZMin); + this._updateSpherePosition(SPHEREINDEX.ZMAX, faceZMax); } _updateCornerSpheres() { - // Get face sphere positions - const xMin = this.sphereStates[SPHEREINDEX.XMIN].point[0]; - const xMax = this.sphereStates[SPHEREINDEX.XMAX].point[0]; - const yMin = this.sphereStates[SPHEREINDEX.YMIN].point[1]; - const yMax = this.sphereStates[SPHEREINDEX.YMAX].point[1]; - const zMin = this.sphereStates[SPHEREINDEX.ZMIN].point[2]; - const zMax = this.sphereStates[SPHEREINDEX.ZMAX].point[2]; - - // Define all 8 corners from face sphere positions + const { xDir, yDir, zDir } = this._getDirectionVectors(); + if (!xDir || !yDir || !zDir) return; + + const faceXMin = this.sphereStates[SPHEREINDEX.XMIN].point; + const faceXMax = this.sphereStates[SPHEREINDEX.XMAX].point; + const faceYMin = this.sphereStates[SPHEREINDEX.YMIN].point; + const faceYMax = this.sphereStates[SPHEREINDEX.YMAX].point; + const faceZMin = this.sphereStates[SPHEREINDEX.ZMIN].point; + const faceZMax = this.sphereStates[SPHEREINDEX.ZMAX].point; + const corners = [ - { key: 'XMIN_YMIN_ZMIN', pos: [xMin, yMin, zMin] }, - { key: 'XMIN_YMIN_ZMAX', pos: [xMin, yMin, zMax] }, - { key: 'XMIN_YMAX_ZMIN', pos: [xMin, yMax, zMin] }, - { key: 'XMIN_YMAX_ZMAX', pos: [xMin, yMax, zMax] }, - { key: 'XMAX_YMIN_ZMIN', pos: [xMax, yMin, zMin] }, - { key: 'XMAX_YMIN_ZMAX', pos: [xMax, yMin, zMax] }, - { key: 'XMAX_YMAX_ZMIN', pos: [xMax, yMax, zMin] }, - { key: 'XMAX_YMAX_ZMAX', pos: [xMax, yMax, zMax] }, + { + key: 'XMIN_YMIN_ZMIN', + pos: this._calculateCornerFromProjection( + faceXMin, + faceYMin, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMIN_YMIN_ZMAX', + pos: this._calculateCornerFromProjection( + faceXMin, + faceYMin, + faceZMax, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMIN_YMAX_ZMIN', + pos: this._calculateCornerFromProjection( + faceXMin, + faceYMax, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMIN_YMAX_ZMAX', + pos: this._calculateCornerFromProjection( + faceXMin, + faceYMax, + faceZMax, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMIN_ZMIN', + pos: this._calculateCornerFromProjection( + faceXMax, + faceYMin, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMIN_ZMAX', + pos: this._calculateCornerFromProjection( + faceXMax, + faceYMin, + faceZMax, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMAX_ZMIN', + pos: this._calculateCornerFromProjection( + faceXMax, + faceYMax, + faceZMin, + xDir, + yDir, + zDir + ), + }, + { + key: 'XMAX_YMAX_ZMAX', + pos: this._calculateCornerFromProjection( + faceXMax, + faceYMax, + faceZMax, + xDir, + yDir, + zDir + ), + }, ]; - // Update corner spheres for (const corner of corners) { - const state = this.sphereStates.find( + const stateIndex = this.sphereStates.findIndex( (s) => s.uid === `corner_${corner.key}` ); - if (state) { - state.point[0] = corner.pos[0]; - state.point[1] = corner.pos[1]; - state.point[2] = corner.pos[2]; - state.sphereSource.setCenter(...state.point); - state.sphereSource.modified(); + if (stateIndex !== -1) { + this._updateSpherePosition(stateIndex, corner.pos); } } - // Update edge lines to follow the corner spheres - Object.values(this.edgeLines).forEach(({ source, key1, key2 }) => { - const state1 = this.sphereStates.find((s) => s.uid === `corner_${key1}`); - const state2 = this.sphereStates.find((s) => s.uid === `corner_${key2}`); - if (state1 && state2) { - const points = source.getPoints(); - points.setPoint(0, state1.point[0], state1.point[1], state1.point[2]); - points.setPoint(1, state2.point[0], state2.point[1], state2.point[2]); - points.modified(); - source.modified(); - } - }); + this._updateEdgeLines(); } _onNewVolume = () => { @@ -1690,6 +1710,433 @@ class VolumeCroppingTool extends BaseTool { }); } + _rotateClippingPlanes = (evt: EventTypes.InteractionEventType) => { + const { element, currentPoints, lastPoints } = evt.detail; + const currentPointsCanvas = currentPoints.canvas; + const lastPointsCanvas = lastPoints.canvas; + const rotateIncrementDegrees = + this.configuration.rotateClippingPlanesIncrementDegrees ?? + this.configuration.rotateIncrementDegrees ?? + 5; + const enabledElement = getEnabledElement(element); + const { viewport } = enabledElement; + + const camera = viewport.getCamera(); + const width = element.clientWidth; + const height = element.clientHeight; + + const normalizedPosition = [ + currentPointsCanvas[0] / width, + currentPointsCanvas[1] / height, + ]; + + const normalizedPreviousPosition = [ + lastPointsCanvas[0] / width, + lastPointsCanvas[1] / height, + ]; + + const normalizedCenter = [0.5, 0.5]; + + const radsq = (1.0 + Math.abs(normalizedCenter[0])) ** 2.0; + const op = [normalizedPreviousPosition[0], 0, 0]; + const oe = [normalizedPosition[0], 0, 0]; + + const opsq = op[0] ** 2; + const oesq = oe[0] ** 2; + + const lop = opsq > radsq ? 0 : Math.sqrt(radsq - opsq); + const loe = oesq > radsq ? 0 : Math.sqrt(radsq - oesq); + + const nop: Types.Point3 = [op[0], 0, lop]; + vtkMath.normalize(nop); + const noe: Types.Point3 = [oe[0], 0, loe]; + vtkMath.normalize(noe); + + const dot = vtkMath.dot(nop, noe); + if (Math.abs(dot) > 0.0001) { + const angleX = + 20 * + Math.acos(vtkMath.clampValue(dot, -1.0, 1.0)) * + Math.sign(normalizedPosition[0] - normalizedPreviousPosition[0]) * + rotateIncrementDegrees; + + const upVec = camera.viewUp; + const atV = camera.viewPlaneNormal; + const rightV: Types.Point3 = [0, 0, 0]; + const forwardV: Types.Point3 = [0, 0, 0]; + + vtkMath.cross(upVec, atV, rightV); + vtkMath.normalize(rightV); + + vtkMath.cross(atV, rightV, forwardV); + vtkMath.normalize(forwardV); + + const angleY = + 20 * + (normalizedPosition[1] - normalizedPreviousPosition[1]) * + rotateIncrementDegrees; + + // Calculate rotation center as average of all face sphere centers + let rotationCenter: Types.Point3; + if (this.sphereStates.length >= NUM_CLIPPING_PLANES) { + const faces = [ + this.sphereStates[SPHEREINDEX.XMIN], + this.sphereStates[SPHEREINDEX.XMAX], + this.sphereStates[SPHEREINDEX.YMIN], + this.sphereStates[SPHEREINDEX.YMAX], + this.sphereStates[SPHEREINDEX.ZMIN], + this.sphereStates[SPHEREINDEX.ZMAX], + ]; + rotationCenter = [ + (faces[0].point[0] + + faces[1].point[0] + + faces[2].point[0] + + faces[3].point[0] + + faces[4].point[0] + + faces[5].point[0]) / + NUM_CLIPPING_PLANES, + (faces[0].point[1] + + faces[1].point[1] + + faces[2].point[1] + + faces[3].point[1] + + faces[4].point[1] + + faces[5].point[1]) / + NUM_CLIPPING_PLANES, + (faces[0].point[2] + + faces[1].point[2] + + faces[2].point[2] + + faces[3].point[2] + + faces[4].point[2] + + faces[5].point[2]) / + NUM_CLIPPING_PLANES, + ] as Types.Point3; + } else { + // Fallback if spheres aren't initialized yet + rotationCenter = [0, 0, 0] as Types.Point3; + } + + // Rotate all clipping planes around the rotation center + // First rotate around forward axis (angleX), then around right axis (angleY) + const transformX = mat4.identity(new Float32Array(16)); + mat4.translate(transformX, transformX, rotationCenter); + mat4.rotate(transformX, transformX, (angleX * Math.PI) / 180, forwardV); + mat4.translate(transformX, transformX, [ + -rotationCenter[0], + -rotationCenter[1], + -rotationCenter[2], + ]); + + const transformY = mat4.identity(new Float32Array(16)); + mat4.translate(transformY, transformY, rotationCenter); + mat4.rotate(transformY, transformY, (angleY * Math.PI) / 180, rightV); + mat4.translate(transformY, transformY, [ + -rotationCenter[0], + -rotationCenter[1], + -rotationCenter[2], + ]); + + // Combine transformations + const transform = mat4.create(); + mat4.multiply(transform, transformY, transformX); + + // Rotate normals (rotation only, no translation) + // Create 4x4 rotation matrices and extract 3x3 for normals + const normalTransformX4 = mat4.identity(new Float32Array(16)); + mat4.rotate( + normalTransformX4, + normalTransformX4, + (angleX * Math.PI) / 180, + forwardV + ); + const normalTransformX = mat3.create(); + mat3.fromMat4(normalTransformX, normalTransformX4); + + const normalTransformY4 = mat4.identity(new Float32Array(16)); + mat4.rotate( + normalTransformY4, + normalTransformY4, + (angleY * Math.PI) / 180, + rightV + ); + const normalTransformY = mat3.create(); + mat3.fromMat4(normalTransformY, normalTransformY4); + + const normalTransform = mat3.create(); + mat3.multiply(normalTransform, normalTransformY, normalTransformX); + + // Rotate all original clipping planes + for (let i = 0; i < this.originalClippingPlanes.length; ++i) { + const plane = this.originalClippingPlanes[i]; + + // Transform origin + const originVec = vec3.fromValues( + plane.origin[0], + plane.origin[1], + plane.origin[2] + ); + vec3.transformMat4(originVec, originVec, transform); + plane.origin = [originVec[0], originVec[1], originVec[2]]; + + // Transform normal + const normalVec = vec3.fromValues( + plane.normal[0], + plane.normal[1], + plane.normal[2] + ); + vec3.transformMat3(normalVec, normalVec, normalTransform); + vec3.normalize(normalVec, normalVec); + plane.normal = [normalVec[0], normalVec[1], normalVec[2]]; + } + + // Update face spheres from rotated planes + if (this.sphereStates.length >= NUM_CLIPPING_PLANES) { + this.sphereStates[SPHEREINDEX.XMIN].point = [ + ...this.originalClippingPlanes[PLANEINDEX.XMIN].origin, + ] as Types.Point3; + this.sphereStates[SPHEREINDEX.XMAX].point = [ + ...this.originalClippingPlanes[PLANEINDEX.XMAX].origin, + ] as Types.Point3; + this.sphereStates[SPHEREINDEX.YMIN].point = [ + ...this.originalClippingPlanes[PLANEINDEX.YMIN].origin, + ] as Types.Point3; + this.sphereStates[SPHEREINDEX.YMAX].point = [ + ...this.originalClippingPlanes[PLANEINDEX.YMAX].origin, + ] as Types.Point3; + this.sphereStates[SPHEREINDEX.ZMIN].point = [ + ...this.originalClippingPlanes[PLANEINDEX.ZMIN].origin, + ] as Types.Point3; + this.sphereStates[SPHEREINDEX.ZMAX].point = [ + ...this.originalClippingPlanes[PLANEINDEX.ZMAX].origin, + ] as Types.Point3; + + // Update sphere actors for face spheres + [ + SPHEREINDEX.XMIN, + SPHEREINDEX.XMAX, + SPHEREINDEX.YMIN, + SPHEREINDEX.YMAX, + SPHEREINDEX.ZMIN, + SPHEREINDEX.ZMAX, + ].forEach((idx) => { + const s = this.sphereStates[idx]; + s.sphereSource.setCenter(...s.point); + s.sphereSource.modified(); + }); + + // Rotate corner spheres directly using the same transformation + const cornerIndices = [ + SPHEREINDEX.XMIN_YMIN_ZMIN, + SPHEREINDEX.XMIN_YMIN_ZMAX, + SPHEREINDEX.XMIN_YMAX_ZMIN, + SPHEREINDEX.XMIN_YMAX_ZMAX, + SPHEREINDEX.XMAX_YMIN_ZMIN, + SPHEREINDEX.XMAX_YMIN_ZMAX, + SPHEREINDEX.XMAX_YMAX_ZMIN, + SPHEREINDEX.XMAX_YMAX_ZMAX, + ]; + + cornerIndices.forEach((idx) => { + const cornerState = this.sphereStates[idx]; + if (cornerState) { + const cornerVec = vec3.fromValues( + cornerState.point[0], + cornerState.point[1], + cornerState.point[2] + ); + vec3.transformMat4(cornerVec, cornerVec, transform); + cornerState.point = [ + cornerVec[0], + cornerVec[1], + cornerVec[2], + ] as Types.Point3; + cornerState.sphereSource.setCenter(...cornerState.point); + cornerState.sphereSource.modified(); + } + }); + + // Update edge lines to follow the rotated corner spheres + Object.values(this.edgeLines).forEach(({ source, key1, key2 }) => { + const state1 = this.sphereStates.find( + (s) => s.uid === `corner_${key1}` + ); + const state2 = this.sphereStates.find( + (s) => s.uid === `corner_${key2}` + ); + if (state1 && state2) { + const points = source.getPoints(); + points.setPoint( + 0, + state1.point[0], + state1.point[1], + state1.point[2] + ); + points.setPoint( + 1, + state2.point[0], + state2.point[1], + state2.point[2] + ); + points.modified(); + source.modified(); + } + }); + } + + this._updateClippingPlanes(viewport); + viewport.render(); + + triggerEvent(eventTarget, Events.VOLUMECROPPING_TOOL_CHANGED, { + originalClippingPlanes: this.originalClippingPlanes, + viewportId: viewport.id, + renderingEngineId: viewport.renderingEngineId, + seriesInstanceUID: this.seriesInstanceUID, + }); + } + }; + + _getDirectionVectors(): { + xDir: Types.Point3; + yDir: Types.Point3; + zDir: Types.Point3; + } { + const hasPlanes = + this.originalClippingPlanes?.length >= NUM_CLIPPING_PLANES; + + return { + xDir: hasPlanes + ? (this.originalClippingPlanes[PLANEINDEX.XMIN].normal as Types.Point3) + : this.volumeDirectionVectors?.xDir || [1, 0, 0], + yDir: hasPlanes + ? (this.originalClippingPlanes[PLANEINDEX.YMIN].normal as Types.Point3) + : this.volumeDirectionVectors?.yDir || [0, 1, 0], + zDir: hasPlanes + ? (this.originalClippingPlanes[PLANEINDEX.ZMIN].normal as Types.Point3) + : this.volumeDirectionVectors?.zDir || [0, 0, 1], + }; + } + + _updateSpherePosition(sphereIndex: number, newPoint: Types.Point3): void { + const state = this.sphereStates[sphereIndex]; + if (state) { + state.point = newPoint; + state.sphereSource.setCenter(...newPoint); + state.sphereSource.modified(); + } + } + + _updateFaceSpheresFromClippingPlanes(): void { + const faceMappings = [ + { sphereIdx: SPHEREINDEX.XMIN, planeIdx: PLANEINDEX.XMIN }, + { sphereIdx: SPHEREINDEX.XMAX, planeIdx: PLANEINDEX.XMAX }, + { sphereIdx: SPHEREINDEX.YMIN, planeIdx: PLANEINDEX.YMIN }, + { sphereIdx: SPHEREINDEX.YMAX, planeIdx: PLANEINDEX.YMAX }, + { sphereIdx: SPHEREINDEX.ZMIN, planeIdx: PLANEINDEX.ZMIN }, + { sphereIdx: SPHEREINDEX.ZMAX, planeIdx: PLANEINDEX.ZMAX }, + ]; + + faceMappings.forEach(({ sphereIdx, planeIdx }) => { + const newPoint = [ + ...this.originalClippingPlanes[planeIdx].origin, + ] as Types.Point3; + this._updateSpherePosition(sphereIdx, newPoint); + }); + } + + _averagePoints(points: Types.Point3[]): Types.Point3 { + const sum = points.reduce( + (acc, p) => [acc[0] + p[0], acc[1] + p[1], acc[2] + p[2]], + [0, 0, 0] + ); + return [ + sum[0] / points.length, + sum[1] / points.length, + sum[2] / points.length, + ] as Types.Point3; + } + + _notifyClippingPlanesChanged(viewport?): void { + const eventData: { + originalClippingPlanes: ClippingPlane[]; + seriesInstanceUID?: string; + viewportId?: string; + renderingEngineId?: string; + } = { + originalClippingPlanes: this.originalClippingPlanes, + seriesInstanceUID: this.seriesInstanceUID, + }; + + if (viewport) { + eventData.viewportId = viewport.id; + eventData.renderingEngineId = viewport.renderingEngineId; + } + + triggerEvent(eventTarget, Events.VOLUMECROPPING_TOOL_CHANGED, eventData); + } + + _calculateCornerFromFaces( + faceX: Types.Point3, + faceY: Types.Point3, + faceZ: Types.Point3, + xDir: Types.Point3, + yDir: Types.Point3, + zDir: Types.Point3 + ): Types.Point3 { + const deltaXY = [ + faceY[0] - faceX[0], + faceY[1] - faceX[1], + faceY[2] - faceX[2], + ]; + const distY = + deltaXY[0] * yDir[0] + deltaXY[1] * yDir[1] + deltaXY[2] * yDir[2]; + + const deltaXZ = [ + faceZ[0] - faceX[0], + faceZ[1] - faceX[1], + faceZ[2] - faceX[2], + ]; + const distZ = + deltaXZ[0] * zDir[0] + deltaXZ[1] * zDir[1] + deltaXZ[2] * zDir[2]; + + return [ + faceX[0] + distY * yDir[0] + distZ * zDir[0], + faceX[1] + distY * yDir[1] + distZ * zDir[1], + faceX[2] + distY * yDir[2] + distZ * zDir[2], + ] as Types.Point3; + } + + _calculateCornerFromProjection( + faceX: Types.Point3, + faceY: Types.Point3, + faceZ: Types.Point3, + xDir: Types.Point3, + yDir: Types.Point3, + zDir: Types.Point3 + ): Types.Point3 { + const dX = faceX[0] * xDir[0] + faceX[1] * xDir[1] + faceX[2] * xDir[2]; + const dY = faceY[0] * yDir[0] + faceY[1] * yDir[1] + faceY[2] * yDir[2]; + const dZ = faceZ[0] * zDir[0] + faceZ[1] * zDir[1] + faceZ[2] * zDir[2]; + + return [ + dX * xDir[0] + dY * yDir[0] + dZ * zDir[0], + dX * xDir[1] + dY * yDir[1] + dZ * zDir[1], + dX * xDir[2] + dY * yDir[2] + dZ * zDir[2], + ] as Types.Point3; + } + + _updateEdgeLines(): void { + Object.values(this.edgeLines).forEach(({ source, key1, key2 }) => { + const state1 = this.sphereStates.find((s) => s.uid === `corner_${key1}`); + const state2 = this.sphereStates.find((s) => s.uid === `corner_${key2}`); + if (state1 && state2) { + const points = source.getPoints(); + points.setPoint(0, state1.point[0], state1.point[1], state1.point[2]); + points.setPoint(1, state2.point[0], state2.point[1], state2.point[2]); + points.modified(); + source.modified(); + } + }); + } + _rotateCamera = (viewport, centerWorld, axis, angle) => { const vtkCamera = viewport.getVtkActiveCamera(); const viewUp = vtkCamera.getViewUp(); diff --git a/packages/tools/src/utilities/draw3D/addLine3DBetweenPoints.ts b/packages/tools/src/utilities/draw3D/addLine3DBetweenPoints.ts new file mode 100644 index 0000000000..43801e7599 --- /dev/null +++ b/packages/tools/src/utilities/draw3D/addLine3DBetweenPoints.ts @@ -0,0 +1,58 @@ +import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; +import vtkPoints from '@kitware/vtk.js/Common/Core/Points'; +import vtkCellArray from '@kitware/vtk.js/Common/Core/CellArray'; +import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; +import vtkMapper from '@kitware/vtk.js/Rendering/Core/Mapper'; +import type { Types } from '@cornerstonejs/core'; + +/** + * Add a 3D line between two points in the viewport + * @param viewport - The viewport to add the line to + * @param point1 - First point [x, y, z] + * @param point2 - Second point [x, y, z] + * @param color - RGB color array [r, g, b] (default: [0.7, 0.7, 0.7]) + * @param uid - Unique identifier for the line + * @param showHandles - Whether handles are visible (affects line visibility) + * @returns Object with actor and source + */ +export function addLine3DBetweenPoints( + viewport: Types.IVolumeViewport, + point1: Types.Point3, + point2: Types.Point3, + color: [number, number, number] = [0.7, 0.7, 0.7], + uid = '', + showHandles = true +): { actor: vtkActor | null; source: vtkPolyData | null } { + // Avoid creating a line if the points are the same + if ( + point1[0] === point2[0] && + point1[1] === point2[1] && + point1[2] === point2[2] + ) { + return { actor: null, source: null }; + } + const points = vtkPoints.newInstance(); + points.setNumberOfPoints(2); + points.setPoint(0, point1[0], point1[1], point1[2]); + points.setPoint(1, point2[0], point2[1], point2[2]); + + const lines = vtkCellArray.newInstance({ values: [2, 0, 1] }); + const polyData = vtkPolyData.newInstance(); + polyData.setPoints(points); + polyData.setLines(lines); + + const mapper = vtkMapper.newInstance(); + mapper.setInputData(polyData); + const actor = vtkActor.newInstance(); + actor.setMapper(mapper); + actor.getProperty().setColor(...color); + actor.getProperty().setLineWidth(0.5); // Thinner line + actor.getProperty().setOpacity(1.0); + actor.getProperty().setInterpolationToFlat(); // No shading + actor.getProperty().setAmbient(1.0); // Full ambient + actor.getProperty().setDiffuse(0.0); // No diffuse + actor.getProperty().setSpecular(0.0); // No specular + actor.setVisibility(showHandles); + viewport.addActor({ actor, uid }); + return { actor, source: polyData }; +} diff --git a/packages/tools/src/utilities/draw3D/calculateAdaptiveSphereRadius.ts b/packages/tools/src/utilities/draw3D/calculateAdaptiveSphereRadius.ts new file mode 100644 index 0000000000..a986245c44 --- /dev/null +++ b/packages/tools/src/utilities/draw3D/calculateAdaptiveSphereRadius.ts @@ -0,0 +1,26 @@ +/** + * Calculate an adaptive sphere radius based on the diagonal of the volume. + * This allows the sphere size to scale with the volume size. + * @param diagonal The diagonal length of the volume in world coordinates. + * @param config Configuration object with sphere radius settings + * @returns The calculated adaptive radius, clamped between min and max limits. + */ +export function calculateAdaptiveSphereRadius( + diagonal: number, + config: { + sphereRadius?: number; + sphereRadiusScale?: number; + minSphereRadius?: number; + maxSphereRadius?: number; + } +): number { + // Scale radius as a percentage of diagonal (adjustable factor) + const scaleFactor = config.sphereRadiusScale || 0.01; // 1% of diagonal by default + const adaptiveRadius = diagonal * scaleFactor; + + // Apply min/max limits to prevent too small or too large spheres + const minRadius = config.minSphereRadius || 2; + const maxRadius = config.maxSphereRadius || 50; + + return Math.max(minRadius, Math.min(maxRadius, adaptiveRadius)); +} diff --git a/packages/tools/src/utilities/draw3D/index.ts b/packages/tools/src/utilities/draw3D/index.ts new file mode 100644 index 0000000000..ecb11e3ccc --- /dev/null +++ b/packages/tools/src/utilities/draw3D/index.ts @@ -0,0 +1,2 @@ +export { addLine3DBetweenPoints } from './addLine3DBetweenPoints'; +export { calculateAdaptiveSphereRadius } from './calculateAdaptiveSphereRadius'; diff --git a/packages/tools/src/utilities/index.ts b/packages/tools/src/utilities/index.ts index 2142bb527a..8876fd11a2 100644 --- a/packages/tools/src/utilities/index.ts +++ b/packages/tools/src/utilities/index.ts @@ -37,6 +37,7 @@ import * as viewportFilters from './viewportFilters'; import * as orientation from './orientation'; import * as cine from './cine'; import * as boundingBox from './boundingBox'; +import * as draw3D from './draw3D'; import * as planarFreehandROITool from './planarFreehandROITool'; import * as rectangleROITool from './rectangleROITool'; import { stackPrefetch, stackContextPrefetch } from './stackPrefetch'; @@ -91,6 +92,7 @@ export { viewport, cine, boundingBox, + draw3D, rectangleROITool, planarFreehandROITool, stackPrefetch, diff --git a/packages/tools/src/utilities/volumeCropping/computePlanePlaneIntersection.ts b/packages/tools/src/utilities/volumeCropping/computePlanePlaneIntersection.ts new file mode 100644 index 0000000000..81a606a1c4 --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/computePlanePlaneIntersection.ts @@ -0,0 +1,64 @@ +import { vec3 } from 'gl-matrix'; +import vtkMath from '@kitware/vtk.js/Common/Core/Math'; +import type { Types } from '@cornerstonejs/core'; +import type { ClippingPlane } from './types'; +import { PARALLEL_PLANE_TOLERANCE } from './constants'; + +/** + * Computes the intersection line between a clipping plane and a viewport's view plane. + * Returns the direction vector and a point on the intersection line. + * + * @param clippingPlane - The clipping plane with origin and normal + * @param viewPlaneNormal - The normal vector of the viewport's view plane + * @param viewPlanePoint - A point on the viewport's view plane + * @returns Object with direction and point of intersection, or null if planes are parallel + */ +export function computePlanePlaneIntersection( + clippingPlane: ClippingPlane, + viewPlaneNormal: Types.Point3, + viewPlanePoint: Types.Point3 +): { direction: Types.Point3; point: Types.Point3 } | null { + const n1 = clippingPlane.normal; + const p1 = clippingPlane.origin; + const n2 = viewPlaneNormal; + const p2 = viewPlanePoint; + + const dir = vec3.create(); + vec3.cross(dir, n1, n2); + const dirLenSq = vec3.squaredLength(dir); + + if (dirLenSq < PARALLEL_PLANE_TOLERANCE) { + return null; // planes effectively parallel + } + + const d1 = vtkMath.dot(n1, p1); + const d2 = vtkMath.dot(n2, p2); + + // point = (d1 (n2 × dir) + d2 (dir × n1)) / |dir|^2 + const term1 = vec3.create(); + const term2 = vec3.create(); + vec3.cross(term1, n2, dir); + vec3.scale(term1, term1, d1); + vec3.cross(term2, dir, n1); + vec3.scale(term2, term2, d2); + + const point = vec3.create(); + vec3.add(point, term1, term2); + vec3.scale(point, point, 1 / dirLenSq); + + if ( + !Number.isFinite(point[0]) || + !Number.isFinite(point[1]) || + !Number.isFinite(point[2]) + ) { + return null; + } + + const direction = vec3.create(); + vec3.scale(direction, dir, 1 / Math.sqrt(dirLenSq)); + + return { + direction: direction as Types.Point3, + point: point as Types.Point3, + }; +} diff --git a/packages/tools/src/utilities/volumeCropping/constants.ts b/packages/tools/src/utilities/volumeCropping/constants.ts new file mode 100644 index 0000000000..01b22d20fe --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/constants.ts @@ -0,0 +1,62 @@ +export const PLANEINDEX = { + XMIN: 0, + XMAX: 1, + YMIN: 2, + YMAX: 3, + ZMIN: 4, + ZMAX: 5, +}; + +export const SPHEREINDEX = { + // cube faces + XMIN: 0, + XMAX: 1, + YMIN: 2, + YMAX: 3, + ZMIN: 4, + ZMAX: 5, + // cube corners + XMIN_YMIN_ZMIN: 6, + XMIN_YMIN_ZMAX: 7, + XMIN_YMAX_ZMIN: 8, + XMIN_YMAX_ZMAX: 9, + XMAX_YMIN_ZMIN: 10, + XMAX_YMIN_ZMAX: 11, + XMAX_YMAX_ZMIN: 12, + XMAX_YMAX_ZMAX: 13, +}; + +/** + * Number of clipping planes (6: XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX) + */ +export const NUM_CLIPPING_PLANES = 6; + +/** + * Tolerance for orientation matching (used when comparing camera normals) + */ +export const ORIENTATION_TOLERANCE = 1e-2; + +/** + * Tolerance for parallel plane detection (used in plane-plane intersection calculations) + */ +export const PARALLEL_PLANE_TOLERANCE = 1e-10; + +/** + * Tolerance for line intersection calculations (used when checking if lines are parallel) + */ +export const LINE_INTERSECTION_TOLERANCE = 1e-8; + +/** + * Large distance used to extend lines for intersection calculations + */ +export const LINE_EXTENSION_DISTANCE = 100000; + +/** + * Minimum line length in pixels for rendering (lines shorter than this are not drawn) + */ +export const MIN_LINE_LENGTH_PIXELS = 1; + +/** + * Pixel distance threshold for point proximity checks + */ +export const POINT_PROXIMITY_THRESHOLD_PIXELS = 6; diff --git a/packages/tools/src/utilities/volumeCropping/copyClippingPlanes.ts b/packages/tools/src/utilities/volumeCropping/copyClippingPlanes.ts new file mode 100644 index 0000000000..38f4b41194 --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/copyClippingPlanes.ts @@ -0,0 +1,16 @@ +import type { ClippingPlane } from './types'; +import type { Types } from '@cornerstonejs/core'; + +/** + * Creates a deep copy of an array of clipping planes. + * This is useful when you need to copy planes without mutating the original array. + * + * @param planes - Array of clipping planes to copy + * @returns A new array with copied clipping planes + */ +export function copyClippingPlanes(planes: ClippingPlane[]): ClippingPlane[] { + return planes.map((plane) => ({ + origin: [...plane.origin] as Types.Point3, + normal: [...plane.normal] as Types.Point3, + })); +} diff --git a/packages/tools/src/utilities/volumeCropping/extractVolumeDirectionVectors.ts b/packages/tools/src/utilities/volumeCropping/extractVolumeDirectionVectors.ts new file mode 100644 index 0000000000..67a332520e --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/extractVolumeDirectionVectors.ts @@ -0,0 +1,36 @@ +import { vec3 } from 'gl-matrix'; +import type { Types } from '@cornerstonejs/core'; + +export interface ImageDataWithDirection { + getDirection(): number[]; +} + +/** + * Extract volume direction vectors from imageData. + * The direction matrix defines the volume's orientation in world space. + * @param imageData - The VTK image data + * @returns Object containing the three orthogonal direction vectors + */ +export function extractVolumeDirectionVectors( + imageData: ImageDataWithDirection +): { + xDir: Types.Point3; + yDir: Types.Point3; + zDir: Types.Point3; +} { + const direction = imageData.getDirection(); + return { + xDir: vec3.normalize( + [0, 0, 0], + direction.slice(0, 3) as [number, number, number] + ) as Types.Point3, + yDir: vec3.normalize( + [0, 0, 0], + direction.slice(3, 6) as [number, number, number] + ) as Types.Point3, + zDir: vec3.normalize( + [0, 0, 0], + direction.slice(6, 9) as [number, number, number] + ) as Types.Point3, + }; +} diff --git a/packages/tools/src/utilities/volumeCropping/findLineBoundsIntersection.ts b/packages/tools/src/utilities/volumeCropping/findLineBoundsIntersection.ts new file mode 100644 index 0000000000..ec22b049ed --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/findLineBoundsIntersection.ts @@ -0,0 +1,96 @@ +import { vec2, vec3 } from 'gl-matrix'; +import type { Types } from '@cornerstonejs/core'; +import liangBarksyClip from '../math/vec2/liangBarksyClip'; +import { LINE_EXTENSION_DISTANCE, MIN_LINE_LENGTH_PIXELS } from './constants'; + +/** + * Finds where an intersection line crosses the viewport bounds. + * Returns two points on the line that are within the viewport bounds. + * + * @param linePoint - A point on the line + * @param lineDirection - The direction vector of the line + * @param viewport - The viewport to check bounds against + * @returns Object with start and end points in canvas coordinates, or null if line doesn't intersect + */ +export function findLineBoundsIntersection( + linePoint: Types.Point3, + lineDirection: Types.Point3, + viewport: Types.IViewport +): { start: Types.Point2; end: Types.Point2 } | null { + const lineLength = LINE_EXTENSION_DISTANCE; + const lineStart = vec3.scaleAndAdd( + [0, 0, 0], + linePoint, + lineDirection, + -lineLength + ) as Types.Point3; + const lineEnd = vec3.scaleAndAdd( + [0, 0, 0], + linePoint, + lineDirection, + lineLength + ) as Types.Point3; + + const canvasStart = viewport.worldToCanvas(lineStart); + const canvasEnd = viewport.worldToCanvas(lineEnd); + + // Get viewport dimensions + const { clientWidth, clientHeight } = viewport.canvas; + + // Clip to canvas bounds + const canvasBox = [0, 0, clientWidth, clientHeight]; + const clippedStart = vec2.clone(canvasStart); + const clippedEnd = vec2.clone(canvasEnd); + + // Check if line is valid before clipping + const startValid = !isNaN(clippedStart[0]) && !isNaN(clippedStart[1]); + const endValid = !isNaN(clippedEnd[0]) && !isNaN(clippedEnd[1]); + if (!startValid || !endValid) { + return null; + } + + const clipResult = liangBarksyClip(clippedStart, clippedEnd, canvasBox); + + // Check if line actually intersects the viewport bounds + // liangBarksyClip returns 1 (INSIDE) if line intersects, 0 (OUTSIDE) if it doesn't + if (clipResult === 0) { + return null; + } + + // Check if clipped line is still valid + const clippedStartValid = !isNaN(clippedStart[0]) && !isNaN(clippedStart[1]); + const clippedEndValid = !isNaN(clippedEnd[0]) && !isNaN(clippedEnd[1]); + if (!clippedStartValid || !clippedEndValid) { + return null; + } + + // Verify that clipped coordinates are actually within the viewport bounds + const [xMin, yMin, xMax, yMax] = canvasBox; + const startInBounds = + clippedStart[0] >= xMin - 1 && + clippedStart[0] <= xMax + 1 && + clippedStart[1] >= yMin - 1 && + clippedStart[1] <= yMax + 1; + const endInBounds = + clippedEnd[0] >= xMin - 1 && + clippedEnd[0] <= xMax + 1 && + clippedEnd[1] >= yMin - 1 && + clippedEnd[1] <= yMax + 1; + + if (!startInBounds || !endInBounds) { + return null; + } + + // Check if the line has zero length after clipping + const dx = clippedEnd[0] - clippedStart[0]; + const dy = clippedEnd[1] - clippedStart[1]; + const length = Math.sqrt(dx * dx + dy * dy); + if (length < MIN_LINE_LENGTH_PIXELS) { + return null; // Line is too short to draw + } + + return { + start: clippedStart as Types.Point2, + end: clippedEnd as Types.Point2, + }; +} diff --git a/packages/tools/src/utilities/volumeCropping/getColorKeyForPlaneIndex.ts b/packages/tools/src/utilities/volumeCropping/getColorKeyForPlaneIndex.ts new file mode 100644 index 0000000000..f9c6064383 --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/getColorKeyForPlaneIndex.ts @@ -0,0 +1,23 @@ +import { PLANEINDEX } from './constants'; + +/** + * Gets the color key (orientation name) for a given plane index. + * Color configuration uses orientation names (SAGITTAL, CORONAL, AXIAL) as keys + * for historical/API compatibility, but these refer to the volume's X, Y, Z axes, + * not viewport orientations. + * + * @param planeIndex - The plane index (0-5: XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX) + * @returns The color key ('SAGITTAL', 'CORONAL', 'AXIAL') or null if invalid + */ +export function getColorKeyForPlaneIndex( + planeIndex: number +): 'SAGITTAL' | 'CORONAL' | 'AXIAL' | null { + if (planeIndex === PLANEINDEX.XMIN || planeIndex === PLANEINDEX.XMAX) { + return 'SAGITTAL'; // X-axis planes + } else if (planeIndex === PLANEINDEX.YMIN || planeIndex === PLANEINDEX.YMAX) { + return 'CORONAL'; // Y-axis planes + } else if (planeIndex === PLANEINDEX.ZMIN || planeIndex === PLANEINDEX.ZMAX) { + return 'AXIAL'; // Z-axis planes + } + return null; +} diff --git a/packages/tools/src/utilities/volumeCropping/getOrientationFromNormal.ts b/packages/tools/src/utilities/volumeCropping/getOrientationFromNormal.ts new file mode 100644 index 0000000000..13d67790db --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/getOrientationFromNormal.ts @@ -0,0 +1,39 @@ +import { vec3 } from 'gl-matrix'; +import { utilities } from '@cornerstonejs/core'; +import type { Types } from '@cornerstonejs/core'; +import { ORIENTATION_TOLERANCE } from './constants'; + +/** + * Maps a camera normal vector to an orientation string. + * Returns 'AXIAL', 'CORONAL', 'SAGITTAL', or null if not matched. + * + * @param normal - The view plane normal vector + * @returns The orientation string or null if not matched + */ +export function getOrientationFromNormal( + normal: Types.Point3 +): 'AXIAL' | 'CORONAL' | 'SAGITTAL' | null { + if (!normal) { + return null; + } + + const canonical = { + AXIAL: [0, 0, 1], + CORONAL: [0, 1, 0], + SAGITTAL: [1, 0, 0], + }; + + for (const [key, value] of Object.entries(canonical)) { + if ( + utilities.isEqualAbs( + 1, + vec3.dot(value as Types.Point3, normal), + ORIENTATION_TOLERANCE + ) + ) { + return key as 'AXIAL' | 'CORONAL' | 'SAGITTAL'; + } + } + + return null; +} diff --git a/packages/tools/src/utilities/volumeCropping/index.ts b/packages/tools/src/utilities/volumeCropping/index.ts new file mode 100644 index 0000000000..a6a20cfd79 --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/index.ts @@ -0,0 +1,9 @@ +export * from './constants'; +export * from './types'; +export * from './extractVolumeDirectionVectors'; +export * from './parseCornerKey'; +export * from './copyClippingPlanes'; +export * from './getColorKeyForPlaneIndex'; +export * from './getOrientationFromNormal'; +export * from './computePlanePlaneIntersection'; +export * from './findLineBoundsIntersection'; diff --git a/packages/tools/src/utilities/volumeCropping/parseCornerKey.ts b/packages/tools/src/utilities/volumeCropping/parseCornerKey.ts new file mode 100644 index 0000000000..bb9caa184c --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/parseCornerKey.ts @@ -0,0 +1,23 @@ +/** + * Parse corner key to determine which axes are min/max + * @param uid - The unique identifier for the corner (e.g., 'corner_XMIN_YMIN_ZMIN') + * @returns Object with flags indicating which axes are min/max + */ +export function parseCornerKey(uid: string): { + isXMin: boolean; + isXMax: boolean; + isYMin: boolean; + isYMax: boolean; + isZMin: boolean; + isZMax: boolean; +} { + const cornerKey = uid.replace('corner_', ''); + return { + isXMin: cornerKey.includes('XMIN'), + isXMax: cornerKey.includes('XMAX'), + isYMin: cornerKey.includes('YMIN'), + isYMax: cornerKey.includes('YMAX'), + isZMin: cornerKey.includes('ZMIN'), + isZMax: cornerKey.includes('ZMAX'), + }; +} diff --git a/packages/tools/src/utilities/volumeCropping/types.ts b/packages/tools/src/utilities/volumeCropping/types.ts new file mode 100644 index 0000000000..63d2dc137b --- /dev/null +++ b/packages/tools/src/utilities/volumeCropping/types.ts @@ -0,0 +1,10 @@ +import type { Types } from '@cornerstonejs/core'; + +/** + * ClippingPlane represents a plane used for volume cropping. + * It consists of an origin point and a normal vector. + */ +export type ClippingPlane = { + origin: Types.Point3; + normal: Types.Point3; +}; From 96062568515d76e5e862aa706a75cb1b5639dcc7 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 27 Feb 2026 18:14:18 +0000 Subject: [PATCH 39/90] chore(version): Update package versions to 4.18.4 [skip ci] --- CHANGELOG.md | 4 ++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 69 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 856a23936b..88d2b8db14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package root + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) ### Bug Fixes diff --git a/commit.txt b/commit.txt index b0acb450d5..b267994c50 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -dd2e8d32a1da346a3bc3d9adc33d4050be1ea8cb \ No newline at end of file +a1dfbd046dc77007c1a5685d8551ffea4b35f1a4 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 2731b9eaaa..8daafae808 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.18.3", + "version": "4.18.4", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 905146a036..3d8b05077f 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) ### Bug Fixes diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 3c4cce1f62..129d91daa1 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.18.3", + "version": "4.18.4", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.3", - "@cornerstonejs/tools": "4.18.3" + "@cornerstonejs/core": "4.18.4", + "@cornerstonejs/tools": "4.18.4" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 8754848e51..6dc23993c1 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 7c23052a42..abb4498c0d 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.18.3", + "version": "4.18.4", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.3", - "@cornerstonejs/tools": "4.18.3" + "@cornerstonejs/core": "4.18.4", + "@cornerstonejs/tools": "4.18.4" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 95131fb90f..a00cf7dcc3 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index fec953840e..e14fd10b2f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.18.3", + "version": "4.18.4", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index a3b9f31783..17c4c1c5e6 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 49836935c5..112cf555b2 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.18.3", + "version": "4.18.4", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.3", + "@cornerstonejs/core": "4.18.4", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index ce45deda53..2aff48655f 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index c457acf02a..5c101a64fd 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.18.3", + "version": "4.18.4", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.3", - "@cornerstonejs/tools": "4.18.3", + "@cornerstonejs/core": "4.18.4", + "@cornerstonejs/tools": "4.18.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 0d8d26f3c9..c78c5b9393 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 4ae300d9dc..dbb3905d93 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.18.3", + "version": "4.18.4", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.3" + "@cornerstonejs/core": "4.18.4" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index c2257a704b..619e3ca60d 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 95cf079a55..d00183eafd 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.18.3", + "version": "4.18.4", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.3", - "@cornerstonejs/tools": "4.18.3", + "@cornerstonejs/core": "4.18.4", + "@cornerstonejs/tools": "4.18.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 053c17dad7..c8733a2141 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.18.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.2...v4.18.3) (2026-02-26) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 7e74ec18d1..036698facb 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.18.3", + "version": "4.18.4", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.3", + "@cornerstonejs/core": "4.18.4", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 1e2688a593..2c021a4c8b 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.3'; +export const version = '4.18.4'; diff --git a/version.json b/version.json index d53034e6d9..8ce772b7f7 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.18.3", - "commit": "dd2e8d32a1da346a3bc3d9adc33d4050be1ea8cb" + "version": "4.18.4", + "commit": "a1dfbd046dc77007c1a5685d8551ffea4b35f1a4" } \ No newline at end of file diff --git a/version.txt b/version.txt index 5255dcf3bd..faaadf2020 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.18.3 \ No newline at end of file +4.18.4 \ No newline at end of file From 0445e62854ff73e9fa08213b975fb170a48c6d3a Mon Sep 17 00:00:00 2001 From: "Martin Bellehumeur, M. Eng." <23396581+mbellehumeur@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:57:27 +0100 Subject: [PATCH 40/90] Feat/orientation control tool (#2586) * feat(rendering): Add function to calculate acquisition plane reformat orientation based on image orientation patient values * feat(orientation): Introduce OrientationControlTool for interactive volume reorientation in 3D viewports * feat(orientation): Add surface labels and logging for clicked surfaces in OrientationControlTool * feat(orientation): Refactor camera orientation calculation in OrientationControlTool using quaternion for improved stability * feat(orientation): Simplify marker orientation in OrientationControlTool to maintain world alignment * refactor(orientation): Update viewUp vectors for edge orientations in OrientationControlTool for improved clarity and consistency * feat(orientation): Enhance OrientationControlTool with camera animation for smoother transitions and update viewport corner for orientation marker * feat(orientation): Optimize quaternion handling in OrientationControlTool to prevent unnecessary rotations and ensure smoother transitions * refactor(orientation): Update viewUp vectors for bottom and top edge orientations in OrientationControlTool to fix inversion issues and maintain correct orientation * fix(orientation): Adjust opacity and edge colors in OrientationControlTool for improved visibility and consistency * feat(orientation): Implement gray color toggle for OrientationControlTool based on URL parameter and enhance drag detection for improved user interaction * feat(orientation): Refactor color configuration in OrientationControlTool to use structured overlayConfiguration for improved clarity and customization * feat(orientation): Update color scheme handling in volumeCroppingTool and OrientationControlTool to support multiple color configurations from URL parameters * feat(orientation): Integrate vtkAnnotatedCubeActor into OrientationControlTool for enhanced visual representation of main axes and refactor geometry handling for corners and edges * feat(orientation): Add color scheme support in OrientationControlTool with helper method for dynamic face colors based on configuration * feat(orientation): Add "Keep orientation up" toggle to volumeCroppingTool and enhance OrientationControlTool to maintain world-aligned marker orientation * feat(orientation): Add URL parameter support for "Keep orientation up" in volumeCroppingTool and enhance OrientationControlTool to utilize this setting for improved marker alignment * feat(orientation): Introduce OrientationController tool for enhanced 3D orientation control with interactive markers and customizable appearance * refactor(orientation): Update OrientationController to handle multiple actors per viewport and enhance actor creation with improved color handling and visibility settings * refactor(orientation): Remove console logs from OrientationController and AnnotatedRhombicuboctahedronActor for cleaner code and improved performance * feat(orientation): Implement face highlighting in OrientationController for enhanced visual feedback during interactions * feat(texture): Enhance AnnotatedRhombicuboctahedronActor with texture atlas support for main faces and update mesh creation to include texture coordinates * fix(orientation): Adjust global cellId calculation in OrientationController to correctly handle clicks on edge and corner faces for accurate orientation retrieval * fix(orientation): Update viewport rendering in OrientationController after successful initial positioning and correct viewUp vector for top orientation * feat(toolbar): Enhance volumeCroppingTool with a responsive toolbar layout, adding left and right containers for better organization of controls * feat(orientation): Add 'keepOrientationUp' configuration to OrientationController for improved viewUp handling during orientation adjustments * fix(orientation): Update default color scheme in OrientationController to 'marker' and adjust related logic in volumeCroppingTool for consistency * fix(orientation): Refactor face highlighting logic in OrientationController to prevent redundant highlighting and improve hover interactions; adjust volumeCroppingTool layout for better responsiveness * feat(orientation): Add letter color scheme configuration to OrientationController and volumeCroppingTool, allowing users to customize letter colors via URL parameters * feat(orientation): Refactor OrientationController to utilize vtkOrientationControllerWidget for improved actor management and interaction handling; streamline actor creation, positioning, and event handling for enhanced performance and maintainability * fix(orientation): Update marker size calculation in OrientationControllerWidget to maintain consistent screen size across zoom levels; refactor getOrientationForFace method to improve organization and accessibility of orientation data * fix(orientation): Update letter color scheme to 'mixed' for improved customization; add backward compatibility for legacy color schemes and implement marker recreation on configuration change * refactor(orientation): Rename OrientationController to OrientationControllerTool for consistency; implement new OrientationControllerTool class with enhanced functionality and improved actor management, while removing the deprecated OrientationControlTool * fix(orientation): Update viewport handling in vtkOrientationControllerWidget to ensure correct type casting; add double-click event handler for improved interaction and cleanup logic for event listeners * refactor(orientation): Simplify actor management in vtkOrientationControllerWidget by removing overlay renderer logic and enhancing viewport integration for improved performance and maintainability * fix(orientation): Update color schemes in volumeCroppingTool and OrientationControllerTool to use 'rgy' and 'mixed' for improved consistency and customization; adjust related logic for backward compatibility * feat(orientation): Enhance OrientationControllerTool with improved viewport handling and marker management; introduce configurable position and size settings, and add event listener for viewport removal * feat(orientation): Add slider for orientation marker size in volumeCroppingTool; update title and description to reflect new functionality * chore(orientation): Import OrientationVectors type in getCameraVectors helper for improved type safety and clarity * sync with main * sync with main * feat(rendering): Add function to calculate acquisition plane reformat orientation based on image orientation patient values * feat(orientation): Introduce OrientationControlTool for interactive volume reorientation in 3D viewports * feat(orientation): Add surface labels and logging for clicked surfaces in OrientationControlTool * feat(orientation): Refactor camera orientation calculation in OrientationControlTool using quaternion for improved stability * feat(orientation): Simplify marker orientation in OrientationControlTool to maintain world alignment * refactor(orientation): Update viewUp vectors for edge orientations in OrientationControlTool for improved clarity and consistency * feat(orientation): Enhance OrientationControlTool with camera animation for smoother transitions and update viewport corner for orientation marker * feat(orientation): Optimize quaternion handling in OrientationControlTool to prevent unnecessary rotations and ensure smoother transitions * refactor(orientation): Update viewUp vectors for bottom and top edge orientations in OrientationControlTool to fix inversion issues and maintain correct orientation * fix(orientation): Adjust opacity and edge colors in OrientationControlTool for improved visibility and consistency * feat(orientation): Implement gray color toggle for OrientationControlTool based on URL parameter and enhance drag detection for improved user interaction * feat(orientation): Refactor color configuration in OrientationControlTool to use structured overlayConfiguration for improved clarity and customization * feat(orientation): Update color scheme handling in volumeCroppingTool and OrientationControlTool to support multiple color configurations from URL parameters * feat(orientation): Integrate vtkAnnotatedCubeActor into OrientationControlTool for enhanced visual representation of main axes and refactor geometry handling for corners and edges * feat(orientation): Add color scheme support in OrientationControlTool with helper method for dynamic face colors based on configuration * feat(orientation): Add "Keep orientation up" toggle to volumeCroppingTool and enhance OrientationControlTool to maintain world-aligned marker orientation * feat(orientation): Add URL parameter support for "Keep orientation up" in volumeCroppingTool and enhance OrientationControlTool to utilize this setting for improved marker alignment * feat(orientation): Introduce OrientationController tool for enhanced 3D orientation control with interactive markers and customizable appearance * refactor(orientation): Update OrientationController to handle multiple actors per viewport and enhance actor creation with improved color handling and visibility settings * refactor(orientation): Remove console logs from OrientationController and AnnotatedRhombicuboctahedronActor for cleaner code and improved performance * feat(orientation): Implement face highlighting in OrientationController for enhanced visual feedback during interactions * feat(texture): Enhance AnnotatedRhombicuboctahedronActor with texture atlas support for main faces and update mesh creation to include texture coordinates * fix(orientation): Adjust global cellId calculation in OrientationController to correctly handle clicks on edge and corner faces for accurate orientation retrieval * fix(orientation): Update viewport rendering in OrientationController after successful initial positioning and correct viewUp vector for top orientation * feat(toolbar): Enhance volumeCroppingTool with a responsive toolbar layout, adding left and right containers for better organization of controls * feat(orientation): Add 'keepOrientationUp' configuration to OrientationController for improved viewUp handling during orientation adjustments * fix(orientation): Update default color scheme in OrientationController to 'marker' and adjust related logic in volumeCroppingTool for consistency * fix(orientation): Refactor face highlighting logic in OrientationController to prevent redundant highlighting and improve hover interactions; adjust volumeCroppingTool layout for better responsiveness * feat(orientation): Add letter color scheme configuration to OrientationController and volumeCroppingTool, allowing users to customize letter colors via URL parameters * feat(orientation): Refactor OrientationController to utilize vtkOrientationControllerWidget for improved actor management and interaction handling; streamline actor creation, positioning, and event handling for enhanced performance and maintainability * fix(orientation): Update marker size calculation in OrientationControllerWidget to maintain consistent screen size across zoom levels; refactor getOrientationForFace method to improve organization and accessibility of orientation data * fix(orientation): Update letter color scheme to 'mixed' for improved customization; add backward compatibility for legacy color schemes and implement marker recreation on configuration change * refactor(orientation): Rename OrientationController to OrientationControllerTool for consistency; implement new OrientationControllerTool class with enhanced functionality and improved actor management, while removing the deprecated OrientationControlTool * fix(orientation): Update viewport handling in vtkOrientationControllerWidget to ensure correct type casting; add double-click event handler for improved interaction and cleanup logic for event listeners * refactor(orientation): Simplify actor management in vtkOrientationControllerWidget by removing overlay renderer logic and enhancing viewport integration for improved performance and maintainability * fix(orientation): Update color schemes in volumeCroppingTool and OrientationControllerTool to use 'rgy' and 'mixed' for improved consistency and customization; adjust related logic for backward compatibility * feat(orientation): Enhance OrientationControllerTool with improved viewport handling and marker management; introduce configurable position and size settings, and add event listener for viewport removal * feat(orientation): Add slider for orientation marker size in volumeCroppingTool; update title and description to reflect new functionality * chore(orientation): Import OrientationVectors type in getCameraVectors helper for improved type safety and clarity * sync with main * sync with main * refactor(orientation): Simplify matrix creation in OrientationControllerTool by using mat4.fromValues for improved readability and maintainability * refactor(orientation): Replace targetForward with targetViewPlaneNormal in OrientationControllerTool for improved clarity and consistency in vector projections * refactor(orientation): Simplify currentUp vector normalization in OrientationControllerTool for improved clarity and efficiency * refactor(orientation): Streamline quaternion creation in OrientationControllerTool for improved performance and readability * refactor(orientation): Optimize quaternion negation in OrientationControllerTool for enhanced performance and code clarity * refactor(orientation): Use Point3 type for viewPlaneNormal and viewUp * refactor(orientation): Extract camera reset options into a constant * refactor(orientation): Simplify vector extraction from interpolatedMatrix in OrientationControllerTool for improved readability * refactor(vtkjs): Simplify hex color conversion in AnnotatedRhombicuboctahedronActor for improved readability * refactor(orientation): Update letter color scheme handling in OrientationControllerTool and volumeCroppingTool for improved consistency and clarity * refactor(orientation): Enhance orientation change handling in Viewport and OrientationControllerTool * Enhance volume cropping tool instructions and UI elements - Updated instructions to clarify user interactions with clipping planes and added guidance for the orientation widget. - Improved the toggle button title for better readability. - Adjusted mouse bindings for clipping plane rotation. * Added orientation control widget to the 3 ortho volume viewports * Added note on URL parameters usagebelow Basic Controls * Remove changes to cropping tool * Enhance volume cropping tool UI and instructions - Updated the label for the orthographic viewports dropdown for consistency. - Improved the instructions to clarify user interactions with clipping planes. - Added a new label for cropping functionality in the UI. - Refined the toggle button title for better readability. - Removed commented-out code to improve clarity and maintainability. * Widget does not display in some brwosers: position issue - Updated canvas width and height calculations to account for device pixel ratio and client dimensions. - Adjusted corner offset based on viewport type for better UI consistency. * Remove unnecssary page relaods - Updated URL manipulation to use `window.history.replaceState` for better user experience. - Integrated color scheme updates for orientation controller tool based on user selection. - Improved tool state management by enabling and disabling the orientation controller tool after configuration changes. * Refactor volume cropping tool to simplify URL parameter handling - Removed unused functions for retrieving color schemes and orientation settings from the URL. - Updated instructions to reflect the removal of URL parameters for color schemes and orientation. - Set default values for color schemes and orientation directly in the code for improved clarity and maintainability. - Enhanced dropdown functionality for color scheme selection without relying on URL updates. --- .../src/RenderingEngine/BaseVolumeViewport.ts | 4 + packages/core/src/RenderingEngine/Viewport.ts | 9 + .../examples/volumeCroppingTool/index.ts | 283 +++++-- packages/tools/src/index.ts | 2 + .../src/tools/OrientationControllerTool.ts | 698 ++++++++++++++++ packages/tools/src/tools/index.ts | 2 + .../index.d.ts | 154 ++++ .../index.js | 478 +++++++++++ .../OrientationControllerWidget/index.ts | 748 ++++++++++++++++++ packages/tools/src/utilities/vtkjs/README.md | 99 +++ .../RhombicuboctahedronSource/index.d.ts | 106 +++ .../vtkjs/RhombicuboctahedronSource/index.js | 170 ++++ packages/tools/src/utilities/vtkjs/index.d.ts | 2 + packages/tools/src/utilities/vtkjs/index.js | 4 + 14 files changed, 2709 insertions(+), 50 deletions(-) create mode 100644 packages/tools/src/tools/OrientationControllerTool.ts create mode 100644 packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.d.ts create mode 100644 packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.js create mode 100644 packages/tools/src/utilities/vtkjs/OrientationControllerWidget/index.ts create mode 100644 packages/tools/src/utilities/vtkjs/README.md create mode 100644 packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.d.ts create mode 100644 packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.js create mode 100644 packages/tools/src/utilities/vtkjs/index.d.ts create mode 100644 packages/tools/src/utilities/vtkjs/index.js diff --git a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts index 39e7de7164..ee41928866 100644 --- a/packages/core/src/RenderingEngine/BaseVolumeViewport.ts +++ b/packages/core/src/RenderingEngine/BaseVolumeViewport.ts @@ -148,6 +148,10 @@ abstract class BaseVolumeViewport extends Viewport { return false; } + override isOrientationChangeable(): boolean { + return true; + } + public getSliceViewInfo(): { width: number; height: number; diff --git a/packages/core/src/RenderingEngine/Viewport.ts b/packages/core/src/RenderingEngine/Viewport.ts index afe8a7d085..1fedee84f0 100644 --- a/packages/core/src/RenderingEngine/Viewport.ts +++ b/packages/core/src/RenderingEngine/Viewport.ts @@ -185,6 +185,15 @@ class Viewport { return false; } + /** + * Returns whether the viewport supports changing orientation (e.g. via setCamera + * with viewPlaneNormal/viewUp). Used by tools like OrientationControllerTool to + * decide where to show interactive orientation markers. + */ + public isOrientationChangeable(): boolean { + return false; + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any private viewportWidgets = new Map() as Map; diff --git a/packages/tools/examples/volumeCroppingTool/index.ts b/packages/tools/examples/volumeCroppingTool/index.ts index 754f726d81..46d4bd3f59 100644 --- a/packages/tools/examples/volumeCroppingTool/index.ts +++ b/packages/tools/examples/volumeCroppingTool/index.ts @@ -13,6 +13,7 @@ import { addDropdownToToolbar, getLocalUrl, addToggleButtonToToolbar, + addSliderToToolbar, } from '../../../../utils/demo/helpers'; import * as cornerstoneTools from '@cornerstonejs/tools'; @@ -31,6 +32,7 @@ const { ZoomTool, PanTool, OrientationMarkerTool, + OrientationControllerTool, StackScrollTool, CrosshairsTool, } = cornerstoneTools; @@ -51,16 +53,46 @@ const viewportId3 = 'CT_SAGITTAL'; const viewportId4 = 'CT_3D_VOLUME'; // New 3D volume viewport const viewportIds = [viewportId1, viewportId2, viewportId3, viewportId4]; +// Set up toolbar with three rows: viewports, planes, control +const toolbar = document.getElementById('demo-toolbar'); +if (toolbar) { + toolbar.style.display = 'flex'; + toolbar.style.flexDirection = 'column'; + toolbar.style.gap = '8px'; +} + +const viewportsRow = document.createElement('div'); +viewportsRow.style.display = 'flex'; +viewportsRow.style.gap = '10px'; +viewportsRow.style.alignItems = 'center'; + +const planesRow = document.createElement('div'); +planesRow.style.display = 'flex'; +planesRow.style.gap = '10px'; +planesRow.style.alignItems = 'center'; + +const controlRow = document.createElement('div'); +controlRow.style.display = 'flex'; +controlRow.style.gap = '10px'; +controlRow.style.alignItems = 'center'; + +if (toolbar) { + toolbar.appendChild(viewportsRow); + toolbar.appendChild(planesRow); + toolbar.appendChild(controlRow); +} + // Add dropdown to toolbar to select number of orthographic viewports (reloads page with URL param) addDropdownToToolbar({ - labelText: 'Number of Orthographic Viewports', + labelText: 'Number of Orthographic Viewports:', options: { values: [1, 2, 3], defaultValue: getNumViewportsFromUrl(), }, + container: viewportsRow, onSelectedValueChange: (selectedValue) => { const url = new URL(window.location.href); - url.searchParams.set('numViewports', selectedValue); + url.searchParams.set('numViewports', String(selectedValue)); window.location.href = url.toString(); }, }); @@ -69,8 +101,8 @@ const renderingEngineId = 'myRenderingEngine'; ///////////////////////////////////////// // ======== Set up page ======== // setTitleAndDescription( - 'Volume Cropping', - 'Here we demonstrate how to crop a volume with 6 clipping planes. Use shift-drag to rotate the clipping planes.' + 'Volume Cropping with Orientation Controller', + 'Here we demonstrate how to crop a 3D volume with 6 clipping planes and an orientation controller. Use shift-drag to rotate the planes.' ); const size = '400px'; @@ -92,7 +124,7 @@ const element4 = document.createElement('div'); // 3D Volume const rightViewportsContainer = document.createElement('div'); rightViewportsContainer.style.display = 'flex'; rightViewportsContainer.style.flexDirection = 'column'; -rightViewportsContainer.style.width = '20%'; +rightViewportsContainer.style.width = '25%'; rightViewportsContainer.style.height = '100%'; // Set styles for the 2D viewports (stacked vertically on the right) @@ -137,16 +169,24 @@ instructions.innerText = ` Basic controls: - Click/Drag the spheres in 3D or reference lines in the orthographic viewports. - Rotate, pan or zoom the 3D viewport using the mouse. - - Shift+Drag in the 3D viewport to rotate the crop mapping (clipping planes). + - Shift+Drag in the 3D viewport to rotate the clipping planes. - Use the scroll wheel to scroll through the slices in the orthographic viewports. - Toggle the clipping planes, handles, and rotate clipping planes on drag. + - Click on the faces/edges/corners of the beveled cube orientation widget to change the orientation. + URL params: numViewports=1|2|3 `; content.append(instructions); +const croppingLabel = document.createElement('span'); +croppingLabel.textContent = 'Cropping:'; +croppingLabel.style.marginRight = '4px'; +planesRow.appendChild(croppingLabel); + addToggleButtonToToolbar({ title: 'Toggle Clipping Planes', - defaultToggle: true, + defaultToggle: false, + container: planesRow, onClick: (toggle) => { const toolGroupVRT = cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); @@ -165,6 +205,7 @@ addToggleButtonToToolbar({ addToggleButtonToToolbar({ title: 'Toggle Handles', defaultToggle: false, + container: planesRow, onClick: (toggle) => { const toolGroupVRT = cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); @@ -178,6 +219,7 @@ addToggleButtonToToolbar({ addToggleButtonToToolbar({ title: 'Toggle Rotate Clipping Planes on drag (without shift)', defaultToggle: false, + container: planesRow, onClick: (toggle) => { const toolGroupVRT = cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); @@ -235,6 +277,7 @@ async function run(numViewports = getNumViewportsFromUrl()) { cornerstoneTools.addTool(ZoomTool); cornerstoneTools.addTool(PanTool); cornerstoneTools.addTool(OrientationMarkerTool); + cornerstoneTools.addTool(OrientationControllerTool); cornerstoneTools.addTool(StackScrollTool); cornerstoneTools.addTool(CrosshairsTool); @@ -310,7 +353,7 @@ async function run(numViewports = getNumViewportsFromUrl()) { renderingEngine.setViewports(viewportInputArray); - volume.load(); + await volume.load(); // Only set volumes for the active viewport IDs const activeViewportIds = [ @@ -359,6 +402,18 @@ async function run(numViewports = getNumViewportsFromUrl()) { ], }); + const colorScheme: 'rgy' | 'gray' | 'marker' = 'rgy'; + const keepOrientationUp = true; + const letterColorScheme: 'mixed' | 'white' | 'black' = 'mixed'; + + toolGroup.addTool(OrientationControllerTool.toolName, { + colorScheme, + keepOrientationUp, + letterColorScheme, + position: 'top-right', + }); + toolGroup.setToolEnabled(OrientationControllerTool.toolName); + // Tool group for 3D viewport const toolGroupVRT = ToolGroupManager.createToolGroup(toolGroupIdVRT); toolGroupVRT.addTool(ZoomTool.toolName); @@ -377,56 +432,184 @@ async function run(numViewports = getNumViewportsFromUrl()) { }, ], }); - toolGroupVRT.addTool(OrientationMarkerTool.toolName, { - overlayMarkerType: - OrientationMarkerTool.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE, + + // Disable tool if it already exists to ensure fresh configuration + if (toolGroupVRT.hasTool(OrientationControllerTool.toolName)) { + toolGroupVRT.setToolDisabled(OrientationControllerTool.toolName); + } + + // Add OrientationControllerTool - colors resolved from colorScheme/letterColorScheme maps + toolGroupVRT.addTool(OrientationControllerTool.toolName, { + colorScheme, + keepOrientationUp, + letterColorScheme, + }); + // Enable OrientationControllerTool after viewport is added and volume is loaded + toolGroupVRT.setToolEnabled(OrientationControllerTool.toolName); + + // Add dropdown for orientation control colors + const colorSchemeValues: string[] = ['rgy', 'gray', 'marker']; + const colorSchemeLabels = ['RGY', 'Gray', 'Marker']; + + addDropdownToToolbar({ + labelText: 'Orientation Control: Colors', + options: { + values: colorSchemeValues, + defaultValue: colorScheme, + labels: colorSchemeLabels, + }, + container: controlRow, + onSelectedValueChange: (selectedValue) => { + const toolGroupVRT = + cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); + const orientationControllerTool = toolGroupVRT.getToolInstance( + OrientationControllerTool.toolName + ); + + if (orientationControllerTool) { + orientationControllerTool.configuration.colorScheme = selectedValue; + orientationControllerTool.onSetToolDisabled(); + orientationControllerTool.onSetToolEnabled(); + } + }, + }); + + // Add dropdown for letter color scheme + const letterColorSchemeValues: string[] = ['mixed', 'white', 'black']; + const letterColorSchemeLabels = ['Mixed', 'White', 'Black']; + + addDropdownToToolbar({ + labelText: 'Letter Colors', + options: { + values: letterColorSchemeValues, + defaultValue: letterColorScheme, + labels: letterColorSchemeLabels, + }, + container: controlRow, + onSelectedValueChange: (selectedValue) => { + const toolGroupVRT = + cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); + const orientationControllerTool = toolGroupVRT.getToolInstance( + OrientationControllerTool.toolName + ); + + if (orientationControllerTool) { + orientationControllerTool.configuration.letterColorScheme = + selectedValue; + orientationControllerTool.onSetToolDisabled(); + orientationControllerTool.onSetToolEnabled(); + } + }, + }); + + // Add dropdown for "Keep orientation up" + const keepOrientationUpValues: string[] = ['true', 'false']; + const keepOrientationUpLabels = ['True', 'False']; + + addDropdownToToolbar({ + labelText: 'Keep Orientation Up', + options: { + values: keepOrientationUpValues, + defaultValue: String(keepOrientationUp), + labels: keepOrientationUpLabels, + }, + container: controlRow, + onSelectedValueChange: (selectedValue) => { + const newValue = selectedValue === 'true'; + + // Get the tool group for the 3D viewport + const toolGroupVRT = + cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); + // Get the OrientationControllerTool instance from the tool group + const orientationControllerTool = toolGroupVRT.getToolInstance( + OrientationControllerTool.toolName + ); + if (orientationControllerTool) { + // Update configuration + orientationControllerTool.configuration.keepOrientationUp = newValue; + // Reinitialize viewports to apply the change + orientationControllerTool.onSetToolDisabled(); + orientationControllerTool.onSetToolEnabled(); + } + }, + }); + + addSliderToToolbar({ + title: 'Marker size', + range: [0.01, 0.05], + defaultValue: 0.04, + step: 0.01, + container: controlRow, + onSelectedValueChange: (value) => { + const size = Number(value); + const toolGroupVRT = + cornerstoneTools.ToolGroupManager.getToolGroup(toolGroupIdVRT); + const orientationControllerTool = toolGroupVRT.getToolInstance( + OrientationControllerTool.toolName + ); + if (orientationControllerTool) { + orientationControllerTool.configuration.size = size; + orientationControllerTool.onSetToolDisabled(); + orientationControllerTool.onSetToolEnabled(); + } + }, + updateLabelOnChange: (value, label) => { + label.textContent = `Orientation marker size: ${value}`; + }, }); const viewport = renderingEngine.getViewport(viewportId4) as VolumeViewport3D; - renderingEngine.renderViewports(activeViewportIds); + await setVolumesForViewports( renderingEngine, [{ volumeId }], - [viewportId4] - ).then(() => { - viewport.setProperties({ - preset: 'CT-Bone', - }); - toolGroupVRT.addViewport(viewportId4, renderingEngineId); - toolGroupVRT.addTool(VolumeCroppingTool.toolName, { - sphereRadius: 7, - sphereColors: { - x: [1, 1, 0], - y: [0, 1, 0], - z: [1, 0, 0], - corners: [0, 0, 1], - }, - showCornerSpheres: true, - showClippingPlanes: true, - initialCropFactor: 0.2, - }); - toolGroupVRT.setToolActive(VolumeCroppingTool.toolName, { - bindings: [ - { mouseButton: MouseBindings.Primary }, - { - mouseButton: MouseBindings.Primary, - modifierKey: KeyboardBindings.Shift, - }, - ], - }); - - // Explicitly enable clipping planes (onSetToolActive forces them to false by default) - const croppingTool = toolGroupVRT.getToolInstance('VolumeCropping'); - if ( - croppingTool && - typeof croppingTool.setClippingPlanesVisible === 'function' - ) { - croppingTool.setClippingPlanesVisible(true); - } + [viewportId4], + true + ); - viewport.setZoom(1.2); - viewport.render(); + viewport.setProperties({ + preset: 'CT-Bone', }); + + toolGroupVRT.addViewport(viewportId4, renderingEngineId); + + viewport.resetCamera(); + viewport.setZoom(1.2); + + // Force VTK pipeline to size and render (workaround for volume not showing until interaction) + renderingEngine.resize(true, true); + + // Now add and activate the cropping tool (start with clipping off so volume gets first render) + toolGroupVRT.addTool(VolumeCroppingTool.toolName, { + showHandles: false, + showClippingPlanes: false, + sphereRadius: 7, + sphereColors: { + x: [1, 1, 0], + y: [0, 1, 0], + z: [1, 0, 0], + corners: [0, 0, 1], + }, + showCornerSpheres: true, + initialCropFactor: 0.2, + }); + toolGroupVRT.setToolActive(VolumeCroppingTool.toolName, { + bindings: [ + { mouseButton: MouseBindings.Primary }, + { + mouseButton: MouseBindings.Primary, + modifierKey: KeyboardBindings.Shift, + }, + ], + }); + + // Hide 3D handles by default (same as toggle button does) + const croppingTool = toolGroupVRT.getToolInstance('VolumeCropping'); + if (croppingTool && typeof croppingTool.setHandlesVisible === 'function') { + croppingTool.setHandlesVisible(false); + } + // Clipping off on load; user enables via Toggle Clipping Planes button + renderingEngine.renderViewports(activeViewportIds); } run(); diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts index 670f962cff..20f08e87a1 100644 --- a/packages/tools/src/index.ts +++ b/packages/tools/src/index.ts @@ -73,6 +73,7 @@ import { PaintFillTool, ScaleOverlayTool, OrientationMarkerTool, + OrientationControllerTool, OverlayGridTool, SegmentationIntersectionTool, EraserTool, @@ -159,6 +160,7 @@ export { CircleROIStartEndThresholdTool, BrushTool, OrientationMarkerTool, + OrientationControllerTool, SegmentSelectTool, SegmentLabelTool, // Synchronizers diff --git a/packages/tools/src/tools/OrientationControllerTool.ts b/packages/tools/src/tools/OrientationControllerTool.ts new file mode 100644 index 0000000000..8146343119 --- /dev/null +++ b/packages/tools/src/tools/OrientationControllerTool.ts @@ -0,0 +1,698 @@ +import { BaseTool } from './base'; +import { + getEnabledElementByIds, + Enums, + eventTarget, +} from '@cornerstonejs/core'; +import type { Types } from '@cornerstonejs/core'; +import type { Point3 } from '@cornerstonejs/core/types'; +import { getToolGroup } from '../store/ToolGroupManager'; +import * as ToolsEnums from '../enums'; +import { vec3, mat4, quat } from 'gl-matrix'; +import { vtkOrientationControllerWidget } from '../utilities/vtkjs/OrientationControllerWidget'; + +/** + * OrientationControllerTool provides an interactive orientation marker + * using a rhombicuboctahedron (26-faced polyhedron) with clickable surfaces + * for intuitive 3D volume reorientation. + * + * Features: + * - 6 main square faces with anatomical labels (L/R, A/P, S/I) + * - 12 edge squares for diagonal orientations + * - 8 corner triangles for tri-axial views + * - Smooth animated camera transitions + * - Configurable appearance and positioning + * + * @public + * @class OrientationControllerTool + * @extends BaseTool + */ +const ADD_MARKER_DELAY_MS = 500; +const POSITION_RETRY_DELAY_MS = 1000; + +type FaceColors = { + topBottom: number[]; + frontBack: number[]; + leftRight: number[]; +}; + +type LetterColors = { + zMinus: number[]; + zPlus: number[]; + yMinus: number[]; + yPlus: number[]; + xMinus: number[]; + xPlus: number[]; +}; + +const FACE_COLOR_SCHEMES: Record = { + marker: { + topBottom: [0, 0, 255], + frontBack: [0, 255, 255], + leftRight: [255, 255, 0], + }, + gray: { + topBottom: [180, 180, 180], + frontBack: [180, 180, 180], + leftRight: [180, 180, 180], + }, + rgy: { + topBottom: [255, 0, 0], + frontBack: [0, 255, 0], + leftRight: [255, 255, 0], + }, +}; + +const LETTER_COLOR_SCHEMES: Record = { + mixed: { + zMinus: [255, 255, 255], + zPlus: [255, 255, 255], + yMinus: [255, 255, 255], + yPlus: [255, 255, 255], + xMinus: [0, 0, 0], + xPlus: [0, 0, 0], + }, + rgy: { + zMinus: [255, 255, 255], + zPlus: [255, 255, 255], + yMinus: [255, 255, 255], + yPlus: [255, 255, 255], + xMinus: [0, 0, 0], + xPlus: [0, 0, 0], + }, + white: { + zMinus: [255, 255, 255], + zPlus: [255, 255, 255], + yMinus: [255, 255, 255], + yPlus: [255, 255, 255], + xMinus: [255, 255, 255], + xPlus: [255, 255, 255], + }, + black: { + zMinus: [0, 0, 0], + zPlus: [0, 0, 0], + yMinus: [0, 0, 0], + yPlus: [0, 0, 0], + xMinus: [0, 0, 0], + xPlus: [0, 0, 0], + }, +}; + +const DEFAULT_FACE_COLOR_SCHEME = 'rgy'; +const DEFAULT_LETTER_COLOR_SCHEME = 'mixed'; + +const ANIMATE_RESET_CAMERA_OPTIONS = { + resetZoom: false, + resetPan: true, + resetToCenter: true, +} as const; + +class OrientationControllerTool extends BaseTool { + static toolName = 'OrientationControllerTool'; + + private widget = new vtkOrientationControllerWidget(); + private resizeObservers = new Map(); + private cameraHandlers = new Map void>(); + + constructor( + toolProps = {}, + defaultToolProps = { + supportedInteractionTypes: ['Mouse'], + configuration: { + enabled: true, + opacity: 1.0, + size: 0.04, + position: 'bottom-right', + colorScheme: 'rgy', + letterColorScheme: 'mixed', + showEdgeFaces: true, + showCornerFaces: true, + keepOrientationUp: true, + }, + } + ) { + super(toolProps, defaultToolProps); + } + + private _getViewportsInfo = () => { + const viewports = getToolGroup(this.toolGroupId)?.viewportsInfo; + return viewports || []; + }; + + private getPositionConfig() { + return { + position: this.configuration.position || 'bottom-right', + size: this.configuration.size || 0.04, + }; + } + + private getFaceColors(): { + topBottom: number[]; + frontBack: number[]; + leftRight: number[]; + } { + const colorScheme = this.configuration.colorScheme || 'rgy'; + + // If faceColors are explicitly provided, use them (but ensure they have the required properties) + if (this.configuration.faceColors) { + const provided = this.configuration.faceColors; + if (provided.topBottom && provided.frontBack && provided.leftRight) { + return { + topBottom: provided.topBottom, + frontBack: provided.frontBack, + leftRight: provided.leftRight, + }; + } + } + + return ( + FACE_COLOR_SCHEMES[colorScheme] ?? + FACE_COLOR_SCHEMES[DEFAULT_FACE_COLOR_SCHEME] + ); + } + + private getLetterColors(): { + zMinus: number[]; + zPlus: number[]; + yMinus: number[]; + yPlus: number[]; + xMinus: number[]; + xPlus: number[]; + } { + const letterColorScheme = this.configuration.letterColorScheme || 'mixed'; + return ( + LETTER_COLOR_SCHEMES[letterColorScheme] ?? + LETTER_COLOR_SCHEMES[DEFAULT_LETTER_COLOR_SCHEME] + ); + } + + onSetToolEnabled(): void { + // Remove any existing markers first to ensure clean recreation + this.removeMarkers(); + this.addMarkers(); + + eventTarget.addEventListener( + ToolsEnums.Events.TOOLGROUP_VIEWPORT_ADDED, + this.onViewportAdded + ); + eventTarget.addEventListener( + ToolsEnums.Events.TOOLGROUP_VIEWPORT_REMOVED, + this.onViewportRemoved + ); + } + + onSetToolDisabled(): void { + this.removeMarkers(); + + eventTarget.removeEventListener( + ToolsEnums.Events.TOOLGROUP_VIEWPORT_ADDED, + this.onViewportAdded + ); + eventTarget.removeEventListener( + ToolsEnums.Events.TOOLGROUP_VIEWPORT_REMOVED, + this.onViewportRemoved + ); + } + + onSetToolConfiguration = (): void => { + // If tool is enabled, recreate markers with new configuration + const viewportsInfo = this._getViewportsInfo(); + const hasActiveMarkers = viewportsInfo.some(({ viewportId }) => { + return this.widget.getActors(viewportId) !== null; + }); + + if (hasActiveMarkers) { + // Remove existing markers and recreate with new configuration + this.removeMarkers(); + this.addMarkers(); + } + }; + + private onViewportAdded = (evt: CustomEvent): void => { + const { viewportId, renderingEngineId, toolGroupId } = evt.detail; + + if (toolGroupId !== this.toolGroupId) { + return; + } + + if (this.widget.getActors(viewportId)) { + return; + } + + setTimeout(() => { + this.addMarkerToViewport(viewportId, renderingEngineId); + }, ADD_MARKER_DELAY_MS); + }; + + private onViewportRemoved = (evt: CustomEvent): void => { + const { viewportId, renderingEngineId, toolGroupId } = evt.detail; + + if (toolGroupId !== this.toolGroupId) { + return; + } + + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + + if (enabledElement) { + const { viewport } = enabledElement; + if ((viewport as Types.IViewport).isOrientationChangeable()) { + this.widget.removeActorsFromViewport( + viewportId, + viewport as Types.IVolumeViewport + ); + } + const cameraHandler = this.cameraHandlers.get(viewportId); + if (cameraHandler) { + viewport.element.removeEventListener( + Enums.Events.CAMERA_MODIFIED, + cameraHandler as EventListener + ); + this.cameraHandlers.delete(viewportId); + } + } + + this.widget.cleanup(viewportId); + + const resizeObserver = this.resizeObservers.get(viewportId); + if (resizeObserver) { + resizeObserver.disconnect(); + this.resizeObservers.delete(viewportId); + } + }; + + private removeMarkers(): void { + const viewportsInfo = this._getViewportsInfo(); + + viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + + if (enabledElement) { + const { viewport } = enabledElement; + if ((viewport as Types.IViewport).isOrientationChangeable()) { + this.widget.removeActorsFromViewport( + viewportId, + viewport as Types.IVolumeViewport + ); + } + const cameraHandler = this.cameraHandlers.get(viewportId); + if (cameraHandler) { + viewport.element.removeEventListener( + Enums.Events.CAMERA_MODIFIED, + cameraHandler as EventListener + ); + this.cameraHandlers.delete(viewportId); + } + } + const resizeObserver = this.resizeObservers.get(viewportId); + if (resizeObserver) { + resizeObserver.disconnect(); + this.resizeObservers.delete(viewportId); + } + }); + + this.widget.cleanup(); + this.resizeObservers.forEach((observer) => observer.disconnect()); + this.resizeObservers.clear(); + this.cameraHandlers.clear(); + } + + private addMarkers = (): void => { + const viewportsInfo = this._getViewportsInfo(); + + viewportsInfo.forEach(({ viewportId, renderingEngineId }) => { + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + + if (!enabledElement) { + return; + } + + const { viewport } = enabledElement; + + if (!(viewport as Types.IViewport).isOrientationChangeable()) { + return; + } + + if (this.widget.getActors(viewportId)) { + return; + } + + setTimeout(() => { + this.addMarkerToViewport(viewportId, renderingEngineId); + }, ADD_MARKER_DELAY_MS); + }); + }; + + private createAnnotatedRhombActor(): ReturnType< + vtkOrientationControllerWidget['createActors'] + > { + const faceColors = this.getFaceColors(); + const letterColors = this.getLetterColors(); + + return this.widget.createActors({ + faceColors, + letterColors, + opacity: this.configuration.opacity ?? 1.0, + showEdgeFaces: this.configuration.showEdgeFaces !== false, + showCornerFaces: this.configuration.showCornerFaces !== false, + }); + } + + private addMarkerToViewport( + viewportId: string, + renderingEngineId: string + ): void { + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + + if (!enabledElement) { + console.warn('OrientationControllerTool: No enabled element found'); + return; + } + + const { viewport } = enabledElement; + + if (!(viewport as Types.IViewport).isOrientationChangeable()) { + console.warn( + 'OrientationControllerTool: Viewport does not support orientation changes' + ); + return; + } + + const element = viewport.element; + const volumeViewport = viewport as Types.IVolumeViewport; + + const actors = this.createAnnotatedRhombActor(); + + this.widget.addActorsToViewport(viewportId, volumeViewport, actors); + + const positioned = this.widget.positionActors( + volumeViewport, + actors, + this.getPositionConfig() + ); + + if (!positioned) { + console.warn( + 'OrientationControllerTool: Initial positioning failed, retrying...' + ); + setTimeout(() => { + const repositioned = this.widget.positionActors( + volumeViewport, + actors, + this.getPositionConfig() + ); + if (repositioned) { + viewport.render(); + } else { + console.error( + 'OrientationControllerTool: Retry positioning also failed' + ); + } + }, POSITION_RETRY_DELAY_MS); + } else { + viewport.render(); + } + + this.widget.syncOverlayViewport(viewportId, volumeViewport); + this.widget.setupPicker(viewportId, actors); + + this.widget.setupMouseHandlers( + viewportId, + element, + volumeViewport, + actors, + { + onFacePicked: (result) => { + const orientation = this.widget.getOrientationForFace(result.cellId); + if (orientation) { + this.animateCameraToOrientation( + volumeViewport, + orientation.viewPlaneNormal, + orientation.viewUp + ); + } + }, + onFaceHover: (result) => { + if (result && result.actorIndex !== 0) { + this.widget.highlightFace( + result.pickedActor, + result.cellId, + volumeViewport, + false + ); + } else { + this.widget.clearHighlight(); + } + }, + } + ); + + const resizeObserver = new ResizeObserver(() => { + this.updateMarkerPosition(viewportId, renderingEngineId); + }); + resizeObserver.observe(element); + this.resizeObservers.set(viewportId, resizeObserver); + + const cameraHandler = (evt: CustomEvent) => { + const detail = evt.detail as { viewportId: string }; + if (detail.viewportId === viewportId) { + this.onCameraModified(evt); + } + }; + element.addEventListener( + Enums.Events.CAMERA_MODIFIED, + cameraHandler as EventListener + ); + this.cameraHandlers.set(viewportId, cameraHandler); + } + + private onCameraModified = (evt: CustomEvent): void => { + const { viewportId } = evt.detail as { viewportId: string }; + if (!viewportId) { + return; + } + + const actors = this.widget.getActors(viewportId); + + if (!actors) { + return; + } + + const viewportsInfo = this._getViewportsInfo(); + const viewportInfo = viewportsInfo.find( + (vp) => vp.viewportId === viewportId + ); + + if (!viewportInfo) { + return; + } + + const enabledElement = getEnabledElementByIds( + viewportId, + viewportInfo.renderingEngineId + ); + + if (!enabledElement) { + return; + } + + const { viewport } = enabledElement; + if (!(viewport as Types.IViewport).isOrientationChangeable()) { + return; + } + + // Recalculate both size and position to maintain fixed screen size + // Size needs to be recalculated because parallel scale changes with zoom + const volumeViewport = viewport as Types.IVolumeViewport; + this.widget.positionActors( + volumeViewport, + actors, + this.getPositionConfig() + ); + viewport.render(); + }; + + private updateMarkerPosition( + viewportId: string, + renderingEngineId: string + ): void { + const enabledElement = getEnabledElementByIds( + viewportId, + renderingEngineId + ); + + if (!enabledElement) { + return; + } + + const actors = this.widget.getActors(viewportId); + + if (!actors) { + return; + } + + const { viewport } = enabledElement; + if (!(viewport as Types.IViewport).isOrientationChangeable()) { + return; + } + + this.widget.positionActors( + viewport as Types.IVolumeViewport, + actors, + this.getPositionConfig() + ); + this.widget.syncOverlayViewport( + viewportId, + viewport as Types.IVolumeViewport + ); + viewport.render(); + } + + private animateCameraToOrientation( + viewport: Types.IVolumeViewport, + targetViewPlaneNormal: number[], + targetViewUp: number[] + ): void { + const keepOrientationUp = this.configuration.keepOrientationUp !== false; // Default to true + + // Get the VTK camera from the renderer + const renderer = viewport.getRenderer(); + const camera = renderer.getActiveCamera(); + const directionOfProjection = camera.getDirectionOfProjection(); + const startViewUpArray = camera.getViewUp(); + + const startForward = vec3.fromValues( + -directionOfProjection[0], + -directionOfProjection[1], + -directionOfProjection[2] + ); + const startUp = vec3.fromValues( + startViewUpArray[0], + startViewUpArray[1], + startViewUpArray[2] + ); + const startRight = vec3.create(); + vec3.cross(startRight, startUp, startForward); + vec3.normalize(startRight, startRight); + + // prettier-ignore + const startMatrix = mat4.fromValues( + startRight[0], startRight[1], startRight[2], 0, + startUp[0], startUp[1], startUp[2], 0, + startForward[0], startForward[1], startForward[2], 0, + 0, 0, 0, 1 + ); + + let targetUp: vec3; + if (keepOrientationUp) { + // Use the target viewUp as specified (original behavior) + targetUp = vec3.fromValues( + targetViewUp[0], + targetViewUp[1], + targetViewUp[2] + ); + } else { + // Keep current viewUp, but project it onto the plane perpendicular to targetViewPlaneNormal + // to ensure orthogonality + const currentUp = vec3.normalize(vec3.create(), startUp); + + // Normalize targetViewPlaneNormal for projection + const normalizedForward = vec3.create(); + vec3.normalize(normalizedForward, targetViewPlaneNormal as vec3); + + // Project currentUp onto the plane perpendicular to targetViewPlaneNormal + // Remove the component of currentUp that's parallel to targetViewPlaneNormal + const dot = vec3.dot(currentUp, normalizedForward); + targetUp = vec3.create(); + vec3.scaleAndAdd(targetUp, currentUp, normalizedForward, -dot); + vec3.normalize(targetUp, targetUp); + + // If the projection results in a zero vector (currentUp was parallel to targetViewPlaneNormal), + // use a default up vector + if (vec3.length(targetUp) < 0.001) { + // Use a default up vector perpendicular to targetViewPlaneNormal + if (Math.abs(normalizedForward[2]) < 0.9) { + targetUp = vec3.fromValues(0, 0, 1); + } else { + targetUp = vec3.fromValues(0, 1, 0); + } + // Project and normalize + const dot2 = vec3.dot(targetUp, normalizedForward); + vec3.scaleAndAdd(targetUp, targetUp, normalizedForward, -dot2); + vec3.normalize(targetUp, targetUp); + } + } + + const targetRight = vec3.create(); + vec3.cross(targetRight, targetUp, targetViewPlaneNormal as vec3); + vec3.normalize(targetRight, targetRight); + + // prettier-ignore + const targetMatrix = mat4.fromValues( + targetRight[0], targetRight[1], targetRight[2], 0, + targetUp[0], targetUp[1], targetUp[2], 0, + targetViewPlaneNormal[0], targetViewPlaneNormal[1], targetViewPlaneNormal[2], 0, + 0, 0, 0, 1 + ); + + const startQuat = mat4.getRotation(quat.create(), startMatrix); + const targetQuat = mat4.getRotation(quat.create(), targetMatrix); + + let dotProduct = quat.dot(startQuat, targetQuat); + if (dotProduct < 0) { + quat.scale(targetQuat, targetQuat, -1); + dotProduct = -dotProduct; + } + + const threshold = 0.99996; + if (dotProduct > threshold) { + return; + } + + const steps = 10; + const duration = 150; + const stepDuration = duration / steps; + let currentStep = 0; + + const animate = () => { + currentStep++; + const t = currentStep / steps; + const easedT = t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2; + + const interpolatedQuat = quat.create(); + quat.slerp(interpolatedQuat, startQuat, targetQuat, easedT); + + const interpolatedMatrix = mat4.create(); + mat4.fromQuat(interpolatedMatrix, interpolatedQuat); + + const interpolatedForward = interpolatedMatrix.slice(8, 11) as Point3; + const interpolatedUp = interpolatedMatrix.slice(4, 7) as Point3; + + viewport.setCamera({ + viewPlaneNormal: interpolatedForward, + viewUp: interpolatedUp, + }); + viewport.resetCamera(ANIMATE_RESET_CAMERA_OPTIONS); + viewport.render(); + + if (currentStep < steps) { + setTimeout(animate, stepDuration); + } + }; + + animate(); + } +} + +export default OrientationControllerTool; diff --git a/packages/tools/src/tools/index.ts b/packages/tools/src/tools/index.ts index 186d2c7d76..34ebd72aa0 100644 --- a/packages/tools/src/tools/index.ts +++ b/packages/tools/src/tools/index.ts @@ -59,6 +59,7 @@ import CircleROIStartEndThresholdTool from './segmentation/CircleROIStartEndThre import BrushTool from './segmentation/BrushTool'; import PaintFillTool from './segmentation/PaintFillTool'; import OrientationMarkerTool from './OrientationMarkerTool'; +import OrientationControllerTool from './OrientationControllerTool'; import SegmentSelectTool from './segmentation/SegmentSelectTool'; import SegmentBidirectionalTool from './segmentation/SegmentBidirectionalTool'; @@ -126,6 +127,7 @@ export { PaintFillTool, ScaleOverlayTool, OrientationMarkerTool, + OrientationControllerTool, SculptorTool, SegmentSelectTool, VolumeRotateTool, diff --git a/packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.d.ts b/packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.d.ts new file mode 100644 index 0000000000..64f20b0c63 --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.d.ts @@ -0,0 +1,154 @@ +import vtkActor, { + IActorInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Actor'; + +export interface IStyle { + text?: string; + faceColor?: string; + faceRotation?: number; + fontFamily?: string; + fontColor?: string; + fontStyle?: string; + fontSizeScale?: (res: number) => number; + edgeThickness?: number; + edgeColor?: string; + resolution?: number; +} + +export interface IFaceProperty extends IStyle { + text?: string; + faceRotation?: number; +} + +export interface IAnnotatedRhombicuboctahedronActorInitialValues + extends IActorInitialValues { + defaultStyle?: IStyle; + showMainFaces?: boolean; + showEdgeFaces?: boolean; + showCornerFaces?: boolean; + scale?: number; +} + +export interface vtkAnnotatedRhombicuboctahedronActor extends vtkActor { + /** + * Set the default style. + * @param {IStyle} style + */ + setDefaultStyle(style: IStyle): boolean; + + /** + * The +X face property. + * @param {IFaceProperty} prop +X face property + */ + setXPlusFaceProperty(prop: IFaceProperty): boolean; + + /** + * The -X face property. + * @param {IFaceProperty} prop The -X face property. + */ + setXMinusFaceProperty(prop: IFaceProperty): boolean; + + /** + * The +Y face property. + * @param {IFaceProperty} prop The +Y face property. + */ + setYPlusFaceProperty(prop: IFaceProperty): boolean; + + /** + * The -Y face property. + * @param {IFaceProperty} prop The -Y face property. + */ + setYMinusFaceProperty(prop: IFaceProperty): boolean; + + /** + * The +Z face property. + * @param {IFaceProperty} prop The +Z face property. + */ + setZPlusFaceProperty(prop: IFaceProperty): boolean; + + /** + * The -Z face property. + * @param {IFaceProperty} prop The -Z face property. + */ + setZMinusFaceProperty(prop: IFaceProperty): boolean; + + /** + * Set whether to show the 6 main square faces. + * @param {Boolean} show + */ + setShowMainFaces(show: boolean): void; + + /** + * Get whether the 6 main square faces are shown. + */ + getShowMainFaces(): boolean; + + /** + * Set whether to show the 12 edge square faces. + * @param {Boolean} show + */ + setShowEdgeFaces(show: boolean): void; + + /** + * Get whether the 12 edge square faces are shown. + */ + getShowEdgeFaces(): boolean; + + /** + * Set whether to show the 8 corner triangular faces. + * @param {Boolean} show + */ + setShowCornerFaces(show: boolean): void; + + /** + * Get whether the 8 corner triangular faces are shown. + */ + getShowCornerFaces(): boolean; + + /** + * Set the scale of the rhombicuboctahedron. + * @param {Number} scale + */ + setRhombScale(scale: number): void; + + /** + * Get the scale of the rhombicuboctahedron. + */ + getScale(): number; +} + +/** + * Method use to decorate a given object (publicAPI+model) with vtkAnnotatedRhombicuboctahedronActor characteristics. + * + * @param publicAPI object on which methods will be bounds (public) + * @param model object on which data structure will be bounds (protected) + * @param {IAnnotatedRhombicuboctahedronActorInitialValues} [initialValues] (default: {}) + */ +export function extend( + publicAPI: object, + model: object, + initialValues?: IAnnotatedRhombicuboctahedronActorInitialValues +): void; + +/** + * Method use to create a new instance of vtkAnnotatedRhombicuboctahedronActor + * @param {IAnnotatedRhombicuboctahedronActorInitialValues} [initialValues] for pre-setting some of its content + */ +export function newInstance( + initialValues?: IAnnotatedRhombicuboctahedronActorInitialValues +): vtkAnnotatedRhombicuboctahedronActor; + +/** + * vtkAnnotatedRhombicuboctahedronActor is an actor that displays a rhombicuboctahedron + * with annotated faces. Similar to vtkAnnotatedCubeActor but uses a rhombicuboctahedron + * geometry which has 26 faces (6 main squares, 12 edge squares, 8 corner triangles). + * + * The 6 main square faces can be annotated with text and custom colors, similar to + * vtkAnnotatedCubeActor. The edge and corner faces can be toggled on/off. + */ +export declare const vtkAnnotatedRhombicuboctahedronActor: { + newInstance: typeof newInstance; + extend: typeof extend; +}; + +export default vtkAnnotatedRhombicuboctahedronActor; diff --git a/packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.js b/packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.js new file mode 100644 index 0000000000..c0c229b9e0 --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/AnnotatedRhombicuboctahedronActor/index.js @@ -0,0 +1,478 @@ +import macro from '@kitware/vtk.js/macros'; +import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; +import vtkMapper from '@kitware/vtk.js/Rendering/Core/Mapper'; +import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; +import vtkTexture from '@kitware/vtk.js/Rendering/Core/Texture'; +import ImageHelper from '@kitware/vtk.js/Common/Core/ImageHelper'; +import vtkRhombicuboctahedronSource from '../RhombicuboctahedronSource'; + +function createMainFacesMesh(scale, faceColors, faceTextures) { + const source = vtkRhombicuboctahedronSource.newInstance({ + generate3DTextureCoordinates: false, + generateMainFaces: true, + generateEdgeFaces: false, + generateCornerFaces: false, + scale: scale, + }); + + source.update(); + const data = source.getOutputData(); + + if (data) { + const tcoords = []; + for (let faceIdx = 0; faceIdx < 6; faceIdx++) { + const col = faceIdx % 3; + const row = Math.floor(faceIdx / 3); + const u0 = col / 3.0; + const u1 = (col + 1) / 3.0; + const v0 = row / 2.0; + const v1 = (row + 1) / 2.0; + tcoords.push(u0, v0); + tcoords.push(u1, v0); + tcoords.push(u1, v1); + tcoords.push(u0, v1); + } + + const tcoordsArray = vtkDataArray.newInstance({ + name: 'TextureCoordinates', + values: new Float32Array(tcoords), + numberOfComponents: 2, + }); + + data.getPointData().setTCoords(tcoordsArray); + data.modified(); + } + + return data; +} + +function createEdgeFacesMesh(scale, color) { + const source = vtkRhombicuboctahedronSource.newInstance({ + generate3DTextureCoordinates: false, + generateMainFaces: false, + generateEdgeFaces: true, + generateCornerFaces: false, + scale: scale, + }); + + source.update(); + const data = source.getOutputData(); + + if (data) { + const colors = []; + const numCells = data.getNumberOfCells(); + for (let i = 0; i < numCells; i++) { + colors.push(color[0], color[1], color[2], 255); + } + + const colorsArray = vtkDataArray.newInstance({ + name: 'Colors', + values: new Uint8Array(colors), + numberOfComponents: 4, + }); + data.getCellData().setScalars(colorsArray); + data.modified(); + } + + return data; +} + +function createCornerFacesMesh(scale, color) { + const source = vtkRhombicuboctahedronSource.newInstance({ + generate3DTextureCoordinates: false, + generateMainFaces: false, + generateEdgeFaces: false, + generateCornerFaces: true, + scale: scale, + }); + + source.update(); + const data = source.getOutputData(); + + if (data) { + const colors = []; + const numCells = data.getNumberOfCells(); + for (let i = 0; i < numCells; i++) { + colors.push(color[0], color[1], color[2], 255); + } + + const colorsArray = vtkDataArray.newInstance({ + name: 'Colors', + values: new Uint8Array(colors), + numberOfComponents: 4, + }); + data.getCellData().setScalars(colorsArray); + data.modified(); + } + + return data; +} + +function createTextureAtlas(faceTextureData) { + const faceSize = 256; + const canvas = document.createElement('canvas'); + canvas.width = faceSize * 3; + canvas.height = faceSize * 2; + const ctx = canvas.getContext('2d'); + + faceTextureData.forEach((data, index) => { + const col = index % 3; + const row = Math.floor(index / 3); + const x = col * faceSize; + const y = row * faceSize; + + ctx.fillStyle = `rgb(${data.faceColor[0]}, ${data.faceColor[1]}, ${data.faceColor[2]})`; + ctx.fillRect(x, y, faceSize, faceSize); + + if (data.text) { + ctx.save(); + ctx.translate(x + faceSize / 2, y + faceSize / 2); + if (data.flipVertical) { + ctx.scale(1, -1); + } + if (data.flipHorizontal) { + ctx.scale(-1, 1); + } + ctx.rotate(((data.rotation || 0) * Math.PI) / 180); + + ctx.fillStyle = `rgb(${data.textColor[0]}, ${data.textColor[1]}, ${data.textColor[2]})`; + ctx.font = 'bold 180px Arial'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText(data.text, 0, 0); + ctx.restore(); + } + }); + + return ImageHelper.canvasToImageData(canvas); +} + +function vtkAnnotatedRhombicuboctahedronActor(publicAPI, model) { + model.classHierarchy.push('vtkAnnotatedRhombicuboctahedronActor'); + + function updateAllFaceTextures() {} + + function createActors() { + let sourceScale = 1.0; + if (model.scale !== undefined && model.scale !== null) { + if (Array.isArray(model.scale)) { + sourceScale = model.scale[0] || 1.0; + } else if (typeof model.scale === 'number') { + sourceScale = model.scale; + } + } + + const actors = []; + + const hexToRgb = (hex) => { + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result + ? result.slice(1, 4).map((n) => parseInt(n, 16)) + : [255, 255, 255]; + }; + + const parseFontColor = (color) => { + if (!color) { + return [0, 0, 0]; + } + + const rgbMatch = color.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/); + if (rgbMatch) { + return [ + parseInt(rgbMatch[1], 10), + parseInt(rgbMatch[2], 10), + parseInt(rgbMatch[3], 10), + ]; + } + + if (color.startsWith('#')) { + return hexToRgb(color); + } + + const namedColors = { + black: [0, 0, 0], + white: [255, 255, 255], + red: [255, 0, 0], + green: [0, 255, 0], + blue: [0, 0, 255], + }; + if (namedColors[color.toLowerCase()]) { + return namedColors[color.toLowerCase()]; + } + + return [0, 0, 0]; + }; + + const faceColors = { + zMinus: hexToRgb( + model.zMinusFaceProperty.faceColor || model.defaultStyle.faceColor + ), + zPlus: hexToRgb( + model.zPlusFaceProperty.faceColor || model.defaultStyle.faceColor + ), + yMinus: hexToRgb( + model.yMinusFaceProperty.faceColor || model.defaultStyle.faceColor + ), + yPlus: hexToRgb( + model.yPlusFaceProperty.faceColor || model.defaultStyle.faceColor + ), + xMinus: hexToRgb( + model.xMinusFaceProperty.faceColor || model.defaultStyle.faceColor + ), + xPlus: hexToRgb( + model.xPlusFaceProperty.faceColor || model.defaultStyle.faceColor + ), + }; + + if (model.showMainFaces !== false) { + const faceTextureData = [ + { + faceColor: faceColors.zMinus, + text: model.zMinusFaceProperty.text || 'I', + textColor: parseFontColor( + model.zMinusFaceProperty.fontColor || model.defaultStyle.fontColor + ), + rotation: 0, + }, + { + faceColor: faceColors.zPlus, + text: model.zPlusFaceProperty.text || 'S', + textColor: parseFontColor( + model.zPlusFaceProperty.fontColor || model.defaultStyle.fontColor + ), + rotation: 0, + flipVertical: true, + }, + { + faceColor: faceColors.yMinus, + text: model.yMinusFaceProperty.text || 'A', + textColor: parseFontColor( + model.yMinusFaceProperty.fontColor || model.defaultStyle.fontColor + ), + rotation: 180, + }, + { + faceColor: faceColors.yPlus, + text: model.yPlusFaceProperty.text || 'P', + textColor: parseFontColor( + model.yPlusFaceProperty.fontColor || model.defaultStyle.fontColor + ), + rotation: 180, + }, + { + faceColor: faceColors.xMinus, + text: model.xMinusFaceProperty.text || 'L', + textColor: parseFontColor( + model.xMinusFaceProperty.fontColor || model.defaultStyle.fontColor + ), + rotation: 90, + flipVertical: true, + }, + { + faceColor: faceColors.xPlus, + text: model.xPlusFaceProperty.text || 'R', + textColor: parseFontColor( + model.xPlusFaceProperty.fontColor || model.defaultStyle.fontColor + ), + rotation: 90, + }, + ]; + + const atlasImageData = createTextureAtlas(faceTextureData); + + const mainData = createMainFacesMesh(sourceScale, faceColors, null); + if (mainData) { + const mainFacesActor = vtkActor.newInstance(); + const mainMapper = vtkMapper.newInstance(); + mainMapper.setInputData(mainData); + mainFacesActor.setMapper(mainMapper); + + const texture = vtkTexture.newInstance(); + texture.setInputData(atlasImageData); + texture.setInterpolate(true); + mainFacesActor.addTexture(texture); + + const property = mainFacesActor.getProperty(); + property.setBackfaceCulling(false); + property.setFrontfaceCulling(false); + property.setLighting(false); + property.setAmbient(1.0); + property.setDiffuse(0.0); + property.setSpecular(0.0); + + actors.push(mainFacesActor); + } + } + + if (model.showEdgeFaces !== false) { + const edgeColor = [200, 200, 200]; + const edgeData = createEdgeFacesMesh(sourceScale, edgeColor); + if (edgeData) { + const edgeFacesActor = vtkActor.newInstance(); + const edgeMapper = vtkMapper.newInstance(); + edgeMapper.setInputData(edgeData); + edgeMapper.setScalarModeToUseCellData(); + edgeMapper.setScalarVisibility(true); + edgeMapper.setColorModeToDirectScalars(); + edgeFacesActor.setMapper(edgeMapper); + + const edgeProperty = edgeFacesActor.getProperty(); + edgeProperty.setBackfaceCulling(false); + edgeProperty.setFrontfaceCulling(false); + edgeProperty.setLighting(false); + edgeProperty.setAmbient(1.0); + edgeProperty.setDiffuse(0.0); + edgeProperty.setSpecular(0.0); + + actors.push(edgeFacesActor); + } + } + + if (model.showCornerFaces !== false) { + const cornerColor = [150, 150, 150]; + const cornerData = createCornerFacesMesh(sourceScale, cornerColor); + if (cornerData) { + const cornerFacesActor = vtkActor.newInstance(); + const cornerMapper = vtkMapper.newInstance(); + cornerMapper.setInputData(cornerData); + cornerMapper.setScalarModeToUseCellData(); + cornerMapper.setScalarVisibility(true); + cornerMapper.setColorModeToDirectScalars(); + cornerFacesActor.setMapper(cornerMapper); + + const cornerProperty = cornerFacesActor.getProperty(); + cornerProperty.setBackfaceCulling(false); + cornerProperty.setFrontfaceCulling(false); + cornerProperty.setLighting(false); + cornerProperty.setAmbient(1.0); + cornerProperty.setDiffuse(0.0); + cornerProperty.setSpecular(0.0); + + actors.push(cornerFacesActor); + } + } + + return actors; + } + + publicAPI.setDefaultStyle = (style) => { + model.defaultStyle = { ...model.defaultStyle, ...style }; + }; + + publicAPI.setXPlusFaceProperty = (prop) => { + Object.assign(model.xPlusFaceProperty, prop); + publicAPI.modified(); + }; + publicAPI.setXMinusFaceProperty = (prop) => { + Object.assign(model.xMinusFaceProperty, prop); + publicAPI.modified(); + }; + publicAPI.setYPlusFaceProperty = (prop) => { + Object.assign(model.yPlusFaceProperty, prop); + publicAPI.modified(); + }; + publicAPI.setYMinusFaceProperty = (prop) => { + Object.assign(model.yMinusFaceProperty, prop); + publicAPI.modified(); + }; + publicAPI.setZPlusFaceProperty = (prop) => { + Object.assign(model.zPlusFaceProperty, prop); + publicAPI.modified(); + }; + publicAPI.setZMinusFaceProperty = (prop) => { + Object.assign(model.zMinusFaceProperty, prop); + publicAPI.modified(); + }; + + publicAPI.setShowMainFaces = (show) => { + if (model.showMainFaces !== show) { + model.showMainFaces = show; + updateAllFaceTextures(); + } + }; + + publicAPI.setShowEdgeFaces = (show) => { + if (model.showEdgeFaces !== show) { + model.showEdgeFaces = show; + updateAllFaceTextures(); + } + }; + + publicAPI.setShowCornerFaces = (show) => { + if (model.showCornerFaces !== show) { + model.showCornerFaces = show; + updateAllFaceTextures(); + } + }; + + publicAPI.setRhombScale = (scale) => { + if (model.scale !== scale) { + model.scale = scale; + } + }; + + publicAPI.getActors = () => { + return createActors(); + }; +} + +export const DEFAULT_VALUES = { + defaultStyle: { + text: '', + faceColor: 'white', + faceRotation: 0, + fontFamily: 'Arial', + fontColor: 'black', + fontStyle: 'normal', + fontSizeScale: (resolution) => resolution / 1.8, + edgeThickness: 0.1, + edgeColor: 'black', + resolution: 200, + }, + xPlusFaceProperty: {}, + xMinusFaceProperty: {}, + yPlusFaceProperty: {}, + yMinusFaceProperty: {}, + zPlusFaceProperty: {}, + zMinusFaceProperty: {}, + showMainFaces: true, + showEdgeFaces: true, + showCornerFaces: true, + scale: 1.0, +}; + +export function extend(publicAPI, model, initialValues = {}) { + Object.assign(model, DEFAULT_VALUES, initialValues); + + vtkActor.extend(publicAPI, model, initialValues); + + model.xPlusFaceProperty = { ...model.xPlusFaceProperty }; + model.xMinusFaceProperty = { ...model.xMinusFaceProperty }; + model.yPlusFaceProperty = { ...model.yPlusFaceProperty }; + model.yMinusFaceProperty = { ...model.yMinusFaceProperty }; + model.zPlusFaceProperty = { ...model.zPlusFaceProperty }; + model.zMinusFaceProperty = { ...model.zMinusFaceProperty }; + + macro.get(publicAPI, model, [ + 'defaultStyle', + 'xPlusFaceProperty', + 'xMinusFaceProperty', + 'yPlusFaceProperty', + 'yMinusFaceProperty', + 'zPlusFaceProperty', + 'zMinusFaceProperty', + 'showMainFaces', + 'showEdgeFaces', + 'showCornerFaces', + 'scale', + ]); + + vtkAnnotatedRhombicuboctahedronActor(publicAPI, model); +} + +export const newInstance = macro.newInstance( + extend, + 'vtkAnnotatedRhombicuboctahedronActor' +); + +export default { newInstance, extend }; diff --git a/packages/tools/src/utilities/vtkjs/OrientationControllerWidget/index.ts b/packages/tools/src/utilities/vtkjs/OrientationControllerWidget/index.ts new file mode 100644 index 0000000000..1bd97f447d --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/OrientationControllerWidget/index.ts @@ -0,0 +1,748 @@ +import vtkCellPicker from '@kitware/vtk.js/Rendering/Core/CellPicker'; +import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; +import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import { Enums } from '@cornerstonejs/core'; +import type { Types } from '@cornerstonejs/core'; +import vtkAnnotatedRhombicuboctahedronActor from '../AnnotatedRhombicuboctahedronActor'; + +export interface OrientationControllerConfig { + faceColors: { + topBottom: number[]; + frontBack: number[]; + leftRight: number[]; + }; + letterColors: { + zMinus: number[]; + zPlus: number[]; + yMinus: number[]; + yPlus: number[]; + xMinus: number[]; + xPlus: number[]; + }; + opacity: number; + showEdgeFaces: boolean; + showCornerFaces: boolean; +} + +export interface PickResult { + pickedActor: vtkActor; + cellId: number; + actorIndex: number; +} + +export interface PositionConfig { + position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; + size: number; +} + +export interface MouseHandlersCallbacks { + onFacePicked: (result: PickResult) => void; + onFaceHover?: (result: PickResult | null) => void; +} + +export class vtkOrientationControllerWidget { + private actors = new Map(); + private pickers = new Map(); + private highlightedFace: { + actor: vtkActor; + cellId: number; + originalColor: number[]; + viewport: Types.IVolumeViewport; + isMainFace: boolean; + originalScale?: number[]; + } | null = null; + private mouseHandlers = new Map< + string, + { + cleanup: () => void; + } + >(); + + createActors(config: OrientationControllerConfig): vtkActor[] { + const rgbToHex = (rgb: number[]) => { + return `#${rgb + .map((x) => { + const hex = Math.round(x).toString(16); + return hex.length === 1 ? '0' + hex : hex; + }) + .join('')}`; + }; + + const rgbToHexColor = (rgb: number[]) => { + return `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`; + }; + + const actorFactory = vtkAnnotatedRhombicuboctahedronActor.newInstance(); + + const defaultStyle = { + fontStyle: 'bold', + fontFamily: 'Arial', + fontColor: 'black', + fontSizeScale: (res: number) => res / 2, + faceColor: rgbToHex(config.faceColors.topBottom), + edgeThickness: 0.1, + edgeColor: 'black', + resolution: 400, + }; + + actorFactory.setDefaultStyle(defaultStyle); + + // LPS coordinate system labels for the 6 main faces + actorFactory.setXPlusFaceProperty({ + text: 'L', + faceColor: rgbToHex(config.faceColors.leftRight), + fontColor: rgbToHexColor(config.letterColors.xPlus), + faceRotation: 0, + }); + + actorFactory.setXMinusFaceProperty({ + text: 'R', + faceColor: rgbToHex(config.faceColors.leftRight), + fontColor: rgbToHexColor(config.letterColors.xMinus), + faceRotation: 0, + }); + + actorFactory.setYPlusFaceProperty({ + text: 'P', + faceColor: rgbToHex(config.faceColors.frontBack), + fontColor: rgbToHexColor(config.letterColors.yPlus), + faceRotation: 180, + }); + + actorFactory.setYMinusFaceProperty({ + text: 'A', + faceColor: rgbToHex(config.faceColors.frontBack), + fontColor: rgbToHexColor(config.letterColors.yMinus), + faceRotation: 0, + }); + + actorFactory.setZPlusFaceProperty({ + text: 'S', + faceColor: rgbToHex(config.faceColors.topBottom), + fontColor: rgbToHexColor(config.letterColors.zPlus), + }); + + actorFactory.setZMinusFaceProperty({ + text: 'I', + faceColor: rgbToHex(config.faceColors.topBottom), + fontColor: rgbToHexColor(config.letterColors.zMinus), + }); + + // Configure which faces to show + actorFactory.setShowMainFaces(true); + actorFactory.setShowEdgeFaces(config.showEdgeFaces); + actorFactory.setShowCornerFaces(config.showCornerFaces); + + const actors = actorFactory.getActors(); + + // Set opacity for all actors + actors.forEach((actor) => { + const property = actor.getProperty(); + property.setOpacity(config.opacity); + actor.setVisibility(true); + }); + + return actors; + } + + /** + * Adds orientation controller actors to the viewport's main scene so they + * are always visible without requiring any rendering engine changes. Actors + * are positioned in the viewport corner and rendered with the rest of the scene. + */ + addActorsToViewport( + viewportId: string, + viewport: Types.IVolumeViewport, + actors: vtkActor[] + ): void { + const existingActors = this.actors.get(viewportId); + if (existingActors) { + this.removeActorsFromViewport(viewportId, viewport); + } + + actors.forEach((actor, index) => { + const uid = `orientation-controller-${viewportId}-${index}`; + viewport.addActor({ actor, uid }); + }); + this.actors.set(viewportId, actors); + } + + removeActorsFromViewport( + viewportId: string, + viewport: Types.IVolumeViewport + ): void { + const actors = this.actors.get(viewportId); + if (actors) { + const uids = actors.map( + (_, index) => `orientation-controller-${viewportId}-${index}` + ); + viewport.removeActors(uids); + this.actors.delete(viewportId); + } + } + + setupPicker(viewportId: string, actors: vtkActor[]): vtkCellPicker { + const picker = vtkCellPicker.newInstance({ opacityThreshold: 0.0001 }); + picker.setPickFromList(true); + picker.setTolerance(0.001); + picker.initializePickList(); + // Add all actors to the pick list + actors.forEach((actor) => { + picker.addPickList(actor); + }); + this.pickers.set(viewportId, picker); + return picker; + } + + pickAtPosition( + evt: MouseEvent, + viewportId: string, + viewport: Types.IVolumeViewport, + element: HTMLDivElement, + actors: vtkActor[] + ): PickResult | null { + const picker = this.pickers.get(viewportId); + if (!picker) { + return null; + } + + const mainRenderer = + (viewport as Types.IViewport) + .getRenderingEngine() + ?.getRenderer(viewportId) ?? viewport.getRenderer(); + const renderer: vtkRenderer | null = mainRenderer as vtkRenderer | null; + if (!renderer) { + return null; + } + + const rect = element.getBoundingClientRect(); + const x = evt.clientX - rect.left; + const y = evt.clientY - rect.top; + + const devicePixelRatio = window.devicePixelRatio || 1; + const canvasPosWithDPR = [x * devicePixelRatio, y * devicePixelRatio]; + + const canvas = viewport.canvas; + const { width, height } = canvas; + + const [xMin, yMin, xMax, yMax] = + renderer.getViewport() as unknown as number[]; + const viewportWidth = xMax - xMin; + const viewportHeight = yMax - yMin; + + const scaledX = (canvasPosWithDPR[0] / width) * viewportWidth * width; + const scaledY = (canvasPosWithDPR[1] / height) * viewportHeight * height; + + const displayCoord = [scaledX, viewportHeight * height - scaledY]; + const displayCoords: [number, number, number] = [ + displayCoord[0], + displayCoord[1], + 0, + ]; + + picker.pick(displayCoords, renderer); + + const pickedActors = picker.getActors(); + if (pickedActors.length === 0) { + return null; + } + + const pickedActor = pickedActors[0]; + const cellId = picker.getCellId(); + + if (actors.includes(pickedActor) && cellId !== -1) { + const actorIndex = actors.indexOf(pickedActor); + return { pickedActor, cellId, actorIndex }; + } + + return null; + } + + calculateMarkerPosition( + viewport: Types.IVolumeViewport, + position: PositionConfig['position'] + ): [number, number, number] | null { + const canvas = viewport.canvas; + if (!canvas) { + return null; + } + + const devicePixelRatio = window.devicePixelRatio || 1; + const canvasWidth = canvas.clientWidth || canvas.width / devicePixelRatio; + const canvasHeight = + canvas.clientHeight || canvas.height / devicePixelRatio; + const cornerOffset = + viewport.type === Enums.ViewportType.VOLUME_3D ? 55 : 35; + + let canvasX: number; + let canvasY: number; + + switch (position) { + case 'top-left': + canvasX = cornerOffset; + canvasY = cornerOffset; + break; + case 'top-right': + canvasX = canvasWidth - cornerOffset; + canvasY = cornerOffset; + break; + case 'bottom-left': + canvasX = cornerOffset; + canvasY = canvasHeight - cornerOffset; + break; + default: // bottom-right + canvasX = canvasWidth - cornerOffset; + canvasY = canvasHeight - cornerOffset; + } + + const canvasPos: Types.Point2 = [canvasX, canvasY]; + const worldPos = viewport.canvasToWorld(canvasPos); + + return [worldPos[0], worldPos[1], worldPos[2]]; + } + + positionActors( + viewport: Types.IVolumeViewport, + actors: vtkActor[], + config: PositionConfig + ): boolean { + // Calculate marker size in world units to maintain fixed screen size + // This keeps the marker at a constant screen size regardless of zoom + const canvas = viewport.canvas; + if (!canvas) { + console.warn('OrientationControllerWidget: No canvas available'); + return false; + } + + // Get the camera to calculate world-to-screen ratio (use engine so it works with RenderingEngine facade) + const mainRenderer = + (viewport as Types.IViewport) + .getRenderingEngine() + ?.getRenderer(viewport.id) ?? viewport.getRenderer(); + const camera = (mainRenderer as vtkRenderer)?.getActiveCamera(); + if (!camera) { + return false; + } + const parallelScale = camera.getParallelScale(); + + // parallelScale is half the height of the view in world coordinates + // So the full height in world units is parallelScale * 2 + const worldHeight = parallelScale * 2; + + // Calculate world units per pixel + const devicePixelRatio = window.devicePixelRatio || 1; + const canvasHeight = + canvas.clientHeight || canvas.height / devicePixelRatio; + const canvasWidth = canvas.clientWidth || canvas.width / devicePixelRatio; + const worldUnitsPerPixel = worldHeight / canvasHeight; + + // Calculate desired screen size in pixels + const canvasSize = Math.min(canvasWidth, canvasHeight); + const screenSizePixels = canvasSize * config.size; + + // Convert to world units + const markerSize = screenSizePixels * worldUnitsPerPixel; + + // Scale and position all actors + actors.forEach((actor) => { + actor.setScale(markerSize, markerSize, markerSize); + + const worldPos = this.calculateMarkerPosition(viewport, config.position); + if (!worldPos) { + console.warn( + 'OrientationControllerWidget: Could not get world position' + ); + return; + } + + actor.setPosition(worldPos[0], worldPos[1], worldPos[2]); + actor.setOrientation(0, 0, 0); + }); + + return true; + } + + highlightFace( + actor: vtkActor, + cellId: number, + viewport: Types.IVolumeViewport, + isMainFace: boolean = false + ): void { + // Check if we're already highlighting this exact face + if ( + this.highlightedFace && + this.highlightedFace.actor === actor && + this.highlightedFace.cellId === cellId && + this.highlightedFace.isMainFace === isMainFace + ) { + return; // Already highlighting this face, no need to re-highlight + } + + // Clear any existing highlight first + this.clearHighlight(); + + // For main faces (texture-based), we can't easily highlight individual faces + // since they're all on the same actor. Scaling the actor would affect all 6 main faces. + // Skip highlighting for main faces on hover to avoid highlighting multiple faces. + if (isMainFace) { + return; + } + + // For edge/corner faces (cell data colors) + const mapper = actor.getMapper(); + const inputData = mapper.getInputData(); + + if (!inputData) { + return; + } + + const cellData = inputData.getCellData(); + const colors = cellData.getScalars(); + + if (!colors) { + return; + } + + // Store original color + const colorArray = colors.getData(); + const offset = cellId * 4; + const originalColor = [ + colorArray[offset], + colorArray[offset + 1], + colorArray[offset + 2], + colorArray[offset + 3], + ]; + + // Store highlight info for later reset + this.highlightedFace = { + actor, + cellId, + originalColor, + viewport, + isMainFace: false, + }; + + // Set highlight color (bright white) + colorArray[offset] = 255; + colorArray[offset + 1] = 255; + colorArray[offset + 2] = 255; + colorArray[offset + 3] = 255; + + // Mark as modified and render + colors.modified(); + inputData.modified(); + viewport.render(); + } + + clearHighlight(): void { + if (!this.highlightedFace) { + return; + } + + const { actor, cellId, originalColor, viewport, isMainFace } = + this.highlightedFace; + + // For main faces, reset the actor's scale + if (isMainFace && this.highlightedFace.originalScale) { + const scale = this.highlightedFace.originalScale; + actor.setScale(scale[0], scale[1], scale[2]); + viewport.render(); + this.highlightedFace = null; + return; + } + + // For edge/corner faces, reset cell data colors + const mapper = actor.getMapper(); + const inputData = mapper.getInputData(); + + if (!inputData) { + this.highlightedFace = null; + return; + } + + const cellData = inputData.getCellData(); + const colors = cellData.getScalars(); + + if (!colors) { + this.highlightedFace = null; + return; + } + + // Reset to original color + const colorArray = colors.getData(); + const offset = cellId * 4; + colorArray[offset] = originalColor[0]; + colorArray[offset + 1] = originalColor[1]; + colorArray[offset + 2] = originalColor[2]; + colorArray[offset + 3] = originalColor[3]; + + // Mark as modified and render + colors.modified(); + inputData.modified(); + viewport.render(); + + this.highlightedFace = null; + } + + setupMouseHandlers( + viewportId: string, + element: HTMLDivElement, + viewport: Types.IVolumeViewport, + actors: vtkActor[], + callbacks: MouseHandlersCallbacks + ): { cleanup: () => void } { + let isMouseDown = false; + + const hoverHandler = (evt: MouseEvent) => { + if (isMouseDown) { + return; + } + + const pickResult = this.pickAtPosition( + evt, + viewportId, + viewport, + element, + actors + ); + + if (pickResult) { + const { pickedActor, cellId, actorIndex } = pickResult; + // Only highlight edge/corner faces on hover (not main faces) + // Main faces are all on the same actor, so highlighting would affect all of them + if (actorIndex !== 0) { + this.highlightFace( + pickedActor, + cellId, + viewport, + false // isMainFace = false for edge/corner faces + ); + } + if (callbacks.onFaceHover) { + callbacks.onFaceHover(pickResult); + } + } else { + this.clearHighlight(); + if (callbacks.onFaceHover) { + callbacks.onFaceHover(null); + } + } + }; + + const clickHandler = (evt: MouseEvent) => { + if (evt.button !== 0) { + return; + } + + const pickResult = this.pickAtPosition( + evt, + viewportId, + viewport, + element, + actors + ); + + if (!pickResult) { + return; + } + + isMouseDown = true; + + // Determine global cellId + let globalCellId = pickResult.cellId; + if (pickResult.actorIndex === 1) { + // Edge faces: add 6 to convert local cellId to global + globalCellId = pickResult.cellId + 6; + } else if (pickResult.actorIndex === 2) { + // Corner faces: add 18 to convert local cellId to global + globalCellId = pickResult.cellId + 18; + } + // actorIndex === 0 (main faces): cellId stays as is + + callbacks.onFacePicked({ + ...pickResult, + cellId: globalCellId, + }); + + evt.preventDefault(); + evt.stopPropagation(); + }; + + const mouseUpHandler = () => { + isMouseDown = false; + this.clearHighlight(); + }; + + const dblclickHandler = (evt: MouseEvent) => { + const pickResult = this.pickAtPosition( + evt, + viewportId, + viewport, + element, + actors + ); + if (pickResult) { + evt.preventDefault(); + evt.stopImmediatePropagation(); + } + }; + + element.addEventListener('mousemove', hoverHandler); + element.addEventListener('mousedown', clickHandler); + element.addEventListener('mouseup', mouseUpHandler); + element.addEventListener('mouseleave', mouseUpHandler); + element.addEventListener('dblclick', dblclickHandler, true); + + const cleanup = () => { + element.removeEventListener('mousemove', hoverHandler); + element.removeEventListener('mousedown', clickHandler); + element.removeEventListener('mouseup', mouseUpHandler); + element.removeEventListener('mouseleave', mouseUpHandler); + element.removeEventListener('dblclick', dblclickHandler, true); + }; + + this.mouseHandlers.set(viewportId, { cleanup }); + + return { cleanup }; + } + + getActors(viewportId: string): vtkActor[] | undefined { + return this.actors.get(viewportId); + } + + syncOverlayViewport( + _viewportId: string, + _viewport: Types.IVolumeViewport + ): void { + // No overlay when using main scene only; keep for API compatibility. + } + + getOrientationForFace(cellId: number): { + viewPlaneNormal: number[]; + viewUp: number[]; + } | null { + // Cell IDs for rhombicuboctahedron: + // 0-5: Main square faces + // 6-17: Edge square faces + // 18-25: Corner triangular faces + + const orientations = new Map< + number, + { viewPlaneNormal: number[]; viewUp: number[] } + >(); + + // Main 6 faces + orientations.set(0, { viewPlaneNormal: [0, 0, -1], viewUp: [0, -1, 0] }); // Bottom + orientations.set(1, { viewPlaneNormal: [0, 0, 1], viewUp: [0, 1, 0] }); // Top + orientations.set(2, { viewPlaneNormal: [0, -1, 0], viewUp: [0, 0, 1] }); // Front + orientations.set(3, { viewPlaneNormal: [0, 1, 0], viewUp: [0, 0, 1] }); // Back + orientations.set(4, { viewPlaneNormal: [-1, 0, 0], viewUp: [0, 0, 1] }); // Left + orientations.set(5, { viewPlaneNormal: [1, 0, 0], viewUp: [0, 0, 1] }); // Right + + // 12 edge faces - diagonal views + const sqrt2 = 1 / Math.sqrt(2); + orientations.set(6, { + viewPlaneNormal: [0, -sqrt2, -sqrt2], + viewUp: [0, -sqrt2, sqrt2], + }); + orientations.set(7, { + viewPlaneNormal: [sqrt2, 0, -sqrt2], + viewUp: [0, 0, 1], + }); + orientations.set(8, { + viewPlaneNormal: [0, sqrt2, -sqrt2], + viewUp: [0, -sqrt2, -sqrt2], + }); + orientations.set(9, { + viewPlaneNormal: [-sqrt2, 0, -sqrt2], + viewUp: [0, 0, 1], + }); + orientations.set(10, { + viewPlaneNormal: [0, -sqrt2, sqrt2], + viewUp: [0, sqrt2, sqrt2], + }); + orientations.set(11, { + viewPlaneNormal: [sqrt2, 0, sqrt2], + viewUp: [0, 0, 1], + }); + orientations.set(12, { + viewPlaneNormal: [0, sqrt2, sqrt2], + viewUp: [0, sqrt2, -sqrt2], + }); + orientations.set(13, { + viewPlaneNormal: [-sqrt2, 0, sqrt2], + viewUp: [0, 0, 1], + }); + orientations.set(14, { + viewPlaneNormal: [-sqrt2, -sqrt2, 0], + viewUp: [0, 0, 1], + }); + orientations.set(15, { + viewPlaneNormal: [sqrt2, -sqrt2, 0], + viewUp: [0, 0, 1], + }); + orientations.set(16, { + viewPlaneNormal: [sqrt2, sqrt2, 0], + viewUp: [0, 0, 1], + }); + orientations.set(17, { + viewPlaneNormal: [-sqrt2, sqrt2, 0], + viewUp: [0, 0, 1], + }); + + // 8 corner faces - tri-axial views + const sqrt3 = 1 / Math.sqrt(3); + orientations.set(18, { + viewPlaneNormal: [-sqrt3, -sqrt3, -sqrt3], + viewUp: [0, 0, 1], + }); + orientations.set(19, { + viewPlaneNormal: [sqrt3, -sqrt3, -sqrt3], + viewUp: [0, 0, 1], + }); + orientations.set(20, { + viewPlaneNormal: [sqrt3, sqrt3, -sqrt3], + viewUp: [0, 0, 1], + }); + orientations.set(21, { + viewPlaneNormal: [-sqrt3, sqrt3, -sqrt3], + viewUp: [0, 0, 1], + }); + orientations.set(22, { + viewPlaneNormal: [-sqrt3, -sqrt3, sqrt3], + viewUp: [0, 0, 1], + }); + orientations.set(23, { + viewPlaneNormal: [sqrt3, -sqrt3, sqrt3], + viewUp: [0, 0, 1], + }); + orientations.set(24, { + viewPlaneNormal: [sqrt3, sqrt3, sqrt3], + viewUp: [0, 0, 1], + }); + orientations.set(25, { + viewPlaneNormal: [-sqrt3, sqrt3, sqrt3], + viewUp: [0, 0, 1], + }); + + return orientations.get(cellId) || null; + } + + cleanup(viewportId?: string): void { + if (viewportId) { + const handler = this.mouseHandlers.get(viewportId); + if (handler) { + handler.cleanup(); + this.mouseHandlers.delete(viewportId); + } + this.actors.delete(viewportId); + this.pickers.delete(viewportId); + } else { + this.mouseHandlers.forEach((handler) => handler.cleanup()); + this.mouseHandlers.clear(); + this.actors.clear(); + this.pickers.clear(); + } + this.clearHighlight(); + } +} diff --git a/packages/tools/src/utilities/vtkjs/README.md b/packages/tools/src/utilities/vtkjs/README.md new file mode 100644 index 0000000000..b8d68db62a --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/README.md @@ -0,0 +1,99 @@ +# VTK.js Custom Sources + +This directory contains custom VTK.js-style sources that follow the vtk.js design patterns and could potentially be contributed back to the vtk.js library. + +## Components + +### RhombicuboctahedronSource + +A source object that generates a rhombicuboctahedron geometry - an Archimedean solid with 26 faces: + +- 6 square faces aligned with coordinate axes +- 12 square faces along edges +- 8 triangular faces at corners + +**Features:** + +- Configurable scale +- 3D texture coordinate generation +- Selective face generation (main/edges/corners) +- Proper normals calculation + +**Usage:** + +```javascript +import vtkRhombicuboctahedronSource from './RhombicuboctahedronSource'; + +const source = vtkRhombicuboctahedronSource.newInstance({ + scale: 1.0, + generate3DTextureCoordinates: true, + generateMainFaces: true, + generateEdgeFaces: true, + generateCornerFaces: true, +}); +``` + +### AnnotatedRhombicuboctahedronActor + +An actor that combines the rhombicuboctahedron geometry with canvas-based face annotations, similar to vtkAnnotatedCubeActor. + +**Features:** + +- Text labels on the 6 main faces +- Customizable colors, fonts, and rotations per face +- Configurable edge and corner face visibility +- Canvas-based texture rendering + +**Usage:** + +```javascript +import vtkAnnotatedRhombicuboctahedronActor from './AnnotatedRhombicuboctahedronActor'; + +const actor = vtkAnnotatedRhombicuboctahedronActor.newInstance({ + showMainFaces: true, + showEdgeFaces: true, + showCornerFaces: true, +}); + +// Configure main faces with anatomical labels +actor.setXPlusFaceProperty({ text: 'L', faceColor: '#ffff00' }); +actor.setXMinusFaceProperty({ text: 'R', faceColor: '#ffff00' }); +actor.setYPlusFaceProperty({ text: 'P', faceColor: '#00ffff' }); +actor.setYMinusFaceProperty({ text: 'A', faceColor: '#00ffff' }); +actor.setZPlusFaceProperty({ text: 'S', faceColor: '#0000ff' }); +actor.setZMinusFaceProperty({ text: 'I', faceColor: '#0000ff' }); +``` + +## Design Patterns + +These sources follow vtk.js conventions: + +1. **Factory Pattern**: Use `newInstance()` and `extend()` methods +2. **Macro System**: Use vtk.js macros for common patterns +3. **Algorithm Pattern**: Sources implement `requestData()` for pipeline execution +4. **TypeScript Support**: Comprehensive `.d.ts` type definitions + +## Integration with Cornerstone3D + +The `OrientationControllerTool` tool demonstrates how to use these sources in a Cornerstone3D context, providing: + +- Interactive 3D orientation control +- Clickable faces for camera reorientation +- Smooth animated transitions +- Configurable appearance and positioning + +## Potential vtk.js Contribution + +These sources are designed to be generic enough to contribute back to vtk.js: + +- No Cornerstone-specific dependencies +- Follow vtk.js naming conventions +- Include comprehensive TypeScript definitions +- Well-documented API + +To prepare for vtk.js contribution, these files would need: + +1. Tests (following vtk.js test patterns) +2. Examples (HTML/JS demonstrations) +3. Documentation in vtk.js format +4. Integration into vtk.js build system diff --git a/packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.d.ts b/packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.d.ts new file mode 100644 index 0000000000..08873f4f5a --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.d.ts @@ -0,0 +1,106 @@ +import { vtkAlgorithm, vtkObject } from '@kitware/vtk.js/interfaces'; + +/** + * vtkRhombicuboctahedronSource + */ +export interface IRhombicuboctahedronSourceInitialValues { + scale?: number; + generate3DTextureCoordinates?: boolean; + generateMainFaces?: boolean; + generateEdgeFaces?: boolean; + generateCornerFaces?: boolean; +} + +export interface vtkRhombicuboctahedronSource extends vtkAlgorithm { + /** + * Get the scale factor for the rhombicuboctahedron. + */ + getScale(): number; + + /** + * Set the scale factor for the rhombicuboctahedron. + * @param {Number} scale The scale factor. + */ + setScale(scale: number): boolean; + + /** + * Get whether to generate 3D texture coordinates. + */ + getGenerate3DTextureCoordinates(): boolean; + + /** + * Set whether to generate 3D texture coordinates. + * @param {Boolean} generate3DTextureCoordinates + */ + setGenerate3DTextureCoordinates( + generate3DTextureCoordinates: boolean + ): boolean; + + /** + * Get whether to generate the 6 main square faces. + */ + getGenerateMainFaces(): boolean; + + /** + * Set whether to generate the 6 main square faces. + * @param {Boolean} generateMainFaces + */ + setGenerateMainFaces(generateMainFaces: boolean): boolean; + + /** + * Get whether to generate the 12 edge square faces. + */ + getGenerateEdgeFaces(): boolean; + + /** + * Set whether to generate the 12 edge square faces. + * @param {Boolean} generateEdgeFaces + */ + setGenerateEdgeFaces(generateEdgeFaces: boolean): boolean; + + /** + * Get whether to generate the 8 corner triangular faces. + */ + getGenerateCornerFaces(): boolean; + + /** + * Set whether to generate the 8 corner triangular faces. + * @param {Boolean} generateCornerFaces + */ + setGenerateCornerFaces(generateCornerFaces: boolean): boolean; +} + +/** + * Method used to decorate a given object (publicAPI+model) with vtkRhombicuboctahedronSource characteristics. + * + * @param publicAPI object on which methods will be bounds (public) + * @param model object on which data structure will be bounds (protected) + * @param {IRhombicuboctahedronSourceInitialValues} [initialValues] (default: {}) + */ +export function extend( + publicAPI: object, + model: object, + initialValues?: IRhombicuboctahedronSourceInitialValues +): void; + +/** + * Method used to create a new instance of vtkRhombicuboctahedronSource. + * @param {IRhombicuboctahedronSourceInitialValues} [initialValues] for pre-setting some of its content + */ +export function newInstance( + initialValues?: IRhombicuboctahedronSourceInitialValues +): vtkRhombicuboctahedronSource; + +/** + * vtkRhombicuboctahedronSource is a source object that creates a rhombicuboctahedron. + * A rhombicuboctahedron is an Archimedean solid with 24 vertices and 26 faces: + * - 6 square faces aligned with coordinate axes + * - 12 square faces along edges + * - 8 triangular faces at corners + */ +export declare const vtkRhombicuboctahedronSource: { + newInstance: typeof newInstance; + extend: typeof extend; +}; + +export default vtkRhombicuboctahedronSource; diff --git a/packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.js b/packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.js new file mode 100644 index 0000000000..6d878e202f --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/RhombicuboctahedronSource/index.js @@ -0,0 +1,170 @@ +import macro from '@kitware/vtk.js/macros'; +import vtkCellArray from '@kitware/vtk.js/Common/Core/CellArray'; +import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; +import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; + +const MAIN_FACES = [ + 4, 0, 1, 2, 3, 4, 4, 5, 6, 7, 4, 8, 9, 10, 11, 4, 12, 13, 14, 15, 4, 16, 17, + 18, 19, 4, 20, 21, 22, 23, +]; + +const CORNER_FACES = [ + 3, 0, 16, 8, 3, 1, 9, 20, 3, 2, 23, 13, 3, 3, 12, 19, 3, 4, 17, 11, 3, 5, 10, + 21, 3, 6, 14, 22, 3, 7, 18, 15, +]; + +const EDGE_FACES = [ + 4, 0, 1, 9, 8, 4, 1, 2, 23, 20, 4, 2, 3, 12, 13, 4, 3, 0, 16, 19, 4, 4, 5, 10, + 11, 4, 5, 6, 22, 21, 4, 6, 7, 15, 14, 4, 7, 4, 17, 18, 4, 8, 11, 17, 16, 4, 9, + 20, 21, 10, 4, 13, 23, 22, 14, 4, 12, 19, 18, 15, +]; + +function vtkRhombicuboctahedronSource(publicAPI, model) { + model.classHierarchy.push('vtkRhombicuboctahedronSource'); + + publicAPI.requestData = (inData, outData) => { + const polyData = outData[0]?.initialize() || vtkPolyData.newInstance(); + outData[0] = polyData; + + let scale = 1.0; + if (model.scale !== undefined && model.scale !== null) { + if (Array.isArray(model.scale)) { + scale = model.scale[0] || 1.0; + } else if (typeof model.scale === 'number') { + scale = model.scale; + } + } + + const phi = 1.4; + // Smaller main faces (0.75 vs 0.95) make edge and corner faces easier to click + const faceSize = 0.88; + const vertices = []; + + vertices.push(-faceSize, -faceSize, -phi); + vertices.push(faceSize, -faceSize, -phi); + vertices.push(faceSize, faceSize, -phi); + vertices.push(-faceSize, faceSize, -phi); + vertices.push(-faceSize, -faceSize, phi); + vertices.push(faceSize, -faceSize, phi); + vertices.push(faceSize, faceSize, phi); + vertices.push(-faceSize, faceSize, phi); + vertices.push(-faceSize, -phi, -faceSize); + vertices.push(faceSize, -phi, -faceSize); + vertices.push(faceSize, -phi, faceSize); + vertices.push(-faceSize, -phi, faceSize); + vertices.push(-faceSize, phi, -faceSize); + vertices.push(faceSize, phi, -faceSize); + vertices.push(faceSize, phi, faceSize); + vertices.push(-faceSize, phi, faceSize); + vertices.push(-phi, -faceSize, -faceSize); + vertices.push(-phi, -faceSize, faceSize); + vertices.push(-phi, faceSize, faceSize); + vertices.push(-phi, faceSize, -faceSize); + vertices.push(phi, -faceSize, -faceSize); + vertices.push(phi, -faceSize, faceSize); + vertices.push(phi, faceSize, faceSize); + vertices.push(phi, faceSize, -faceSize); + + let textureCoords = null; + if (model.generate3DTextureCoordinates) { + textureCoords = new Float64Array(24 * 3); + + for (let i = 0; i < 24; i++) { + const vx = vertices[i * 3]; + const vy = vertices[i * 3 + 1]; + const vz = vertices[i * 3 + 2]; + const len = Math.sqrt(vx * vx + vy * vy + vz * vz) || 1; + textureCoords[i * 3] = vx / len; + textureCoords[i * 3 + 1] = vy / len; + textureCoords[i * 3 + 2] = vz / len; + } + } + + for (let i = 0; i < vertices.length; i++) { + vertices[i] *= scale; + } + + const vertexArray = Float64Array.from(vertices); + polyData.getPoints().setData(vertexArray, 3); + + const normals = new Float64Array(24 * 3); + for (let i = 0; i < 24; i++) { + const x = vertexArray[i * 3]; + const y = vertexArray[i * 3 + 1]; + const z = vertexArray[i * 3 + 2]; + const len = Math.sqrt(x * x + y * y + z * z); + normals[i * 3] = x / len; + normals[i * 3 + 1] = y / len; + normals[i * 3 + 2] = z / len; + } + + const normalArray = vtkDataArray.newInstance({ + name: 'Normals', + values: normals, + numberOfComponents: 3, + }); + polyData.getPointData().setNormals(normalArray); + + if (textureCoords) { + const tcoords = vtkDataArray.newInstance({ + name: 'TextureCoordinates', + values: textureCoords, + numberOfComponents: 3, + }); + polyData.getPointData().setTCoords(tcoords); + } + + const allFaces = []; + if (model.generateMainFaces) { + allFaces.push(...MAIN_FACES); + } + if (model.generateEdgeFaces) { + allFaces.push(...EDGE_FACES); + } + if (model.generateCornerFaces) { + allFaces.push(...CORNER_FACES); + } + + if (allFaces.length > 0) { + const polys = vtkCellArray.newInstance({ + values: Uint16Array.from(allFaces), + }); + polyData.getPolys().deepCopy(polys); + } else { + polyData.getPolys().initialize(); + } + + polyData.modified(); + }; +} + +const DEFAULT_VALUES = { + scale: 1.0, + generate3DTextureCoordinates: false, + generateMainFaces: true, + generateEdgeFaces: true, + generateCornerFaces: true, +}; + +export function extend(publicAPI, model, initialValues = {}) { + Object.assign(model, DEFAULT_VALUES, initialValues); + + macro.obj(publicAPI, model); + macro.setGet(publicAPI, model, [ + 'scale', + 'generate3DTextureCoordinates', + 'generateMainFaces', + 'generateEdgeFaces', + 'generateCornerFaces', + ]); + + macro.algo(publicAPI, model, 0, 1); + vtkRhombicuboctahedronSource(publicAPI, model); +} + +export const newInstance = macro.newInstance( + extend, + 'vtkRhombicuboctahedronSource' +); + +export default { newInstance, extend }; diff --git a/packages/tools/src/utilities/vtkjs/index.d.ts b/packages/tools/src/utilities/vtkjs/index.d.ts new file mode 100644 index 0000000000..931c89e449 --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/index.d.ts @@ -0,0 +1,2 @@ +export { default as vtkRhombicuboctahedronSource } from './RhombicuboctahedronSource'; +export { default as vtkAnnotatedRhombicuboctahedronActor } from './AnnotatedRhombicuboctahedronActor'; diff --git a/packages/tools/src/utilities/vtkjs/index.js b/packages/tools/src/utilities/vtkjs/index.js new file mode 100644 index 0000000000..664f5cecff --- /dev/null +++ b/packages/tools/src/utilities/vtkjs/index.js @@ -0,0 +1,4 @@ +import vtkRhombicuboctahedronSource from './RhombicuboctahedronSource'; +import vtkAnnotatedRhombicuboctahedronActor from './AnnotatedRhombicuboctahedronActor'; + +export { vtkRhombicuboctahedronSource, vtkAnnotatedRhombicuboctahedronActor }; From 63600a9e1594f546798831ebddab475c81616b4f Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 6 Mar 2026 14:01:48 +0000 Subject: [PATCH 41/90] chore(version): Update package versions to 4.18.5 [skip ci] --- CHANGELOG.md | 4 ++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 69 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88d2b8db14..d0db3097a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package root + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package root diff --git a/commit.txt b/commit.txt index b267994c50..738b7bb1a2 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -a1dfbd046dc77007c1a5685d8551ffea4b35f1a4 \ No newline at end of file +70f8bb122674e8a6ea0e192314e3825794915e5a \ No newline at end of file diff --git a/lerna.json b/lerna.json index 8daafae808..19e420bdc2 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.18.4", + "version": "4.18.5", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 3d8b05077f..f353ba4ba2 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 129d91daa1..82f13488ae 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.18.4", + "version": "4.18.5", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.4", - "@cornerstonejs/tools": "4.18.4" + "@cornerstonejs/core": "4.18.5", + "@cornerstonejs/tools": "4.18.5" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 6dc23993c1..dc078a6ef5 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index abb4498c0d..7fe3757319 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.18.4", + "version": "4.18.5", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.4", - "@cornerstonejs/tools": "4.18.4" + "@cornerstonejs/core": "4.18.5", + "@cornerstonejs/tools": "4.18.5" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index a00cf7dcc3..ca4ece4e34 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index e14fd10b2f..029ea51532 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.18.4", + "version": "4.18.5", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 17c4c1c5e6..34c4bd9cd8 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 112cf555b2..bacda8959f 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.18.4", + "version": "4.18.5", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.4", + "@cornerstonejs/core": "4.18.5", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 2aff48655f..3f64f8ee4d 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 5c101a64fd..5f9dd61b20 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.18.4", + "version": "4.18.5", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.4", - "@cornerstonejs/tools": "4.18.4", + "@cornerstonejs/core": "4.18.5", + "@cornerstonejs/tools": "4.18.5", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index c78c5b9393..0342d8c0aa 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index dbb3905d93..89beb9b5af 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.18.4", + "version": "4.18.5", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.4" + "@cornerstonejs/core": "4.18.5" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 619e3ca60d..19c5f926b7 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index d00183eafd..985db993bc 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.18.4", + "version": "4.18.5", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.4", - "@cornerstonejs/tools": "4.18.4", + "@cornerstonejs/core": "4.18.5", + "@cornerstonejs/tools": "4.18.5", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index c8733a2141..004c697130 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.18.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.3...v4.18.4) (2026-02-27) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 036698facb..a56f8dd54f 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.18.4", + "version": "4.18.5", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.4", + "@cornerstonejs/core": "4.18.5", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 2c021a4c8b..336bb7635b 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.4'; +export const version = '4.18.5'; diff --git a/version.json b/version.json index 8ce772b7f7..2528be399b 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.18.4", - "commit": "a1dfbd046dc77007c1a5685d8551ffea4b35f1a4" + "version": "4.18.5", + "commit": "70f8bb122674e8a6ea0e192314e3825794915e5a" } \ No newline at end of file diff --git a/version.txt b/version.txt index faaadf2020..3c6cd2e553 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.18.4 \ No newline at end of file +4.18.5 \ No newline at end of file From 3d79d3ce8c7a0332fbc794eac6672c55b56c50ec Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Tue, 10 Mar 2026 16:29:51 -0400 Subject: [PATCH 42/90] feat(segmentation): Added fallbackLabel to various segmentation state types. (#2652) --- .../segmentation/helpers/normalizeSegmentationInput.ts | 1 + packages/tools/src/types/SegmentationStateTypes.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/tools/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts b/packages/tools/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts index cfae91f50e..7570ae0a99 100644 --- a/packages/tools/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts +++ b/packages/tools/src/stateManagement/segmentation/helpers/normalizeSegmentationInput.ts @@ -38,6 +38,7 @@ function normalizeSegmentationInput( return { segmentationId, label: config?.label ?? null, + fallbackLabel: config?.fallbackLabel ?? null, cachedStats: config?.cachedStats ?? {}, segments: normalizedSegments, representationData: { diff --git a/packages/tools/src/types/SegmentationStateTypes.ts b/packages/tools/src/types/SegmentationStateTypes.ts index ca88c1b347..5f2cb2ee54 100644 --- a/packages/tools/src/types/SegmentationStateTypes.ts +++ b/packages/tools/src/types/SegmentationStateTypes.ts @@ -38,6 +38,7 @@ export type Segmentation = { segmentationId: string; /** segmentation label */ label: string; + fallbackLabel?: string; segments: { [segmentIndex: number]: Segment; }; @@ -127,6 +128,7 @@ export type SegmentationPublicInput = { [segmentIndex: number]: Partial; }; label?: string; + fallbackLabel?: string; // segmentation level stats cachedStats?: { [key: string]: unknown }; }; From 2450517d518f4767aa50cb5369082038f0a1c3ca Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 10 Mar 2026 20:33:25 +0000 Subject: [PATCH 43/90] chore(version): Update package versions to 4.19.0 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0db3097a0..3dd4d13acc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +### Features + +- **segmentation:** Added fallbackLabel to various segmentation state types. ([#2652](https://github.com/cornerstonejs/cornerstone3D/issues/2652)) ([e645369](https://github.com/cornerstonejs/cornerstone3D/commit/e6453698737ff9077c1865b90da1797a852ce438)) + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package root diff --git a/commit.txt b/commit.txt index 738b7bb1a2..b3ca97e693 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -70f8bb122674e8a6ea0e192314e3825794915e5a \ No newline at end of file +e6453698737ff9077c1865b90da1797a852ce438 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 19e420bdc2..d3664dae62 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.18.5", + "version": "4.19.0", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index f353ba4ba2..a05ea100b5 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 82f13488ae..4020919c43 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.18.5", + "version": "4.19.0", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.5", - "@cornerstonejs/tools": "4.18.5" + "@cornerstonejs/core": "4.19.0", + "@cornerstonejs/tools": "4.19.0" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index dc078a6ef5..b06525bdce 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 7fe3757319..8b3dc5ceb9 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.18.5", + "version": "4.19.0", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.5", - "@cornerstonejs/tools": "4.18.5" + "@cornerstonejs/core": "4.19.0", + "@cornerstonejs/tools": "4.19.0" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index ca4ece4e34..e8adfb8934 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 029ea51532..eb83114d17 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.18.5", + "version": "4.19.0", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 34c4bd9cd8..3bb3b93ef4 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index bacda8959f..3ae994fe77 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.18.5", + "version": "4.19.0", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.5", + "@cornerstonejs/core": "4.19.0", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 3f64f8ee4d..83646a45db 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 5f9dd61b20..7d82c53201 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.18.5", + "version": "4.19.0", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.5", - "@cornerstonejs/tools": "4.18.5", + "@cornerstonejs/core": "4.19.0", + "@cornerstonejs/tools": "4.19.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 0342d8c0aa..14a81b50e7 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 89beb9b5af..b232fc9857 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.18.5", + "version": "4.19.0", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.5" + "@cornerstonejs/core": "4.19.0" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 19c5f926b7..dcd3c1d847 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 985db993bc..a0dbd2dbd4 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.18.5", + "version": "4.19.0", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.5", - "@cornerstonejs/tools": "4.18.5", + "@cornerstonejs/core": "4.19.0", + "@cornerstonejs/tools": "4.19.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 004c697130..ee36a55972 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) + +### Features + +- **segmentation:** Added fallbackLabel to various segmentation state types. ([#2652](https://github.com/cornerstonejs/cornerstone3D/issues/2652)) ([e645369](https://github.com/cornerstonejs/cornerstone3D/commit/e6453698737ff9077c1865b90da1797a852ce438)) + ## [4.18.5](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.4...v4.18.5) (2026-03-06) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index a56f8dd54f..bb516aff00 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.18.5", + "version": "4.19.0", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.18.5", + "@cornerstonejs/core": "4.19.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 336bb7635b..d620921213 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.18.5'; +export const version = '4.19.0'; diff --git a/version.json b/version.json index 2528be399b..dfd7b41a85 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.18.5", - "commit": "70f8bb122674e8a6ea0e192314e3825794915e5a" + "version": "4.19.0", + "commit": "e6453698737ff9077c1865b90da1797a852ce438" } \ No newline at end of file diff --git a/version.txt b/version.txt index 3c6cd2e553..35e3d1bab6 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.18.5 \ No newline at end of file +4.19.0 \ No newline at end of file From d00ca7b84f68246db64687097aabcfa17b5597d3 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:45:21 -0400 Subject: [PATCH 44/90] fix(adapters): Added adapters as subtypes of PlanarFreehandROI for LivewireContour and SplineROI. (#2642) * fix: dicomsrvalidator warnings --------- Co-authored-by: Bill Wallace --- .../Cornerstone3D/ControlPointPolyline.ts | 127 ++++++++ .../src/adapters/Cornerstone3D/LabelData.ts | 270 +++++++++-------- .../Cornerstone3D/MeasurementReport.ts | 89 +++++- .../Cornerstone3D/PlanarFreehandROI.ts | 282 ++++++++++-------- .../adapters/Cornerstone3D/constants/index.ts | 12 + .../src/tools/annotation/SplineROITool.ts | 12 + 6 files changed, 535 insertions(+), 257 deletions(-) create mode 100644 packages/adapters/src/adapters/Cornerstone3D/ControlPointPolyline.ts diff --git a/packages/adapters/src/adapters/Cornerstone3D/ControlPointPolyline.ts b/packages/adapters/src/adapters/Cornerstone3D/ControlPointPolyline.ts new file mode 100644 index 0000000000..3775b99364 --- /dev/null +++ b/packages/adapters/src/adapters/Cornerstone3D/ControlPointPolyline.ts @@ -0,0 +1,127 @@ +import { utilities, sr } from 'dcmjs'; +import { CONTROL_POINTS_CODE, SPLINE_TYPE_CODE } from './constants'; +const { valueTypes } = sr; +const { Polyline: TID300Polyline } = utilities.TID300; + +/** Typed view of the dcmjs TID300Polyline instance (types not shipped by dcmjs). */ +interface TID300PolylineInstance { + props: { + controlPoints?: number[]; + use3DSpatialCoordinates?: boolean; + ReferencedSOPSequence?: unknown; + ReferencedFrameOfReferenceUID?: string; + splineType?: string; + }; + flattenPoints: (opts: { + points: number[]; + use3DSpatialCoordinates?: boolean; + }) => number[]; +} + +export default class ControlPointPolyline extends TID300Polyline { + contentItem() { + const contentEntries = super.contentItem(); + const self = this as unknown as TID300PolylineInstance; + const { + controlPoints, + use3DSpatialCoordinates, + ReferencedSOPSequence, + ReferencedFrameOfReferenceUID, + use3DSpatialCoordinates: is3DMeasurement, + } = self.props; + + if (!controlPoints?.length) { + return contentEntries; + } + + const GraphicData = self.flattenPoints({ + points: controlPoints, + use3DSpatialCoordinates, + }); + + const GraphicType = valueTypes.GraphicTypes.MULTIPOINT; + + const scoordPlain: Record = is3DMeasurement + ? { + RelationshipType: valueTypes.RelationshipTypes.CONTAINS, + ValueType: 'SCOORD3D', + ConceptNameCodeSequence: [ + { + CodeValue: CONTROL_POINTS_CODE.value, + CodingSchemeDesignator: CONTROL_POINTS_CODE.schemeDesignator, + CodeMeaning: CONTROL_POINTS_CODE.meaning, + }, + ], + GraphicType, + GraphicData, + ReferencedFrameOfReferenceUID, + ContentSequence: [ + { + RelationshipType: valueTypes.RelationshipTypes.SELECTED_FROM, + ValueType: valueTypes.ValueTypes.IMAGE, + ReferencedSOPSequence, + }, + ], + } + : { + RelationshipType: valueTypes.RelationshipTypes.CONTAINS, + ValueType: 'SCOORD', + ConceptNameCodeSequence: [ + { + CodeValue: CONTROL_POINTS_CODE.value, + CodingSchemeDesignator: CONTROL_POINTS_CODE.schemeDesignator, + CodeMeaning: CONTROL_POINTS_CODE.meaning, + }, + ], + GraphicType, + GraphicData, + ContentSequence: [ + { + RelationshipType: valueTypes.RelationshipTypes.SELECTED_FROM, + ValueType: valueTypes.ValueTypes.IMAGE, + ReferencedSOPSequence, + }, + ], + }; + + // Nest control points inside the NUM entry's ContentSequence. + // Spline Type goes as HAS OBS CONTEXT at Measurement Group level (TID 320 does not allow TEXT under NUM). + const { splineType } = self.props; + + const entries = contentEntries as Array>; + const numEntry = entries.find((e) => e.ValueType === 'NUM'); + if (numEntry) { + const inner = numEntry.ContentSequence; + const innerArray: unknown[] = Array.isArray(inner) + ? inner + : inner + ? [inner] + : []; + numEntry.ContentSequence = [...innerArray, scoordPlain]; + } else { + entries.push(scoordPlain); + } + + if (splineType) { + const splineTypeObsContext = { + RelationshipType: valueTypes.RelationshipTypes.HAS_OBS_CONTEXT, + ValueType: 'TEXT', + ConceptNameCodeSequence: { + CodeValue: SPLINE_TYPE_CODE.value, + CodingSchemeDesignator: SPLINE_TYPE_CODE.schemeDesignator, + CodeMeaning: SPLINE_TYPE_CODE.meaning, + }, + TextValue: splineType, + }; + const hasObsContextIndex = entries.findIndex( + (e) => + (e as Record).RelationshipType === + valueTypes.RelationshipTypes.HAS_OBS_CONTEXT + ); + const insertIndex = hasObsContextIndex >= 0 ? hasObsContextIndex + 2 : 2; + entries.splice(insertIndex, 0, splineTypeObsContext); + } + + return entries; + } +} diff --git a/packages/adapters/src/adapters/Cornerstone3D/LabelData.ts b/packages/adapters/src/adapters/Cornerstone3D/LabelData.ts index f18891613a..72122878d0 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/LabelData.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/LabelData.ts @@ -1,11 +1,11 @@ -import type { Types } from "@cornerstonejs/tools"; -import { COMMENT_CODE, TEXT_ANNOTATION_POSITION } from "./constants"; -import { toScoord } from "../helpers"; -import dcmjs from "dcmjs"; +import type { Types } from '@cornerstonejs/tools'; +import { COMMENT_CODE, TEXT_ANNOTATION_POSITION } from './constants'; +import { toScoord } from '../helpers'; +import dcmjs from 'dcmjs'; const { - sr: { valueTypes, coding }, - adapters: { Cornerstone3D } + sr: { valueTypes, coding }, + adapters: { Cornerstone3D }, } = dcmjs; /** @@ -17,125 +17,155 @@ const { * tagged to a private text annotation position value. */ export default class LabelData { - protected tid300Item; - protected annotation: Types.Annotation; - public ReferencedSOPSequence; - - constructor(tid300Item, annotation: Types.Annotation) { - this.tid300Item = tid300Item; - this.annotation = annotation; - this.ReferencedSOPSequence = tid300Item.ReferencedSOPSequence; + protected tid300Item; + protected annotation: Types.Annotation; + public ReferencedSOPSequence; + + constructor(tid300Item, annotation: Types.Annotation) { + this.tid300Item = tid300Item; + this.annotation = annotation; + this.ReferencedSOPSequence = tid300Item.ReferencedSOPSequence; + } + + /** + * This adds the additional information from the annotation data for + * the label data. + */ + public contentItem() { + const contentEntries = this.tid300Item.contentItem(); + this.fixScoordRelationships(contentEntries); + const { label, handles } = this.annotation.data; + + if (label) { + contentEntries.push(this.createQualitativeLabel(label)); + this.filterCornerstoneFreeText(contentEntries); } - - /** - * This adds the additional information from the annotation data for - * the label data. - */ - public contentItem() { - const contentEntries = this.tid300Item.contentItem(); - const { label, handles } = this.annotation.data; - - if (label) { - contentEntries.push(this.createQualitativeLabel(label)); - this.filterCornerstoneFreeText(contentEntries); - } - if (handles?.textBox?.hasMoved) { - contentEntries.push( - this.createQualitativeLabelPosition(this.annotation) - ); + if (handles?.textBox?.hasMoved) { + contentEntries.push(this.createQualitativeLabelPosition(this.annotation)); + } + return contentEntries; + } + + /** + * Ensure SCOORD/SCOORD3D children of NUM use INFERRED FROM (TID 320). + * Applied during content generation so output is correct from the start. + */ + protected fixScoordRelationships(contentEntries: unknown[]) { + const INFERRED_FROM = valueTypes.RelationshipTypes.INFERRED_FROM; + for (const entry of contentEntries) { + const item = entry as Record; + const contentSeq = item.ContentSequence; + const children = this.normalizeContentSequence(contentSeq); + for (const child of children) { + if ( + (child.ValueType === 'SCOORD' || child.ValueType === 'SCOORD3D') && + (child.RelationshipType === 'CONTAINS' || + child.RelationshipType === 'Contains') + ) { + child.RelationshipType = INFERRED_FROM; } - return contentEntries; + } } - - /** - * Remove the incorrect finding sites entry for the text label. - * Updated to support the new coding scheme with legacy fallback. - */ - public filterCornerstoneFreeText(contentEntries) { - const { codeValues } = Cornerstone3D.CodeScheme; - - const freeTextCodes = [ - codeValues.FREE_TEXT_CODE_VALUE, - codeValues.CORNERSTONEFREETEXT // legacy support - ]; - - for (let i = 0; i < contentEntries.length; i++) { - const group = contentEntries[i]; - if (!group.ConceptCodeSequence) { - continue; - } - - const csLabel = group.ConceptCodeSequence.findIndex(item => - freeTextCodes.includes(item.CodeValue) - ); - - if (csLabel !== -1) { - group.ConceptCodeSequence.splice(csLabel, 1); - if (group.ConceptCodeSequence.length === 0) { - contentEntries.splice(i, 1); - } - return; - } + } + + protected normalizeContentSequence( + contentSeq: unknown + ): Array> { + if (!contentSeq) return []; + if (Array.isArray(contentSeq)) + return contentSeq as Array>; + return [contentSeq as Record]; + } + + /** + * Remove the incorrect finding sites entry for the text label. + * Updated to support the new coding scheme with legacy fallback. + */ + public filterCornerstoneFreeText(contentEntries) { + const { codeValues } = Cornerstone3D.CodeScheme; + + const freeTextCodes = [ + codeValues.FREE_TEXT_CODE_VALUE, + codeValues.CORNERSTONEFREETEXT, // legacy support + ]; + + for (let i = 0; i < contentEntries.length; i++) { + const group = contentEntries[i]; + if (!group.ConceptCodeSequence) { + continue; + } + + const csLabel = group.ConceptCodeSequence.findIndex((item) => + freeTextCodes.includes(item.CodeValue) + ); + + if (csLabel !== -1) { + group.ConceptCodeSequence.splice(csLabel, 1); + if (group.ConceptCodeSequence.length === 0) { + contentEntries.splice(i, 1); } + return; + } } - - /** - * This is the standard TID.1501 method to create a qualitative label - * comment. It returns the DCM:121106 comment code with the text value - * contained within the text. This allows for comments of up to 2^32-4 - * characters - */ - public createQualitativeLabel(label: string) { - const relationshipType = valueTypes.RelationshipTypes.CONTAINS; - return new valueTypes.TextContentItem({ - name: new coding.CodedConcept(COMMENT_CODE), - relationshipType, - value: label + } + + /** + * This is the standard TID.1501 method to create a qualitative label + * comment. It returns the DCM:121106 comment code with the text value + * contained within the text. This allows for comments of up to 2^32-4 + * characters + */ + public createQualitativeLabel(label: string) { + const relationshipType = valueTypes.RelationshipTypes.CONTAINS; + return new valueTypes.TextContentItem({ + name: new coding.CodedConcept(COMMENT_CODE), + relationshipType, + value: label, + }); + } + + /** + * Creates a qualitative evaluation text label position as an SCOORD (3D) + * position labelled with the text annotation position indicator. + */ + public createQualitativeLabelPosition(annotation: Types.Annotation) { + const { textBox } = annotation.data.handles; + const { referencedImageId, FrameOfReferenceUID: frameOfReferenceUID } = + annotation.metadata; + const is3DMeasurement = !referencedImageId; + const { x, y, z } = toScoord( + { is3DMeasurement, referencedImageId }, + textBox.worldPosition + ); + + const graphicType = valueTypes.GraphicTypes.POINT; + const relationshipType = valueTypes.RelationshipTypes.CONTAINS; + const name = new coding.CodedConcept(TEXT_ANNOTATION_POSITION); + + const scoord = is3DMeasurement + ? new valueTypes.Scoord3DContentItem({ + name, + relationshipType, + graphicType, + graphicData: [x, y, z], + frameOfReferenceUID, + }) + : new valueTypes.ScoordContentItem({ + name, + relationshipType, + graphicType, + graphicData: [x, y], }); - } - /** - * Creates a qualitative evaluation text label position as an SCOORD (3D) - * position labelled with the text annotation position indicator. - */ - public createQualitativeLabelPosition(annotation: Types.Annotation) { - const { textBox } = annotation.data.handles; - const { referencedImageId, FrameOfReferenceUID: frameOfReferenceUID } = - annotation.metadata; - const is3DMeasurement = !referencedImageId; - const { x, y, z } = toScoord( - { is3DMeasurement, referencedImageId }, - textBox.worldPosition - ); - - const graphicType = valueTypes.GraphicTypes.POINT; - const relationshipType = valueTypes.RelationshipTypes.CONTAINS; - const name = new coding.CodedConcept(TEXT_ANNOTATION_POSITION); - - const scoord = is3DMeasurement - ? new valueTypes.Scoord3DContentItem({ - name, - relationshipType, - graphicType, - graphicData: [x, y, z], - frameOfReferenceUID - }) - : new valueTypes.ScoordContentItem({ - name, - relationshipType, - graphicType, - graphicData: [x, y] - }); - - // Required by TID 1501 - scoord.ContentSequence = [ - { - RelationshipType: valueTypes.RelationshipTypes.SELECTED_FROM, - ValueType: valueTypes.ValueTypes.IMAGE, - ReferencedSOPSequence: this.ReferencedSOPSequence - } - ]; - - return scoord; - } + // Required by TID 1501 + scoord.ContentSequence = [ + { + RelationshipType: valueTypes.RelationshipTypes.SELECTED_FROM, + ValueType: valueTypes.ValueTypes.IMAGE, + ReferencedSOPSequence: this.ReferencedSOPSequence, + }, + ]; + + return scoord; + } } diff --git a/packages/adapters/src/adapters/Cornerstone3D/MeasurementReport.ts b/packages/adapters/src/adapters/Cornerstone3D/MeasurementReport.ts index 02c8ed1364..3cff24d1ea 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/MeasurementReport.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/MeasurementReport.ts @@ -24,6 +24,7 @@ import { copySeriesTags } from '../helpers/copySeriesTags'; import { toPoint3 } from '../helpers/toPoint3'; import { COMMENT_CODE, + CONTROL_POINTS_CODE, metaSRAnnotation, NO_IMAGE_ID, TEXT_ANNOTATION_POSITION, @@ -54,6 +55,11 @@ const COMMENT_POSITION = { CodeValue: TEXT_ANNOTATION_POSITION.value, }; +const CONTROL_POINTS = { + CodingSchemeDesignator: CONTROL_POINTS_CODE.schemeDesignator, + CodeValue: CONTROL_POINTS_CODE.value, +}; + const FINDING_SITE = { CodingSchemeDesignator: 'SCT', CodeValue: '363698007' }; const FINDING_SITE_OLD = { CodingSchemeDesignator: 'SRT', CodeValue: 'G-C0E3' }; @@ -158,6 +164,33 @@ export interface MeasurementAdapter { ): Record; } +/** + * Returns true when a SCOORD/SCOORD3D content item is tagged with a secondary + * (i.e. non-primary) SCOORD code. + * For example, the control-points code is distinguished from the primary polyline + * SCOORD points code. + * Handles ConceptNameCodeSequence as either a plain object (parsed DICOM) + * or a single-item array (in-memory build). */ +function isSecondaryScoordGroup(group: { + ValueType?: string; + ConceptNameCodeSequence?: unknown; +}): boolean { + if (group.ValueType !== 'SCOORD' && group.ValueType !== 'SCOORD3D') { + return false; + } + const conceptNameCodeSequence = group.ConceptNameCodeSequence; + const conceptCode = Array.isArray(conceptNameCodeSequence) + ? conceptNameCodeSequence[0] + : conceptNameCodeSequence; + return ( + !!conceptCode && + (conceptCode as { CodingSchemeDesignator?: string }) + .CodingSchemeDesignator === CONTROL_POINTS.CodingSchemeDesignator && + (conceptCode as { CodeValue?: string }).CodeValue === + CONTROL_POINTS.CodeValue + ); +} + export default class MeasurementReport { public static CORNERSTONE_3D_TAG = CORNERSTONE_3D_TAG; @@ -204,7 +237,16 @@ export default class MeasurementReport { if (!ConceptNameCodeSequence) { return; } - const { CodingSchemeDesignator, CodeValue } = ConceptNameCodeSequence; + // ConceptNameCodeSequence may be a plain object or a single-item array + // depending on whether the data comes from an in-memory build or a parsed + // DICOM dataset — handle both forms. + const seq = Array.isArray(ConceptNameCodeSequence) + ? ConceptNameCodeSequence[0] + : ConceptNameCodeSequence; + if (!seq) { + return; + } + const { CodingSchemeDesignator, CodeValue } = seq; return ( (CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue) || @@ -377,12 +419,16 @@ export default class MeasurementReport { toolType, }): SpatialCoordinatesData { const contentSequenceArr = toArray(NUMGroup.ContentSequence); - const SCOORDGroup = contentSequenceArr.find( - (group) => group.ValueType === 'SCOORD' - ); - const SCOORD3DGroup = contentSequenceArr.find( - (group) => group.ValueType === 'SCOORD3D' - ); + const SCOORDGroup = + contentSequenceArr.find( + (group) => + group.ValueType === 'SCOORD' && !isSecondaryScoordGroup(group) + ) ?? contentSequenceArr.find((group) => group.ValueType === 'SCOORD'); + const SCOORD3DGroup = + contentSequenceArr.find( + (group) => + group.ValueType === 'SCOORD3D' && !isSecondaryScoordGroup(group) + ) ?? contentSequenceArr.find((group) => group.ValueType === 'SCOORD3D'); const result: SpatialCoordinatesData = (SCOORD3DGroup && @@ -412,6 +458,7 @@ export default class MeasurementReport { findingSiteGroups, commentGroup, commentPositionGroup, + controlPointsGroup, toolType, }) { const { @@ -453,6 +500,18 @@ export default class MeasurementReport { }; } + if (controlPointsGroup) { + const controlPoints = scoordToWorld( + { + is3DMeasurement: !referencedImageId, + referencedImageId, + }, + controlPointsGroup + ); + + state.annotation.data.handles.points = controlPoints; + } + state.finding = finding; state.findingSites = findingSites; state.commentGroup = commentGroup; @@ -501,13 +560,22 @@ export default class MeasurementReport { const commentPositionGroup = contentSequenceArr.find((group) => this.codeValueMatch(group, COMMENT_POSITION) ); + let controlPointsGroup = contentSequenceArr.find((group) => + this.codeValueMatch(group, CONTROL_POINTS) + ); + const NUMGroupForLookup = contentSequenceArr.find( + (group) => group.ValueType === 'NUM' + ); + if (!controlPointsGroup && NUMGroupForLookup?.ContentSequence) { + controlPointsGroup = toArray(NUMGroupForLookup.ContentSequence).find( + (item) => this.codeValueMatch(item, CONTROL_POINTS) + ); + } const findingSiteGroups = contentSequenceArr.filter((group) => this.codeValueMatch(group, FINDING_SITE, FINDING_SITE_OLD) ) || []; - const NUMGroup = contentSequenceArr.find( - (group) => group.ValueType === 'NUM' - ) || { + const NUMGroup = NUMGroupForLookup || { ContentSequence: contentSequenceArr.filter( (group) => group.ValueType === 'SCOORD' || group.ValueType === 'SCOORD3D' @@ -522,6 +590,7 @@ export default class MeasurementReport { findingSiteGroups, commentGroup, commentPositionGroup, + controlPointsGroup, toolType, }); diff --git a/packages/adapters/src/adapters/Cornerstone3D/PlanarFreehandROI.ts b/packages/adapters/src/adapters/Cornerstone3D/PlanarFreehandROI.ts index 83341d97a0..610cef5155 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/PlanarFreehandROI.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/PlanarFreehandROI.ts @@ -1,137 +1,165 @@ -import MeasurementReport from "./MeasurementReport"; -import { utilities } from "dcmjs"; -import { vec3 } from "gl-matrix"; -import BaseAdapter3D from "./BaseAdapter3D"; -import { toScoords } from "../helpers"; -import { extractAllNUMGroups, restoreAdditionalMetrics } from "./metricHandler"; - -const { Polyline: TID300Polyline } = utilities.TID300; - +import MeasurementReport from './MeasurementReport'; +import { utilities } from 'dcmjs'; +import { vec3 } from 'gl-matrix'; +import BaseAdapter3D from './BaseAdapter3D'; +import { extractAllNUMGroups, restoreAdditionalMetrics } from './metricHandler'; +import { toScoords, toArray } from '../helpers'; +import ControlPointPolyline from './ControlPointPolyline'; +import { SPLINE_TYPE_CODE } from './constants'; + +/** Contour/polyline SR logic is shared by LivewireContour, registered as a subtype. */ class PlanarFreehandROI extends BaseAdapter3D { - public static closedContourThreshold = 1e-5; + public static closedContourThreshold = 1e-5; + + static { + this.init('PlanarFreehandROI', ControlPointPolyline); + PlanarFreehandROI.registerSubType(PlanarFreehandROI, 'LivewireContour'); + PlanarFreehandROI.registerSubType(PlanarFreehandROI, 'SplineROI'); + } + + static getMeasurementData( + MeasurementGroup, + sopInstanceUIDToImageIdMap, + metadata + ) { + const { + state, + NUMGroup, + worldCoords, + referencedImageId, + ReferencedFrameNumber, + } = MeasurementReport.getSetupMeasurementData( + MeasurementGroup, + sopInstanceUIDToImageIdMap, + metadata, + this.toolType + ); + + const distanceBetweenFirstAndLastPoint = vec3.distance( + worldCoords[worldCoords.length - 1], + worldCoords[0] + ); + + let isOpenContour = true; + + // If the contour is closed, this should have been encoded as exactly the same point, so check for a very small difference. + if (distanceBetweenFirstAndLastPoint < this.closedContourThreshold) { + worldCoords.pop(); // Remove the last element which is duplicated. + + isOpenContour = false; + } - static { - this.init("PlanarFreehandROI", TID300Polyline); + // Use decoded control points when present (CONTROL_POINTS_CODE SCOORD); otherwise fallback for open contours. + let points = state.annotation.data.handles?.points ?? []; + if (isOpenContour && points.length === 0) { + points = [worldCoords[0], worldCoords[worldCoords.length - 1]]; } - static getMeasurementData( - MeasurementGroup, - sopInstanceUIDToImageIdMap, - metadata - ) { - const { - state, - NUMGroup, - worldCoords, - referencedImageId, - ReferencedFrameNumber - } = MeasurementReport.getSetupMeasurementData( - MeasurementGroup, - sopInstanceUIDToImageIdMap, - metadata, - this.toolType - ); - - const distanceBetweenFirstAndLastPoint = vec3.distance( - worldCoords[worldCoords.length - 1], - worldCoords[0] - ); - - let isOpenContour = true; - - // If the contour is closed, this should have been encoded as exactly the same point, so check for a very small difference. - if (distanceBetweenFirstAndLastPoint < this.closedContourThreshold) { - worldCoords.pop(); // Remove the last element which is duplicated. - - isOpenContour = false; - } - - const points = []; - - if (isOpenContour) { - points.push(worldCoords[0], worldCoords[worldCoords.length - 1]); - } - const referencedSOPInstanceUID = state.sopInstanceUid; - const allNUMGroups = extractAllNUMGroups( - MeasurementGroup, - referencedSOPInstanceUID - ); - const measurementNUMGroups = - allNUMGroups[referencedSOPInstanceUID] || {}; - state.annotation.data = { - ...state.annotation.data, - contour: { polyline: worldCoords, closed: !isOpenContour }, - handles: { - ...state.annotation.data.handles, - points - }, - frameNumber: ReferencedFrameNumber - }; - - if (referencedImageId) { - state.annotation.data.cachedStats = { - [`imageId:${referencedImageId}`]: { - area: NUMGroup - ? NUMGroup.MeasuredValueSequence.NumericValue - : null, - ...restoreAdditionalMetrics(measurementNUMGroups) - } - }; - } - return state; + const referencedSOPInstanceUID = state.sopInstanceUid; + const allNUMGroups = extractAllNUMGroups( + MeasurementGroup, + referencedSOPInstanceUID + ); + const measurementNUMGroups = allNUMGroups[referencedSOPInstanceUID] || {}; + const SPLINE_TYPE = { + CodingSchemeDesignator: SPLINE_TYPE_CODE.schemeDesignator, + CodeValue: SPLINE_TYPE_CODE.value, + }; + const numSeq = NUMGroup + ? toArray((NUMGroup as Record).ContentSequence) + : []; + const mgContentSeq = toArray( + (MeasurementGroup as Record).ContentSequence + ); + const splineTypeItem = + numSeq.find((item) => + MeasurementReport.codeValueMatch(item, SPLINE_TYPE) + ) ?? + mgContentSeq.find((item) => + MeasurementReport.codeValueMatch(item, SPLINE_TYPE) + ); + + state.annotation.data = { + ...state.annotation.data, + contour: { polyline: worldCoords, closed: !isOpenContour }, + handles: { + ...state.annotation.data.handles, + points, + }, + frameNumber: ReferencedFrameNumber, + ...(splineTypeItem && { + spline: { type: splineTypeItem.TextValue }, + }), + }; + + if (referencedImageId) { + state.annotation.data.cachedStats = { + [`imageId:${referencedImageId}`]: { + area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : null, + ...restoreAdditionalMetrics(measurementNUMGroups), + }, + }; } + return state; + } + + static getTID300RepresentationArguments(tool, is3DMeasurement = false) { + const { data, finding, findingSites, metadata } = tool; - static getTID300RepresentationArguments(tool, is3DMeasurement = false) { - const { data, finding, findingSites, metadata } = tool; - - const { polyline, closed } = data.contour; - const isOpenContour = closed !== true; - - const { referencedImageId } = metadata; - const scoordProps = { - is3DMeasurement, - referencedImageId - }; - - const points = toScoords(scoordProps, polyline); - - if (!isOpenContour) { - // Need to repeat the first point at the end of to have an explicitly closed contour. - const firstPoint = points[0]; - points.push(firstPoint); - } - - const { - area, - areaUnit, - modalityUnit, - perimeter, - mean, - max, - stdDev, - length - } = data.cachedStats[`imageId:${referencedImageId}`] || {}; - - return { - /** From cachedStats */ - points, - area, - areaUnit, - perimeter: perimeter ?? length, - modalityUnit, - mean, - max, - stdDev, - /** Other */ - trackingIdentifierTextValue: this.trackingIdentifierTextValue, - finding, - findingSites: findingSites || [], - ReferencedFrameOfReferenceUID: is3DMeasurement - ? metadata.FrameOfReferenceUID - : null, - use3DSpatialCoordinates: is3DMeasurement - }; + const { handles } = data; + const { polyline, closed } = data.contour; + const isOpenContour = closed !== true; + + const { referencedImageId } = metadata; + const scoordProps = { + is3DMeasurement, + referencedImageId, + }; + + const points = toScoords(scoordProps, polyline); + + if (!isOpenContour) { + // Need to repeat the first point at the end of to have an explicitly closed contour. + const firstPoint = points[0]; + points.push(firstPoint); } + + const controlPoints = + handles?.points?.length && toScoords(scoordProps, handles.points); + + const { + area, + areaUnit, + modalityUnit, + perimeter, + mean, + max, + stdDev, + length, + } = data.cachedStats[`imageId:${referencedImageId}`] || {}; + + return { + /** From cachedStats */ + points, + controlPoints, + area, + areaUnit, + perimeter: perimeter ?? length, + modalityUnit, + mean, + max, + stdDev, + /** Other */ + splineType: data.spline?.type, + trackingIdentifierTextValue: this.trackingIdentifierTextValue, + finding, + findingSites: findingSites || [], + ReferencedFrameOfReferenceUID: is3DMeasurement + ? metadata.FrameOfReferenceUID + : null, + use3DSpatialCoordinates: is3DMeasurement, + }; + } } export default PlanarFreehandROI; diff --git a/packages/adapters/src/adapters/Cornerstone3D/constants/index.ts b/packages/adapters/src/adapters/Cornerstone3D/constants/index.ts index 233480ad60..0bc3d47e08 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/constants/index.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/constants/index.ts @@ -8,6 +8,18 @@ export const TEXT_ANNOTATION_POSITION = { value: 'TextPosition', }; +export const CONTROL_POINTS_CODE = { + schemeDesignator: CS3D_DESIGNATOR, + meaning: 'Control Points', + value: 'ControlPoints', +}; + +export const SPLINE_TYPE_CODE = { + schemeDesignator: CS3D_DESIGNATOR, + meaning: 'Spline Type', + value: 'SplineType', +}; + export const COMMENT_CODE = { schemeDesignator: 'DCM', meaning: 'Comment', diff --git a/packages/tools/src/tools/annotation/SplineROITool.ts b/packages/tools/src/tools/annotation/SplineROITool.ts index 3c50d39476..624bc9920f 100644 --- a/packages/tools/src/tools/annotation/SplineROITool.ts +++ b/packages/tools/src/tools/annotation/SplineROITool.ts @@ -345,6 +345,10 @@ class SplineROITool extends ContourSegmentationBaseTool { ): boolean => { const { instance: spline } = annotation.data.spline; + if (!spline) { + return false; + } + return spline.isPointNearCurve(canvasCoords, proximity); }; @@ -793,6 +797,14 @@ class SplineROITool extends ContourSegmentationBaseTool { ) as Types.Point2[]; const { drawPreviewEnabled } = this.configuration.spline; + + // Rehydrated annotations restored from SR have type but no instance — create it lazily. + if (annotation.data.spline && !annotation.data.spline.instance) { + annotation.data.spline.instance = new (this._getSplineConfig( + annotation.data.spline.type + ).Class)(); + } + const splineType = annotation.data.spline.type; const splineConfig = this._getSplineConfig(splineType); const spline = annotation.data.spline.instance; From e937236f3da59200320dcf6f68fd103817a93974 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Thu, 12 Mar 2026 00:48:58 +0000 Subject: [PATCH 45/90] chore(version): Update package versions to 4.19.1 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 6 ++++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 75 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dd4d13acc..2f8d30b00f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +### Bug Fixes + +- **adapters:** Added adapters as subtypes of PlanarFreehandROI for LivewireContour and SplineROI. ([#2642](https://github.com/cornerstonejs/cornerstone3D/issues/2642)) ([13c6b59](https://github.com/cornerstonejs/cornerstone3D/commit/13c6b599cfeb91e5789e172d4e99aad21fb508a0)) + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) ### Features diff --git a/commit.txt b/commit.txt index b3ca97e693..d352527bb3 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -e6453698737ff9077c1865b90da1797a852ce438 \ No newline at end of file +13c6b599cfeb91e5789e172d4e99aad21fb508a0 \ No newline at end of file diff --git a/lerna.json b/lerna.json index d3664dae62..0e584efbcf 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.19.0", + "version": "4.19.1", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index a05ea100b5..8a839c0e0a 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +### Bug Fixes + +- **adapters:** Added adapters as subtypes of PlanarFreehandROI for LivewireContour and SplineROI. ([#2642](https://github.com/cornerstonejs/cornerstone3D/issues/2642)) ([13c6b59](https://github.com/cornerstonejs/cornerstone3D/commit/13c6b599cfeb91e5789e172d4e99aad21fb508a0)) + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 4020919c43..bb469136c5 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.19.0", + "version": "4.19.1", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.0", - "@cornerstonejs/tools": "4.19.0" + "@cornerstonejs/core": "4.19.1", + "@cornerstonejs/tools": "4.19.1" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index d620921213..6a53625084 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index b06525bdce..3a112e9355 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/ai + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 8b3dc5ceb9..ef8e7710fa 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.19.0", + "version": "4.19.1", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.0", - "@cornerstonejs/tools": "4.19.0" + "@cornerstonejs/core": "4.19.1", + "@cornerstonejs/tools": "4.19.1" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index d620921213..6a53625084 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index e8adfb8934..ee87d66885 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/core + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index eb83114d17..3b5f50057a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.19.0", + "version": "4.19.1", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index d620921213..6a53625084 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 3bb3b93ef4..17cff0522c 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 3ae994fe77..d316cd889a 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.19.0", + "version": "4.19.1", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.0", + "@cornerstonejs/core": "4.19.1", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index d620921213..6a53625084 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index d620921213..6a53625084 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 83646a45db..a1722b70d1 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 7d82c53201..f7f70dacf4 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.19.0", + "version": "4.19.1", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.0", - "@cornerstonejs/tools": "4.19.0", + "@cornerstonejs/core": "4.19.1", + "@cornerstonejs/tools": "4.19.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index d620921213..6a53625084 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 14a81b50e7..7269e4d507 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index b232fc9857..0d97ebbc26 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.19.0", + "version": "4.19.1", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.0" + "@cornerstonejs/core": "4.19.1" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index d620921213..6a53625084 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index dcd3c1d847..61d50e27ee 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index a0dbd2dbd4..c254f2ef9c 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.19.0", + "version": "4.19.1", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.0", - "@cornerstonejs/tools": "4.19.0", + "@cornerstonejs/core": "4.19.1", + "@cornerstonejs/tools": "4.19.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index d620921213..6a53625084 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index ee36a55972..d496e9417a 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) + +### Bug Fixes + +- **adapters:** Added adapters as subtypes of PlanarFreehandROI for LivewireContour and SplineROI. ([#2642](https://github.com/cornerstonejs/cornerstone3D/issues/2642)) ([13c6b59](https://github.com/cornerstonejs/cornerstone3D/commit/13c6b599cfeb91e5789e172d4e99aad21fb508a0)) + # [4.19.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.18.5...v4.19.0) (2026-03-10) ### Features diff --git a/packages/tools/package.json b/packages/tools/package.json index bb516aff00..b7587adc86 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.19.0", + "version": "4.19.1", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.0", + "@cornerstonejs/core": "4.19.1", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index d620921213..6a53625084 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.0'; +export const version = '4.19.1'; diff --git a/version.json b/version.json index dfd7b41a85..e61e9bf83b 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.19.0", - "commit": "e6453698737ff9077c1865b90da1797a852ce438" + "version": "4.19.1", + "commit": "13c6b599cfeb91e5789e172d4e99aad21fb508a0" } \ No newline at end of file diff --git a/version.txt b/version.txt index 35e3d1bab6..8779585193 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.19.0 \ No newline at end of file +4.19.1 \ No newline at end of file From 63941751cc08bc98cdc8b02c5a92a2cef5ba77ab Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:55:06 -0400 Subject: [PATCH 46/90] chore(release): Empty commit to trigger a release. (#2656) From 150ba68e58e6d3ea728873bcb0f6b59b0cefe898 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Thu, 12 Mar 2026 14:58:31 +0000 Subject: [PATCH 47/90] chore(version): Update package versions to 4.19.2 [skip ci] --- CHANGELOG.md | 4 ++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 69 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f8d30b00f..823a7fe882 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package root + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) ### Bug Fixes diff --git a/commit.txt b/commit.txt index d352527bb3..e5e9503282 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -13c6b599cfeb91e5789e172d4e99aad21fb508a0 \ No newline at end of file +8b9e7dc032375be719df93f1ca4c06171741708a \ No newline at end of file diff --git a/lerna.json b/lerna.json index 0e584efbcf..3195a16d85 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.19.1", + "version": "4.19.2", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 8a839c0e0a..741f588522 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) ### Bug Fixes diff --git a/packages/adapters/package.json b/packages/adapters/package.json index bb469136c5..c9988e8afd 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.19.1", + "version": "4.19.2", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.1", - "@cornerstonejs/tools": "4.19.1" + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 3a112e9355..7ee3957ef4 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index ef8e7710fa..09b95a1c62 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.19.1", + "version": "4.19.2", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.1", - "@cornerstonejs/tools": "4.19.1" + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index ee87d66885..3bf1e90c48 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 3b5f50057a..dd25c4a1fb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.19.1", + "version": "4.19.2", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 17cff0522c..8e21b1cf8e 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index d316cd889a..c1c704a123 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.19.1", + "version": "4.19.2", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.1", + "@cornerstonejs/core": "4.19.2", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index a1722b70d1..e41397bd5e 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index f7f70dacf4..0cf7b648dc 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.19.1", + "version": "4.19.2", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.1", - "@cornerstonejs/tools": "4.19.1", + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 7269e4d507..c5ede4a2ce 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 0d97ebbc26..b6afc8594e 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.19.1", + "version": "4.19.2", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.1" + "@cornerstonejs/core": "4.19.2" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 61d50e27ee..acdb752afa 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index c254f2ef9c..1dc4355636 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.19.1", + "version": "4.19.2", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.1", - "@cornerstonejs/tools": "4.19.1", + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index d496e9417a..197448a8e3 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.19.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.0...v4.19.1) (2026-03-12) ### Bug Fixes diff --git a/packages/tools/package.json b/packages/tools/package.json index b7587adc86..bb3ce35ad5 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.19.1", + "version": "4.19.2", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.1", + "@cornerstonejs/core": "4.19.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 6a53625084..15a8ff6a92 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.1'; +export const version = '4.19.2'; diff --git a/version.json b/version.json index e61e9bf83b..fffd4e5265 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.19.1", - "commit": "13c6b599cfeb91e5789e172d4e99aad21fb508a0" + "version": "4.19.2", + "commit": "8b9e7dc032375be719df93f1ca4c06171741708a" } \ No newline at end of file diff --git a/version.txt b/version.txt index 8779585193..005d7675ed 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.19.1 \ No newline at end of file +4.19.2 \ No newline at end of file From e6ee34b710eeb214cdd3756eb4b0c0e390f4f2c3 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Fri, 13 Mar 2026 13:11:45 -0400 Subject: [PATCH 48/90] fix(security): various security patches (#2658) --- .circleci/config.yml | 8 +- bun.lock | 77 ++-- package.json | 13 +- packages/docs/bun.lock | 380 ++-------------- packages/docs/package.json | 6 +- packages/docs/yarn.lock | 910 +------------------------------------ yarn.lock | 120 ++--- 7 files changed, 143 insertions(+), 1371 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9b32a3c4c4..774c61bc65 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -47,9 +47,11 @@ jobs: # Define ignored vulnerabilities with comments IGNORED_VULNS=( - "GHSA-5j98-mcp5-4vw2" # CVE-2025-64756 - CS3D's use of glob is strictly for building and CI/CD purposes - "GHSA-3ppc-4f35-3m26" # CVE-2026-26996 - CS3D's use of minimatch via glob is safe because it does NOT use the CLI - # CVE-2026-26996 - CS3D's other uses of minimatch are strictly for building and CI/CD purposes + "GHSA-5j98-mcp5-4vw2" # CVE-2025-64756 - glob is strictly for building and CI/CD purposes + "GHSA-3ppc-4f35-3m26" # CVE-2026-26996 - minimatch via itk-wasm and glob is safe because it does NOT use the CLI + # CVE-2026-26996 - minimatch via other packages are strictly for building and CI/CD purposes; no user supplied expressions are passed to minimatch + "GHSA-7r86-cg39-jmmj" # CVE-2026-27903 - minimatch same as above + "GHSA-23c5-xmqv-rm74" # CVE-2026-27904 - minimatch same as above ) # Build ignore flags diff --git a/bun.lock b/bun.lock index a390b1b915..12bcd68946 100644 --- a/bun.lock +++ b/bun.lock @@ -47,7 +47,6 @@ "clean-webpack-plugin": "4.0.0", "commander": "10.0.1", "concat": "1.0.3", - "copy-webpack-plugin": "11.0.0", "core-js": "3.41.0", "coverage-istanbul-loader": "3.0.5", "cross-env": "7.0.3", @@ -103,7 +102,7 @@ "ts-node": "10.9.2", "typescript": "5.5.4", "url-loader": "4.1.1", - "webpack": "5.105.0", + "webpack": "5.105.3", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.2", @@ -120,7 +119,7 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -129,13 +128,13 @@ "ndarray": "1.0.19", }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0", + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2", }, }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -147,13 +146,13 @@ "onnxruntime-web": "1.17.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0", + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2", }, }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -163,7 +162,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -176,48 +175,48 @@ "uuid": "9.0.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/core": "4.19.2", "dicom-parser": "1.8.21", }, }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0", + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2", "@kitware/vtk.js": "34.15.1", }, }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "nifti-reader-js": "0.6.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/core": "4.19.2", }, }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", - "@cornerstonejs/tools": "4.17.0", + "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/tools": "4.19.2", "@kitware/vtk.js": "34.15.1", }, }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.17.0", + "version": "4.19.2", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", @@ -227,7 +226,7 @@ "canvas": "3.2.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.17.0", + "@cornerstonejs/core": "4.19.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", @@ -245,11 +244,15 @@ "caniuse-lite": "1.0.30001767", "canvas": "3.2.0", "dcmjs": "0.49.4", + "flatted": "3.4.0", "lodash": "4.17.23", "node-forge": "1.3.2", "qs": "6.14.1", + "rollup": "3.30.0", + "serialize-javascript": "7.0.4", "shelljs": "0.10.0", - "tar": "7.5.9", + "svgo": "3.3.3", + "tar": "7.5.11", "tar-fs": "2.1.4", "ws": "8.18.3", }, @@ -1014,8 +1017,6 @@ "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], - "@trysound/sax": ["@trysound/sax@0.2.0", "", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="], - "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="], "@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="], @@ -1536,8 +1537,6 @@ "cookie-signature": ["cookie-signature@1.0.6", "", {}, "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="], - "copy-webpack-plugin": ["copy-webpack-plugin@11.0.0", "", { "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", "globby": "^13.1.1", "normalize-path": "^3.0.0", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ=="], - "core-js": ["core-js@3.41.0", "", {}, "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA=="], "core-js-compat": ["core-js-compat@3.41.0", "", { "dependencies": { "browserslist": "^4.24.4" } }, "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A=="], @@ -1884,7 +1883,7 @@ "flatbuffers": ["flatbuffers@1.12.0", "", {}, "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ=="], - "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], + "flatted": ["flatted@3.4.0", "", {}, "sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw=="], "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], @@ -1966,7 +1965,7 @@ "globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], - "globby": ["globby@13.2.2", "", { "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" } }, "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w=="], + "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], "globjoin": ["globjoin@0.1.4", "", {}, "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg=="], @@ -2886,8 +2885,6 @@ "rabin-rs": ["rabin-rs@2.1.0", "", {}, "sha512-5y72gAXPzIBsAMHcpxZP8eMDuDT98qMP1BqSDHRbHkJJXEgWIN1lA47LxUqzsK6jknOJtgfkQr9v+7qMlFDm6g=="], - "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], "raw-body": ["raw-body@2.5.2", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA=="], @@ -2968,7 +2965,7 @@ "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - "rollup": ["rollup@3.29.5", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w=="], + "rollup": ["rollup@3.30.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA=="], "rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], @@ -3006,7 +3003,7 @@ "send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], - "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + "serialize-javascript": ["serialize-javascript@7.0.4", "", {}, "sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg=="], "serve-index": ["serve-index@1.9.1", "", { "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" } }, "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw=="], @@ -3156,7 +3153,7 @@ "svg-tags": ["svg-tags@1.0.0", "", {}, "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA=="], - "svgo": ["svgo@3.3.2", "", { "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0" }, "bin": "./bin/svgo" }, "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw=="], + "svgo": ["svgo@3.3.3", "", { "dependencies": { "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0", "sax": "^1.5.0" }, "bin": "./bin/svgo" }, "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng=="], "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], @@ -3166,7 +3163,7 @@ "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], - "tar": ["tar@7.5.9", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg=="], + "tar": ["tar@7.5.11", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ=="], "tar-fs": ["tar-fs@2.1.4", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="], @@ -3342,7 +3339,7 @@ "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - "webpack": ["webpack@5.105.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw=="], + "webpack": ["webpack@5.105.3", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg=="], "webpack-bundle-analyzer": ["webpack-bundle-analyzer@4.10.2", "", { "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" } }, "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw=="], @@ -3354,7 +3351,7 @@ "webpack-merge": ["webpack-merge@5.8.0", "", { "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" } }, "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q=="], - "webpack-sources": ["webpack-sources@3.3.3", "", {}, "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg=="], + "webpack-sources": ["webpack-sources@3.3.4", "", {}, "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q=="], "websocket-driver": ["websocket-driver@0.7.4", "", { "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg=="], @@ -3886,8 +3883,6 @@ "glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], - "globby/slash": ["slash@4.0.0", "", {}, "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="], - "hasha/is-stream": ["is-stream@2.0.0", "", {}, "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="], "hasha/type-fest": ["type-fest@0.8.1", "", {}, "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="], @@ -4330,8 +4325,6 @@ "stylelint/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - "stylelint/globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "stylelint/meow": ["meow@10.1.5", "", { "dependencies": { "@types/minimist": "^1.2.2", "camelcase-keys": "^7.0.0", "decamelize": "^5.0.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.2", "read-pkg-up": "^8.0.0", "redent": "^4.0.0", "trim-newlines": "^4.0.2", "type-fest": "^1.2.2", "yargs-parser": "^20.2.9" } }, "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw=="], "stylelint/micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], @@ -4340,6 +4333,8 @@ "svgo/css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="], + "svgo/sax": ["sax@1.5.0", "", {}, "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA=="], + "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], "tempy/temp-dir": ["temp-dir@3.0.0", "", {}, "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw=="], @@ -4380,7 +4375,7 @@ "utif/pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], - "webpack/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "webpack/acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], "webpack/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], diff --git a/package.json b/package.json index 60d30e950d..a787a70210 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "install:update-lockfile": "yarn install && bun install --config=./bunfig.update-lockfile.toml", "install:yarn:frozen-lockfile": "echo Deprecated in favor of install:frozen && yarn install:frozen", "install:frozen": "yarn install --frozen-lockfile", - "audit": "bun audit --ignore=GHSA-5j98-mcp5-4vw2", + "audit": "bun audit --ignore=GHSA-5j98-mcp5-4vw2 --ignore=GHSA-3ppc-4f35-3m26 --ignore=GHSA-7r86-cg39-jmmj --ignore=GHSA-23c5-xmqv-rm74", "preinstall": "node preinstall.js", "prepare": "husky", "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"", @@ -109,7 +109,6 @@ "clean-webpack-plugin": "4.0.0", "commander": "10.0.1", "concat": "1.0.3", - "copy-webpack-plugin": "11.0.0", "core-js": "3.41.0", "coverage-istanbul-loader": "3.0.5", "cross-env": "7.0.3", @@ -165,7 +164,7 @@ "ts-node": "10.9.2", "typescript": "5.5.4", "url-loader": "4.1.1", - "webpack": "5.105.0", + "webpack": "5.105.3", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.2", @@ -198,7 +197,11 @@ "ws": "8.18.3", "qs": "6.14.1", "lodash": "4.17.23", - "tar": "7.5.9", - "shelljs": "0.10.0" + "tar": "7.5.11", + "shelljs": "0.10.0", + "rollup": "3.30.0", + "serialize-javascript": "7.0.4", + "svgo": "3.3.3", + "flatted": "3.4.0" } } diff --git a/packages/docs/bun.lock b/packages/docs/bun.lock index b828bc15c7..b55aa2c570 100644 --- a/packages/docs/bun.lock +++ b/packages/docs/bun.lock @@ -13,7 +13,6 @@ "@svgr/webpack": "8.1.0", "clsx": "1.1.1", "cross-env": "7.0.3", - "docusaurus-plugin-copy": "0.1.1", "docusaurus-plugin-typedoc": "1.0.5", "file-loader": "6.2.0", "hammerjs": "2.0.8", @@ -30,9 +29,7 @@ "copyfiles": "2.4.1", "esbuild-loader": "2.18.0", "glob": "10.5.0", - "karma-chrome-launcher": "3.1.0", "netlify-plugin-cache": "1.0.3", - "puppeteer": "24.27.0", "shader-loader": "1.3.1", "typedoc": "0.26.10", }, @@ -43,6 +40,7 @@ "mdast-util-to-hast": "13.2.1", "node-forge": "1.3.2", "qs": "6.14.1", + "serialize-javascript": "7.0.4", "webpack": "5.105.0", }, "packages": { @@ -502,8 +500,6 @@ "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], - "@puppeteer/browsers": ["@puppeteer/browsers@2.10.12", "", { "dependencies": { "debug": "^4.4.3", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.3", "tar-fs": "^3.1.1", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-mP9iLFZwH+FapKJLeA7/fLqOlSUwYpMwjR1P5J23qd4e7qGJwecJccJqHYrjw33jmIZYV4dtiTHPD/J+1e7cEw=="], - "@remix-run/router": ["@remix-run/router@1.16.1", "", {}, "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig=="], "@rspack/binding": ["@rspack/binding@1.3.5", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.3.5", "@rspack/binding-darwin-x64": "1.3.5", "@rspack/binding-linux-arm64-gnu": "1.3.5", "@rspack/binding-linux-arm64-musl": "1.3.5", "@rspack/binding-linux-x64-gnu": "1.3.5", "@rspack/binding-linux-x64-musl": "1.3.5", "@rspack/binding-win32-arm64-msvc": "1.3.5", "@rspack/binding-win32-ia32-msvc": "1.3.5", "@rspack/binding-win32-x64-msvc": "1.3.5" } }, "sha512-2oluCT+iBnTg0w7XfR8AmfkvgMPSuqEndzhrlHY//qgyyI04CW1lCMgsh+9wcSOUWUKYSOMCiGiVlYFtae5Lcg=="], @@ -634,8 +630,6 @@ "@szmarczak/http-timer": ["@szmarczak/http-timer@5.0.1", "", { "dependencies": { "defer-to-connect": "^2.0.1" } }, "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw=="], - "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], - "@trysound/sax": ["@trysound/sax@0.2.0", "", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="], "@types/body-parser": ["@types/body-parser@1.19.5", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg=="], @@ -730,8 +724,6 @@ "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], - "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], @@ -782,14 +774,10 @@ "address": ["address@1.2.2", "", {}, "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA=="], - "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - "ajv-errors": ["ajv-errors@1.0.1", "", { "peerDependencies": { "ajv": ">=5.0.0" } }, "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="], - "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], @@ -800,8 +788,6 @@ "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], - "ansi-colors": ["ansi-colors@3.2.4", "", {}, "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA=="], - "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], "ansi-html-community": ["ansi-html-community@0.0.8", "", { "bin": { "ansi-html": "bin/ansi-html" } }, "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw=="], @@ -812,8 +798,6 @@ "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - "aproba": ["aproba@1.2.0", "", {}, "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="], - "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -822,18 +806,12 @@ "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - "array-uniq": ["array-uniq@1.0.3", "", {}, "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q=="], - - "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], - "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], - "b4a": ["b4a@1.7.3", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q=="], - "babel-loader": ["babel-loader@9.2.1", "", { "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" }, "peerDependencies": { "@babel/core": "^7.12.0", "webpack": ">=5" } }, "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA=="], "babel-plugin-dynamic-import-node": ["babel-plugin-dynamic-import-node@2.3.3", "", { "dependencies": { "object.assign": "^4.1.0" } }, "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ=="], @@ -848,30 +826,14 @@ "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "bare-events": ["bare-events@2.8.2", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ=="], - - "bare-fs": ["bare-fs@4.5.1", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg=="], - - "bare-os": ["bare-os@3.6.2", "", {}, "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A=="], - - "bare-path": ["bare-path@3.0.0", "", { "dependencies": { "bare-os": "^3.0.1" } }, "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw=="], - - "bare-stream": ["bare-stream@2.7.0", "", { "dependencies": { "streamx": "^2.21.0" }, "peerDependencies": { "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-buffer", "bare-events"] }, "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A=="], - - "bare-url": ["bare-url@2.3.2", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.9.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg=="], - "basic-ftp": ["basic-ftp@5.0.5", "", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], - "batch": ["batch@0.6.1", "", {}, "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="], "big.js": ["big.js@5.2.2", "", {}, "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="], "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], - "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], - "body-parser": ["body-parser@1.20.3", "", { "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } }, "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g=="], "bonjour-service": ["bonjour-service@1.3.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA=="], @@ -886,14 +848,10 @@ "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], - "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], - "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], "bytes": ["bytes@3.0.0", "", {}, "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="], - "cacache": ["cacache@12.0.4", "", { "dependencies": { "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", "glob": "^7.1.4", "graceful-fs": "^4.1.15", "infer-owner": "^1.0.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", "rimraf": "^2.6.3", "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" } }, "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ=="], - "cacheable-lookup": ["cacheable-lookup@7.0.0", "", {}, "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="], "cacheable-request": ["cacheable-request@10.2.14", "", { "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", "http-cache-semantics": "^4.1.1", "keyv": "^4.5.3", "mimic-response": "^4.0.0", "normalize-url": "^8.0.0", "responselike": "^3.0.0" } }, "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ=="], @@ -934,12 +892,8 @@ "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], - "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], - "chromium-bidi": ["chromium-bidi@10.5.1", "", { "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-rlj6OyhKhVTnk4aENcUme3Jl9h+cq4oXu4AzBcvr8RMmT6BR4a3zSNT9dbIfXr9/BS6ibzRyDhowuw4n2GgzsQ=="], - "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], @@ -974,16 +928,12 @@ "common-path-prefix": ["common-path-prefix@3.0.0", "", {}, "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="], - "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], - "compressible": ["compressible@2.0.18", "", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="], "compression": ["compression@1.8.0", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.0.2", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA=="], "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "concat-stream": ["concat-stream@1.6.2", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="], - "config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="], "configstore": ["configstore@6.0.0", "", { "dependencies": { "dot-prop": "^6.0.1", "graceful-fs": "^4.2.6", "unique-string": "^3.0.0", "write-file-atomic": "^3.0.3", "xdg-basedir": "^5.0.1" } }, "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA=="], @@ -1002,11 +952,9 @@ "cookie-signature": ["cookie-signature@1.0.6", "", {}, "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="], - "copy-concurrently": ["copy-concurrently@1.0.5", "", { "dependencies": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", "iferr": "^0.1.5", "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" } }, "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A=="], - "copy-text-to-clipboard": ["copy-text-to-clipboard@3.2.0", "", {}, "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q=="], - "copy-webpack-plugin": ["copy-webpack-plugin@5.1.2", "", { "dependencies": { "cacache": "^12.0.3", "find-cache-dir": "^2.1.0", "glob-parent": "^3.1.0", "globby": "^7.1.1", "is-glob": "^4.0.1", "loader-utils": "^1.2.3", "minimatch": "^3.0.4", "normalize-path": "^3.0.0", "p-limit": "^2.2.1", "schema-utils": "^1.0.0", "serialize-javascript": "^4.0.0", "webpack-log": "^2.0.0" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ=="], + "copy-webpack-plugin": ["copy-webpack-plugin@11.0.0", "", { "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", "globby": "^13.1.1", "normalize-path": "^3.0.0", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ=="], "copyfiles": ["copyfiles@2.4.1", "", { "dependencies": { "glob": "^7.0.5", "minimatch": "^3.0.3", "mkdirp": "^1.0.4", "noms": "0.0.0", "through2": "^2.0.1", "untildify": "^4.0.0", "yargs": "^16.1.0" }, "bin": { "copyfiles": "copyfiles", "copyup": "copyfiles" } }, "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg=="], @@ -1018,7 +966,7 @@ "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], - "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="], + "cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], "cross-env": ["cross-env@7.0.3", "", { "dependencies": { "cross-spawn": "^7.0.1" }, "bin": { "cross-env": "src/bin/cross-env.js", "cross-env-shell": "src/bin/cross-env-shell.js" } }, "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw=="], @@ -1060,13 +1008,9 @@ "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], - "cyclist": ["cyclist@1.0.2", "", {}, "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA=="], - - "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="], - "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "decode-named-character-reference": ["decode-named-character-reference@1.1.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w=="], @@ -1086,8 +1030,6 @@ "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], - "del": ["del@6.1.1", "", { "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", "is-glob": "^4.0.1", "is-path-cwd": "^2.2.0", "is-path-inside": "^3.0.2", "p-map": "^4.0.0", "rimraf": "^3.0.2", "slash": "^3.0.0" } }, "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg=="], "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], @@ -1106,14 +1048,10 @@ "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "devtools-protocol": ["devtools-protocol@0.0.1521046", "", {}, "sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w=="], - "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], "dns-packet": ["dns-packet@5.6.1", "", { "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw=="], - "docusaurus-plugin-copy": ["docusaurus-plugin-copy@0.1.1", "", { "dependencies": { "copy-webpack-plugin": "^5.1.1" }, "peerDependencies": { "@docusaurus/core": "^2.0.0" } }, "sha512-alCwO+EtNehA4oeGS+F7bwJXLvG5MwnFgCGkfF3OKRaJ20iZdlASIhz2YVcj4FOg9J+2lppc0D6D01fxP9liKg=="], - "docusaurus-plugin-typedoc": ["docusaurus-plugin-typedoc@1.0.5", "", { "peerDependencies": { "typedoc-plugin-markdown": ">=4.0.0" } }, "sha512-mv8LBJYilGOOPLqaIM3vbYc34m4qwOCpb4WfP24DOPFNj2uiTerw8sg9MGvN6Jx2+J8rq9/WMnjcyz3UMqoIIQ=="], "dom-converter": ["dom-converter@0.2.0", "", { "dependencies": { "utila": "~0.4" } }, "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA=="], @@ -1134,8 +1072,6 @@ "duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], - "duplexify": ["duplexify@3.7.1", "", { "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g=="], - "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], @@ -1154,14 +1090,10 @@ "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], - "enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="], "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], @@ -1228,8 +1160,6 @@ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], - "eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], @@ -1266,8 +1196,6 @@ "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "events-universal": ["events-universal@1.0.1", "", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="], - "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "express": ["express@4.21.2", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.19.0", "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA=="], @@ -1276,12 +1204,8 @@ "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], - "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], @@ -1294,12 +1218,8 @@ "faye-websocket": ["faye-websocket@0.11.4", "", { "dependencies": { "websocket-driver": ">=0.5.1" } }, "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g=="], - "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], - "feed": ["feed@4.2.2", "", { "dependencies": { "xml-js": "^1.6.11" } }, "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ=="], - "figgy-pudding": ["figgy-pudding@3.5.2", "", {}, "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="], - "figures": ["figures@3.2.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="], "file-loader": ["file-loader@6.2.0", "", { "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw=="], @@ -1310,7 +1230,7 @@ "finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], - "find-cache-dir": ["find-cache-dir@2.1.0", "", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ=="], + "find-cache-dir": ["find-cache-dir@4.0.0", "", { "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" } }, "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], @@ -1318,8 +1238,6 @@ "flat": ["flat@5.0.2", "", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], - "flush-write-stream": ["flush-write-stream@1.1.1", "", { "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w=="], - "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], @@ -1336,14 +1254,10 @@ "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], - "from2": ["from2@2.3.0", "", { "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g=="], - "fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], "fs-monkey": ["fs-monkey@1.0.6", "", {}, "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg=="], - "fs-write-stream-atomic": ["fs-write-stream-atomic@1.0.10", "", { "dependencies": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", "imurmurhash": "^0.1.4", "readable-stream": "1 || 2" } }, "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA=="], - "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], @@ -1360,9 +1274,7 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], - - "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="], + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "github-slugger": ["github-slugger@1.5.0", "", {}, "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw=="], @@ -1456,22 +1368,16 @@ "http-proxy": ["http-proxy@1.18.1", "", { "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ=="], - "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - "http-proxy-middleware": ["http-proxy-middleware@2.0.9", "", { "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" }, "peerDependencies": { "@types/express": "^4.17.13" }, "optionalPeers": ["@types/express"] }, "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q=="], "http2-wrapper": ["http2-wrapper@2.2.1", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" } }, "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ=="], - "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], - "iferr": ["iferr@0.1.5", "", {}, "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA=="], - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "image-size": ["image-size@1.2.1", "", { "dependencies": { "queue": "6.0.2" }, "bin": { "image-size": "bin/image-size.js" } }, "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw=="], @@ -1486,8 +1392,6 @@ "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], - "infer-owner": ["infer-owner@1.0.4", "", {}, "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="], - "infima": ["infima@0.2.0-alpha.45", "", {}, "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw=="], "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], @@ -1502,8 +1406,6 @@ "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], - "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], - "ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], @@ -1598,8 +1500,6 @@ "jsonify": ["jsonify@0.0.1", "", {}, "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg=="], - "karma-chrome-launcher": ["karma-chrome-launcher@3.1.0", "", { "dependencies": { "which": "^1.2.1" } }, "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg=="], - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], @@ -1668,8 +1568,6 @@ "lunr": ["lunr@2.3.9", "", {}, "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="], - "make-dir": ["make-dir@2.1.0", "", { "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA=="], - "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], "markdown-it": ["markdown-it@14.1.0", "", { "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg=="], @@ -1826,14 +1724,8 @@ "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "mississippi": ["mississippi@3.0.0", "", { "dependencies": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", "end-of-stream": "^1.1.0", "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" } }, "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA=="], - - "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], - "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], - "move-concurrently": ["move-concurrently@1.0.1", "", { "dependencies": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", "fs-write-stream-atomic": "^1.0.8", "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.3" } }, "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ=="], - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1848,8 +1740,6 @@ "netlify-plugin-cache": ["netlify-plugin-cache@1.0.3", "", {}, "sha512-CTOwNWrTOP59T6y6unxQNnp1WX702v2R/faR5peSH94ebrYfyY4zT5IsRcIiHKq57jXeyCrhy0GLuTN8ktzuQg=="], - "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], - "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], "node-emoji": ["node-emoji@2.2.0", "", { "dependencies": { "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", "emojilib": "^2.4.0", "skin-tone": "^2.0.0" } }, "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw=="], @@ -1902,7 +1792,7 @@ "p-cancelable": ["p-cancelable@3.0.0", "", {}, "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw=="], - "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], @@ -1912,16 +1802,10 @@ "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], - "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="], - - "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="], - "package-json": ["package-json@8.1.1", "", { "dependencies": { "got": "^12.1.0", "registry-auth-token": "^5.0.1", "registry-url": "^6.0.0", "semver": "^7.3.7" } }, "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA=="], "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], - "parallel-transform": ["parallel-transform@1.2.0", "", { "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } }, "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg=="], - "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], @@ -1942,8 +1826,6 @@ "patch-package": ["patch-package@8.0.0", "", { "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", "ci-info": "^3.7.0", "cross-spawn": "^7.0.3", "find-yarn-workspace-root": "^2.0.0", "fs-extra": "^9.0.0", "json-stable-stringify": "^1.0.2", "klaw-sync": "^6.0.0", "minimist": "^1.2.6", "open": "^7.4.2", "rimraf": "^2.6.3", "semver": "^7.5.3", "slash": "^2.0.0", "tmp": "^0.0.33", "yaml": "^2.2.2" }, "bin": { "patch-package": "index.js" } }, "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA=="], - "path-dirname": ["path-dirname@1.0.2", "", {}, "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q=="], - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], @@ -1960,15 +1842,11 @@ "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], - "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], - - "pkg-dir": ["pkg-dir@3.0.0", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw=="], + "pkg-dir": ["pkg-dir@7.0.0", "", { "dependencies": { "find-up": "^6.3.0" } }, "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA=="], "pkg-up": ["pkg-up@3.1.0", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="], @@ -2114,10 +1992,6 @@ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], - "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], - - "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], - "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], @@ -2128,24 +2002,12 @@ "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "proxy-agent": ["proxy-agent@6.5.0", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="], - - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - - "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], - - "pumpify": ["pumpify@1.5.1", "", { "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } }, "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], "pupa": ["pupa@3.1.0", "", { "dependencies": { "escape-goat": "^4.0.0" } }, "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug=="], - "puppeteer": ["puppeteer@24.27.0", "", { "dependencies": { "@puppeteer/browsers": "2.10.12", "chromium-bidi": "10.5.1", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1521046", "puppeteer-core": "24.27.0", "typed-query-selector": "^2.12.0" }, "bin": { "puppeteer": "lib/cjs/puppeteer/node/cli.js" } }, "sha512-eEcAFGxmHRSrk74DVkFAMAwfj4l3Ak8avBuA2bZaAoocY1+Fb9WLS3I7jlOc/tIOU7EmGLiDdVP08R44wADpHw=="], - - "puppeteer-core": ["puppeteer-core@24.27.0", "", { "dependencies": { "@puppeteer/browsers": "2.10.12", "chromium-bidi": "10.5.1", "debug": "^4.4.3", "devtools-protocol": "0.0.1521046", "typed-query-selector": "^2.12.0", "webdriver-bidi-protocol": "0.3.8", "ws": "^8.18.3" } }, "sha512-yubwj2XXmTM3wRIpbhO5nCjbByPgpFHlgrsD4IK+gMPqO7/a5FfnoSXDKjmqi8A2M1Ewusz0rTI/r+IN0GU0MA=="], - "qs": ["qs@6.14.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ=="], "queue": ["queue@6.0.2", "", { "dependencies": { "inherits": "~2.0.3" } }, "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA=="], @@ -2154,8 +2016,6 @@ "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], - "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - "range-parser": ["range-parser@1.2.0", "", {}, "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A=="], "raw-body": ["raw-body@2.5.2", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA=="], @@ -2288,8 +2148,6 @@ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "run-queue": ["run-queue@1.0.3", "", { "dependencies": { "aproba": "^1.1.1" } }, "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg=="], - "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], @@ -2314,7 +2172,7 @@ "send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], - "serialize-javascript": ["serialize-javascript@4.0.0", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw=="], + "serialize-javascript": ["serialize-javascript@7.0.4", "", {}, "sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg=="], "serve-handler": ["serve-handler@6.1.6", "", { "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", "minimatch": "3.1.2", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ=="], @@ -2362,16 +2220,10 @@ "slash": ["slash@2.0.0", "", {}, "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="], - "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], - "snake-case": ["snake-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg=="], "sockjs": ["sockjs@0.3.24", "", { "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ=="], - "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], - - "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], - "sort-css-media-queries": ["sort-css-media-queries@2.2.0", "", {}, "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA=="], "source-list-map": ["source-list-map@2.0.1", "", {}, "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="], @@ -2392,18 +2244,10 @@ "srcset": ["srcset@4.0.0", "", {}, "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw=="], - "ssri": ["ssri@6.0.2", "", { "dependencies": { "figgy-pudding": "^3.5.1" } }, "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q=="], - "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], - "stream-each": ["stream-each@1.2.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" } }, "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw=="], - - "stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="], - - "streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -2442,16 +2286,10 @@ "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], - "tar-fs": ["tar-fs@3.1.1", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg=="], - - "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], - "terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], "terser-webpack-plugin": ["terser-webpack-plugin@5.3.16", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q=="], - "text-decoder": ["text-decoder@1.2.3", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA=="], - "text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="], "through2": ["through2@2.0.5", "", { "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="], @@ -2480,10 +2318,6 @@ "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], - "typed-query-selector": ["typed-query-selector@2.12.0", "", {}, "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg=="], - - "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], - "typedarray-to-buffer": ["typedarray-to-buffer@3.1.5", "", { "dependencies": { "is-typedarray": "^1.0.0" } }, "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q=="], "typedoc": ["typedoc@0.26.10", "", { "dependencies": { "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", "shiki": "^1.16.2", "yaml": "^2.5.1" }, "peerDependencies": { "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x" }, "bin": { "typedoc": "bin/typedoc" } }, "sha512-xLmVKJ8S21t+JeuQLNueebEuTVphx6IrP06CdV7+0WVflUSW3SPmR+h1fnWVdAR/FQePEgsSWCUHXqKKjzuUAw=="], @@ -2508,10 +2342,6 @@ "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - "unique-filename": ["unique-filename@1.1.1", "", { "dependencies": { "unique-slug": "^2.0.0" } }, "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="], - - "unique-slug": ["unique-slug@2.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="], - "unique-string": ["unique-string@3.0.0", "", { "dependencies": { "crypto-random-string": "^4.0.0" } }, "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ=="], "unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], @@ -2566,8 +2396,6 @@ "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - "webdriver-bidi-protocol": ["webdriver-bidi-protocol@0.3.8", "", {}, "sha512-21Yi2GhGntMc671vNBCjiAeEVknXjVRoyu+k+9xOMShu+ZQfpGQwnBqbNz/Sv4GXZ6JmutlPAi2nIJcrymAWuQ=="], - "webpack": ["webpack@5.105.0", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.15.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.19.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.16", "watchpack": "^2.5.1", "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw=="], "webpack-bundle-analyzer": ["webpack-bundle-analyzer@4.10.2", "", { "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" } }, "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw=="], @@ -2576,8 +2404,6 @@ "webpack-dev-server": ["webpack-dev-server@4.15.2", "", { "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", "@types/express": "^4.17.13", "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", "rimraf": "^3.0.2", "schema-utils": "^4.0.0", "selfsigned": "^2.1.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^5.3.4", "ws": "^8.13.0" }, "peerDependencies": { "webpack": "^4.37.0 || ^5.0.0" }, "optionalPeers": ["webpack"], "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" } }, "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g=="], - "webpack-log": ["webpack-log@2.0.0", "", { "dependencies": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" } }, "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg=="], - "webpack-merge": ["webpack-merge@6.0.1", "", { "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", "wildcard": "^2.0.1" } }, "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg=="], "webpack-sources": ["webpack-sources@2.3.1", "", { "dependencies": { "source-list-map": "^2.0.1", "source-map": "^0.6.1" } }, "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA=="], @@ -2588,7 +2414,7 @@ "websocket-extensions": ["websocket-extensions@0.1.4", "", {}, "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="], - "which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "widest-line": ["widest-line@4.0.1", "", { "dependencies": { "string-width": "^5.0.1" } }, "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig=="], @@ -2602,7 +2428,7 @@ "write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], - "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + "ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], "xdg-basedir": ["xdg-basedir@5.1.0", "", {}, "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ=="], @@ -2620,12 +2446,8 @@ "yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], - "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], "@algolia/client-abtesting/@algolia/client-common": ["@algolia/client-common@5.23.4", "", {}, "sha512-bsj0lwU2ytiWLtl7sPunr+oLe+0YJql9FozJln5BnIiqfKOaseSDdV42060vUy+D4373f2XBI009K/rm2IXYMA=="], @@ -2660,8 +2482,6 @@ "@algolia/requester-fetch/@algolia/client-common": ["@algolia/client-common@5.23.4", "", {}, "sha512-bsj0lwU2ytiWLtl7sPunr+oLe+0YJql9FozJln5BnIiqfKOaseSDdV42060vUy+D4373f2XBI009K/rm2IXYMA=="], - "@babel/core/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -2672,18 +2492,12 @@ "@babel/helper-create-regexp-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/helper-define-polyfill-provider/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "@babel/plugin-transform-runtime/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/preset-env/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/traverse/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "@docsearch/react/algoliasearch": ["algoliasearch@5.23.4", "", { "dependencies": { "@algolia/client-abtesting": "5.23.4", "@algolia/client-analytics": "5.23.4", "@algolia/client-common": "5.23.4", "@algolia/client-insights": "5.23.4", "@algolia/client-personalization": "5.23.4", "@algolia/client-query-suggestions": "5.23.4", "@algolia/client-search": "5.23.4", "@algolia/ingestion": "1.23.4", "@algolia/monitoring": "1.23.4", "@algolia/recommend": "5.23.4", "@algolia/requester-browser-xhr": "5.23.4", "@algolia/requester-fetch": "5.23.4", "@algolia/requester-node-http": "5.23.4" } }, "sha512-QzAKFHl3fm53s44VHrTdEo0TkpL3XVUYQpnZy1r6/EHvMAyIg+O4hwprzlsNmcCHTNyVcF2S13DAUn7XhkC6qg=="], - "@docusaurus/bundler/copy-webpack-plugin": ["copy-webpack-plugin@11.0.0", "", { "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", "globby": "^13.1.1", "normalize-path": "^3.0.0", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ=="], - "@docusaurus/bundler/terser-webpack-plugin": ["terser-webpack-plugin@5.3.14", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw=="], "@docusaurus/core/react-router-dom": ["react-router-dom@5.3.4", "", { "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, "peerDependencies": { "react": ">=15" } }, "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ=="], @@ -2710,14 +2524,6 @@ "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], - "@puppeteer/browsers/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], - - "@puppeteer/browsers/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - - "@svgr/core/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - - "@svgr/plugin-svgo/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - "@types/eslint/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], "@types/eslint-scope/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], @@ -2732,8 +2538,6 @@ "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], - "babel-loader/find-cache-dir": ["find-cache-dir@4.0.0", "", { "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" } }, "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg=="], - "babel-loader/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -2744,16 +2548,6 @@ "boxen/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "cacache/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "cacache/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - - "cacache/mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], - - "cacache/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], - - "cacheable-request/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "compression/bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -2762,30 +2556,20 @@ "compression/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "concat-stream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - - "copy-concurrently/mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + "copy-webpack-plugin/glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - "copy-webpack-plugin/glob-parent": ["glob-parent@3.1.0", "", { "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" } }, "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA=="], + "copy-webpack-plugin/globby": ["globby@13.2.2", "", { "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" } }, "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w=="], - "copy-webpack-plugin/globby": ["globby@7.1.1", "", { "dependencies": { "array-union": "^1.0.1", "dir-glob": "^2.0.0", "glob": "^7.1.2", "ignore": "^3.3.5", "pify": "^3.0.0", "slash": "^1.0.0" } }, "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g=="], - - "copy-webpack-plugin/loader-utils": ["loader-utils@1.4.2", "", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^1.0.1" } }, "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg=="], - - "copy-webpack-plugin/schema-utils": ["schema-utils@1.0.0", "", { "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } }, "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g=="], + "copy-webpack-plugin/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], "copyfiles/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "crypto-random-string/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="], "css-minimizer-webpack-plugin/jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], "css-minimizer-webpack-plugin/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], - "css-minimizer-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], - "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], "decompress-response/mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], @@ -2794,20 +2578,14 @@ "del/slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], - "detect-port/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "detect-port-alt/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "dot-prop/is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], - "duplexify/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "enhanced-resolve/tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], "esast-util-from-js/acorn": ["acorn@8.14.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="], - "escodegen/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], "estree-util-attach-comments/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], @@ -2820,8 +2598,6 @@ "estree-walker/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], - "execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - "execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "express/content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], @@ -2834,14 +2610,10 @@ "express/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "extract-zip/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - "flush-write-stream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "fork-ts-checker-webpack-plugin/cosmiconfig": ["cosmiconfig@6.0.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.1.0", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.7.2" } }, "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg=="], "fork-ts-checker-webpack-plugin/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], @@ -2852,20 +2624,16 @@ "fork-ts-checker-webpack-plugin/tapable": ["tapable@1.1.3", "", {}, "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="], - "from2/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - - "fs-write-stream-atomic/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], "global-dirs/ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], + "global-prefix/which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="], + "globby/slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], "got/@sindresorhus/is": ["@sindresorhus/is@5.6.0", "", {}, "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g=="], - "got/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - "gray-matter/js-yaml": ["js-yaml@3.14.0", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A=="], "hast-util-to-estree/@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], @@ -2884,10 +2652,6 @@ "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "make-dir/pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], - - "make-dir/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "mdast-util-from-markdown/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], @@ -2898,8 +2662,6 @@ "mdast-util-gfm-table/markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], - "micromark/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "micromark/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], "micromark/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], @@ -3028,19 +2790,13 @@ "mini-css-extract-plugin/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], - "move-concurrently/mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], - - "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - - "parallel-transform/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], "patch-package/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], "path-to-regexp/isarray": ["isarray@0.0.1", "", {}, "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="], - "pkg-dir/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], + "pkg-dir/find-up": ["find-up@6.3.0", "", { "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" } }, "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw=="], "pkg-up/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], @@ -3048,8 +2804,6 @@ "postcss-discard-unused/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - "postcss-loader/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - "postcss-merge-rules/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], "postcss-minify-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], @@ -3060,12 +2814,6 @@ "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - "proxy-agent/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], - - "pumpify/pump": ["pump@2.0.1", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA=="], - - "randombytes/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "raw-body/bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], @@ -3114,10 +2862,6 @@ "sitemap/@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], - "spdy/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - - "spdy-transport/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], - "spdy-transport/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "stylehacks/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], @@ -3130,8 +2874,6 @@ "terser-webpack-plugin/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], - "terser-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], - "through2/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "typedoc/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3152,8 +2894,6 @@ "webpack-bundle-analyzer/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - "webpack-bundle-analyzer/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], - "webpack-dev-middleware/range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], "webpack-dev-middleware/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], @@ -3166,8 +2906,6 @@ "webpack-dev-server/ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], - "webpack-log/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], - "webpackbar/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "websocket-driver/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], @@ -3196,30 +2934,14 @@ "@docsearch/react/algoliasearch/@algolia/requester-node-http": ["@algolia/requester-node-http@5.23.4", "", { "dependencies": { "@algolia/client-common": "5.23.4" } }, "sha512-jXGzGBRUS0oywQwnaCA6mMDJO7LoC3dYSLsyNfIqxDR4SNGLhtg3je0Y31lc24OA4nYyKAYgVLtjfrpcpsWShg=="], - "@docusaurus/bundler/copy-webpack-plugin/glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - - "@docusaurus/bundler/copy-webpack-plugin/globby": ["globby@13.2.2", "", { "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" } }, "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w=="], - - "@docusaurus/bundler/copy-webpack-plugin/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], - - "@docusaurus/bundler/copy-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], - "@docusaurus/bundler/terser-webpack-plugin/schema-utils": ["schema-utils@4.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g=="], - "@docusaurus/bundler/terser-webpack-plugin/serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], - "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "@puppeteer/browsers/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - - "@puppeteer/browsers/yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "babel-loader/find-cache-dir/pkg-dir": ["pkg-dir@7.0.0", "", { "dependencies": { "find-up": "^6.3.0" } }, "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA=="], - "babel-loader/schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "babel-loader/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], @@ -3232,23 +2954,11 @@ "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "concat-stream/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - - "concat-stream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - - "copy-webpack-plugin/glob-parent/is-glob": ["is-glob@3.1.0", "", { "dependencies": { "is-extglob": "^2.1.0" } }, "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw=="], - - "copy-webpack-plugin/globby/array-union": ["array-union@1.0.2", "", { "dependencies": { "array-uniq": "^1.0.1" } }, "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng=="], - - "copy-webpack-plugin/globby/dir-glob": ["dir-glob@2.2.2", "", { "dependencies": { "path-type": "^3.0.0" } }, "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw=="], + "copy-webpack-plugin/globby/slash": ["slash@4.0.0", "", {}, "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="], - "copy-webpack-plugin/globby/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "copy-webpack-plugin/schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - "copy-webpack-plugin/globby/ignore": ["ignore@3.3.10", "", {}, "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="], - - "copy-webpack-plugin/globby/slash": ["slash@1.0.0", "", {}, "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg=="], - - "copy-webpack-plugin/loader-utils/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "copy-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], "css-minimizer-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], @@ -3262,28 +2972,12 @@ "detect-port-alt/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "duplexify/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - - "duplexify/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "flush-write-stream/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - - "flush-write-stream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "fork-ts-checker-webpack-plugin/cosmiconfig/yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="], - "from2/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - - "from2/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - - "fs-write-stream-atomic/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - - "fs-write-stream-atomic/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], @@ -3300,11 +2994,9 @@ "mini-css-extract-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - "parallel-transform/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + "pkg-dir/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], - "parallel-transform/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - - "pkg-dir/find-up/locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], + "pkg-dir/find-up/path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], "pkg-up/find-up/locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], @@ -3380,33 +3072,21 @@ "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "@docusaurus/bundler/copy-webpack-plugin/globby/slash": ["slash@4.0.0", "", {}, "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="], - - "@docusaurus/bundler/copy-webpack-plugin/schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - - "@docusaurus/bundler/copy-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - "@docusaurus/bundler/terser-webpack-plugin/schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "@docusaurus/bundler/terser-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - "@puppeteer/browsers/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "babel-loader/find-cache-dir/pkg-dir/find-up": ["find-up@6.3.0", "", { "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" } }, "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw=="], - "babel-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "boxen/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "copy-webpack-plugin/globby/dir-glob/path-type": ["path-type@3.0.0", "", { "dependencies": { "pify": "^3.0.0" } }, "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg=="], + "copy-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "css-minimizer-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "mini-css-extract-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "pkg-dir/find-up/locate-path/p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], - - "pkg-dir/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], + "pkg-dir/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], "pkg-up/find-up/locate-path/p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], @@ -3432,22 +3112,16 @@ "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "@docusaurus/bundler/copy-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "@docusaurus/bundler/terser-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "babel-loader/find-cache-dir/pkg-dir/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], + "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - "babel-loader/find-cache-dir/pkg-dir/find-up/path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], + "pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "renderkid/css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], "update-notifier/boxen/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], - "babel-loader/find-cache-dir/pkg-dir/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], - - "babel-loader/find-cache-dir/pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - - "babel-loader/find-cache-dir/pkg-dir/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.2.1", "", {}, "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg=="], + "pkg-dir/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.2.1", "", {}, "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg=="], } } diff --git a/packages/docs/package.json b/packages/docs/package.json index c354aaa13d..652a5fc967 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -48,7 +48,6 @@ "@svgr/webpack": "8.1.0", "clsx": "1.1.1", "cross-env": "7.0.3", - "docusaurus-plugin-copy": "0.1.1", "docusaurus-plugin-typedoc": "1.0.5", "file-loader": "6.2.0", "hammerjs": "2.0.8", @@ -77,9 +76,7 @@ "copyfiles": "2.4.1", "esbuild-loader": "2.18.0", "glob": "10.5.0", - "karma-chrome-launcher": "3.1.0", "netlify-plugin-cache": "1.0.3", - "puppeteer": "24.27.0", "shader-loader": "1.3.1", "typedoc": "0.26.10" }, @@ -88,6 +85,7 @@ "qs": "6.14.1", "mdast-util-to-hast": "13.2.1", "lodash": "4.17.23", - "webpack": "5.105.0" + "webpack": "5.105.0", + "serialize-javascript": "7.0.4" } } diff --git a/packages/docs/yarn.lock b/packages/docs/yarn.lock index e18f6a67e2..b3f6ca12d7 100644 --- a/packages/docs/yarn.lock +++ b/packages/docs/yarn.lock @@ -2198,19 +2198,6 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== -"@puppeteer/browsers@2.10.12": - version "2.10.12" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.10.12.tgz#9d9376c205aa38e7344cadb2809e786df2cf3e78" - integrity sha512-mP9iLFZwH+FapKJLeA7/fLqOlSUwYpMwjR1P5J23qd4e7qGJwecJccJqHYrjw33jmIZYV4dtiTHPD/J+1e7cEw== - dependencies: - debug "^4.4.3" - extract-zip "^2.0.1" - progress "^2.0.3" - proxy-agent "^6.5.0" - semver "^7.7.3" - tar-fs "^3.1.1" - yargs "^17.7.2" - "@remix-run/router@1.16.1": version "1.16.1" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.16.1.tgz#73db3c48b975eeb06d0006481bde4f5f2d17d1cd" @@ -2650,11 +2637,6 @@ dependencies: defer-to-connect "^2.0.1" -"@tootallnate/quickjs-emscripten@^0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" - integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== - "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -3006,13 +2988,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yauzl@^2.9.1": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - "@ungap/structured-clone@^1.0.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" @@ -3194,11 +3169,6 @@ address@^1.0.1, address@^1.1.2: resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== -agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" - integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3207,11 +3177,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -3219,7 +3184,7 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -3231,7 +3196,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.1.0, ajv@^6.12.2, ajv@^6.12.5: +ajv@^6.12.2, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3305,11 +3270,6 @@ ansi-align@^3.0.1: dependencies: string-width "^4.1.0" -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -3352,11 +3312,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - arg@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" @@ -3379,30 +3334,11 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -ast-types@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - astring@^1.8.0: version "1.9.0" resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" @@ -3425,11 +3361,6 @@ autoprefixer@^10.4.19: picocolors "^1.1.1" postcss-value-parser "^4.2.0" -b4a@^1.6.4: - version "1.7.3" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.7.3.tgz#24cf7ccda28f5465b66aec2bac69e32809bf112f" - integrity sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q== - babel-loader@^9.2.1: version "9.2.1" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" @@ -3479,58 +3410,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bare-events@^2.5.4, bare-events@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.1.tgz#121afaeee9e9a8eb92e71d125bc85753d39913d0" - integrity sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ== - -bare-fs@^4.0.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.5.0.tgz#f3227b4bc79a65ca7e91a1c05be5919c7c7d8340" - integrity sha512-GljgCjeupKZJNetTqxKaQArLK10vpmK28or0+RwWjEl5Rk+/xG3wkpmkv+WrcBm3q1BwHKlnhXzR8O37kcvkXQ== - dependencies: - bare-events "^2.5.4" - bare-path "^3.0.0" - bare-stream "^2.6.4" - bare-url "^2.2.2" - fast-fifo "^1.3.2" - -bare-os@^3.0.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.6.2.tgz#b3c4f5ad5e322c0fd0f3c29fc97d19009e2796e5" - integrity sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A== - -bare-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" - integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== - dependencies: - bare-os "^3.0.1" - -bare-stream@^2.6.4: - version "2.7.0" - resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.7.0.tgz#5b9e7dd0a354d06e82d6460c426728536c35d789" - integrity sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A== - dependencies: - streamx "^2.21.0" - -bare-url@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/bare-url/-/bare-url-2.3.1.tgz#95e33e99bdc768766ca94246fdc397e88675ec9c" - integrity sha512-v2yl0TnaZTdEnelkKtXZGnotiV6qATBlnNuUMrHl6v9Lmmrh9mw9RYyImPU7/4RahumSwQS1k2oKXcRfXcbjJw== - dependencies: - bare-path "^3.0.0" - baseline-browser-mapping@^2.9.0: version "2.9.19" resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488" integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== -basic-ftp@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" - integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== - batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -3546,11 +3430,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - body-parser@1.20.3: version "1.20.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" @@ -3653,11 +3532,6 @@ browserslist@^4.28.1: node-releases "^2.0.27" update-browserslist-db "^1.2.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -3673,27 +3547,6 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" @@ -3864,24 +3717,11 @@ chokidar@^3.4.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== -chromium-bidi@10.5.1: - version "10.5.1" - resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-10.5.1.tgz#2aad9791509442bb39e96c4f3aeef4dfdb424979" - integrity sha512-rlj6OyhKhVTnk4aENcUme3Jl9h+cq4oXu4AzBcvr8RMmT6BR4a3zSNT9dbIfXr9/BS6ibzRyDhowuw4n2GgzsQ== - dependencies: - mitt "^3.0.1" - zod "^3.24.1" - ci-info@^3.2.0, ci-info@^3.7.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -3922,15 +3762,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -4017,11 +3848,6 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -4047,16 +3873,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - config-chain@^1.1.11: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" @@ -4118,18 +3934,6 @@ cookie@0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-text-to-clipboard@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b" @@ -4147,24 +3951,6 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -copy-webpack-plugin@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" - integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== - dependencies: - cacache "^12.0.3" - find-cache-dir "^2.1.0" - glob-parent "^3.1.0" - globby "^7.1.1" - is-glob "^4.0.1" - loader-utils "^1.2.3" - minimatch "^3.0.4" - normalize-path "^3.0.0" - p-limit "^2.2.1" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - webpack-log "^2.0.0" - copyfiles@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" @@ -4221,16 +4007,6 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: parse-json "^5.2.0" path-type "^4.0.0" -cosmiconfig@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" - integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - cross-env@7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -4433,16 +4209,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -cyclist@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" - integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== - -data-uri-to-buffer@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" - integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== - debounce@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" @@ -4462,13 +4228,6 @@ debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: dependencies: ms "^2.1.3" -debug@^4.3.4, debug@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - decode-named-character-reference@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz#5d6ce68792808901210dac42a8e9853511e2b8bf" @@ -4528,15 +4287,6 @@ define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -degenerator@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" - integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== - dependencies: - ast-types "^0.13.4" - escodegen "^2.1.0" - esprima "^4.0.1" - del@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -4604,18 +4354,6 @@ devlop@^1.0.0, devlop@^1.1.0: dependencies: dequal "^2.0.0" -devtools-protocol@0.0.1521046: - version "0.0.1521046" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1521046.tgz#918e6175ea83100fefcb2b78779f15a77aa8a41b" - integrity sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w== - -dir-glob@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4630,13 +4368,6 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -docusaurus-plugin-copy@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/docusaurus-plugin-copy/-/docusaurus-plugin-copy-0.1.1.tgz#eefa8a69ec8a8473d7ee41864886a3818c9483cd" - integrity sha512-alCwO+EtNehA4oeGS+F7bwJXLvG5MwnFgCGkfF3OKRaJ20iZdlASIhz2YVcj4FOg9J+2lppc0D6D01fxP9liKg== - dependencies: - copy-webpack-plugin "^5.1.1" - docusaurus-plugin-typedoc@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/docusaurus-plugin-typedoc/-/docusaurus-plugin-typedoc-1.0.5.tgz#cc04de58201ac327861c4c9fb0e2af58244373ea" @@ -4733,16 +4464,6 @@ duplexer@^0.1.2: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -4803,13 +4524,6 @@ encodeurl@~2.0.0: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - enhanced-resolve@^5.19.0: version "5.19.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c" @@ -4828,11 +4542,6 @@ entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -5051,17 +4760,6 @@ escape-string-regexp@^5.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== -escodegen@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -5070,7 +4768,7 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -5181,13 +4879,6 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events-universal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/events-universal/-/events-universal-1.0.1.tgz#b56a84fd611b6610e0a2d0f09f80fdf931e2dfe6" - integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== - dependencies: - bare-events "^2.7.0" - events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -5257,27 +4948,11 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-fifo@^1.2.0, fast-fifo@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" @@ -5320,13 +4995,6 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - feed@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" @@ -5334,11 +5002,6 @@ feed@^4.2.2: dependencies: xml-js "^1.6.11" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5379,15 +5042,6 @@ finalhandler@1.3.1: statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-cache-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" @@ -5431,14 +5085,6 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - follow-redirects@^1.0.0: version "1.15.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" @@ -5496,14 +5142,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-extra@^11.1.1, fs-extra@^11.2.0: version "11.3.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" @@ -5528,16 +5166,6 @@ fs-monkey@^1.0.4: resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -5592,40 +5220,16 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-uri@^6.0.1: - version "6.0.5" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.5.tgz#714892aa4a871db671abc5395e5e9447bc306a16" - integrity sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg== - dependencies: - basic-ftp "^5.0.2" - data-uri-to-buffer "^6.0.2" - debug "^4.3.4" - github-slugger@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -5657,7 +5261,7 @@ glob@10.5.0: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.0.0, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5720,18 +5324,6 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g== - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" @@ -5759,7 +5351,7 @@ graceful-fs@4.2.10: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -6098,14 +5690,6 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.9.tgz#b817b3ca0edea6236225000d795378707c169cec" integrity sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw== -http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - http-proxy-middleware@^2.0.3: version "2.0.9" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" @@ -6134,14 +5718,6 @@ http2-wrapper@^2.1.10: quick-lru "^5.1.1" resolve-alpn "^1.2.0" -https-proxy-agent@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" - integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== - dependencies: - agent-base "^7.1.2" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -6159,16 +5735,6 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -6209,11 +5775,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - infima@0.2.0-alpha.45: version "0.2.0-alpha.45" resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" @@ -6264,11 +5825,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip-address@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.0.1.tgz#a8180b783ce7788777d796286d61bce4276818ed" - integrity sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -6333,7 +5889,7 @@ is-extendable@^0.1.0: resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== @@ -6343,13 +5899,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -6627,13 +6176,6 @@ jsonify@^0.0.1: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== -karma-chrome-launcher@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" - integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== - dependencies: - which "^1.2.1" - keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -6768,7 +6310,7 @@ loader-runner@^4.3.1: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== -loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.1.0: version "1.4.2" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== @@ -6869,24 +6411,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^7.14.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - markdown-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" @@ -7698,51 +7227,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mitt@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" - integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - mrmime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" @@ -7791,11 +7280,6 @@ netlify-plugin-cache@1.0.3: resolved "https://registry.yarnpkg.com/netlify-plugin-cache/-/netlify-plugin-cache-1.0.3.tgz#f60514e259dff2b3286b6d60b570bb1c81206794" integrity sha512-CTOwNWrTOP59T6y6unxQNnp1WX702v2R/faR5peSH94ebrYfyY4zT5IsRcIiHKq57jXeyCrhy0GLuTN8ktzuQg== -netmask@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -7923,7 +7407,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -7978,7 +7462,7 @@ p-cancelable@^3.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== -p-limit@^2.0.0, p-limit@^2.2.1: +p-limit@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -8040,28 +7524,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pac-proxy-agent@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz#9cfaf33ff25da36f6147a20844230ec92c06e5df" - integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== - dependencies: - "@tootallnate/quickjs-emscripten" "^0.23.0" - agent-base "^7.1.2" - debug "^4.3.4" - get-uri "^6.0.1" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.6" - pac-resolver "^7.0.1" - socks-proxy-agent "^8.0.5" - -pac-resolver@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" - integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== - dependencies: - degenerator "^5.0.0" - netmask "^2.0.2" - package-json-from-dist@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" @@ -8077,15 +7539,6 @@ package-json@^8.1.0: registry-url "^6.0.0" semver "^7.3.7" -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -8178,11 +7631,6 @@ patch-package@8.0.0: tmp "^0.0.33" yaml "^2.2.2" -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -8243,23 +7691,11 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -8270,23 +7706,6 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - pkg-dir@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" @@ -8896,16 +8315,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -8946,50 +8355,6 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.5.0.tgz#9e49acba8e4ee234aacb539f89ed9c23d02f232d" - integrity sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A== - dependencies: - agent-base "^7.1.2" - debug "^4.3.4" - http-proxy-agent "^7.0.1" - https-proxy-agent "^7.0.6" - lru-cache "^7.14.1" - pac-proxy-agent "^7.1.0" - proxy-from-env "^1.1.0" - socks-proxy-agent "^8.0.5" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode.js@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" @@ -9007,31 +8372,6 @@ pupa@^3.1.0: dependencies: escape-goat "^4.0.0" -puppeteer-core@24.27.0: - version "24.27.0" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.27.0.tgz#dd81d615fc8e4bafad500442e798323f920c89b8" - integrity sha512-yubwj2XXmTM3wRIpbhO5nCjbByPgpFHlgrsD4IK+gMPqO7/a5FfnoSXDKjmqi8A2M1Ewusz0rTI/r+IN0GU0MA== - dependencies: - "@puppeteer/browsers" "2.10.12" - chromium-bidi "10.5.1" - debug "^4.4.3" - devtools-protocol "0.0.1521046" - typed-query-selector "^2.12.0" - webdriver-bidi-protocol "0.3.8" - ws "^8.18.3" - -puppeteer@24.27.0: - version "24.27.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.27.0.tgz#4867c3a3f028de8491114d253808f20757436830" - integrity sha512-eEcAFGxmHRSrk74DVkFAMAwfj4l3Ak8avBuA2bZaAoocY1+Fb9WLS3I7jlOc/tIOU7EmGLiDdVP08R44wADpHw== - dependencies: - "@puppeteer/browsers" "2.10.12" - chromium-bidi "10.5.1" - cosmiconfig "^9.0.0" - devtools-protocol "0.0.1521046" - puppeteer-core "24.27.0" - typed-query-selector "^2.12.0" - qs@6.13.0, qs@6.14.1: version "6.14.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" @@ -9056,13 +8396,6 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - range-parser@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" @@ -9249,7 +8582,7 @@ react@18.3.1: dependencies: loose-envify "^1.1.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.1, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -9610,7 +8943,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rimraf@^2.5.4, rimraf@^2.6.3: +rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9646,14 +8979,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== - dependencies: - aproba "^1.1.1" - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -9689,15 +9015,6 @@ schema-utils@2.7.0: ajv "^6.12.2" ajv-keywords "^3.4.1" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - schema-utils@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" @@ -9755,11 +9072,6 @@ semver-diff@^4.0.0: dependencies: semver "^7.3.5" -semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -9770,11 +9082,6 @@ semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -semver@^7.7.3: - version "7.7.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" - integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== - send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -9794,19 +9101,10 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" +serialize-javascript@7.0.4, serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.0.4.tgz#c517735bd5b7631dd1fc191ee19cbb713ff8e05c" + integrity sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg== serve-handler@^6.1.6: version "6.1.6" @@ -10006,11 +9304,6 @@ skin-tone@^2.0.0: dependencies: unicode-emoji-modifier-base "^1.0.0" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== - slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -10026,11 +9319,6 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -10048,23 +9336,6 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@^8.0.5: - version "8.0.5" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" - integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== - dependencies: - agent-base "^7.1.2" - debug "^4.3.4" - socks "^2.8.3" - -socks@^2.8.3: - version "2.8.7" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" - integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== - dependencies: - ip-address "^10.0.1" - smart-buffer "^4.2.0" - sort-css-media-queries@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c" @@ -10088,7 +9359,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -10136,13 +9407,6 @@ srcset@^4.0.0: resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -10158,28 +9422,6 @@ std-env@^3.7.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.1.tgz#2b81c631c62e3d0b964b87f099b8dcab6c9a5346" integrity sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA== -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -streamx@^2.15.0, streamx@^2.21.0: - version "2.23.0" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" - integrity sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg== - dependencies: - events-universal "^1.0.0" - fast-fifo "^1.3.2" - text-decoder "^1.1.0" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -10189,7 +9431,7 @@ streamx@^2.15.0, streamx@^2.21.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10365,26 +9607,6 @@ tapable@^2.3.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== -tar-fs@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.1.1.tgz#4f164e59fb60f103d472360731e8c6bb4a7fe9ef" - integrity sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg== - dependencies: - pump "^3.0.0" - tar-stream "^3.1.5" - optionalDependencies: - bare-fs "^4.0.1" - bare-path "^3.0.0" - -tar-stream@^3.1.5: - version "3.1.7" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" - integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== - dependencies: - b4a "^1.6.4" - fast-fifo "^1.2.0" - streamx "^2.15.0" - terser-webpack-plugin@^5.3.16: version "5.3.16" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330" @@ -10417,19 +9639,12 @@ terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: commander "^2.20.0" source-map-support "~0.5.20" -text-decoder@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" - integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== - dependencies: - b4a "^1.6.4" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through2@^2.0.0, through2@^2.0.1: +through2@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -10486,7 +9701,7 @@ trough@^2.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.6.0: +tslib@^2.0.3, tslib@^2.6.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -10514,11 +9729,6 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-query-selector@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" - integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10526,11 +9736,6 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - typedoc-plugin-markdown@4.2.9: version "4.2.9" resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.2.9.tgz#c94c227d2adefb9b2d3725b3e2df7bf8032a0ac2" @@ -10598,20 +9803,6 @@ unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: trough "^2.0.0" vfile "^6.0.0" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - unique-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" @@ -10751,11 +9942,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -10815,11 +10001,6 @@ web-namespaces@^2.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== -webdriver-bidi-protocol@0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.8.tgz#9c822b2647fd16d22b1b6fd730d4a3b863c93b93" - integrity sha512-21Yi2GhGntMc671vNBCjiAeEVknXjVRoyu+k+9xOMShu+ZQfpGQwnBqbNz/Sv4GXZ6JmutlPAi2nIJcrymAWuQ== - webpack-bundle-analyzer@^4.10.2: version "4.10.2" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" @@ -10885,14 +10066,6 @@ webpack-dev-server@^4.15.2: webpack-dev-middleware "^5.3.4" ws "^8.13.0" -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - webpack-merge@^5.9.0: version "5.10.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" @@ -10983,7 +10156,7 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -which@^1.2.1, which@^1.3.1: +which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11061,11 +10234,6 @@ ws@^8.13.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== -ws@^8.18.3: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" @@ -11083,11 +10251,6 @@ xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -11118,11 +10281,6 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs@^16.1.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -11136,27 +10294,6 @@ yargs@^16.1.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" @@ -11167,11 +10304,6 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.0.tgz#4a29a93e7591328fa31768701e6ea66962401f79" integrity sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw== -zod@^3.24.1: - version "3.25.76" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" - integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== - zwitch@^2.0.0, zwitch@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" diff --git a/yarn.lock b/yarn.lock index 29e646e215..555dba2a4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3748,11 +3748,6 @@ resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -4550,6 +4545,11 @@ acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1, acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + actor@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/actor/-/actor-2.3.1.tgz#80ce158bb41338a0c38863bddf0947c1850b6e20" @@ -5884,18 +5884,6 @@ cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -copy-webpack-plugin@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - core-js-compat@^3.40.0: version "3.45.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.45.1.tgz#424f3f4af30bf676fd1b67a579465104f64e9c7a" @@ -7210,7 +7198,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: +fast-glob@^3.2.9, fast-glob@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -7447,10 +7435,10 @@ flatbuffers@^1.12.0: resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== -flatted@^3.2.7, flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +flatted@3.4.0, flatted@^3.2.7, flatted@^3.2.9: + version "3.4.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.0.tgz#92ab2efec9b272eb85a3a25a106c3afbbc990d8b" + integrity sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw== follow-redirects@1.15.9: version "1.15.9" @@ -7787,7 +7775,7 @@ gl-matrix@^3.1.0: resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.4.tgz#7789ee4982f62c7a7af447ee488f3bd6b0c77003" integrity sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ== -glob-parent@6.0.2, glob-parent@^6.0.1: +glob-parent@6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -7911,17 +7899,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.1: - version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -12604,13 +12581,6 @@ rabin-rs@^2.1.0: resolved "https://registry.yarnpkg.com/rabin-rs/-/rabin-rs-2.1.0.tgz#87b4f2dea7ca69380f1fa6b9e476d99380e7dc96" integrity sha512-5y72gAXPzIBsAMHcpxZP8eMDuDT98qMP1BqSDHRbHkJJXEgWIN1lA47LxUqzsK6jknOJtgfkQr9v+7qMlFDm6g== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -13035,10 +13005,10 @@ rimraf@^6.1.2: glob "^13.0.3" package-json-from-dist "^1.0.1" -rollup@3.29.5: - version "3.29.5" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.5.tgz#8a2e477a758b520fb78daf04bca4c522c1da8a54" - integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w== +rollup@3.29.5, rollup@3.30.0: + version "3.30.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.30.0.tgz#3fa506fee2c5ba9d540a38da87067376cd55966d" + integrity sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA== optionalDependencies: fsevents "~2.3.2" @@ -13090,7 +13060,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -13105,6 +13075,11 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== +sax@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.5.0.tgz#b5549b671069b7aa392df55ec7574cf411179eb8" + integrity sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA== + saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -13221,12 +13196,10 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@^6.0.0, serialize-javascript@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" +serialize-javascript@7.0.4, serialize-javascript@^6.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.0.4.tgz#c517735bd5b7631dd1fc191ee19cbb713ff8e05c" + integrity sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg== serve-index@^1.9.1: version "1.9.1" @@ -13414,11 +13387,6 @@ slash@3.0.0, slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -13953,18 +13921,18 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== -svgo@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== +svgo@3.3.3, svgo@^3.2.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.3.tgz#8246aee0b08791fde3b0ed22b5661b471fadf58e" + integrity sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng== dependencies: - "@trysound/sax" "0.2.0" commander "^7.2.0" css-select "^5.1.0" css-tree "^2.3.1" css-what "^6.1.0" csso "^5.0.5" picocolors "^1.0.0" + sax "^1.5.0" symbol-tree@^3.2.4: version "3.2.4" @@ -14028,10 +13996,10 @@ tar-stream@^2.1.4, tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@7.5.7, tar@7.5.9, tar@^6.1.13, tar@^7.4.3, tar@^7.5.4: - version "7.5.9" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.9.tgz#817ac12a54bc4362c51340875b8985d7dc9724b8" - integrity sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg== +tar@7.5.11, tar@7.5.7, tar@^6.1.13, tar@^7.4.3, tar@^7.5.4: + version "7.5.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.11.tgz#1250fae45d98806b36d703b30973fa8e0a6d8868" + integrity sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ== dependencies: "@isaacs/fs-minipass" "^4.0.0" chownr "^3.0.0" @@ -14858,15 +14826,15 @@ webpack-merge@^5.7.3: flat "^5.0.2" wildcard "^2.0.0" -webpack-sources@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" - integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== +webpack-sources@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" + integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== -webpack@5.105.0: - version "5.105.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a" - integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw== +webpack@5.105.3: + version "5.105.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.3.tgz#307ad95bafffd08bc81049d6519477b16e42e7ba" + integrity sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -14874,7 +14842,7 @@ webpack@5.105.0: "@webassemblyjs/ast" "^1.14.1" "@webassemblyjs/wasm-edit" "^1.14.1" "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.15.0" + acorn "^8.16.0" acorn-import-phases "^1.0.3" browserslist "^4.28.1" chrome-trace-event "^1.0.2" @@ -14892,7 +14860,7 @@ webpack@5.105.0: tapable "^2.3.0" terser-webpack-plugin "^5.3.16" watchpack "^2.5.1" - webpack-sources "^3.3.3" + webpack-sources "^3.3.4" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" From 5758f87f875ce2c865892fabc02250c1db5edc03 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 13 Mar 2026 17:15:01 +0000 Subject: [PATCH 49/90] chore(version): Update package versions to 4.19.3 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 71 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 823a7fe882..61c462b5c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +### Bug Fixes + +- **security:** various security patches ([#2658](https://github.com/cornerstonejs/cornerstone3D/issues/2658)) ([2a30dcd](https://github.com/cornerstonejs/cornerstone3D/commit/2a30dcd8072dcdf6702444ee857f13a51918bac8)) + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package root diff --git a/commit.txt b/commit.txt index e5e9503282..2f2426fa50 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -8b9e7dc032375be719df93f1ca4c06171741708a \ No newline at end of file +2a30dcd8072dcdf6702444ee857f13a51918bac8 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 3195a16d85..bb44a1aeba 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.19.2", + "version": "4.19.3", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 741f588522..738abb7970 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index c9988e8afd..182c81a2d9 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.19.2", + "version": "4.19.3", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2" + "@cornerstonejs/core": "4.19.3", + "@cornerstonejs/tools": "4.19.3" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 7ee3957ef4..9d3359cb1f 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 09b95a1c62..2ba2c0bef4 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.19.2", + "version": "4.19.3", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2" + "@cornerstonejs/core": "4.19.3", + "@cornerstonejs/tools": "4.19.3" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 3bf1e90c48..e3bc41c24b 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index dd25c4a1fb..9950f3c1ba 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.19.2", + "version": "4.19.3", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 8e21b1cf8e..669cf7f670 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index c1c704a123..ec7d5c7fac 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.19.2", + "version": "4.19.3", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/core": "4.19.3", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index e41397bd5e..0f3900f0b0 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 0cf7b648dc..b47d88e4ec 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.19.2", + "version": "4.19.3", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2", + "@cornerstonejs/core": "4.19.3", + "@cornerstonejs/tools": "4.19.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index c5ede4a2ce..19a97b6b7b 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index b6afc8594e..4af4b00116 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.19.2", + "version": "4.19.3", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2" + "@cornerstonejs/core": "4.19.3" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index acdb752afa..c227e06dad 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 1dc4355636..afaa9dd032 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.19.2", + "version": "4.19.3", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2", + "@cornerstonejs/core": "4.19.3", + "@cornerstonejs/tools": "4.19.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 197448a8e3..7184cd2caf 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.19.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.1...v4.19.2) (2026-03-12) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index bb3ce35ad5..f0cefae6bc 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.19.2", + "version": "4.19.3", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/core": "4.19.3", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 15a8ff6a92..d3f03dd909 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.2'; +export const version = '4.19.3'; diff --git a/version.json b/version.json index fffd4e5265..e6ea07d433 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.19.2", - "commit": "8b9e7dc032375be719df93f1ca4c06171741708a" + "version": "4.19.3", + "commit": "2a30dcd8072dcdf6702444ee857f13a51918bac8" } \ No newline at end of file diff --git a/version.txt b/version.txt index 005d7675ed..0dc2fa235b 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.19.2 \ No newline at end of file +4.19.3 \ No newline at end of file From a05908ffa57b73f18b9465563466a96cc21c3692 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Fri, 13 Mar 2026 15:27:31 -0400 Subject: [PATCH 50/90] chore(docs): update package.json to use yarn install instead of yarn install --frozen-lockfile (#2659) --- packages/docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/package.json b/packages/docs/package.json index 652a5fc967..4eadab8966 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -6,7 +6,7 @@ "scripts": { "preinstall": "node preinstall.js", "build": "echo 'build'", - "build:docs": "cd ../../ && yarn install --frozen-lockfile && yarn run build:esm && cd packages/docs && cross-env NODE_OPTIONS=--max_old_space_size=32384 yarn run prep-examples && docusaurus build && node ./scripts/prepare-markdown-files.js && node ./scripts/generate-llms-txt.js && node ./scripts/generate-llms-full-txt.js && node ./scripts/generate-redirects.js", + "build:docs": "cd ../../ && yarn install && yarn run build:esm && cd packages/docs && cross-env NODE_OPTIONS=--max_old_space_size=32384 yarn run prep-examples && docusaurus build && node ./scripts/prepare-markdown-files.js && node ./scripts/generate-llms-txt.js && node ./scripts/generate-llms-full-txt.js && node ./scripts/generate-redirects.js", "build:ci": "cross-env NODE_OPTIONS=--max_old_space_size=32384 yarn run prep-examples && docusaurus build && node ./scripts/prepare-markdown-files.js && node ./scripts/generate-llms-txt.js && node ./scripts/generate-llms-full-txt.js && node ./scripts/generate-redirects.js", "prepare-markdown-files": "node ./scripts/prepare-markdown-files.js", "generate-llms-txt": "node ./scripts/generate-llms-txt.js", From a507d9cef0245708663182901ca45bb434e5050c Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 13 Mar 2026 19:31:13 +0000 Subject: [PATCH 51/90] chore(version): Update package versions to 4.19.4 [skip ci] --- CHANGELOG.md | 4 ++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 69 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61c462b5c9..161759ec73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package root + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 2f2426fa50..b498ef905d 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -2a30dcd8072dcdf6702444ee857f13a51918bac8 \ No newline at end of file +1ce23ee6c878e1ad3ddb93f44fba51453a2f2228 \ No newline at end of file diff --git a/lerna.json b/lerna.json index bb44a1aeba..9f82a59e46 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.19.3", + "version": "4.19.4", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 738abb7970..0e21cc6c95 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 182c81a2d9..4f9fc4c67c 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.19.3", + "version": "4.19.4", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.3", - "@cornerstonejs/tools": "4.19.3" + "@cornerstonejs/core": "4.19.4", + "@cornerstonejs/tools": "4.19.4" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 9d3359cb1f..792d171907 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 2ba2c0bef4..cda0e20cc6 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.19.3", + "version": "4.19.4", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.3", - "@cornerstonejs/tools": "4.19.3" + "@cornerstonejs/core": "4.19.4", + "@cornerstonejs/tools": "4.19.4" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index e3bc41c24b..fca76b0bd8 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 9950f3c1ba..528b58e20c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.19.3", + "version": "4.19.4", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 669cf7f670..bbd304f71d 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index ec7d5c7fac..fe756150f3 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.19.3", + "version": "4.19.4", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.3", + "@cornerstonejs/core": "4.19.4", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 0f3900f0b0..68a9a9228b 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index b47d88e4ec..5634a8f30e 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.19.3", + "version": "4.19.4", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.3", - "@cornerstonejs/tools": "4.19.3", + "@cornerstonejs/core": "4.19.4", + "@cornerstonejs/tools": "4.19.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 19a97b6b7b..ac9e32ba50 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 4af4b00116..85286dbe83 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.19.3", + "version": "4.19.4", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.3" + "@cornerstonejs/core": "4.19.4" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index c227e06dad..f6b61546ae 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index afaa9dd032..2f62bb744c 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.19.3", + "version": "4.19.4", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.3", - "@cornerstonejs/tools": "4.19.3", + "@cornerstonejs/core": "4.19.4", + "@cornerstonejs/tools": "4.19.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 7184cd2caf..b742cf1144 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.19.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.2...v4.19.3) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index f0cefae6bc..91c06a98f8 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.19.3", + "version": "4.19.4", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.3", + "@cornerstonejs/core": "4.19.4", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index d3f03dd909..cee5e63ff3 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.3'; +export const version = '4.19.4'; diff --git a/version.json b/version.json index e6ea07d433..d2c6c0e98a 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.19.3", - "commit": "2a30dcd8072dcdf6702444ee857f13a51918bac8" + "version": "4.19.4", + "commit": "1ce23ee6c878e1ad3ddb93f44fba51453a2f2228" } \ No newline at end of file diff --git a/version.txt b/version.txt index 0dc2fa235b..45a94dd8fc 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.19.3 \ No newline at end of file +4.19.4 \ No newline at end of file From 8e08402d949421483137b29243fa5e2d80855296 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 16 Mar 2026 16:29:27 -0400 Subject: [PATCH 52/90] feat(ohif-downstream): Add CI workflow and scripts for OHIF downstream validation and testing (#2657) * feat(ohif-downstream): Add CI workflow and scripts for OHIF downstream validation and testing - Introduced a GitHub Actions workflow for validating OHIF builds against pull requests. - Added scripts for local setup, building, and testing of OHIF with linked Cornerstone packages. - Updated .gitignore to exclude the new OHIF downstream directory. * bug * feat(ohif-downstream): Enhance CI workflow for OHIF downstream testing - Renamed job to ohif-downstream for clarity. - Increased timeout for builds from 90 to 180 minutes. - Added unit tests, Playwright browser installation, and end-to-end tests to the workflow. - Implemented artifact upload for Playwright test results and reports. * remove build * some * Add unlink script * Move link script to general scripts, not ci specific * Log commit to demonstrate update * Add docs * Try using fixed OHIF tests for ohif-downstream * docs: About wait time * Try updating branch name * fix ohif-downstream with loggin * fix: Use master for release * Undo console change for release --------- Co-authored-by: Bill Wallace --- .github/workflows/ohif-downstream.yml | 91 +++++++++++++ .gitignore | 1 + README.md | 122 ++++++++++++++++++ .../core/src/RenderingEngine/StackViewport.ts | 2 +- scripts/ci/run-ohif-downstream-local.sh | 45 +++++++ scripts/ci/run-ohif-downstream-tests-local.sh | 60 +++++++++ .../link-ohif-cornerstone-node-modules.mjs | 49 +++++++ .../unlink-ohif-cornerstone-node-modules.mjs | 80 ++++++++++++ 8 files changed, 449 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ohif-downstream.yml create mode 100755 scripts/ci/run-ohif-downstream-local.sh create mode 100755 scripts/ci/run-ohif-downstream-tests-local.sh create mode 100644 scripts/link-ohif-cornerstone-node-modules.mjs create mode 100644 scripts/unlink-ohif-cornerstone-node-modules.mjs diff --git a/.github/workflows/ohif-downstream.yml b/.github/workflows/ohif-downstream.yml new file mode 100644 index 0000000000..24d6af06d9 --- /dev/null +++ b/.github/workflows/ohif-downstream.yml @@ -0,0 +1,91 @@ +name: OHIF Downstream Validation + +on: + pull_request: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + ohif-downstream: + name: OHIF downstream tests against this PR + runs-on: ubuntu-latest + timeout-minutes: 180 + env: + BUN_VERSION: 1.2.23 + NODE_VERSION: 20 + OHIF_REF: master + OHIF_DIR: ohif + steps: + - name: Checkout Cornerstone + uses: actions/checkout@v4 + + - name: Log build context (OHIF/CS3D branch and version for build diagnosis) + run: | + echo "::notice::Build type: ohif-downstream | CS3D: ${{ github.repository }}@${{ github.ref }} (${{ github.sha }}) | OHIF ref: ${{ env.OHIF_REF }}" + CS3D_BRANCH=$(git rev-parse --abbrev-ref HEAD) + CS3D_SHA=$(git rev-parse --short HEAD) + echo "[build-context] ═══════════════════════════════════════════════════════════════" + echo "[build-context] Build type: ohif-downstream (CS3D repo validating against OHIF)" + echo "[build-context] CS3D branch: $CS3D_BRANCH | CS3D SHA: $CS3D_SHA" + echo "[build-context] OHIF ref: ${{ env.OHIF_REF }}" + echo "[build-context] ═══════════════════════════════════════════════════════════════" + + - name: Set up Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: ${{ env.BUN_VERSION }} + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Install Cornerstone dependencies + run: bun install --frozen-lockfile + + - name: Build local Cornerstone packages for OHIF + run: bun run build:esm + + - name: Checkout OHIF + uses: actions/checkout@v4 + with: + repository: OHIF/Viewers + ref: ${{ env.OHIF_REF }} + path: ${{ env.OHIF_DIR }} + fetch-depth: 1 + submodules: recursive + + - name: Install OHIF dependencies + working-directory: ${{ env.OHIF_DIR }} + run: bun install + + - name: Link local Cornerstone packages into OHIF node_modules + run: node scripts/link-ohif-cornerstone-node-modules.mjs ${{ env.OHIF_DIR }} + + - name: Run OHIF unit tests + working-directory: ${{ env.OHIF_DIR }} + run: bun run test:unit:ci + + - name: Install Playwright browsers + working-directory: ${{ env.OHIF_DIR }} + run: npx playwright install --with-deps chromium + + - name: Run OHIF e2e tests + working-directory: ${{ env.OHIF_DIR }} + env: + PLAYWRIGHT_HTML_OPEN: never + run: bun run test:e2e:ci + + - name: Upload OHIF Playwright artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: ohif-playwright-artifacts-${{ github.sha }} + path: | + ${{ env.OHIF_DIR }}/tests/playwright-report.json + ${{ env.OHIF_DIR }}/tests/playwright-report/ + ${{ env.OHIF_DIR }}/tests/test-results/ + retention-days: 7 diff --git a/.gitignore b/.gitignore index 1ec3097c4b..3f2ed85449 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,4 @@ coverage/ CLAUDE.md # External repositories vtk-js/ +.ohif-downstream/ diff --git a/README.md b/README.md index 246b19b31a..bde6c0c28d 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,128 @@ The documentation is divided into several sections - [FAQ](https://cornerstonejs.org/docs/faq) - [How-to Contribute](https://cornerstonejs.org/docs/category/contributing) +## OHIF Downstream Validation + +The Cornerstone3D build includes an OHIF checkout and test linked to the current +branch of CS3D in order to test compatibility with the checked out version. +This ensures that CS3D changes do not break the OHIF Viewer before they are +published. + +Additionally, the OHIF pipeline can build and deploy a **preview release** +against a CS3D branch for manual testing. This pipeline does not re-test the +CS3D side but is intended for manual validation of changes in the full viewer. + +Some tests in OHIF may need additional wait time built in to enable them to pass on slower servers + +### How it works + +The downstream validation is defined in +[`.github/workflows/ohif-downstream.yml`](.github/workflows/ohif-downstream.yml). +It runs on every CS3D pull request and `workflow_dispatch`: + +1. Checks out the CS3D PR branch and builds it (`bun run build:esm`). +2. Checks out the OHIF Viewer at the ref specified by the `OHIF_REF` env + variable (defaults to `master`). +3. Installs OHIF dependencies, then symlinks the locally built CS3D packages + into OHIF's `node_modules` via + `scripts/link-ohif-cornerstone-node-modules.mjs`. +4. Runs OHIF unit tests and Playwright e2e tests against the linked build. + +### Testing against an OHIF branch other than master + +By default the workflow checks out `master` of the OHIF Viewer. To test against +a different OHIF branch (e.g. when a feature requires coordinated changes in +both repos): + +1. Open `.github/workflows/ohif-downstream.yml`. +2. Change the `OHIF_REF` environment variable (line 19) from `master` to the + target branch: + ```yaml + env: + OHIF_REF: feat/my-ohif-feature # was: master + ``` +3. Commit and push. The downstream job will now clone and test against that + OHIF branch instead. +4. **Remember to set `OHIF_REF` back to `master` before merging your CS3D PR.** + +> **Tip:** This pairs with the OHIF side of the integration. While `OHIF_REF` +> lets a CS3D PR test against an OHIF branch, the OHIF repo has a symmetric +> mechanism — the `ohif-integration` label and `CS3D_REF` in the PR body — +> that lets an OHIF PR test against a CS3D branch. Together these allow both +> sides to run the full test suite against unpublished code. See the +> [OHIF Viewer README — Cornerstone3D Integration Testing](https://github.com/OHIF/Viewers#cornerstone3d-integration-testing) +> for details on the OHIF side. + +## Local Development: Linking & Unlinking + +Two scripts are provided for linking a local CS3D build into an OHIF checkout +so you can iterate without publishing: + +### Link + +From the **CS3D repo root**, after building (`bun run build:esm`): + +```bash +node scripts/link-ohif-cornerstone-node-modules.mjs /path/to/ohif +``` + +This replaces the installed `@cornerstonejs/*` packages inside OHIF's +`node_modules` with symlinks pointing to the local CS3D build output. The +following packages are linked: + +| Package | Local path | +|---------|-----------| +| `@cornerstonejs/adapters` | `packages/adapters` | +| `@cornerstonejs/ai` | `packages/ai` | +| `@cornerstonejs/core` | `packages/core` | +| `@cornerstonejs/dicom-image-loader` | `packages/dicomImageLoader` | +| `@cornerstonejs/labelmap-interpolation` | `packages/labelmap-interpolation` | +| `@cornerstonejs/nifti-volume-loader` | `packages/nifti-volume-loader` | +| `@cornerstonejs/polymorphic-segmentation` | `packages/polymorphic-segmentation` | +| `@cornerstonejs/tools` | `packages/tools` | + +After linking, start OHIF's dev server (`yarn dev` or `bun run dev`) and any +changes you make in CS3D (after rebuilding) will be reflected immediately. + +### Unlink + +To restore the registry-installed packages: + +```bash +node scripts/unlink-ohif-cornerstone-node-modules.mjs /path/to/ohif +``` + +This removes the symlinks and runs `yarn install --frozen-lockfile` in the OHIF +directory to restore the original packages. + +### Typical workflow + +```bash +# 1. Build CS3D +cd /path/to/cornerstone3D +bun install --frozen-lockfile +bun run build:esm + +# 2. Link into OHIF +node scripts/link-ohif-cornerstone-node-modules.mjs /path/to/ohif + +# 3. Start OHIF +cd /path/to/ohif +yarn dev + +# 4. Iterate — rebuild CS3D after changes: +cd /path/to/cornerstone3D +bun run build:esm +# OHIF dev server picks up changes automatically + +# 5. When done, unlink +node scripts/unlink-ohif-cornerstone-node-modules.mjs /path/to/ohif +``` + +> **Tip:** For the `yarn link` based approach (useful when working on a single +> package rather than the full set), see the +> [Linking Cornerstone Libraries](packages/docs/docs/contribute/linking.md) doc. + ## Support Users can post questions and issues on the [Open Health Imaging Foundation (OHIF) Community Forum](https://community.ohif.org/). Developer issues or bugs can be reported as [Github Issues](https://github.com/cornerstonejs/cornerstone3D/issues). diff --git a/packages/core/src/RenderingEngine/StackViewport.ts b/packages/core/src/RenderingEngine/StackViewport.ts index c35f7f2b8d..625afba5a0 100644 --- a/packages/core/src/RenderingEngine/StackViewport.ts +++ b/packages/core/src/RenderingEngine/StackViewport.ts @@ -214,7 +214,7 @@ class StackViewport extends Viewport { this.useCPURendering = getShouldUseCPURendering(); this._configureRenderingPipeline(); - const result = this.useCPURendering + this.useCPURendering ? this._resetCPUFallbackElement() : this._resetGPUViewport(); diff --git a/scripts/ci/run-ohif-downstream-local.sh b/scripts/ci/run-ohif-downstream-local.sh new file mode 100755 index 0000000000..5ad67ba3f6 --- /dev/null +++ b/scripts/ci/run-ohif-downstream-local.sh @@ -0,0 +1,45 @@ +#!/bin/zsh + +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +REPO_ROOT=$(cd "$SCRIPT_DIR/../.." && pwd) + +OHIF_REPO_URL=${OHIF_REPO_URL:-https://github.com/OHIF/Viewers.git} +OHIF_REF=${OHIF_REF:-master} +OHIF_DIR=${OHIF_DIR:-$REPO_ROOT/.ohif-downstream/${OHIF_REF}-$$} + +if [[ -e "$OHIF_DIR" ]]; then + echo "Refusing to use existing path: $OHIF_DIR" >&2 + exit 1 +fi + +mkdir -p "$(dirname "$OHIF_DIR")" + +echo "Cloning OHIF into $OHIF_DIR" +git clone --depth 1 --branch "$OHIF_REF" "$OHIF_REPO_URL" "$OHIF_DIR" + +echo "Initializing OHIF submodules" +git -C "$OHIF_DIR" submodule update --init --recursive + +echo "Installing Cornerstone dependencies" +cd "$REPO_ROOT" +bun install --frozen-lockfile + +echo "Building Cornerstone packages for OHIF" +bun run build:esm + +echo "Installing OHIF dependencies" +cd "$OHIF_DIR" +bun install + +echo "Linking local Cornerstone packages into OHIF node_modules" +cd "$REPO_ROOT" +node "$REPO_ROOT/scripts/link-ohif-cornerstone-node-modules.mjs" "$OHIF_DIR" + +echo "Building OHIF" +cd "$OHIF_DIR" +bun run build:ci + +echo "OHIF downstream build completed" +echo "Clone location: $OHIF_DIR" diff --git a/scripts/ci/run-ohif-downstream-tests-local.sh b/scripts/ci/run-ohif-downstream-tests-local.sh new file mode 100755 index 0000000000..3e55f6bb3f --- /dev/null +++ b/scripts/ci/run-ohif-downstream-tests-local.sh @@ -0,0 +1,60 @@ +#!/bin/zsh + +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +REPO_ROOT=$(cd "$SCRIPT_DIR/../.." && pwd) + +OHIF_REPO_URL=${OHIF_REPO_URL:-https://github.com/OHIF/Viewers.git} +OHIF_REF=${OHIF_REF:-master} +OHIF_DIR=${OHIF_DIR:-$REPO_ROOT/.ohif-downstream/${OHIF_REF}-tests-$$} +OHIF_RUN_UNIT_TESTS=${OHIF_RUN_UNIT_TESTS:-true} +OHIF_RUN_E2E_TESTS=${OHIF_RUN_E2E_TESTS:-true} +OHIF_UNIT_TEST_COMMAND=${OHIF_UNIT_TEST_COMMAND:-bun run test:unit:ci} +OHIF_E2E_TEST_COMMAND=${OHIF_E2E_TEST_COMMAND:-bun run test:e2e:ci} + +if [[ -e "$OHIF_DIR" ]]; then + echo "Refusing to use existing path: $OHIF_DIR" >&2 + exit 1 +fi + +mkdir -p "$(dirname "$OHIF_DIR")" + +echo "Cloning OHIF into $OHIF_DIR" +git clone --depth 1 --branch "$OHIF_REF" "$OHIF_REPO_URL" "$OHIF_DIR" + +echo "Initializing OHIF submodules" +git -C "$OHIF_DIR" submodule update --init --recursive + +echo "Installing Cornerstone dependencies" +cd "$REPO_ROOT" +bun install --frozen-lockfile + +echo "Building Cornerstone packages for OHIF" +bun run build:esm + +echo "Installing OHIF dependencies" +cd "$OHIF_DIR" +bun install + +echo "Linking local Cornerstone packages into OHIF node_modules" +cd "$REPO_ROOT" +node "$REPO_ROOT/scripts/link-ohif-cornerstone-node-modules.mjs" "$OHIF_DIR" + +cd "$OHIF_DIR" + +if [[ "$OHIF_RUN_UNIT_TESTS" == "true" ]]; then + echo "Running OHIF unit tests" + eval "$OHIF_UNIT_TEST_COMMAND" +fi + +if [[ "$OHIF_RUN_E2E_TESTS" == "true" ]]; then + echo "Installing Playwright browsers" + npx playwright install + + echo "Running OHIF e2e tests" + eval "$OHIF_E2E_TEST_COMMAND" +fi + +echo "OHIF downstream tests completed" +echo "Clone location: $OHIF_DIR" diff --git a/scripts/link-ohif-cornerstone-node-modules.mjs b/scripts/link-ohif-cornerstone-node-modules.mjs new file mode 100644 index 0000000000..66990de638 --- /dev/null +++ b/scripts/link-ohif-cornerstone-node-modules.mjs @@ -0,0 +1,49 @@ +#!/usr/bin/env node + +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const [ohifDirArg] = process.argv.slice(2); + +if (!ohifDirArg) { + console.error( + 'Usage: node scripts/link-ohif-cornerstone-node-modules.mjs ' + ); + process.exit(1); +} + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const ohifDir = path.resolve(process.cwd(), ohifDirArg); +const nodeModulesRoot = path.join(ohifDir, 'node_modules', '@cornerstonejs'); + +if (!fs.existsSync(path.join(ohifDir, 'package.json'))) { + console.error(`Could not find OHIF package.json in ${ohifDir}`); + process.exit(1); +} + +if (!fs.existsSync(nodeModulesRoot)) { + console.error(`Could not find ${nodeModulesRoot}. Run install first.`); + process.exit(1); +} + +const localPackages = { + adapters: 'packages/adapters', + ai: 'packages/ai', + core: 'packages/core', + 'dicom-image-loader': 'packages/dicomImageLoader', + 'labelmap-interpolation': 'packages/labelmap-interpolation', + 'nifti-volume-loader': 'packages/nifti-volume-loader', + 'polymorphic-segmentation': 'packages/polymorphic-segmentation', + tools: 'packages/tools', +}; + +for (const [packageName, localPath] of Object.entries(localPackages)) { + const linkPath = path.join(nodeModulesRoot, packageName); + const targetPath = path.join(repoRoot, localPath); + + fs.rmSync(linkPath, { recursive: true, force: true }); + fs.symlinkSync(targetPath, linkPath, 'dir'); +} + +console.log(`Linked local Cornerstone packages into ${nodeModulesRoot}`); diff --git a/scripts/unlink-ohif-cornerstone-node-modules.mjs b/scripts/unlink-ohif-cornerstone-node-modules.mjs new file mode 100644 index 0000000000..90e42defce --- /dev/null +++ b/scripts/unlink-ohif-cornerstone-node-modules.mjs @@ -0,0 +1,80 @@ +#!/usr/bin/env node + +/** + * Removes symlinked Cornerstone packages from an OHIF project's node_modules + * and restores them from the registry. + * + * Counterpart to scripts/link-ohif-cornerstone-node-modules.mjs + * + * Usage: node scripts/unlink-ohif-cornerstone-node-modules.mjs + */ + +import fs from 'node:fs'; +import path from 'node:path'; +import { execSync } from 'node:child_process'; + +const [ohifDirArg] = process.argv.slice(2); + +if (!ohifDirArg) { + console.error( + 'Usage: node scripts/unlink-ohif-cornerstone-node-modules.mjs ' + ); + process.exit(1); +} + +const ohifDir = path.resolve(process.cwd(), ohifDirArg); +const nodeModulesRoot = path.join(ohifDir, 'node_modules', '@cornerstonejs'); + +if (!fs.existsSync(path.join(ohifDir, 'package.json'))) { + console.error(`Could not find OHIF package.json in ${ohifDir}`); + process.exit(1); +} + +if (!fs.existsSync(nodeModulesRoot)) { + console.error(`Could not find ${nodeModulesRoot}. Run install first.`); + process.exit(1); +} + +// Same package list as link-ohif-cornerstone-node-modules.mjs +const localPackages = { + adapters: 'packages/adapters', + ai: 'packages/ai', + core: 'packages/core', + 'dicom-image-loader': 'packages/dicomImageLoader', + 'labelmap-interpolation': 'packages/labelmap-interpolation', + 'nifti-volume-loader': 'packages/nifti-volume-loader', + 'polymorphic-segmentation': 'packages/polymorphic-segmentation', + tools: 'packages/tools', +}; + +let removed = 0; +for (const packageName of Object.keys(localPackages)) { + const linkPath = path.join(nodeModulesRoot, packageName); + try { + const stat = fs.lstatSync(linkPath); + if (stat.isSymbolicLink()) { + fs.rmSync(linkPath, { recursive: true }); + console.log(` Removed symlink: @cornerstonejs/${packageName}`); + removed++; + } + } catch { + // doesn't exist or not a symlink — skip + } +} + +if (removed === 0) { + console.log('No symlinks found — nothing to unlink.'); +} else { + console.log(`\nRemoved ${removed} symlink(s).`); +} + +// Restore packages from registry +console.log('\nRestoring packages from registry (yarn install --frozen-lockfile)...'); +try { + execSync('yarn install --frozen-lockfile', { cwd: ohifDir, stdio: 'inherit' }); +} catch { + console.log('Frozen lockfile install failed, retrying without --frozen-lockfile...'); + execSync('yarn install', { cwd: ohifDir, stdio: 'inherit' }); +} + +console.log('\nDone. Packages restored from registry.'); From ce9c20e35112ef5098f7060037053f59b1677c05 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Mon, 16 Mar 2026 20:32:54 +0000 Subject: [PATCH 53/90] chore(version): Update package versions to 4.20.0 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 161759ec73..3ce03bcce7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +### Features + +- **ohif-downstream:** Add CI workflow and scripts for OHIF downstream validation and testing ([#2657](https://github.com/cornerstonejs/cornerstone3D/issues/2657)) ([cc4b7cb](https://github.com/cornerstonejs/cornerstone3D/commit/cc4b7cb76d18679780bc2b8bc38f4da7f328fd29)) + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package root diff --git a/commit.txt b/commit.txt index b498ef905d..e25c51d272 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -1ce23ee6c878e1ad3ddb93f44fba51453a2f2228 \ No newline at end of file +cc4b7cb76d18679780bc2b8bc38f4da7f328fd29 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 9f82a59e46..5daf946c93 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.19.4", + "version": "4.20.0", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 0e21cc6c95..873bd30cf8 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 4f9fc4c67c..90e96e1009 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.19.4", + "version": "4.20.0", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.4", - "@cornerstonejs/tools": "4.19.4" + "@cornerstonejs/core": "4.20.0", + "@cornerstonejs/tools": "4.20.0" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 792d171907..fc3d22c495 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index cda0e20cc6..7219e32454 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.19.4", + "version": "4.20.0", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.4", - "@cornerstonejs/tools": "4.19.4" + "@cornerstonejs/core": "4.20.0", + "@cornerstonejs/tools": "4.20.0" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index fca76b0bd8..87aac4cbdc 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +### Features + +- **ohif-downstream:** Add CI workflow and scripts for OHIF downstream validation and testing ([#2657](https://github.com/cornerstonejs/cornerstone3D/issues/2657)) ([cc4b7cb](https://github.com/cornerstonejs/cornerstone3D/commit/cc4b7cb76d18679780bc2b8bc38f4da7f328fd29)) + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 528b58e20c..df715d8197 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.19.4", + "version": "4.20.0", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index bbd304f71d..d55614b695 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index fe756150f3..e8027d6a7a 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.19.4", + "version": "4.20.0", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.4", + "@cornerstonejs/core": "4.20.0", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 68a9a9228b..c5772e0353 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 5634a8f30e..4e847ca8dd 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.19.4", + "version": "4.20.0", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.4", - "@cornerstonejs/tools": "4.19.4", + "@cornerstonejs/core": "4.20.0", + "@cornerstonejs/tools": "4.20.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index ac9e32ba50..9b81c75aab 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 85286dbe83..ac7d6b4d45 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.19.4", + "version": "4.20.0", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.4" + "@cornerstonejs/core": "4.20.0" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index f6b61546ae..ec7da6b5bb 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 2f62bb744c..d485b958ec 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.19.4", + "version": "4.20.0", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.4", - "@cornerstonejs/tools": "4.19.4", + "@cornerstonejs/core": "4.20.0", + "@cornerstonejs/tools": "4.20.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index b742cf1144..5bde56449a 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.19.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.3...v4.19.4) (2026-03-13) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 91c06a98f8..75d2660f45 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.19.4", + "version": "4.20.0", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.19.4", + "@cornerstonejs/core": "4.20.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index cee5e63ff3..7abc36b825 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.19.4'; +export const version = '4.20.0'; diff --git a/version.json b/version.json index d2c6c0e98a..4a37343d46 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.19.4", - "commit": "1ce23ee6c878e1ad3ddb93f44fba51453a2f2228" + "version": "4.20.0", + "commit": "cc4b7cb76d18679780bc2b8bc38f4da7f328fd29" } \ No newline at end of file diff --git a/version.txt b/version.txt index 45a94dd8fc..a7752bacf1 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.19.4 \ No newline at end of file +4.20.0 \ No newline at end of file From f527b077a415ce8fbddf49873bd4fbadd1259945 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 31 Mar 2026 09:17:28 -0400 Subject: [PATCH 54/90] fix(htmlSetup): Uncomment form creation and append to content in setup function (#2681) --- packages/tools/examples/local/htmlSetup.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/tools/examples/local/htmlSetup.ts b/packages/tools/examples/local/htmlSetup.ts index c68597d927..431a76786b 100644 --- a/packages/tools/examples/local/htmlSetup.ts +++ b/packages/tools/examples/local/htmlSetup.ts @@ -18,12 +18,12 @@ function setup(document) { const content = document.getElementById('content'); // Form - // const form = document.createElement('form'); - // form.style.marginBottom = '20px'; - // const formInput = document.createElement('input'); - // formInput.id = 'selectFile'; - // formInput.type = 'file'; - // form.appendChild(formInput); + const form = document.createElement('form'); + form.style.marginBottom = '20px'; + const formInput = document.createElement('input'); + formInput.id = 'selectFile'; + formInput.type = 'file'; + form.appendChild(formInput); // image div const element = document.createElement('div'); @@ -60,7 +60,7 @@ function setup(document) { createMetadataRow('Window Width', metadata); createMetadataRow('Window Center', metadata); - // content.appendChild(form); + content.appendChild(form); content.appendChild(div); return { element }; From 60cd9675dc59372bef445ff5f4c20ad600a4aa6a Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Tue, 31 Mar 2026 13:21:07 +0000 Subject: [PATCH 55/90] chore(version): Update package versions to 4.20.1 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ce03bcce7..8a1c12446a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +### Bug Fixes + +- **htmlSetup:** Uncomment form creation and append to content in setup function ([#2681](https://github.com/cornerstonejs/cornerstone3D/issues/2681)) ([90acd90](https://github.com/cornerstonejs/cornerstone3D/commit/90acd90cdc36844ef20a8f65509bc8c467219101)) + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) ### Features diff --git a/commit.txt b/commit.txt index e25c51d272..17598f07f8 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -cc4b7cb76d18679780bc2b8bc38f4da7f328fd29 \ No newline at end of file +90acd90cdc36844ef20a8f65509bc8c467219101 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 5daf946c93..90cc2d5c2f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.20.0", + "version": "4.20.1", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 873bd30cf8..74a827a2b9 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +**Note:** Version bump only for package @cornerstonejs/adapters + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 90e96e1009..1ddfb06ea3 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.20.0", + "version": "4.20.1", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.0", - "@cornerstonejs/tools": "4.20.0" + "@cornerstonejs/core": "4.20.1", + "@cornerstonejs/tools": "4.20.1" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index fc3d22c495..6d601f8079 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +**Note:** Version bump only for package @cornerstonejs/ai + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 7219e32454..a8c6837f9a 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.20.0", + "version": "4.20.1", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.0", - "@cornerstonejs/tools": "4.20.0" + "@cornerstonejs/core": "4.20.1", + "@cornerstonejs/tools": "4.20.1" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 87aac4cbdc..9fdc33858a 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +**Note:** Version bump only for package @cornerstonejs/core + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) ### Features diff --git a/packages/core/package.json b/packages/core/package.json index df715d8197..f8faa963f4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.20.0", + "version": "4.20.1", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index d55614b695..abb04c29a8 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index e8027d6a7a..64aa96e328 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.20.0", + "version": "4.20.1", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.0", + "@cornerstonejs/core": "4.20.1", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index c5772e0353..e64427cd99 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 4e847ca8dd..74634467c7 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.20.0", + "version": "4.20.1", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.0", - "@cornerstonejs/tools": "4.20.0", + "@cornerstonejs/core": "4.20.1", + "@cornerstonejs/tools": "4.20.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 9b81c75aab..7d4ba33293 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index ac7d6b4d45..df66e44cd9 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.20.0", + "version": "4.20.1", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.0" + "@cornerstonejs/core": "4.20.1" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index ec7da6b5bb..ff80bbcf7a 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index d485b958ec..870b398a88 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.20.0", + "version": "4.20.1", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.0", - "@cornerstonejs/tools": "4.20.0", + "@cornerstonejs/core": "4.20.1", + "@cornerstonejs/tools": "4.20.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 5bde56449a..50497f66d2 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) + +### Bug Fixes + +- **htmlSetup:** Uncomment form creation and append to content in setup function ([#2681](https://github.com/cornerstonejs/cornerstone3D/issues/2681)) ([90acd90](https://github.com/cornerstonejs/cornerstone3D/commit/90acd90cdc36844ef20a8f65509bc8c467219101)) + # [4.20.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.19.4...v4.20.0) (2026-03-16) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 75d2660f45..b3b29e401f 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.20.0", + "version": "4.20.1", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.0", + "@cornerstonejs/core": "4.20.1", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 7abc36b825..7177979b13 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.0'; +export const version = '4.20.1'; diff --git a/version.json b/version.json index 4a37343d46..4a67ca132f 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.20.0", - "commit": "cc4b7cb76d18679780bc2b8bc38f4da7f328fd29" + "version": "4.20.1", + "commit": "90acd90cdc36844ef20a8f65509bc8c467219101" } \ No newline at end of file diff --git a/version.txt b/version.txt index a7752bacf1..f1db28b209 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.20.0 \ No newline at end of file +4.20.1 \ No newline at end of file From 8620bae51e99fbaaac3a5152710eb4d81892daa1 Mon Sep 17 00:00:00 2001 From: Ghadeer Albattarni <165973963+GhadeerAlbattarni@users.noreply.github.com> Date: Thu, 2 Apr 2026 09:57:41 -0400 Subject: [PATCH 56/90] fix(tools): no active segmentation error toast when hovering over viewport without segmentation (#2683) --- .../tools/src/tools/segmentation/BrushTool.ts | 17 ++++++++++++++++- .../src/tools/segmentation/LabelmapBaseTool.ts | 9 --------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/tools/src/tools/segmentation/BrushTool.ts b/packages/tools/src/tools/segmentation/BrushTool.ts index 627c0646d8..fa35177620 100644 --- a/packages/tools/src/tools/segmentation/BrushTool.ts +++ b/packages/tools/src/tools/segmentation/BrushTool.ts @@ -1,4 +1,4 @@ -import { getEnabledElement, eventTarget } from '@cornerstonejs/core'; +import { getEnabledElement, eventTarget, Enums } from '@cornerstonejs/core'; import type { Types } from '@cornerstonejs/core'; import { vec3, vec2 } from 'gl-matrix'; import { Events, ToolModes, StrategyCallbacks } from '../../enums'; @@ -30,6 +30,7 @@ import { import triggerAnnotationRenderForViewportUIDs from '../../utilities/triggerAnnotationRenderForViewportIds'; import LabelmapBaseTool from './LabelmapBaseTool'; import { getStrategyData } from './strategies/utils/getStrategyData'; +import { getActiveSegmentation } from '../../stateManagement/segmentation/getActiveSegmentation'; /** * @public @@ -189,6 +190,20 @@ class BrushTool extends LabelmapBaseTool { const enabledElement = getEnabledElement(element); const { viewport } = enabledElement; + const activeSegmentation = getActiveSegmentation(viewport.id); + if (!activeSegmentation) { + const event = new CustomEvent(Enums.Events.ERROR_EVENT, { + detail: { + type: 'Segmentation', + message: + 'No active segmentation detected, create a segmentation representation before using the brush tool', + }, + cancelable: true, + }); + eventTarget.dispatchEvent(event); + return false; + } + // @ts-expect-error this._editData = this.createEditData(element); this._activateDraw(element); diff --git a/packages/tools/src/tools/segmentation/LabelmapBaseTool.ts b/packages/tools/src/tools/segmentation/LabelmapBaseTool.ts index d005651826..8ed105df27 100644 --- a/packages/tools/src/tools/segmentation/LabelmapBaseTool.ts +++ b/packages/tools/src/tools/segmentation/LabelmapBaseTool.ts @@ -251,15 +251,6 @@ export default class LabelmapBaseTool extends BaseTool { const activeSegmentation = getActiveSegmentation(viewport.id); if (!activeSegmentation) { - const event = new CustomEvent(Enums.Events.ERROR_EVENT, { - detail: { - type: 'Segmentation', - message: - 'No active segmentation detected, create a segmentation representation before using the brush tool', - }, - cancelable: true, - }); - eventTarget.dispatchEvent(event); return null; } From 9b4822d6c76ff91e68161447ee516dc2cf773bf7 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Thu, 2 Apr 2026 14:01:25 +0000 Subject: [PATCH 57/90] chore(version): Update package versions to 4.20.2 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a1c12446a..6a3ea5470c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +### Bug Fixes + +- **tools:** no active segmentation error toast when hovering over viewport without segmentation ([#2683](https://github.com/cornerstonejs/cornerstone3D/issues/2683)) ([a7e4ea1](https://github.com/cornerstonejs/cornerstone3D/commit/a7e4ea13c58f6ac6dd26677c0d9ece697b5d57e9)) + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 17598f07f8..1dd9f9295c 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -90acd90cdc36844ef20a8f65509bc8c467219101 \ No newline at end of file +a7e4ea13c58f6ac6dd26677c0d9ece697b5d57e9 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 90cc2d5c2f..44dc46670d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.20.1", + "version": "4.20.2", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 74a827a2b9..8ffe62ec38 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 1ddfb06ea3..d5398bec70 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.20.1", + "version": "4.20.2", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.1", - "@cornerstonejs/tools": "4.20.1" + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 6d601f8079..ee44df00ba 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index a8c6837f9a..43ed59351c 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.20.1", + "version": "4.20.2", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.1", - "@cornerstonejs/tools": "4.20.1" + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 9fdc33858a..218d5e1617 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index f8faa963f4..e58224ac03 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.20.1", + "version": "4.20.2", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index abb04c29a8..c833bc7f35 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 64aa96e328..a2d5e36313 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.20.1", + "version": "4.20.2", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.1", + "@cornerstonejs/core": "4.20.2", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index e64427cd99..602ce1f865 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 74634467c7..573d88b8f6 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.20.1", + "version": "4.20.2", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.1", - "@cornerstonejs/tools": "4.20.1", + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 7d4ba33293..7763afdea7 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index df66e44cd9..83ff802e46 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.20.1", + "version": "4.20.2", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.1" + "@cornerstonejs/core": "4.20.2" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index ff80bbcf7a..435ad7946d 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 870b398a88..953907229c 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.20.1", + "version": "4.20.2", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.1", - "@cornerstonejs/tools": "4.20.1", + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 50497f66d2..2e75ddabb8 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) + +### Bug Fixes + +- **tools:** no active segmentation error toast when hovering over viewport without segmentation ([#2683](https://github.com/cornerstonejs/cornerstone3D/issues/2683)) ([a7e4ea1](https://github.com/cornerstonejs/cornerstone3D/commit/a7e4ea13c58f6ac6dd26677c0d9ece697b5d57e9)) + ## [4.20.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.0...v4.20.1) (2026-03-31) ### Bug Fixes diff --git a/packages/tools/package.json b/packages/tools/package.json index b3b29e401f..24dea25e7f 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.20.1", + "version": "4.20.2", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.1", + "@cornerstonejs/core": "4.20.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 7177979b13..8d151f8bf8 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.1'; +export const version = '4.20.2'; diff --git a/version.json b/version.json index 4a67ca132f..3a193febba 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.20.1", - "commit": "90acd90cdc36844ef20a8f65509bc8c467219101" + "version": "4.20.2", + "commit": "a7e4ea13c58f6ac6dd26677c0d9ece697b5d57e9" } \ No newline at end of file diff --git a/version.txt b/version.txt index f1db28b209..1701be300e 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.20.1 \ No newline at end of file +4.20.2 \ No newline at end of file From 22d830caeafcc33d549b81a9a73d3c769be026f0 Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 2 Apr 2026 14:35:20 -0400 Subject: [PATCH 58/90] fix(annotation): Enhance getTextBoxCoordsCanvas to use all annotation points for default textbox position and improve corner determination logic (#2686) --- .../drawing/getTextBoxCoordsCanvas.spec.ts | 26 ++++++---- .../drawing/getTextBoxCoordsCanvas.ts | 48 ++++++++++++------- 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts index 8f6263217f..50529d3b54 100644 --- a/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts +++ b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.spec.ts @@ -38,6 +38,20 @@ describe('getTextBoxCoordsCanvas', () => { expect(coords[1]).toBe(110); }); + it('uses all annotation points when determining the default textbox position', () => { + const bidirectionalPoints = [ + [100, 100], + [120, 120], + [160, 70], + [140, 170], + ] as [number, number][]; + + const coords = getTextBoxCoordsCanvas(bidirectionalPoints); + + expect(coords[0]).toBe(160); + expect(coords[1]).toBe(120); + }); + it('nudges downward when the default textbox overlaps an existing one', () => { const { element, svgLayer } = createViewportElement(500, 400); @@ -48,11 +62,7 @@ describe('getTextBoxCoordsCanvas', () => { height: 67, }); - const coords = getTextBoxCoordsCanvas( - annotationPoints, - element, - textLines - ); + const coords = getTextBoxCoordsCanvas(annotationPoints, element, textLines); // blocker.y + blocker.height + gap(6) expect(coords[0]).toBe(120); @@ -73,11 +83,7 @@ describe('getTextBoxCoordsCanvas', () => { height: 67, }); - const coords = getTextBoxCoordsCanvas( - lowerPoints, - element, - textLines - ); + const coords = getTextBoxCoordsCanvas(lowerPoints, element, textLines); // blocker.y - candidate.height - gap(6) expect(coords[0]).toBe(120); diff --git a/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts index d999d9fb50..9fd9e3bb15 100644 --- a/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts +++ b/packages/tools/src/utilities/drawing/getTextBoxCoordsCanvas.ts @@ -212,20 +212,41 @@ function _findSvgLayer(element: HTMLDivElement): Element | null { } /** - * Determine the handles that have the min/max x and y values. - * Handles single-point annotations (e.g. Probe): left/right/top/bottom all equal that point. + * Determine the handles that have the min/max x and y values across the full + * annotation geometry. + * + * Handles single-point annotations (e.g. Probe): left/right/top/bottom all + * equal that point. */ function _determineCorners(canvasPoints: Array) { - const p0 = canvasPoints[0]; - if (!p0 || canvasPoints.length < 2) { + const validPoints = canvasPoints.filter(Boolean); + const p0 = validPoints[0]; + + if (!p0 || validPoints.length < 2) { return { left: p0, right: p0, top: p0, bottom: p0 }; } - const handlesLeftToRight = [canvasPoints[0], canvasPoints[1]].sort(_compareX); - const handlesTopToBottom = [canvasPoints[0], canvasPoints[1]].sort(_compareY); - const left = handlesLeftToRight[0]; - const right = handlesLeftToRight[handlesLeftToRight.length - 1]; - const top = handlesTopToBottom[0]; - const bottom = handlesTopToBottom[handlesTopToBottom.length - 1]; + + let left = p0; + let right = p0; + let top = p0; + let bottom = p0; + + for (let i = 1; i < validPoints.length; i++) { + const point = validPoints[i]; + + if (point[0] < left[0]) { + left = point; + } + if (point[0] > right[0]) { + right = point; + } + if (point[1] < top[1]) { + top = point; + } + if (point[1] > bottom[1]) { + bottom = point; + } + } return { left, @@ -233,13 +254,6 @@ function _determineCorners(canvasPoints: Array) { bottom, right, }; - - function _compareX(a, b) { - return a[0] < b[0] ? -1 : 1; - } - function _compareY(a, b) { - return a[1] < b[1] ? -1 : 1; - } } /** From e92e048ab29797e89d1c320962d51d0c4725338c Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Thu, 2 Apr 2026 18:39:04 +0000 Subject: [PATCH 59/90] chore(version): Update package versions to 4.20.3 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a3ea5470c..de87b38ff5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +### Bug Fixes + +- **annotation:** Enhance getTextBoxCoordsCanvas to use all annotation points for default textbox position and improve corner determination logic ([#2686](https://github.com/cornerstonejs/cornerstone3D/issues/2686)) ([11bfc2b](https://github.com/cornerstonejs/cornerstone3D/commit/11bfc2bb90571bd672c8627f812cc0118658be97)) + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 1dd9f9295c..e7bc7233be 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -a7e4ea13c58f6ac6dd26677c0d9ece697b5d57e9 \ No newline at end of file +11bfc2bb90571bd672c8627f812cc0118658be97 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 44dc46670d..f8d42ba0f1 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.20.2", + "version": "4.20.3", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 8ffe62ec38..baf6009283 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index d5398bec70..1aa78f05fd 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.20.2", + "version": "4.20.3", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2" + "@cornerstonejs/core": "4.20.3", + "@cornerstonejs/tools": "4.20.3" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index ee44df00ba..cd400cf232 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 43ed59351c..ac4f92a0d0 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.20.2", + "version": "4.20.3", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2" + "@cornerstonejs/core": "4.20.3", + "@cornerstonejs/tools": "4.20.3" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 218d5e1617..62ff19d307 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index e58224ac03..c4a5decd48 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.20.2", + "version": "4.20.3", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index c833bc7f35..356dfcbfcc 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index a2d5e36313..5d4b6c95c8 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.20.2", + "version": "4.20.3", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/core": "4.20.3", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 602ce1f865..e33563f7aa 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 573d88b8f6..1a28ac4721 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.20.2", + "version": "4.20.3", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2", + "@cornerstonejs/core": "4.20.3", + "@cornerstonejs/tools": "4.20.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 7763afdea7..4476f79537 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 83ff802e46..7618289ab7 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.20.2", + "version": "4.20.3", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2" + "@cornerstonejs/core": "4.20.3" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 435ad7946d..8f12e157d0 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 953907229c..bdba608a9f 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.20.2", + "version": "4.20.3", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2", + "@cornerstonejs/core": "4.20.3", + "@cornerstonejs/tools": "4.20.3", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 2e75ddabb8..34f206f9e3 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) + +### Bug Fixes + +- **annotation:** Enhance getTextBoxCoordsCanvas to use all annotation points for default textbox position and improve corner determination logic ([#2686](https://github.com/cornerstonejs/cornerstone3D/issues/2686)) ([11bfc2b](https://github.com/cornerstonejs/cornerstone3D/commit/11bfc2bb90571bd672c8627f812cc0118658be97)) + ## [4.20.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.1...v4.20.2) (2026-04-02) ### Bug Fixes diff --git a/packages/tools/package.json b/packages/tools/package.json index 24dea25e7f..9b8176f4e4 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.20.2", + "version": "4.20.3", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/core": "4.20.3", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 8d151f8bf8..0f90929457 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.2'; +export const version = '4.20.3'; diff --git a/version.json b/version.json index 3a193febba..90de506a56 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.20.2", - "commit": "a7e4ea13c58f6ac6dd26677c0d9ece697b5d57e9" + "version": "4.20.3", + "commit": "11bfc2bb90571bd672c8627f812cc0118658be97" } \ No newline at end of file diff --git a/version.txt b/version.txt index 1701be300e..be77eb050d 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.20.2 \ No newline at end of file +4.20.3 \ No newline at end of file From e676148da1938603d48afa5dd01868f1d80aef67 Mon Sep 17 00:00:00 2001 From: Joe Boccanfuso <109477394+jbocce@users.noreply.github.com> Date: Thu, 2 Apr 2026 18:05:20 -0400 Subject: [PATCH 60/90] fix(security): update dependencies to fix security vulnerabilities (#2687) --- .circleci/config.yml | 1 + bun.lock | 61 +++++++++++++++++++++++--------------------- package.json | 11 +++++--- yarn.lock | 52 ++++++++++++++++++------------------- 4 files changed, 66 insertions(+), 59 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 774c61bc65..5ebd421589 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,6 +52,7 @@ jobs: # CVE-2026-26996 - minimatch via other packages are strictly for building and CI/CD purposes; no user supplied expressions are passed to minimatch "GHSA-7r86-cg39-jmmj" # CVE-2026-27903 - minimatch same as above "GHSA-23c5-xmqv-rm74" # CVE-2026-27904 - minimatch same as above + "GHSA-c2c7-rcm5-vvqj" # CVE-2026-33671 - picomatch is generally used for development and CI/CD purposes ) # Build ignore flags diff --git a/bun.lock b/bun.lock index 12bcd68946..6ee7b4f147 100644 --- a/bun.lock +++ b/bun.lock @@ -119,7 +119,7 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -128,13 +128,13 @@ "ndarray": "1.0.19", }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2", + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2", }, }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -146,13 +146,13 @@ "onnxruntime-web": "1.17.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2", + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2", }, }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -162,7 +162,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -175,48 +175,48 @@ "uuid": "9.0.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/core": "4.20.2", "dicom-parser": "1.8.21", }, }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2", + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2", "@kitware/vtk.js": "34.15.1", }, }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "nifti-reader-js": "0.6.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/core": "4.20.2", }, }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", - "@cornerstonejs/tools": "4.19.2", + "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/tools": "4.20.2", "@kitware/vtk.js": "34.15.1", }, }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.19.2", + "version": "4.20.2", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", @@ -226,7 +226,7 @@ "canvas": "3.2.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.19.2", + "@cornerstonejs/core": "4.20.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", @@ -244,13 +244,16 @@ "caniuse-lite": "1.0.30001767", "canvas": "3.2.0", "dcmjs": "0.49.4", - "flatted": "3.4.0", - "lodash": "4.17.23", - "node-forge": "1.3.2", + "flatted": "3.4.2", + "handlebars": "4.7.9", + "lodash": "4.18.1", + "node-forge": "1.4.0", + "path-to-regexp": "0.1.13", "qs": "6.14.1", "rollup": "3.30.0", "serialize-javascript": "7.0.4", "shelljs": "0.10.0", + "socket.io-parser": "4.2.6", "svgo": "3.3.3", "tar": "7.5.11", "tar-fs": "2.1.4", @@ -1883,7 +1886,7 @@ "flatbuffers": ["flatbuffers@1.12.0", "", {}, "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ=="], - "flatted": ["flatted@3.4.0", "", {}, "sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw=="], + "flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="], "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], @@ -1981,7 +1984,7 @@ "handle-thing": ["handle-thing@2.0.1", "", {}, "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="], - "handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="], + "handlebars": ["handlebars@4.7.9", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ=="], "hard-rejection": ["hard-rejection@2.1.0", "", {}, "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA=="], @@ -2355,7 +2358,7 @@ "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], - "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], "lodash.clonedeep": ["lodash.clonedeep@4.5.0", "", {}, "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="], @@ -2511,7 +2514,7 @@ "node-fetch": ["node-fetch@2.6.7", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ=="], - "node-forge": ["node-forge@1.3.2", "", {}, "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw=="], + "node-forge": ["node-forge@1.4.0", "", {}, "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ=="], "node-gyp": ["node-gyp@12.2.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "make-fetch-happen": "^15.0.0", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ=="], @@ -2657,7 +2660,7 @@ "path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="], - "path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="], + "path-to-regexp": ["path-to-regexp@0.1.13", "", {}, "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="], "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], @@ -3057,7 +3060,7 @@ "socket.io-adapter": ["socket.io-adapter@2.5.5", "", { "dependencies": { "debug": "~4.3.4", "ws": "~8.17.1" } }, "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg=="], - "socket.io-parser": ["socket.io-parser@4.2.4", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" } }, "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew=="], + "socket.io-parser": ["socket.io-parser@4.2.6", "", { "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.4.1" } }, "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg=="], "sockjs": ["sockjs@0.3.24", "", { "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ=="], @@ -4305,7 +4308,7 @@ "socket.io-adapter/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], - "socket.io-parser/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + "socket.io-parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "sockjs/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], diff --git a/package.json b/package.json index a787a70210..8d5d7fe0fc 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "install:update-lockfile": "yarn install && bun install --config=./bunfig.update-lockfile.toml", "install:yarn:frozen-lockfile": "echo Deprecated in favor of install:frozen && yarn install:frozen", "install:frozen": "yarn install --frozen-lockfile", - "audit": "bun audit --ignore=GHSA-5j98-mcp5-4vw2 --ignore=GHSA-3ppc-4f35-3m26 --ignore=GHSA-7r86-cg39-jmmj --ignore=GHSA-23c5-xmqv-rm74", + "audit": "bun audit --ignore=GHSA-5j98-mcp5-4vw2 --ignore=GHSA-3ppc-4f35-3m26 --ignore=GHSA-7r86-cg39-jmmj --ignore=GHSA-23c5-xmqv-rm74 --ignore=GHSA-c2c7-rcm5-vvqj", "preinstall": "node preinstall.js", "prepare": "husky", "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"", @@ -189,19 +189,22 @@ "caniuse-lite": "1.0.30001767", "axios": "1.13.5", "buffer": "6.0.3", - "node-forge": "1.3.2", + "node-forge": "1.4.0", "canvas": "3.2.0", "dcmjs": "0.49.4", "tar-fs": "2.1.4", "body-parser": "1.20.3", "ws": "8.18.3", "qs": "6.14.1", - "lodash": "4.17.23", + "lodash": "4.18.1", "tar": "7.5.11", "shelljs": "0.10.0", "rollup": "3.30.0", "serialize-javascript": "7.0.4", "svgo": "3.3.3", - "flatted": "3.4.0" + "flatted": "3.4.2", + "socket.io-parser": "4.2.6", + "handlebars": "4.7.9", + "path-to-regexp": "0.1.13" } } diff --git a/yarn.lock b/yarn.lock index 555dba2a4c..6734688b2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6281,7 +6281,7 @@ debug@^4.4.1: dependencies: ms "^2.1.3" -debug@^4.4.3: +debug@^4.4.3, debug@~4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -7435,10 +7435,10 @@ flatbuffers@^1.12.0: resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== -flatted@3.4.0, flatted@^3.2.7, flatted@^3.2.9: - version "3.4.0" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.0.tgz#92ab2efec9b272eb85a3a25a106c3afbbc990d8b" - integrity sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw== +flatted@3.4.2, flatted@^3.2.7, flatted@^3.2.9: + version "3.4.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" + integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== follow-redirects@1.15.9: version "1.15.9" @@ -7957,10 +7957,10 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== +handlebars@4.7.9, handlebars@^4.7.7: + version "4.7.9" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.9.tgz#6f139082ab58dc4e5a0e51efe7db5ae890d56a0f" + integrity sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ== dependencies: minimist "^1.2.5" neo-async "^2.6.2" @@ -10014,10 +10014,10 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.23, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.23: - version "4.17.23" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" - integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== +lodash@4.18.1, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.23: + version "4.18.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" + integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== log-symbols@^4.0.0: version "4.1.0" @@ -10735,10 +10735,10 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-forge@1.3.2, node-forge@^1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.2.tgz#d0d2659a26eef778bf84d73e7f55c08144ee7750" - integrity sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw== +node-forge@1.4.0, node-forge@^1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.4.0.tgz#1c7b7d8bdc2d078739f58287d589d903a11b2fc2" + integrity sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ== node-gyp@^12.1.0: version "12.2.0" @@ -11665,10 +11665,10 @@ path-scurry@^2.0.2: lru-cache "^11.0.0" minipass "^7.1.2" -path-to-regexp@0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" - integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== +path-to-regexp@0.1.12, path-to-regexp@0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" + integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== path-type@^3.0.0: version "3.0.0" @@ -13417,13 +13417,13 @@ socket.io-adapter@~2.5.2: debug "~4.3.4" ws "~8.17.1" -socket.io-parser@~4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" - integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== +socket.io-parser@4.2.6, socket.io-parser@~4.2.4: + version "4.2.6" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.6.tgz#19156bf179af3931abd05260cfb1491822578a6f" + integrity sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg== dependencies: "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" + debug "~4.4.1" socket.io@^4.7.2: version "4.7.5" From c14ae005f07b0f8e2fec9ab71c2b88adbd25a3e5 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Thu, 2 Apr 2026 22:08:45 +0000 Subject: [PATCH 61/90] chore(version): Update package versions to 4.20.4 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 71 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de87b38ff5..5fe8b09afd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +### Bug Fixes + +- **security:** update dependencies to fix security vulnerabilities ([#2687](https://github.com/cornerstonejs/cornerstone3D/issues/2687)) ([77c553b](https://github.com/cornerstonejs/cornerstone3D/commit/77c553b0851be285b02c218bc2ae9ae21a44b5ee)) + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) ### Bug Fixes diff --git a/commit.txt b/commit.txt index e7bc7233be..8ec91cc7a6 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -11bfc2bb90571bd672c8627f812cc0118658be97 \ No newline at end of file +77c553b0851be285b02c218bc2ae9ae21a44b5ee \ No newline at end of file diff --git a/lerna.json b/lerna.json index f8d42ba0f1..03919ee295 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.20.3", + "version": "4.20.4", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index baf6009283..1931f2bf01 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 1aa78f05fd..6f78d0ec0e 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.20.3", + "version": "4.20.4", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.3", - "@cornerstonejs/tools": "4.20.3" + "@cornerstonejs/core": "4.20.4", + "@cornerstonejs/tools": "4.20.4" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index cd400cf232..41626b1e4b 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index ac4f92a0d0..4e5879b9df 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.20.3", + "version": "4.20.4", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.3", - "@cornerstonejs/tools": "4.20.3" + "@cornerstonejs/core": "4.20.4", + "@cornerstonejs/tools": "4.20.4" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 62ff19d307..bf01711bb7 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index c4a5decd48..7a2ac64b6c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.20.3", + "version": "4.20.4", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 356dfcbfcc..aab8c4b3da 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 5d4b6c95c8..324219fe8e 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.20.3", + "version": "4.20.4", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.3", + "@cornerstonejs/core": "4.20.4", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index e33563f7aa..0516fca799 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 1a28ac4721..f2fbdd031c 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.20.3", + "version": "4.20.4", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.3", - "@cornerstonejs/tools": "4.20.3", + "@cornerstonejs/core": "4.20.4", + "@cornerstonejs/tools": "4.20.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 4476f79537..68b34e9496 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 7618289ab7..44a5fc00b2 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.20.3", + "version": "4.20.4", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.3" + "@cornerstonejs/core": "4.20.4" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 8f12e157d0..0b93505224 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index bdba608a9f..cb81243001 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.20.3", + "version": "4.20.4", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.3", - "@cornerstonejs/tools": "4.20.3", + "@cornerstonejs/core": "4.20.4", + "@cornerstonejs/tools": "4.20.4", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 34f206f9e3..4ee5c5510a 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.20.3](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.2...v4.20.3) (2026-04-02) ### Bug Fixes diff --git a/packages/tools/package.json b/packages/tools/package.json index 9b8176f4e4..3ffbf445cb 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.20.3", + "version": "4.20.4", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.3", + "@cornerstonejs/core": "4.20.4", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index 0f90929457..ccee0e4cb0 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.3'; +export const version = '4.20.4'; diff --git a/version.json b/version.json index 90de506a56..9c18489d7b 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.20.3", - "commit": "11bfc2bb90571bd672c8627f812cc0118658be97" + "version": "4.20.4", + "commit": "77c553b0851be285b02c218bc2ae9ae21a44b5ee" } \ No newline at end of file diff --git a/version.txt b/version.txt index be77eb050d..b101027b10 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.20.3 \ No newline at end of file +4.20.4 \ No newline at end of file From e1a60be279c3d8a7c46c8584b358cbc2346c8425 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 6 Apr 2026 11:59:25 -0400 Subject: [PATCH 62/90] feat: Crosshairs minimal mode and add jump on click with modifier key (#2673) * fix: move crosshairs implementation to absolute camera instead of delta * refactor(CrosshairsTool): remove unused methods and streamline viewport listener management * refactor(CrosshairsTool): consolidate viewport listener management and deprecate unused methods * refactor(CrosshairsTool): simplify viewport iteration using forEach and improve early returns * feat: crosshairs minimal mode * feat(crosshairs): add passive mouse down callback for modifier-aware clicks * feat(crosshairs): enhance dropdown options and streamline configuration management * feat(crosshairs): add crosshairs binding modes example and update CrosshairsTool configuration --- packages/tools/examples/crossHairs/index.ts | 33 ++ .../examples/crossHairsBindings/index.ts | 285 ++++++++++++++++++ packages/tools/src/tools/CrosshairsTool.ts | 206 +++++++++---- utils/ExampleRunner/example-info.json | 4 + 4 files changed, 474 insertions(+), 54 deletions(-) create mode 100644 packages/tools/examples/crossHairsBindings/index.ts diff --git a/packages/tools/examples/crossHairs/index.ts b/packages/tools/examples/crossHairs/index.ts index bb8b43c589..dea648f189 100644 --- a/packages/tools/examples/crossHairs/index.ts +++ b/packages/tools/examples/crossHairs/index.ts @@ -88,6 +88,7 @@ instructions.innerText = ` Basic controls: - Click/Drag anywhere in the viewport to move the center of the crosshairs. - Drag a reference line to move it, scrolling the other views. + - Use the Crosshair Style dropdown to switch to a minimal crosshair. Advanced controls: Hover over a line and find the following two handles: - Square (closest to center): Drag these to change the thickness of the MIP slab in that plane. @@ -260,6 +261,38 @@ addDropdownToToolbar({ }, }); +addDropdownToToolbar({ + labelText: 'Crosshair Style', + options: { + values: Array.from(CrosshairsTool.minimalModeExamples.keys()), + labels: Array.from(CrosshairsTool.minimalModeExamples.keys()), + defaultValue: 'Default', + }, + onSelectedValueChange: (selectedValue) => { + const toolGroup = ToolGroupManager.getToolGroup(toolGroupId); + + const crosshairsInstance = toolGroup.getToolInstance( + CrosshairsTool.toolName + ); + const minimalConfiguration = + CrosshairsTool.minimalModeExamples.get(selectedValue); + + if (!minimalConfiguration) { + return; + } + + const oldConfiguration = crosshairsInstance.configuration; + + crosshairsInstance.configuration = { + ...oldConfiguration, + minimal: { ...minimalConfiguration }, + }; + + const renderingEngine = getRenderingEngine(renderingEngineId); + renderingEngine.render(); + }, +}); + function setUpSynchronizers() { synchronizer = createSlabThicknessSynchronizer(synchronizerId); diff --git a/packages/tools/examples/crossHairsBindings/index.ts b/packages/tools/examples/crossHairsBindings/index.ts new file mode 100644 index 0000000000..0f0ceba0c2 --- /dev/null +++ b/packages/tools/examples/crossHairsBindings/index.ts @@ -0,0 +1,285 @@ +import type { Types } from '@cornerstonejs/core'; +import type { Types as csToolsTypes } from '@cornerstonejs/tools'; +import { + RenderingEngine, + Enums, + setVolumesForViewports, + volumeLoader, + getRenderingEngine, +} from '@cornerstonejs/core'; +import { + initDemo, + createImageIdsAndCacheMetaData, + setTitleAndDescription, + setCtTransferFunctionForVolumeActor, + addCheckboxToToolbar, + addManipulationBindings, + getLocalUrl, + addButtonToToolbar, +} from '../../../../utils/demo/helpers'; +import * as cornerstoneTools from '@cornerstonejs/tools'; + +console.warn( + 'Click on index.ts to open source code for this example --------->' +); + +const { + ToolGroupManager, + Enums: csToolsEnums, + CrosshairsTool, + WindowLevelTool, + ZoomTool, +} = cornerstoneTools; + +const { MouseBindings, KeyboardBindings } = csToolsEnums; +const { ViewportType } = Enums; + +const volumeName = 'CT_VOLUME_ID'; +const volumeLoaderScheme = 'cornerstoneStreamingImageVolume'; +const volumeId = `${volumeLoaderScheme}:${volumeName}`; +const toolGroupId = 'CROSSHAIRS_BINDINGS_TOOLGROUP_ID'; +const viewportId1 = 'CROSSHAIRS_BINDINGS_AXIAL'; +const viewportId2 = 'CROSSHAIRS_BINDINGS_SAGITTAL'; +const viewportId3 = 'CROSSHAIRS_BINDINGS_CORONAL'; +const viewportIds = [viewportId1, viewportId2, viewportId3]; +const renderingEngineId = 'crosshairsBindingsRenderingEngine'; +let usePrimaryClickForCrosshairs = true; + +setTitleAndDescription( + 'Crosshairs Binding Modes', + 'Demonstrates Crosshairs as a normal active tool binding. Use the toolbar checkbox to switch between Crosshairs on left click and Crosshairs on Shift plus left click while Window/Level stays on left click.' +); + +const size = '500px'; +const content = document.getElementById('content'); +const viewportGrid = document.createElement('div'); + +viewportGrid.style.display = 'flex'; +viewportGrid.style.flexDirection = 'row'; + +const element1 = document.createElement('div'); +const element2 = document.createElement('div'); +const element3 = document.createElement('div'); + +for (const element of [element1, element2, element3]) { + element.style.width = size; + element.style.height = size; + element.oncontextmenu = (e) => e.preventDefault(); + viewportGrid.appendChild(element); +} + +content.appendChild(viewportGrid); + +const instructions = document.createElement('p'); +content.append(instructions); + +function updateInstructions(usePrimaryClick: boolean) { + const crosshairsBinding = usePrimaryClick + ? 'Left click/drag anywhere in a viewport to move the center of the crosshairs.' + : 'Shift + left click/drag anywhere in a viewport to move the center of the crosshairs.'; + const companionBinding = usePrimaryClick + ? 'Right click zooms.' + : 'Left click/drag applies Window/Level, and right click zooms.'; + + instructions.innerText = ` + Basic controls: + - ${crosshairsBinding} + - ${companionBinding} + - Drag a reference line to move it, scrolling the other views. + - Toggle the toolbar checkbox to switch Crosshairs between primary click and Shift + primary click bindings. + + Advanced controls: + - Square handle (closest to center): Drag to change slab thickness in that plane. + - Circle handle (further from center): Drag to rotate the axes. + `; +} + +function applyCrosshairsBindings( + toolGroup: csToolsTypes.IToolGroup, + usePrimaryClick: boolean +) { + // setToolActive merges bindings, so reset the tools that swap between demo modes. + toolGroup.setToolDisabled(CrosshairsTool.toolName); + toolGroup.setToolDisabled(WindowLevelTool.toolName); + toolGroup.setToolDisabled(ZoomTool.toolName); + + if (usePrimaryClick) { + toolGroup.setToolActive(ZoomTool.toolName, { + bindings: [{ mouseButton: MouseBindings.Secondary }], + }); + toolGroup.setToolActive(CrosshairsTool.toolName, { + bindings: [{ mouseButton: MouseBindings.Primary }], + }); + } else { + toolGroup.setToolActive(ZoomTool.toolName, { + bindings: [{ mouseButton: MouseBindings.Secondary }], + }); + toolGroup.setToolActive(WindowLevelTool.toolName, { + bindings: [{ mouseButton: MouseBindings.Primary }], + }); + toolGroup.setToolActive(CrosshairsTool.toolName, { + bindings: [ + { + mouseButton: MouseBindings.Primary, + modifierKey: KeyboardBindings.Shift, + }, + ], + }); + } + + usePrimaryClickForCrosshairs = usePrimaryClick; + updateInstructions(usePrimaryClick); +} + +updateInstructions(usePrimaryClickForCrosshairs); + +addButtonToToolbar({ + title: 'Reset Camera', + onClick: () => { + const viewport = getRenderingEngine(renderingEngineId).getViewport( + viewportId1 + ) as Types.IVolumeViewport; + + viewport.resetCamera({ + resetPan: true, + resetZoom: true, + resetToCenter: true, + resetRotation: true, + }); + + viewport.render(); + }, +}); + +addCheckboxToToolbar({ + id: 'use-primary-click-for-crosshairs-bindings', + title: 'Use Primary Click For Crosshairs', + checked: usePrimaryClickForCrosshairs, + onChange: (checked) => { + usePrimaryClickForCrosshairs = checked; + updateInstructions(checked); + + const toolGroup = ToolGroupManager.getToolGroup(toolGroupId); + + if (!toolGroup) { + return; + } + + applyCrosshairsBindings(toolGroup, checked); + }, +}); + +const viewportColors = { + [viewportId1]: 'rgb(200, 0, 0)', + [viewportId2]: 'rgb(200, 200, 0)', + [viewportId3]: 'rgb(0, 200, 0)', +}; + +function getReferenceLineColor(viewportId) { + return viewportColors[viewportId]; +} + +function getReferenceLineControllable() { + return true; +} + +function getReferenceLineDraggableRotatable() { + return true; +} + +function getReferenceLineSlabThicknessControlsOn() { + return true; +} + +async function run() { + await initDemo(); + + cornerstoneTools.addTool(CrosshairsTool); + cornerstoneTools.addTool(WindowLevelTool); + + const imageIds = await createImageIdsAndCacheMetaData({ + StudyInstanceUID: + '1.3.6.1.4.1.14519.5.2.1.7009.2403.334240657131972136850343327463', + SeriesInstanceUID: + '1.3.6.1.4.1.14519.5.2.1.7009.2403.226151125820845824875394858561', + wadoRsRoot: + getLocalUrl() || 'https://d14fa38qiwhyfd.cloudfront.net/dicomweb', + }); + + const volume = await volumeLoader.createAndCacheVolume(volumeId, { + imageIds, + }); + + const renderingEngine = new RenderingEngine(renderingEngineId); + + renderingEngine.setViewports([ + { + viewportId: viewportId1, + type: ViewportType.ORTHOGRAPHIC, + element: element1, + defaultOptions: { + orientation: Enums.OrientationAxis.AXIAL, + background: [0, 0, 0], + }, + }, + { + viewportId: viewportId2, + type: ViewportType.ORTHOGRAPHIC, + element: element2, + defaultOptions: { + orientation: Enums.OrientationAxis.SAGITTAL, + background: [0, 0, 0], + }, + }, + { + viewportId: viewportId3, + type: ViewportType.ORTHOGRAPHIC, + element: element3, + defaultOptions: { + orientation: Enums.OrientationAxis.CORONAL, + background: [0, 0, 0], + }, + }, + ]); + + volume.load(); + + await setVolumesForViewports( + renderingEngine, + [ + { + volumeId, + callback: setCtTransferFunctionForVolumeActor, + }, + ], + viewportIds + ); + + const toolGroup = ToolGroupManager.createToolGroup(toolGroupId); + addManipulationBindings(toolGroup); + toolGroup.addTool(WindowLevelTool.toolName, { volumeId }); + + toolGroup.addViewport(viewportId1, renderingEngineId); + toolGroup.addViewport(viewportId2, renderingEngineId); + toolGroup.addViewport(viewportId3, renderingEngineId); + + const isMobile = window.matchMedia('(any-pointer:coarse)').matches; + + toolGroup.addTool(CrosshairsTool.toolName, { + getReferenceLineColor, + getReferenceLineControllable, + getReferenceLineDraggableRotatable, + getReferenceLineSlabThicknessControlsOn, + mobile: { + enabled: isMobile, + opacity: 0.8, + handleRadius: 9, + }, + }); + + applyCrosshairsBindings(toolGroup, usePrimaryClickForCrosshairs); + + renderingEngine.renderViewports(viewportIds); +} + +run(); diff --git a/packages/tools/src/tools/CrosshairsTool.ts b/packages/tools/src/tools/CrosshairsTool.ts index 9929846c5b..4b669e2d46 100644 --- a/packages/tools/src/tools/CrosshairsTool.ts +++ b/packages/tools/src/tools/CrosshairsTool.ts @@ -105,6 +105,17 @@ const OPERATION = { */ class CrosshairsTool extends AnnotationTool { static toolName; + static minimalModeExamples = new Map< + string, + { + enabled: boolean; + lineLengthInPx: number; + } + >([ + ['Default', { enabled: false, lineLengthInPx: 40 }], + ['Minimal 40px', { enabled: true, lineLengthInPx: 40 }], + ['Minimal 80px', { enabled: true, lineLengthInPx: 80 }], + ]); toolCenter: Types.Point3 = [0, 0, 0]; // NOTE: it is assumed that all the active/linked viewports share the same crosshair center. // This because the rotation operation rotates also all the other active/intersecting reference lines of the same angle @@ -163,6 +174,12 @@ class CrosshairsTool extends AnnotationTool { // referenceLinesCenterGapRatio: 0.1 → gap is 10% of the canvas min dimension // referenceLinesCenterGapRatio: 1 → gap is 100% (not recommended) referenceLinesCenterGapRatio: null, + // Minimal crosshair mode renders a short fixed-length cross centered on + // the tool center and disables rotation and slab thickness handles. + minimal: { + enabled: false, + lineLengthInPx: 40, + }, // actorUIDs for slabThickness application, if not defined, the slab thickness // will be applied to all actors of the viewport filterActorUIDsToSetSlabThickness: [], @@ -948,15 +965,6 @@ class CrosshairsTool extends AnnotationTool { canvasUnitVectorFromCenter, canvasDiagonalLength * 100 ); - const canvasVectorFromCenterMid = vec2.create(); - vec2.scale( - canvasVectorFromCenterMid, - canvasUnitVectorFromCenter, - // to maximize the visibility of the controls, they need to be - // placed at most at half the length of the shortest side of the canvas. - // Chosen 0.4 to have some margin to the edge. - canvasMinDimensionLength * 0.4 - ); const canvasVectorFromCenterShort = vec2.create(); vec2.scale( canvasVectorFromCenterShort, @@ -967,9 +975,13 @@ class CrosshairsTool extends AnnotationTool { const canvasVectorFromCenterStart = vec2.create(); // Calculate center gap using ratio if provided, else fallback to pixel value const mobileConfig = this.configuration.mobile; - const { referenceLinesCenterGapRatio } = mobileConfig?.enabled + const activeConfiguration = mobileConfig?.enabled ? mobileConfig : this.configuration; + const { referenceLinesCenterGapRatio } = activeConfiguration; + const minimalCrosshairConfig = getMinimalCrosshairConfig( + this.configuration + ); const centerGap = referenceLinesCenterGapRatio > 0 @@ -1012,17 +1024,42 @@ class CrosshairsTool extends AnnotationTool { liangBarksyClip(refLinePointOne, refLinePointTwo, canvasBox); liangBarksyClip(refLinePointThree, refLinePointFour, canvasBox); + if (minimalCrosshairConfig.enabled) { + const minimalCanvasVectorFromCenterLong = vec2.create(); + vec2.scale( + minimalCanvasVectorFromCenterLong, + canvasUnitVectorFromCenter, + minimalCrosshairConfig.lineLengthInPx + ); + + vec2.add(refLinePointOne, refLinesCenter, canvasVectorFromCenterStart); + vec2.add( + refLinePointTwo, + refLinePointOne, + minimalCanvasVectorFromCenterLong + ); + vec2.subtract( + refLinePointThree, + refLinesCenter, + canvasVectorFromCenterStart + ); + vec2.subtract( + refLinePointFour, + refLinePointThree, + minimalCanvasVectorFromCenterLong + ); + + liangBarksyClip(refLinePointOne, refLinePointTwo, canvasBox); + liangBarksyClip(refLinePointThree, refLinePointFour, canvasBox); + } + // Computing rotation handle positions - const rotHandleOne = vec2.create(); - vec2.subtract( - rotHandleOne, - crosshairCenterCanvas, - canvasVectorFromCenterMid + const rotHandleOne = getSegmentMidpoint(refLinePointOne, refLinePointTwo); + const rotHandleTwo = getSegmentMidpoint( + refLinePointThree, + refLinePointFour ); - const rotHandleTwo = vec2.create(); - vec2.add(rotHandleTwo, crosshairCenterCanvas, canvasVectorFromCenterMid); - // Computing SlabThickness (st below) position // SlabThickness center in canvas @@ -1186,16 +1223,21 @@ class CrosshairsTool extends AnnotationTool { referenceLines.forEach((line, lineIndex) => { // get color for the reference line const otherViewport = line[0]; + const minimalCrosshairConfig = getMinimalCrosshairConfig( + this.configuration + ); const viewportColor = this._getReferenceLineColor(otherViewport.id); const viewportControllable = this._getReferenceLineControllable( otherViewport.id ); const viewportDraggableRotatable = - this._getReferenceLineDraggableRotatable(otherViewport.id) || - this.configuration.mobile?.enabled; + !minimalCrosshairConfig.enabled && + (this._getReferenceLineDraggableRotatable(otherViewport.id) || + this.configuration.mobile?.enabled); const viewportSlabThicknessControlsOn = - this._getReferenceLineSlabThicknessControlsOn(otherViewport.id) || - this.configuration.mobile?.enabled; + !minimalCrosshairConfig.enabled && + (this._getReferenceLineSlabThicknessControlsOn(otherViewport.id) || + this.configuration.mobile?.enabled); const selectedViewportId = data.activeViewportIds.find( (id) => id === otherViewport.id ); @@ -1215,7 +1257,10 @@ class CrosshairsTool extends AnnotationTool { } let lineUID = `${lineIndex}`; - if (viewportControllable && viewportDraggableRotatable) { + if ( + viewportControllable && + (viewportDraggableRotatable || minimalCrosshairConfig.enabled) + ) { lineUID = `${lineIndex}One`; drawLineSvg( svgDrawingHelper, @@ -1281,36 +1326,38 @@ class CrosshairsTool extends AnnotationTool { data.handles.activeOperation === OPERATION.SLAB; const slabThicknessHandles = [line[11], line[12], line[13], line[14]]; - const slabThicknessHandleWorldOne = [ - viewport.canvasToWorld(line[11]), - otherViewport, - line[5], - line[6], - ]; - const slabThicknessHandleWorldTwo = [ - viewport.canvasToWorld(line[12]), - otherViewport, - line[5], - line[6], - ]; - const slabThicknessHandleWorldThree = [ - viewport.canvasToWorld(line[13]), - otherViewport, - line[7], - line[8], - ]; - const slabThicknessHandleWorldFour = [ - viewport.canvasToWorld(line[14]), - otherViewport, - line[7], - line[8], - ]; - newStpoints.push( - slabThicknessHandleWorldOne, - slabThicknessHandleWorldTwo, - slabThicknessHandleWorldThree, - slabThicknessHandleWorldFour - ); + if (!minimalCrosshairConfig.enabled) { + const slabThicknessHandleWorldOne = [ + viewport.canvasToWorld(line[11]), + otherViewport, + line[5], + line[6], + ]; + const slabThicknessHandleWorldTwo = [ + viewport.canvasToWorld(line[12]), + otherViewport, + line[5], + line[6], + ]; + const slabThicknessHandleWorldThree = [ + viewport.canvasToWorld(line[13]), + otherViewport, + line[7], + line[8], + ]; + const slabThicknessHandleWorldFour = [ + viewport.canvasToWorld(line[14]), + otherViewport, + line[7], + line[8], + ]; + newStpoints.push( + slabThicknessHandleWorldOne, + slabThicknessHandleWorldTwo, + slabThicknessHandleWorldThree, + slabThicknessHandleWorldFour + ); + } let handleRadius = this.configuration.handleRadius * @@ -2015,6 +2062,9 @@ class CrosshairsTool extends AnnotationTool { updateViewportCameras: false, }); + // Render the source viewport so its crosshair lines update to the new tool center. + viewport.render(); + state.isInteractingWithTool = false; return true; @@ -2605,6 +2655,9 @@ class CrosshairsTool extends AnnotationTool { canvasCoords, proximity ) { + const minimalCrosshairConfig = getMinimalCrosshairConfig( + this.configuration + ); const { data } = annotation; const { rotationPoints } = data.handles; @@ -2619,6 +2672,7 @@ class CrosshairsTool extends AnnotationTool { } const viewportDraggableRotatable = + !minimalCrosshairConfig.enabled && this._getReferenceLineDraggableRotatable(otherViewport.id); if (!viewportDraggableRotatable) { continue; @@ -2645,6 +2699,9 @@ class CrosshairsTool extends AnnotationTool { canvasCoords, proximity ) { + const minimalCrosshairConfig = getMinimalCrosshairConfig( + this.configuration + ); const { data } = annotation; const { slabThicknessPoints } = data.handles; @@ -2659,6 +2716,7 @@ class CrosshairsTool extends AnnotationTool { } const viewportSlabThicknessControlsOn = + !minimalCrosshairConfig.enabled && this._getReferenceLineSlabThicknessControlsOn(otherViewport.id); if (!viewportSlabThicknessControlsOn) { continue; @@ -2682,6 +2740,9 @@ class CrosshairsTool extends AnnotationTool { } _pointNearTool(element, annotation, canvasCoords, proximity) { + const minimalCrosshairConfig = getMinimalCrosshairConfig( + this.configuration + ); const enabledElement = getEnabledElement(element); const { viewport } = enabledElement; const { clientWidth, clientHeight } = viewport.canvas; @@ -2702,7 +2763,10 @@ class CrosshairsTool extends AnnotationTool { const viewportDraggableRotatable = this._getReferenceLineDraggableRotatable(otherViewport.id); - if (!viewportControllable || !viewportDraggableRotatable) { + if ( + !viewportControllable || + (!viewportDraggableRotatable && !minimalCrosshairConfig.enabled) + ) { continue; } @@ -2759,6 +2823,7 @@ class CrosshairsTool extends AnnotationTool { otherViewport.id ); const viewportSlabThicknessControlsOn = + !minimalCrosshairConfig.enabled && this._getReferenceLineSlabThicknessControlsOn(otherViewport.id); if (!viewportControllable || !viewportSlabThicknessControlsOn) { @@ -3124,5 +3189,38 @@ class CrosshairsTool extends AnnotationTool { }; } +function getMinimalCrosshairConfig(configuration) { + const minimal = configuration?.minimal; + + if (!minimal?.enabled) { + return { + enabled: false, + lineLengthInPx: 0, + }; + } + + const lineLengthInPx = + typeof minimal.lineLengthInPx === 'number' && + Number.isFinite(minimal.lineLengthInPx) + ? minimal.lineLengthInPx + : 40; + + return { + enabled: true, + lineLengthInPx: Math.max(0, lineLengthInPx), + }; +} + +function getSegmentMidpoint( + start: Types.Point2 | vec2, + end: Types.Point2 | vec2 +): Types.Point2 { + const midpoint = vec2.create(); + vec2.add(midpoint, start, end); + vec2.scale(midpoint, midpoint, 0.5); + + return midpoint as Types.Point2; +} + CrosshairsTool.toolName = 'Crosshairs'; export default CrosshairsTool; diff --git a/utils/ExampleRunner/example-info.json b/utils/ExampleRunner/example-info.json index df04dcb200..9d88824596 100644 --- a/utils/ExampleRunner/example-info.json +++ b/utils/ExampleRunner/example-info.json @@ -523,6 +523,10 @@ "name": "Crosshairs", "description": "Here we demonstrate crosshairs linking three orthogonal views of the same data" }, + "crossHairsBindings": { + "name": "Crosshairs Binding Modes", + "description": "Demonstrates Crosshairs as a regular active tool binding on either primary or right click." + }, "mprReformat": { "name": "DICOM Reformats in MPR", "description": "Aligns MPR viewports to dicom acquisition orientations" From 8ccc3fa1fcf11bde7a968cb8b333368c15a8131b Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Mon, 6 Apr 2026 16:03:21 +0000 Subject: [PATCH 63/90] chore(version): Update package versions to 4.21.0 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 6 +++--- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 6 ++++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fe8b09afd..fa8ec9e217 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +### Features + +- Crosshairs minimal mode and add jump on click with modifier key ([#2673](https://github.com/cornerstonejs/cornerstone3D/issues/2673)) ([df672f1](https://github.com/cornerstonejs/cornerstone3D/commit/df672f11cba9284035bc32dd80f697db6df3518f)) + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 8ec91cc7a6..c356d1950a 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -77c553b0851be285b02c218bc2ae9ae21a44b5ee \ No newline at end of file +df672f11cba9284035bc32dd80f697db6df3518f \ No newline at end of file diff --git a/lerna.json b/lerna.json index 03919ee295..75bbfe5b1d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.20.4", + "version": "4.21.0", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 1931f2bf01..e11f4181e3 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 6f78d0ec0e..abdd3e8743 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.20.4", + "version": "4.21.0", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,7 +89,7 @@ "ndarray": "1.0.19" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.4", - "@cornerstonejs/tools": "4.20.4" + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 41626b1e4b..bafbe5600c 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 4e5879b9df..4e4d68bcb6 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.20.4", + "version": "4.21.0", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.4", - "@cornerstonejs/tools": "4.20.4" + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index bf01711bb7..efc9666bc8 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 7a2ac64b6c..12b261c532 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.20.4", + "version": "4.21.0", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index aab8c4b3da..352e57125c 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 324219fe8e..be44720dcb 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.20.4", + "version": "4.21.0", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.4", + "@cornerstonejs/core": "4.21.0", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 0516fca799..0fdf956363 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index f2fbdd031c..c5afda0d8e 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.20.4", + "version": "4.21.0", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.4", - "@cornerstonejs/tools": "4.20.4", + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 68b34e9496..1fe3f91550 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 44a5fc00b2..80767b4afe 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.20.4", + "version": "4.21.0", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.4" + "@cornerstonejs/core": "4.21.0" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 0b93505224..41e1ff40b0 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index cb81243001..fabf52f6fa 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.20.4", + "version": "4.21.0", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.4", - "@cornerstonejs/tools": "4.20.4", + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index 4ee5c5510a..cf75a1f7ed 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) + +### Features + +- Crosshairs minimal mode and add jump on click with modifier key ([#2673](https://github.com/cornerstonejs/cornerstone3D/issues/2673)) ([df672f1](https://github.com/cornerstonejs/cornerstone3D/commit/df672f11cba9284035bc32dd80f697db6df3518f)) + ## [4.20.4](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.3...v4.20.4) (2026-04-02) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 3ffbf445cb..2a908a11ac 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.20.4", + "version": "4.21.0", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.20.4", + "@cornerstonejs/core": "4.21.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index ccee0e4cb0..ca06cac016 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.20.4'; +export const version = '4.21.0'; diff --git a/version.json b/version.json index 9c18489d7b..1107f9ec9f 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.20.4", - "commit": "77c553b0851be285b02c218bc2ae9ae21a44b5ee" + "version": "4.21.0", + "commit": "df672f11cba9284035bc32dd80f697db6df3518f" } \ No newline at end of file diff --git a/version.txt b/version.txt index b101027b10..731c7e4310 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.20.4 \ No newline at end of file +4.21.0 \ No newline at end of file From 227f5cf1a1165f581a9b061fc7b75d104913ec5e Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 10 Apr 2026 13:30:12 -0400 Subject: [PATCH 64/90] fix: Minimal changes to get linking to work for ohif-downstream (#2689) ohif-downstream is now running AND passing * fix: Minimal changes to get linking to work for ohif-downstream * Update to use specific ohif branch for ohif-downstream * Temp change to add log to test that cs3d build works correctly * Lock update * Try newer node/bun version and lower timeout * Update build * Axios fix * fix: Yaml syntax * Timeout 120 minutes to try to load libraries --- .github/workflows/ohif-downstream.yml | 30 +++++++++--- bun.lock | 49 +++++++++++-------- nx.json | 9 ++-- package.json | 3 +- packages/adapters/package.json | 4 ++ packages/adapters/rollup.config.mjs | 29 ++++++++--- .../core/src/RenderingEngine/StackViewport.ts | 2 + yarn.lock | 17 ++++--- 8 files changed, 97 insertions(+), 46 deletions(-) diff --git a/.github/workflows/ohif-downstream.yml b/.github/workflows/ohif-downstream.yml index 24d6af06d9..3240b9f8a3 100644 --- a/.github/workflows/ohif-downstream.yml +++ b/.github/workflows/ohif-downstream.yml @@ -11,16 +11,20 @@ concurrency: jobs: ohif-downstream: name: OHIF downstream tests against this PR - runs-on: ubuntu-latest - timeout-minutes: 180 + runs-on: self-hosted + timeout-minutes: 120 env: - BUN_VERSION: 1.2.23 - NODE_VERSION: 20 - OHIF_REF: master + BUN_VERSION: 1.3.11 + NODE_VERSION: 24 + OHIF_REF: fix/combined-ohif-cs3d-build-local-agent OHIF_DIR: ohif + # Update to force a rebuild of the OHIF integration + BUILD_INDEX: 0 steps: - name: Checkout Cornerstone uses: actions/checkout@v4 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} - name: Log build context (OHIF/CS3D branch and version for build diagnosis) run: | @@ -58,9 +62,21 @@ jobs: fetch-depth: 1 submodules: recursive + - name: Log build context (OHIF/CS3D branch and version for build diagnosis) + run: | + CS3D_BRANCH=$(git rev-parse --abbrev-ref HEAD) + CS3D_SHA=$(git rev-parse HEAD) + OHIF_BRANCH=$(git -C "${OHIF_DIR}" rev-parse --abbrev-ref HEAD) + OHIF_SHA=$(git -C "${OHIF_DIR}" rev-parse HEAD) + echo "::notice::Build type: ohif-downstream | OHIF: OHIF/Viewers@${OHIF_BRANCH} (${OHIF_SHA}) | CS3D: ${{ github.repository }}@${CS3D_BRANCH} (${CS3D_SHA})" + echo "[build-context] ═══════════════════════════════════════════════════════════════" + echo "[build-context] Build type: ohif-downstream (CS3D repo validating against OHIF)" + echo "[build-context] OHIF checkout: ${OHIF_BRANCH} (${OHIF_SHA}) | CS3D checkout: ${CS3D_BRANCH} (${CS3D_SHA})" + echo "[build-context] ═══════════════════════════════════════════════════════════════" + - name: Install OHIF dependencies working-directory: ${{ env.OHIF_DIR }} - run: bun install + run: bun install --frozen-lockfile - name: Link local Cornerstone packages into OHIF node_modules run: node scripts/link-ohif-cornerstone-node-modules.mjs ${{ env.OHIF_DIR }} @@ -71,7 +87,7 @@ jobs: - name: Install Playwright browsers working-directory: ${{ env.OHIF_DIR }} - run: npx playwright install --with-deps chromium + run: npx playwright install - name: Run OHIF e2e tests working-directory: ${{ env.OHIF_DIR }} diff --git a/bun.lock b/bun.lock index 6ee7b4f147..996b9d69ed 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "root", @@ -119,7 +120,7 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -127,14 +128,18 @@ "gl-matrix": "3.4.3", "ndarray": "1.0.19", }, + "devDependencies": { + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0", + }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2", + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0", }, }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -146,13 +151,13 @@ "onnxruntime-web": "1.17.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2", + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0", }, }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -162,7 +167,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -175,48 +180,48 @@ "uuid": "9.0.1", }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/core": "4.21.0", "dicom-parser": "1.8.21", }, }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2", + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0", "@kitware/vtk.js": "34.15.1", }, }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "nifti-reader-js": "0.6.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/core": "4.21.0", }, }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", - "@cornerstonejs/tools": "4.20.2", + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0", "@kitware/vtk.js": "34.15.1", }, }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.20.2", + "version": "4.21.0", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", @@ -226,7 +231,7 @@ "canvas": "3.2.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.20.2", + "@cornerstonejs/core": "4.21.0", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", @@ -238,7 +243,7 @@ }, "overrides": { "@babel/helper-create-class-features-plugin": "7.28.3", - "axios": "1.13.5", + "axios": "1.15.0", "body-parser": "1.20.3", "buffer": "6.0.3", "caniuse-lite": "1.0.30001767", @@ -1320,7 +1325,7 @@ "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], - "axios": ["axios@1.13.5", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q=="], + "axios": ["axios@1.15.0", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^2.1.0" } }, "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q=="], "babel-jest": ["babel-jest@30.2.0", "", { "dependencies": { "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.1", "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw=="], @@ -3724,6 +3729,8 @@ "axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + "axios/proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], + "babel-jest/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], diff --git a/nx.json b/nx.json index 3e1b9f1dfd..32167ce2d8 100644 --- a/nx.json +++ b/nx.json @@ -13,15 +13,18 @@ "targetDefaults": { "build": { "inputs": ["noMarkdown"], - "dependsOn": ["^build"] + "dependsOn": ["^build"], + "outputs": ["{projectRoot}/dist/**"] }, "build:all": { "inputs": ["noMarkdown"], - "dependsOn": ["^build"] + "dependsOn": ["^build"], + "outputs": ["{projectRoot}/dist/**"] }, "build:esm": { "inputs": ["noMarkdown"], - "dependsOn": ["^build"] + "dependsOn": ["^build"], + "outputs": ["{projectRoot}/dist/**"] }, "test": { "inputs": ["noMarkdown"], diff --git a/package.json b/package.json index 8d5d7fe0fc..b0dd7ba4ae 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "format-check": "cross-env NODE_OPTIONS=--max_old_space_size=32896 npx lerna run format-check", "build": "npx lerna run build --stream && npx lerna run build:loader", "build:esm": "npx lerna run build:esm --stream", + "build:esm:watch": "npx lerna run build:esm:watch --stream --parallel", "watch": "npx lerna watch -- lerna run build --scope=$LERNA_PACKAGE_NAME --include-dependents", "build:update-api": "echo not needed anymore", "clean": "npx lerna run clean --stream", @@ -187,7 +188,7 @@ "resolutions": { "@babel/helper-create-class-features-plugin": "7.28.3", "caniuse-lite": "1.0.30001767", - "axios": "1.13.5", + "axios": "1.15.0", "buffer": "6.0.3", "node-forge": "1.4.0", "canvas": "3.2.0", diff --git a/packages/adapters/package.json b/packages/adapters/package.json index abdd3e8743..38c8002c78 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -88,6 +88,10 @@ "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, + "devDependencies": { + "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/tools": "4.21.0" + }, "peerDependencies": { "@cornerstonejs/core": "4.21.0", "@cornerstonejs/tools": "4.21.0" diff --git a/packages/adapters/rollup.config.mjs b/packages/adapters/rollup.config.mjs index ac7da0b622..911b57c319 100644 --- a/packages/adapters/rollup.config.mjs +++ b/packages/adapters/rollup.config.mjs @@ -6,17 +6,30 @@ import { readFileSync } from "fs"; const pkg = JSON.parse(readFileSync("package.json", { encoding: "utf8" })); +/** Declared dependencies + Babel runtime (babelHelpers: "runtime"); keep out of dist/esm/node_modules. */ +const EXTERNAL_IDS = new Set([ + "dcmjs", + "gl-matrix", + "ndarray", + "@cornerstonejs/tools", + "@cornerstonejs/core", + "@kitware/vtk.js", + "buffer", +]); + +function isExternal(id) { + if (EXTERNAL_IDS.has(id)) return true; + // @babel/runtime and @babel/runtime-corejs2 (transform-runtime + package.json) + if (id.startsWith("@babel/runtime")) return true; + // Rollup may pass absolute resolved paths + if (/[\\/]node_modules[\\/]@babel[\\/]runtime/.test(id)) return true; + return false; +} + export default [ // ESM configuration { - external: [ - "dcmjs", - "gl-matrix", - "ndarray", - "@cornerstonejs/tools", - "@cornerstonejs/core", - "@kitware/vtk.js" - ], + external: isExternal, input: pkg.src || "src/index.ts", output: [ { diff --git a/packages/core/src/RenderingEngine/StackViewport.ts b/packages/core/src/RenderingEngine/StackViewport.ts index 625afba5a0..b4e15b0014 100644 --- a/packages/core/src/RenderingEngine/StackViewport.ts +++ b/packages/core/src/RenderingEngine/StackViewport.ts @@ -223,6 +223,8 @@ class StackViewport extends Viewport { this.resetCamera(); this.initializeElementDisabledHandler(); + + console.warn('Linked CS3D version test. Remove before merging.'); } public setUseCPURendering(value: boolean) { diff --git a/yarn.lock b/yarn.lock index 6734688b2a..f9da8ab949 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4854,14 +4854,14 @@ autoprefixer@^10.4.14: picocolors "^1.0.1" postcss-value-parser "^4.2.0" -axios@1.13.5, axios@^1.12.0, axios@^1.4.0, axios@^1.6.2: - version "1.13.5" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43" - integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q== +axios@1.15.0, axios@^1.12.0, axios@^1.4.0, axios@^1.6.2: + version "1.15.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.15.0.tgz#0fcee91ef03d386514474904b27863b2c683bf4f" + integrity sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q== dependencies: follow-redirects "^1.15.11" form-data "^4.0.5" - proxy-from-env "^1.1.0" + proxy-from-env "^2.1.0" babel-jest@30.2.0: version "30.2.0" @@ -12493,11 +12493,16 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@1.1.0, proxy-from-env@^1.1.0: +proxy-from-env@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +proxy-from-env@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" + integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" From 3c7529433f22b4d15b52ea519b7ce804a1106f75 Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 10 Apr 2026 17:33:59 +0000 Subject: [PATCH 65/90] chore(version): Update package versions to 4.21.1 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 6 ++++++ packages/adapters/package.json | 10 +++++----- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 77 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa8ec9e217..7f67ba64c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +### Bug Fixes + +- Minimal changes to get linking to work for ohif-downstream ([#2689](https://github.com/cornerstonejs/cornerstone3D/issues/2689)) ([b2d771b](https://github.com/cornerstonejs/cornerstone3D/commit/b2d771b13010a9018acbdf5427fbc635d0ddd8a7)) + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) ### Features diff --git a/commit.txt b/commit.txt index c356d1950a..3780d09c56 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -df672f11cba9284035bc32dd80f697db6df3518f \ No newline at end of file +b2d771b13010a9018acbdf5427fbc635d0ddd8a7 \ No newline at end of file diff --git a/lerna.json b/lerna.json index 75bbfe5b1d..a470b04537 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.21.0", + "version": "4.21.1", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index e11f4181e3..3cd51a0391 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +### Bug Fixes + +- Minimal changes to get linking to work for ohif-downstream ([#2689](https://github.com/cornerstonejs/cornerstone3D/issues/2689)) ([b2d771b](https://github.com/cornerstonejs/cornerstone3D/commit/b2d771b13010a9018acbdf5427fbc635d0ddd8a7)) + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) **Note:** Version bump only for package @cornerstonejs/adapters diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 38c8002c78..6c7080f1ca 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.21.0", + "version": "4.21.1", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,11 +89,11 @@ "ndarray": "1.0.19" }, "devDependencies": { - "@cornerstonejs/core": "4.21.0", - "@cornerstonejs/tools": "4.21.0" + "@cornerstonejs/core": "4.21.1", + "@cornerstonejs/tools": "4.21.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", - "@cornerstonejs/tools": "4.21.0" + "@cornerstonejs/core": "4.21.1", + "@cornerstonejs/tools": "4.21.1" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index bafbe5600c..75da254634 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/ai + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 4e4d68bcb6..220e1b6fca 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.21.0", + "version": "4.21.1", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", - "@cornerstonejs/tools": "4.21.0" + "@cornerstonejs/core": "4.21.1", + "@cornerstonejs/tools": "4.21.1" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index efc9666bc8..825c040238 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +### Bug Fixes + +- Minimal changes to get linking to work for ohif-downstream ([#2689](https://github.com/cornerstonejs/cornerstone3D/issues/2689)) ([b2d771b](https://github.com/cornerstonejs/cornerstone3D/commit/b2d771b13010a9018acbdf5427fbc635d0ddd8a7)) + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) **Note:** Version bump only for package @cornerstonejs/core diff --git a/packages/core/package.json b/packages/core/package.json index 12b261c532..fa83985d3c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.21.0", + "version": "4.21.1", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 352e57125c..56025943ee 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index be44720dcb..850bd86365 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.21.0", + "version": "4.21.1", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/core": "4.21.1", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 0fdf956363..74cee5cc10 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index c5afda0d8e..1c35bfc689 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.21.0", + "version": "4.21.1", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", - "@cornerstonejs/tools": "4.21.0", + "@cornerstonejs/core": "4.21.1", + "@cornerstonejs/tools": "4.21.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 1fe3f91550..48fa38f7a8 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 80767b4afe..5a856afdfe 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.21.0", + "version": "4.21.1", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0" + "@cornerstonejs/core": "4.21.1" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 41e1ff40b0..9b6084ec64 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index fabf52f6fa..bf1e244236 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.21.0", + "version": "4.21.1", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", - "@cornerstonejs/tools": "4.21.0", + "@cornerstonejs/core": "4.21.1", + "@cornerstonejs/tools": "4.21.1", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index cf75a1f7ed..bf76b8963d 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/tools + # [4.21.0](https://github.com/cornerstonejs/cornerstone3D/compare/v4.20.4...v4.21.0) (2026-04-06) ### Features diff --git a/packages/tools/package.json b/packages/tools/package.json index 2a908a11ac..68941a2258 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.21.0", + "version": "4.21.1", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/core": "4.21.1", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index ca06cac016..be25df603b 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.0'; +export const version = '4.21.1'; diff --git a/version.json b/version.json index 1107f9ec9f..8809781a18 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.21.0", - "commit": "df672f11cba9284035bc32dd80f697db6df3518f" + "version": "4.21.1", + "commit": "b2d771b13010a9018acbdf5427fbc635d0ddd8a7" } \ No newline at end of file diff --git a/version.txt b/version.txt index 731c7e4310..3cbccd1694 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.21.0 \ No newline at end of file +4.21.1 \ No newline at end of file From ba009b82e3c8dc3f2cdfed25e6cdd29a614dfe7a Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 10 Apr 2026 15:15:43 -0400 Subject: [PATCH 66/90] fix: add auth json to gitignore (#2694) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3f2ed85449..3b95f855f9 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ CLAUDE.md # External repositories vtk-js/ .ohif-downstream/ +auth.json From 38989283b3445ec1bfde730dc520b3a68980eb3e Mon Sep 17 00:00:00 2001 From: ohif-bot Date: Fri, 10 Apr 2026 19:19:37 +0000 Subject: [PATCH 67/90] chore(version): Update package versions to 4.21.2 [skip ci] --- CHANGELOG.md | 6 ++++++ commit.txt | 2 +- lerna.json | 2 +- packages/adapters/CHANGELOG.md | 4 ++++ packages/adapters/package.json | 10 +++++----- packages/adapters/src/version.ts | 2 +- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/package.json | 6 +++--- packages/ai/src/version.ts | 2 +- packages/core/CHANGELOG.md | 4 ++++ packages/core/package.json | 2 +- packages/core/src/version.ts | 2 +- packages/dicomImageLoader/CHANGELOG.md | 4 ++++ packages/dicomImageLoader/package.json | 4 ++-- packages/dicomImageLoader/src/version.ts | 2 +- packages/docs/src/version.ts | 2 +- packages/labelmap-interpolation/CHANGELOG.md | 4 ++++ packages/labelmap-interpolation/package.json | 6 +++--- packages/labelmap-interpolation/src/version.ts | 2 +- packages/nifti-volume-loader/CHANGELOG.md | 4 ++++ packages/nifti-volume-loader/package.json | 4 ++-- packages/nifti-volume-loader/src/version.ts | 2 +- packages/polymorphic-segmentation/CHANGELOG.md | 4 ++++ packages/polymorphic-segmentation/package.json | 6 +++--- packages/polymorphic-segmentation/src/version.ts | 2 +- packages/tools/CHANGELOG.md | 4 ++++ packages/tools/package.json | 4 ++-- packages/tools/src/version.ts | 2 +- version.json | 4 ++-- version.txt | 2 +- 30 files changed, 73 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f67ba64c0..c912a267e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +### Bug Fixes + +- add auth json to gitignore ([#2694](https://github.com/cornerstonejs/cornerstone3D/issues/2694)) ([7a5cc93](https://github.com/cornerstonejs/cornerstone3D/commit/7a5cc93765b7ebfdfd02790d4eb9e7c29cd7b38b)) + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) ### Bug Fixes diff --git a/commit.txt b/commit.txt index 3780d09c56..7dd45ef3b3 100644 --- a/commit.txt +++ b/commit.txt @@ -1 +1 @@ -b2d771b13010a9018acbdf5427fbc635d0ddd8a7 \ No newline at end of file +7a5cc93765b7ebfdfd02790d4eb9e7c29cd7b38b \ No newline at end of file diff --git a/lerna.json b/lerna.json index a470b04537..b351c19ef5 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.21.1", + "version": "4.21.2", "packages": [ "packages/core", "packages/tools", diff --git a/packages/adapters/CHANGELOG.md b/packages/adapters/CHANGELOG.md index 3cd51a0391..f07060ccfa 100644 --- a/packages/adapters/CHANGELOG.md +++ b/packages/adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/adapters + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) ### Bug Fixes diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 6c7080f1ca..02d928b2f5 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/adapters", - "version": "4.21.1", + "version": "4.21.2", "description": "Adapters for Cornerstone3D to/from formats including DICOM SR and others", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -89,11 +89,11 @@ "ndarray": "1.0.19" }, "devDependencies": { - "@cornerstonejs/core": "4.21.1", - "@cornerstonejs/tools": "4.21.1" + "@cornerstonejs/core": "4.21.2", + "@cornerstonejs/tools": "4.21.2" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.1", - "@cornerstonejs/tools": "4.21.1" + "@cornerstonejs/core": "4.21.2", + "@cornerstonejs/tools": "4.21.2" } } diff --git a/packages/adapters/src/version.ts b/packages/adapters/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/adapters/src/version.ts +++ b/packages/adapters/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 75da254634..c9aafd252d 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/ai + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) **Note:** Version bump only for package @cornerstonejs/ai diff --git a/packages/ai/package.json b/packages/ai/package.json index 220e1b6fca..ea7e30237d 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/ai", - "version": "4.21.1", + "version": "4.21.2", "description": "AI and ML Interfaces for Cornerstone3D", "files": [ "dist" @@ -61,7 +61,7 @@ "onnxruntime-web": "1.17.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.1", - "@cornerstonejs/tools": "4.21.1" + "@cornerstonejs/core": "4.21.2", + "@cornerstonejs/tools": "4.21.2" } } diff --git a/packages/ai/src/version.ts b/packages/ai/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/ai/src/version.ts +++ b/packages/ai/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 825c040238..a421ad861d 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/core + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) ### Bug Fixes diff --git a/packages/core/package.json b/packages/core/package.json index fa83985d3c..33b78de457 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/core", - "version": "4.21.1", + "version": "4.21.2", "description": "Cornerstone3D Core", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/dicomImageLoader/CHANGELOG.md b/packages/dicomImageLoader/CHANGELOG.md index 56025943ee..1acbc9bf2a 100644 --- a/packages/dicomImageLoader/CHANGELOG.md +++ b/packages/dicomImageLoader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/dicom-image-loader + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) **Note:** Version bump only for package @cornerstonejs/dicom-image-loader diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index 850bd86365..0fec98700b 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.21.1", + "version": "4.21.2", "description": "Cornerstone Image Loader for DICOM WADO-URI and WADO-RS and Local file", "keywords": [ "DICOM", @@ -112,7 +112,7 @@ "uuid": "9.0.1" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.1", + "@cornerstonejs/core": "4.21.2", "dicom-parser": "1.8.21" }, "config": { diff --git a/packages/dicomImageLoader/src/version.ts b/packages/dicomImageLoader/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/dicomImageLoader/src/version.ts +++ b/packages/dicomImageLoader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/docs/src/version.ts b/packages/docs/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/docs/src/version.ts +++ b/packages/docs/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/labelmap-interpolation/CHANGELOG.md b/packages/labelmap-interpolation/CHANGELOG.md index 74cee5cc10..ad5ff07728 100644 --- a/packages/labelmap-interpolation/CHANGELOG.md +++ b/packages/labelmap-interpolation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/labelmap-interpolation + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) **Note:** Version bump only for package @cornerstonejs/labelmap-interpolation diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index 1c35bfc689..e723f642da 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.21.1", + "version": "4.21.2", "description": "Labelmap Interpolation utility for Cornerstone3D", "files": [ "dist" @@ -55,8 +55,8 @@ "itk-wasm": "1.0.0-b.165" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.1", - "@cornerstonejs/tools": "4.21.1", + "@cornerstonejs/core": "4.21.2", + "@cornerstonejs/tools": "4.21.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/labelmap-interpolation/src/version.ts b/packages/labelmap-interpolation/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/labelmap-interpolation/src/version.ts +++ b/packages/labelmap-interpolation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/nifti-volume-loader/CHANGELOG.md b/packages/nifti-volume-loader/CHANGELOG.md index 48fa38f7a8..114f2c0612 100644 --- a/packages/nifti-volume-loader/CHANGELOG.md +++ b/packages/nifti-volume-loader/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/nifti-volume-loader + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) **Note:** Version bump only for package @cornerstonejs/nifti-volume-loader diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 5a856afdfe..c3cde21552 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.21.1", + "version": "4.21.2", "description": "Nifti Image Loader for Cornerstone3D", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", @@ -65,7 +65,7 @@ "nifti-reader-js": "0.6.9" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.1" + "@cornerstonejs/core": "4.21.2" }, "contributors": [ { diff --git a/packages/nifti-volume-loader/src/version.ts b/packages/nifti-volume-loader/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/nifti-volume-loader/src/version.ts +++ b/packages/nifti-volume-loader/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/polymorphic-segmentation/CHANGELOG.md b/packages/polymorphic-segmentation/CHANGELOG.md index 9b6084ec64..dfe45c9c30 100644 --- a/packages/polymorphic-segmentation/CHANGELOG.md +++ b/packages/polymorphic-segmentation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) **Note:** Version bump only for package @cornerstonejs/polymorphic-segmentation diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index bf1e244236..e8a7e1c58e 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.21.1", + "version": "4.21.2", "description": "Polymorphic Segmentation utility for Cornerstone3D", "files": [ "dist" @@ -53,8 +53,8 @@ "@icr/polyseg-wasm": "0.4.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.1", - "@cornerstonejs/tools": "4.21.1", + "@cornerstonejs/core": "4.21.2", + "@cornerstonejs/tools": "4.21.2", "@kitware/vtk.js": "34.15.1" } } diff --git a/packages/polymorphic-segmentation/src/version.ts b/packages/polymorphic-segmentation/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/polymorphic-segmentation/src/version.ts +++ b/packages/polymorphic-segmentation/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index bf76b8963d..bfe4ddcaa8 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.21.2](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.1...v4.21.2) (2026-04-10) + +**Note:** Version bump only for package @cornerstonejs/tools + ## [4.21.1](https://github.com/cornerstonejs/cornerstone3D/compare/v4.21.0...v4.21.1) (2026-04-10) **Note:** Version bump only for package @cornerstonejs/tools diff --git a/packages/tools/package.json b/packages/tools/package.json index 68941a2258..1fc7247e42 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@cornerstonejs/tools", - "version": "4.21.1", + "version": "4.21.2", "description": "Cornerstone3D Tools", "types": "./dist/esm/index.d.ts", "module": "./dist/esm/index.js", @@ -108,7 +108,7 @@ "canvas": "3.2.0" }, "peerDependencies": { - "@cornerstonejs/core": "4.21.1", + "@cornerstonejs/core": "4.21.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", diff --git a/packages/tools/src/version.ts b/packages/tools/src/version.ts index be25df603b..51dd142aad 100644 --- a/packages/tools/src/version.ts +++ b/packages/tools/src/version.ts @@ -2,4 +2,4 @@ * Auto-generated from version.json * Do not modify this file directly */ -export const version = '4.21.1'; +export const version = '4.21.2'; diff --git a/version.json b/version.json index 8809781a18..682b2afe53 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "4.21.1", - "commit": "b2d771b13010a9018acbdf5427fbc635d0ddd8a7" + "version": "4.21.2", + "commit": "7a5cc93765b7ebfdfd02790d4eb9e7c29cd7b38b" } \ No newline at end of file diff --git a/version.txt b/version.txt index 3cbccd1694..0feb7b448b 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -4.21.1 \ No newline at end of file +4.21.2 \ No newline at end of file From 5438403422be72b37c2849678ab6a66528af7c9b Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 10 Apr 2026 17:27:37 -0400 Subject: [PATCH 68/90] lock --- bun.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/bun.lock b/bun.lock index 996b9d69ed..5fd88e251a 100644 --- a/bun.lock +++ b/bun.lock @@ -120,7 +120,7 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -129,17 +129,17 @@ "ndarray": "1.0.19", }, "devDependencies": { - "@cornerstonejs/core": "4.21.0", - "@cornerstonejs/tools": "4.21.0", + "@cornerstonejs/core": "4.21.2", + "@cornerstonejs/tools": "4.21.2", }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", - "@cornerstonejs/tools": "4.21.0", + "@cornerstonejs/core": "4.21.2", + "@cornerstonejs/tools": "4.21.2", }, }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", @@ -157,7 +157,7 @@ }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -167,7 +167,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -186,7 +186,7 @@ }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", @@ -199,7 +199,7 @@ }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "nifti-reader-js": "0.6.9", }, @@ -209,7 +209,7 @@ }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, @@ -221,7 +221,7 @@ }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.21.0", + "version": "4.21.2", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", @@ -231,7 +231,7 @@ "canvas": "3.2.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.21.0", + "@cornerstonejs/core": "4.21.2", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", From eae0528a2fdf885272b04577b3982bf6ceaa48e4 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 10 Apr 2026 17:29:56 -0400 Subject: [PATCH 69/90] Use correct downstream ohif for testing --- .github/workflows/ohif-downstream.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ohif-downstream.yml b/.github/workflows/ohif-downstream.yml index 3240b9f8a3..8732a16c87 100644 --- a/.github/workflows/ohif-downstream.yml +++ b/.github/workflows/ohif-downstream.yml @@ -16,7 +16,7 @@ jobs: env: BUN_VERSION: 1.3.11 NODE_VERSION: 24 - OHIF_REF: fix/combined-ohif-cs3d-build-local-agent + OHIF_REF: feat/load-seg-images OHIF_DIR: ohif # Update to force a rebuild of the OHIF integration BUILD_INDEX: 0 From 942b022829ca0406c7caff72aa7744e00a0a0e26 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 15 Apr 2026 10:50:50 -0400 Subject: [PATCH 70/90] fix: Labelmap missing functions --- .../Segmentation/labelmapImagesFromBuffer.ts | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index ea7806974a..3ecc9b712d 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -1,5 +1,6 @@ import { eventTarget, imageLoader, triggerEvent } from '@cornerstonejs/core'; import { utilities as cstUtils } from '@cornerstonejs/tools'; +import { data as dcmjsData, utilities as dcmjsUtilities } from 'dcmjs'; import ndarray from 'ndarray'; import checkOrientation from '../../helpers/checkOrientation'; import { @@ -14,6 +15,52 @@ import { import { compactMergeSegmentDataWithoutInformationLoss } from './compactMergeSegData'; import { Events } from '../../enums'; +const { BitArray } = dcmjsData; +const { decode } = dcmjsUtilities.compression; + +function unpackPixelData( + multiframe, + options: { maxBytesPerChunk?: number } = {} +) { + const { maxBytesPerChunk = Number.POSITIVE_INFINITY } = options; + const { PixelData } = multiframe; + + if (!PixelData) { + return; + } + + const pixelDataArray = Array.isArray(PixelData) ? PixelData[0] : PixelData; + const packedPixelData = + pixelDataArray instanceof Uint8Array + ? pixelDataArray + : new Uint8Array(pixelDataArray); + + // Fractional segmentations are not yet supported by this adapter path. + if (multiframe.SegmentationType === 'FRACTIONAL') { + return; + } + + const unpackedPixelData = + multiframe.BitsStored === 1 + ? BitArray.unpack(packedPixelData) + : packedPixelData; + + if (unpackedPixelData.length <= maxBytesPerChunk) { + return [unpackedPixelData]; + } + + const chunks = []; + for ( + let offset = 0; + offset < unpackedPixelData.length; + offset += maxBytesPerChunk + ) { + chunks.push(unpackedPixelData.subarray(offset, offset + maxBytesPerChunk)); + } + + return chunks; +} + const updateSegmentsOnFrame = ({ segmentsOnFrame, imageIdIndex, @@ -71,8 +118,11 @@ async function createLabelmapsFromBufferInternal( metadataProvider, options ) { - const { tolerance = 1e-3, TypedArrayConstructor = Uint8Array } = - options ?? {}; + const { + tolerance = 1e-3, + TypedArrayConstructor = Uint8Array, + maxBytesPerChunk, + } = options ?? {}; const instanceMeta = metadataProvider.get('instance', segImageId); if (!instanceMeta) { From c40bb26ed318ed101b2319c838a239f341ee0a67 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 15 Apr 2026 17:59:35 -0400 Subject: [PATCH 71/90] feat: Add RLE encoded labelmap segmentation store/load --- .../adapters/Cornerstone/Segmentation_4X.js | 28 +- .../Segmentation/generateSegmentation.ts | 327 +++++++++++++++++- .../Segmentation/generateToolState.ts | 74 +--- .../Cornerstone3D/Segmentation/index.ts | 2 - .../Segmentation/labelmapImagesFromBuffer.ts | 278 ++++++++++++--- .../adapters/Cornerstone3D/encodePixelData.ts | 210 +++++++++++ 6 files changed, 787 insertions(+), 132 deletions(-) create mode 100644 packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts diff --git a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js index 3e26b8a50f..b5e9eb848b 100644 --- a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js +++ b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js @@ -24,6 +24,8 @@ const { BitArray, DicomMessage, DicomMetaDictionary } = dcmjsData; const { Normalizer } = normalizers; const { Segmentation: SegmentationDerivation } = derivations; const { encode, decode } = utilities.compression; +const RLE_LOSSLESS_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.5'; +const EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.1'; /** * @@ -34,7 +36,7 @@ const { encode, decode } = utilities.compression; */ const generateSegmentationDefaultOptions = { includeSliceSpacing: true, - rleEncode: false, + transferSyntaxUid: RLE_LOSSLESS_TRANSFER_SYNTAX_UID, }; /** @@ -162,7 +164,12 @@ export function fillSegmentation( } } } - if (options.rleEncode) { + const transferSyntaxUid = + options.transferSyntaxUid ?? + options.transferSyntaxUID ?? + RLE_LOSSLESS_TRANSFER_SYNTAX_UID; + + if (transferSyntaxUid === RLE_LOSSLESS_TRANSFER_SYNTAX_UID) { const rleEncodedFrames = encode( segmentation.dataset.PixelData, numberOfFrames, @@ -183,15 +190,26 @@ export function fillSegmentation( }); segmentation.dataset._meta.TransferSyntaxUID = { - Value: ['1.2.840.10008.1.2.5'], + Value: [RLE_LOSSLESS_TRANSFER_SYNTAX_UID], vr: 'UI', }; segmentation.dataset.SpecificCharacterSet = 'ISO_IR 192'; segmentation.dataset._vrMap.PixelData = 'OB'; segmentation.dataset.PixelData = rleEncodedFrames; - } else { - // If no rleEncoding, at least bitpack the data. + } else if ( + transferSyntaxUid === EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID + ) { + // For explicit VR little endian, at least bitpack the data. segmentation.bitPackPixelData(); + segmentation.dataset._meta.TransferSyntaxUID = { + Value: [EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID], + vr: 'UI', + }; + } else { + throw new Error( + `Unsupported SEG transfer syntax: ${transferSyntaxUid}. ` + + `Supported: ${RLE_LOSSLESS_TRANSFER_SYNTAX_UID}, ${EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID}` + ); } return segmentation; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts index 606d51fb35..f98bfca72c 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts @@ -1,10 +1,18 @@ -import { normalizers, derivations } from 'dcmjs'; +import { normalizers, derivations, data as dcmjsData } from 'dcmjs'; import { Enums } from '@cornerstonejs/core'; -import { fillSegmentation } from '../../Cornerstone/Segmentation_4X'; +import { fillSegmentation as fillBitmapSegmentation } from '../../Cornerstone/Segmentation_4X'; +import { + encodeFramesToTransferSyntax, + EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + RLE_LOSSLESS_TRANSFER_SYNTAX_UID, +} from '../encodePixelData'; const { MetadataModules } = Enums; const { SEGImageNormalizer } = normalizers; const { Segmentation: SegmentationDerivation } = derivations; +const { BitArray } = dcmjsData; +const LABELMAP_SEG_SOP_CLASS_UID = '1.2.840.10008.5.1.4.1.1.66.7'; +const BITMAP_SEG_SOP_CLASS_UID = '1.2.840.10008.5.1.4.1.1.66.4'; interface IOptions { predecessorImageId?: string; @@ -14,6 +22,249 @@ type Options = IOptions & { [key: string]: number | boolean | unknown | string; }; +function resolveTransferSyntaxUid(options: Options = {}) { + return ( + (options.transferSyntaxUid as string) || + (options.transferSyntaxUID as string) || + RLE_LOSSLESS_TRANSFER_SYNTAX_UID + ); +} + +function getFrameArrayFromBitmapDataset(dataset) { + const numberOfFrames = Number(dataset.NumberOfFrames) || 1; + const rows = Number(dataset.Rows); + const columns = Number(dataset.Columns); + const samplesPerFrame = rows * columns; + const bitsAllocated = Number(dataset.BitsAllocated); + const pixelData = dataset.PixelData; + + if (!pixelData) { + throw new Error('Bitmap SEG dataset has no PixelData'); + } + + if (bitsAllocated === 1) { + const packed = + pixelData instanceof Uint8Array ? pixelData : new Uint8Array(pixelData); + const unpacked = BitArray.unpack(packed); + const frames: Uint8Array[] = []; + + for (let i = 0; i < numberOfFrames; i++) { + const start = i * samplesPerFrame; + frames.push(unpacked.slice(start, start + samplesPerFrame)); + } + + return { frames, bitsAllocated }; + } + + if (bitsAllocated <= 8) { + const buffer = + pixelData instanceof Uint8Array ? pixelData : new Uint8Array(pixelData); + const frames: Uint8Array[] = []; + for (let i = 0; i < numberOfFrames; i++) { + const start = i * samplesPerFrame; + frames.push(buffer.slice(start, start + samplesPerFrame)); + } + return { frames, bitsAllocated }; + } + + const buffer = + pixelData instanceof Uint16Array ? pixelData : new Uint16Array(pixelData); + const frames: Uint16Array[] = []; + for (let i = 0; i < numberOfFrames; i++) { + const start = i * samplesPerFrame; + frames.push(buffer.slice(start, start + samplesPerFrame)); + } + return { frames, bitsAllocated }; +} + +function hasAnySegment(pixelData: ArrayLike) { + for (let i = 0; i < pixelData.length; i++) { + if (pixelData[i] !== 0) { + return true; + } + } + + return false; +} + +function normalizeFramePixelData(pixelData: ArrayLike) { + if (pixelData instanceof Uint8Array) { + return pixelData; + } + + const frame = new Uint8Array(pixelData.length); + for (let i = 0; i < pixelData.length; i++) { + frame[i] = pixelData[i]; + } + + return frame; +} + +function getReferencedSourceImageSequenceItem(image, metadata) { + const imageData = + metadata.get(MetadataModules.IMAGE_DATA, image?.imageId) || {}; + const referencedSOPInstanceUID = imageData.SOPInstanceUID; + + const frameMatch = image?.imageId?.match?.(/[?&]frame=(\d+)/); + const referencedFrameNumber = frameMatch ? Number(frameMatch[1]) : undefined; + const item: { + ReferencedSOPInstanceUID: string; + ReferencedFrameNumber?: number; + } = { + ReferencedSOPInstanceUID: referencedSOPInstanceUID, + }; + + if (Number.isFinite(referencedFrameNumber) && referencedFrameNumber > 0) { + item.ReferencedFrameNumber = referencedFrameNumber; + } + + return item; +} + +function fillLabelmapSegmentation( + segmentation, + inputLabelmaps3D, + metadata, + images, + options: Options = {} +) { + const labelmap3D = Array.isArray(inputLabelmaps3D) + ? inputLabelmaps3D[0] + : inputLabelmaps3D; + const labelmaps2D = labelmap3D?.labelmaps2D ?? []; + const segmentSequence = + labelmap3D?.metadata?.filter(Boolean)?.map((segment) => ({ ...segment })) ?? + []; + const validFrameIndices: number[] = []; + + for (let i = 0; i < labelmaps2D.length; i++) { + const labelmap2D = labelmaps2D[i]; + + if (!labelmap2D?.pixelData) { + continue; + } + + if (!hasAnySegment(labelmap2D.pixelData)) { + continue; + } + + validFrameIndices.push(i); + } + + if (!validFrameIndices.length) { + throw new Error('No non-empty labelmap frames found for SEG export'); + } + + const firstFrame = labelmaps2D[validFrameIndices[0]]; + const rows = firstFrame.rows; + const columns = firstFrame.columns; + const frameLength = rows * columns; + const numberOfFrames = validFrameIndices.length; + + const combinedPixelData = new Uint8Array(frameLength * numberOfFrames); + const framePixelData: Uint8Array[] = []; + validFrameIndices.forEach((frameIndex, outputIndex) => { + const source = normalizeFramePixelData(labelmaps2D[frameIndex].pixelData); + combinedPixelData.set(source, outputIndex * frameLength); + framePixelData.push(source); + }); + + const { dataset } = segmentation; + dataset.NumberOfFrames = numberOfFrames; + dataset.Rows = rows; + dataset.Columns = columns; + dataset.SOPClassUID = LABELMAP_SEG_SOP_CLASS_UID; + dataset.SegmentationType = 'LABELMAP'; + if (segmentSequence.length) { + dataset.SegmentSequence = segmentSequence; + } + dataset.BitsAllocated = '8'; + dataset.BitsStored = '8'; + dataset.HighBit = '7'; + dataset.PixelRepresentation = '0'; + delete dataset.MaximumFractionalValue; + delete dataset.SegmentationFractionalType; + dataset.SpecificCharacterSet = 'ISO_IR 192'; + dataset._vrMap ||= {}; + + const transferSyntaxUid = resolveTransferSyntaxUid(options); + const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ + transferSyntaxUID: transferSyntaxUid, + frames: framePixelData, + bitsAllocated: 8, + }); + dataset.PixelData = pixelData; + dataset._vrMap.PixelData = pixelDataVR; + dataset._meta ||= {}; + dataset._meta.TransferSyntaxUID = { + Value: [transferSyntaxUid], + vr: 'UI', + }; + + dataset._meta ||= {}; + dataset._meta.MediaStorageSOPClassUID = { + Value: [LABELMAP_SEG_SOP_CLASS_UID], + vr: 'UI', + }; + + // Keep normalizer-generated per-frame items for the filtered input images. + dataset.PerFrameFunctionalGroupsSequence = ( + dataset.PerFrameFunctionalGroupsSequence ?? [] + ).filter(Boolean); + + const sourceImageSequence = images + .map((image) => getReferencedSourceImageSequenceItem(image, metadata)) + .filter((item) => item.ReferencedSOPInstanceUID); + + if (sourceImageSequence.length) { + dataset.SourceImageSequence = sourceImageSequence; + dataset.PerFrameFunctionalGroupsSequence = + dataset.PerFrameFunctionalGroupsSequence.map((group, index) => { + const sourceImageSequenceItem = sourceImageSequence[index]; + if (!sourceImageSequenceItem) { + return group; + } + + return { + ...group, + DerivationImageSequence: { + SourceImageSequence: [sourceImageSequenceItem], + }, + }; + }); + } + + const sopInstanceUIDs = new Set( + images + .map( + (image) => + metadata.get(MetadataModules.IMAGE_DATA, image?.imageId) + ?.SOPInstanceUID + ) + .filter(Boolean) + ); + const referencedSeriesSequence = dataset.ReferencedSeriesSequence; + const referencedSeries = Array.isArray(referencedSeriesSequence) + ? referencedSeriesSequence[0] + : referencedSeriesSequence; + + if (referencedSeries?.ReferencedInstanceSequence && sopInstanceUIDs.size) { + const referencedInstances = Array.isArray( + referencedSeries.ReferencedInstanceSequence + ) + ? referencedSeries.ReferencedInstanceSequence + : [referencedSeries.ReferencedInstanceSequence]; + + referencedSeries.ReferencedInstanceSequence = referencedInstances.filter( + (instance) => + instance?.ReferencedSOPInstanceUID && + sopInstanceUIDs.has(instance.ReferencedSOPInstanceUID) + ); + } + + return segmentation; +} + /** * generateSegmentation - Generates a DICOM Segmentation object given cornerstoneTools data. * @@ -26,12 +277,80 @@ function generateSegmentation( metadata, options: Options = {} ) { + const requestedSOPClassUID = + (options?.sopClassUID as string) || LABELMAP_SEG_SOP_CLASS_UID; + const shouldExportBitmap = requestedSOPClassUID === BITMAP_SEG_SOP_CLASS_UID; + + if (shouldExportBitmap) { + const transferSyntaxUid = resolveTransferSyntaxUid(options); + const segmentation = _createMultiframeSegmentationFromReferencedImages( + images, + metadata, + options + ); + const segmentationResult = fillBitmapSegmentation(segmentation, labelmaps, { + ...options, + transferSyntaxUid: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + }); + const { frames, bitsAllocated } = getFrameArrayFromBitmapDataset( + segmentationResult.dataset + ); + const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ + transferSyntaxUID: transferSyntaxUid, + frames, + bitsAllocated, + }); + + segmentationResult.dataset.PixelData = pixelData; + segmentationResult.dataset._vrMap ||= {}; + segmentationResult.dataset._vrMap.PixelData = pixelDataVR; + segmentationResult.dataset.SOPClassUID = BITMAP_SEG_SOP_CLASS_UID; + segmentationResult.dataset._meta ||= {}; + segmentationResult.dataset._meta.TransferSyntaxUID = { + Value: [transferSyntaxUid], + vr: 'UI', + }; + segmentationResult.dataset._meta.MediaStorageSOPClassUID = { + Value: [BITMAP_SEG_SOP_CLASS_UID], + vr: 'UI', + }; + + const predecessorImageId = options?.predecessorImageId; + if (predecessorImageId) { + const predecessor = metadata.get( + MetadataModules.PREDECESSOR_SEQUENCE, + predecessorImageId + ); + Object.assign(segmentationResult, predecessor); + } + + return segmentationResult; + } + + const labelmap3D = Array.isArray(labelmaps) ? labelmaps[0] : labelmaps; + const nonEmptyFrameIndices = + labelmap3D?.labelmaps2D + ?.map((frame, index) => + frame?.pixelData && hasAnySegment(frame.pixelData) ? index : -1 + ) + .filter((index) => index >= 0) ?? []; + const filteredImages = nonEmptyFrameIndices.length + ? nonEmptyFrameIndices.map((index) => images[index]).filter(Boolean) + : images; + const segmentation = _createMultiframeSegmentationFromReferencedImages( - images, + filteredImages, metadata, options ); - const segmentationResult = fillSegmentation(segmentation, labelmaps, options); + const segmentationResult = fillLabelmapSegmentation( + segmentation, + labelmaps, + metadata, + filteredImages, + options + ); + const predecessorImageId = options?.predecessorImageId; if (predecessorImageId) { const predecessor = metadata.get( diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index 79310fca77..eccdf96f23 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -1,69 +1,6 @@ -import { data as dcmjsData, utilities as dcmjsUtilities } from 'dcmjs'; import { generateToolState as generateToolStateCornerstoneLegacy } from '../../Cornerstone/Segmentation'; -import { unpackPixelData } from '../../Cornerstone/Segmentation_4X'; import { createLabelmapsFromBufferInternal } from './labelmapImagesFromBuffer'; -const { DicomMessage, DicomMetaDictionary } = dcmjsData; -const { decode: dcmjsDecode } = dcmjsUtilities.compression; -const maxBytesPerChunk = 199000000; - -/** - * Decodes a SEG DICOM array buffer into a naturalized dataset and a getPixelData() function. - * Used when the caller has the buffer (e.g. OHIF) and needs to populate metadata and pass - * uncompressed pixel data as options.segImage until a SEG-capable image loader is available. - * - * @param arrayBuffer - Raw SEG DICOM array buffer - * @returns { dataset, getPixelData } - dataset is naturalized; getPixelData() returns unpacked pixel data (array or single TypedArray) - */ -export function decodeSEGBufferToNaturalizedAndPixelData( - arrayBuffer: ArrayBuffer -): { - dataset: Record; - getPixelData: () => Uint8Array | Uint16Array | (Uint8Array | Uint16Array)[]; -} { - const dicomData = DicomMessage.readFile(arrayBuffer); - const dataset = DicomMetaDictionary.naturalizeDataset( - dicomData.dict - ) as Record; - (dataset as Record)._meta = - DicomMetaDictionary.namifyDataset(dicomData.meta); - - const transferSyntax = ( - dataset._meta as { TransferSyntaxUID?: { Value?: string[] } } - )?.TransferSyntaxUID?.Value?.[0]; - let pixelDataChunks: - | Uint8Array[] - | Uint16Array[] - | (Uint8Array | Uint16Array)[]; - - if (transferSyntax === '1.2.840.10008.1.2.5') { - const rleEncodedFrames = Array.isArray(dataset.PixelData) - ? dataset.PixelData - : [dataset.PixelData]; - const decoded = dcmjsDecode( - rleEncodedFrames, - dataset.Rows as number, - dataset.Columns as number - ); - pixelDataChunks = [decoded]; - } else { - const chunks = unpackPixelData( - dataset as Parameters[0], - { maxBytesPerChunk } - ); - if (!chunks) { - throw new Error('Fractional segmentations are not yet supported'); - } - pixelDataChunks = Array.isArray(chunks) ? chunks : [chunks]; - } - - return { - dataset, - getPixelData: () => - pixelDataChunks.length === 1 ? pixelDataChunks[0] : pixelDataChunks, - }; -} - /** * generateToolState - Given a set of cornerstoneTools imageIds and a Segmentation buffer, * derive cornerstoneTools toolState and brush metadata. @@ -117,7 +54,13 @@ function generateToolState( function createFromDICOMSegBuffer( referencedImageIds, segImageId, - { metadataProvider, tolerance = 1e-3 } + { + metadataProvider, + tolerance = 1e-3, + parserType = 'bitmap', + decodeImageData, + allowLegacyDatasetDecode = false, + } ) { return createLabelmapsFromBufferInternal( referencedImageIds, @@ -125,6 +68,9 @@ function createFromDICOMSegBuffer( metadataProvider, { tolerance, + parserType, + decodeImageData, + allowLegacyDatasetDecode, } ); } diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts index c2d44344dd..15fdaf93b6 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts @@ -3,7 +3,6 @@ import { generateLabelMaps2DFrom3D } from './generateLabelMaps2DFrom3D'; import { generateToolState, createFromDICOMSegBuffer, - decodeSEGBufferToNaturalizedAndPixelData, } from './generateToolState'; export { @@ -11,5 +10,4 @@ export { generateSegmentation, generateToolState, createFromDICOMSegBuffer, - decodeSEGBufferToNaturalizedAndPixelData, }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index 3ecc9b712d..a6be2d171b 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -17,48 +17,149 @@ import { Events } from '../../enums'; const { BitArray } = dcmjsData; const { decode } = dcmjsUtilities.compression; +const LABELMAP_SEG_SOP_CLASS_UID = '1.2.840.10008.5.1.4.1.1.66.7'; -function unpackPixelData( - multiframe, +function chunkPixelData( + pixelData, options: { maxBytesPerChunk?: number } = {} ) { const { maxBytesPerChunk = Number.POSITIVE_INFINITY } = options; - const { PixelData } = multiframe; - if (!PixelData) { - return; + if (pixelData.length <= maxBytesPerChunk) { + return [pixelData]; } - const pixelDataArray = Array.isArray(PixelData) ? PixelData[0] : PixelData; - const packedPixelData = - pixelDataArray instanceof Uint8Array - ? pixelDataArray - : new Uint8Array(pixelDataArray); + const chunks = []; + for (let offset = 0; offset < pixelData.length; offset += maxBytesPerChunk) { + chunks.push(pixelData.subarray(offset, offset + maxBytesPerChunk)); + } - // Fractional segmentations are not yet supported by this adapter path. - if (multiframe.SegmentationType === 'FRACTIONAL') { + return chunks; +} + +function normalizeDecodedPixelData(pixelData) { + if (Array.isArray(pixelData)) { + if (pixelData.length === 1) { + return normalizeDecodedPixelData(pixelData[0]); + } + + const hasUint16Frame = pixelData.some( + (frame) => frame instanceof Uint16Array + ); + + if (hasUint16Frame) { + const normalizedFrames = pixelData.map((frame) => + frame instanceof Uint16Array + ? frame + : frame instanceof Uint8Array + ? new Uint16Array(frame) + : new Uint16Array(frame) + ); + const totalLength = normalizedFrames.reduce( + (acc, frame) => acc + frame.length, + 0 + ); + const combined = new Uint16Array(totalLength); + let offset = 0; + for (const frame of normalizedFrames) { + combined.set(frame, offset); + offset += frame.length; + } + return combined; + } + + const normalizedFrames = pixelData.map((frame) => + frame instanceof Uint8Array ? frame : new Uint8Array(frame) + ); + const totalLength = normalizedFrames.reduce( + (acc, frame) => acc + frame.length, + 0 + ); + const combined = new Uint8Array(totalLength); + let offset = 0; + for (const frame of normalizedFrames) { + combined.set(frame, offset); + offset += frame.length; + } + return combined; + } + + if (pixelData instanceof Uint8Array || pixelData instanceof Uint16Array) { + return pixelData; + } + + return new Uint8Array(pixelData); +} + +function getExpectedVoxelCount(multiframe) { + const numberOfFrames = + Number(multiframe.NumberOfFrames) || + multiframe.PerFrameFunctionalGroupsSequence?.length || + 1; + return multiframe.Rows * multiframe.Columns * numberOfFrames; +} + +function decodeFromDatasetPixelData(multiframe) { + const encodedFrames = Array.isArray(multiframe.PixelData) + ? multiframe.PixelData + : [multiframe.PixelData]; + + if (!encodedFrames?.length) { return; } - const unpackedPixelData = - multiframe.BitsStored === 1 - ? BitArray.unpack(packedPixelData) - : packedPixelData; + const decoded = decode(encodedFrames, multiframe.Rows, multiframe.Columns); + return normalizeDecodedPixelData(decoded); +} - if (unpackedPixelData.length <= maxBytesPerChunk) { - return [unpackedPixelData]; +async function defaultDecodeImageData(segImageId) { + const segImage = await imageLoader.loadImage(segImageId); + return segImage?.getPixelData?.(); +} + +async function decodeSegPixelData({ + segImageId, + multiframe, + decodeImageData = defaultDecodeImageData, + allowLegacyDatasetDecode = false, +}: { + segImageId: string; + multiframe: Record; + decodeImageData?: ( + imageId: string + ) => Promise< + | ArrayLike + | ArrayLike[] + | Uint8Array + | Uint16Array + | (Uint8Array | Uint16Array)[] + >; + allowLegacyDatasetDecode?: boolean; +}) { + const segPixelData = await decodeImageData(segImageId); + + if (!segPixelData) { + throw new Error( + `No decoded pixel data found for SEG imageId: ${segImageId}` + ); } - const chunks = []; - for ( - let offset = 0; - offset < unpackedPixelData.length; - offset += maxBytesPerChunk + const normalizedDecodedPixelData = normalizeDecodedPixelData(segPixelData); + const expectedVoxelCount = getExpectedVoxelCount(multiframe); + let decodedPixelData = normalizedDecodedPixelData; + + if ( + allowLegacyDatasetDecode && + normalizedDecodedPixelData.length !== expectedVoxelCount ) { - chunks.push(unpackedPixelData.subarray(offset, offset + maxBytesPerChunk)); + const datasetDecodedPixelData = decodeFromDatasetPixelData(multiframe); + + if (datasetDecodedPixelData) { + decodedPixelData = datasetDecodedPixelData; + } } - return chunks; + return { decodedPixelData, expectedVoxelCount }; } const updateSegmentsOnFrame = ({ @@ -102,6 +203,32 @@ const extractInfoFromPerFrameFunctionalGroups = ({ return { referencedSOPInstanceUid, referencedImageId, segmentIndex }; }; +const getReferencedImageIdFromPerFrameGroup = ({ + perFrameFunctionalGroup, + sopUIDImageIdIndexMap, +}) => { + const derivationImageSequence = + perFrameFunctionalGroup?.DerivationImageSequence; + const normalizedDerivationImageSequence = Array.isArray( + derivationImageSequence + ) + ? derivationImageSequence[0] + : derivationImageSequence; + const sourceImageSequence = + normalizedDerivationImageSequence?.SourceImageSequence; + const normalizedSourceImageSequence = Array.isArray(sourceImageSequence) + ? sourceImageSequence[0] + : sourceImageSequence; + const referencedSOPInstanceUID = + normalizedSourceImageSequence?.ReferencedSOPInstanceUID; + + if (!referencedSOPInstanceUID) { + return; + } + + return sopUIDImageIdIndexMap[referencedSOPInstanceUID]; +}; + /** * Creates labelmap images from a SEG instance identified by segImageId. * Uses metadataProvider.get('instance', segImageId) for the naturalized SEG dataset @@ -122,6 +249,9 @@ async function createLabelmapsFromBufferInternal( tolerance = 1e-3, TypedArrayConstructor = Uint8Array, maxBytesPerChunk, + parserType = 'bitmap', + decodeImageData = defaultDecodeImageData, + allowLegacyDatasetDecode = false, } = options ?? {}; const instanceMeta = metadataProvider.get('instance', segImageId); @@ -162,33 +292,34 @@ async function createLabelmapsFromBufferInternal( const validOrientations = getValidOrientations(ImageOrientationPatient); const segMetadata = getSegmentMetadata(multiframe, SeriesInstanceUID); - const TransferSyntaxUID = multiframe._meta.TransferSyntaxUID.Value[0]; - - let pixelData; let pixelDataChunks; - if (TransferSyntaxUID === '1.2.840.10008.1.2.5') { - const rleEncodedFrames = Array.isArray(multiframe.PixelData) - ? multiframe.PixelData - : [multiframe.PixelData]; - - pixelData = decode(rleEncodedFrames, multiframe.Rows, multiframe.Columns); - - if (multiframe.BitsStored === 1) { - console.warn('No implementation for rle + bit packing.'); + if (multiframe.SegmentationType === 'FRACTIONAL') { + throw new Error('Fractional segmentations are not yet supported'); + } - return; - } + const { decodedPixelData, expectedVoxelCount } = await decodeSegPixelData({ + segImageId, + multiframe, + decodeImageData, + allowLegacyDatasetDecode, + }); + const sliceLength = multiframe.Rows * multiframe.Columns; - // Todo: need to test this with rle data - pixelDataChunks = [pixelData]; - } else { - pixelDataChunks = unpackPixelData(multiframe, { maxBytesPerChunk }); + const unpackedPixelData = + multiframe.BitsStored === 1 && decodedPixelData.length < expectedVoxelCount + ? BitArray.unpack( + decodedPixelData instanceof Uint8Array + ? decodedPixelData + : new Uint8Array(decodedPixelData.buffer) + ) + : decodedPixelData; + const decodedFrameCount = Math.max( + 1, + Math.floor(unpackedPixelData.length / sliceLength) + ); - if (!pixelDataChunks) { - throw new Error('Fractional segmentations are not yet supported'); - } - } + pixelDataChunks = chunkPixelData(unpackedPixelData, { maxBytesPerChunk }); const orientation = checkOrientation( multiframe, @@ -271,6 +402,8 @@ async function createLabelmapsFromBufferInternal( sopUIDImageIdIndexMap, imageIdMaps, TypedArrayConstructor, + parserType, + decodedFrameCount, }); // calculate the centroid of each segment @@ -317,6 +450,8 @@ export function insertPixelDataPlanar({ segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps, + parserType, + decodedFrameCount, }) { const { SharedFunctionalGroupsSequence, @@ -332,7 +467,15 @@ export function insertPixelDataPlanar({ : undefined; const sliceLength = Columns * Rows; - const groupsLen = PerFrameFunctionalGroupsSequence.length; + const metadataFrameCount = + Number(multiframe.NumberOfFrames) || + PerFrameFunctionalGroupsSequence.length; + const groupsLenFromMetadata = + PerFrameFunctionalGroupsSequence.length || metadataFrameCount; + const groupsLen = + typeof decodedFrameCount === 'number' + ? Math.min(groupsLenFromMetadata, decodedFrameCount) + : groupsLenFromMetadata; let overlapping = false; // Below, we chunk the processing of the frames to avoid blocking the main thread @@ -491,7 +634,6 @@ export function insertPixelDataPlanar({ const sharedPlaneOrientation = multiframe.SharedFunctionalGroupsSequence.PlaneOrientationSequence ?.ImageOrientationPatient; - for ( let i = firstIndex; i < firstIndex + imagesPerChunk && i < groupsLen; @@ -500,12 +642,13 @@ export function insertPixelDataPlanar({ const PerFrameFunctionalGroups = pfSeq[i]; const ImageOrientationPatientI = sharedPlaneOrientation || - PerFrameFunctionalGroups.PlaneOrientationSequence - .ImageOrientationPatient; - // Use slice to get the correct frame (TypedArray) - const view = pixelDataChunks.subarray( + PerFrameFunctionalGroups?.PlaneOrientationSequence + ?.ImageOrientationPatient || + validOrientations[0]; + const view = readFromUnpackedChunks( + pixelDataChunks, i * sliceLength, - (i + 1) * sliceLength + sliceLength ); const pixelDataI2D = ndarray(view, [Rows, Columns]); const alignedPixelDataI = alignPixelDataWithSourceData( @@ -520,7 +663,7 @@ export function insertPixelDataPlanar({ 'This is not yet supported. Aborting segmentation loading.' ); } - const imageId = findReferenceSourceImageId( + let imageId = findReferenceSourceImageId( multiframe, i, referencedImageIds, @@ -528,6 +671,16 @@ export function insertPixelDataPlanar({ tolerance, sopUIDImageIdIndexMap ); + if (!imageId) { + imageId = getReferencedImageIdFromPerFrameGroup({ + perFrameFunctionalGroup: PerFrameFunctionalGroups, + sopUIDImageIdIndexMap, + }); + } + + if (!imageId && parserType === 'labelmap') { + imageId = referencedImageIds[i]; + } if (!imageId) { console.warn( `Image not present in stack, can't import frame : ${i}.` @@ -548,6 +701,7 @@ export function insertPixelDataPlanar({ const imageIdIndex = imageIdMaps.indices[imageId]; const labelmapImage = labelMapImages[imageIdIndex]; const labelmap2DView = labelmapImage.getPixelData(); // TypedArray + const imageVoxelManager = labelmapImage.voxelManager; const data = alignedPixelDataI.data; let segmentsOnFrameArr = segmentsOnFrame[imageIdIndex]; if (!segmentsOnFrameArr) { @@ -559,7 +713,11 @@ export function insertPixelDataPlanar({ for (let k = 0, len = data.length; k < len; ++k) { const segIdx = data[k]; if (segIdx !== 0) { - labelmap2DView[k] = segIdx; + if (imageVoxelManager) { + imageVoxelManager.setAtIndex(k, segIdx); + } else { + labelmap2DView[k] = segIdx; + } if (!segSet.has(segIdx)) { segmentsOnFrameArr.push(segIdx); segSet.add(segIdx); @@ -587,7 +745,12 @@ export function insertPixelDataPlanar({ } }; - if (multiframe.SegmentationType === 'LABELMAP') { + const isLabelmapSegmentation = + parserType === 'labelmap' || + multiframe.SOPClassUID === LABELMAP_SEG_SOP_CLASS_UID || + multiframe.SegmentationType === 'LABELMAP'; + + if (isLabelmapSegmentation) { // If the segmentation is a labelmap, we can process it in chunks processLabelmapChunk(0); } else { @@ -914,3 +1077,4 @@ const getSegmentData = ({ }; export { createLabelmapsFromBufferInternal }; +export { decodeSegPixelData }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts new file mode 100644 index 0000000000..e6c7f2aaac --- /dev/null +++ b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts @@ -0,0 +1,210 @@ +const RLE_LOSSLESS_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.5'; +const EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.1'; + +function packBits(samples: ArrayLike) { + const output: number[] = []; + let i = 0; + + while (i < samples.length) { + let replicateRunLength = 1; + while ( + i + replicateRunLength < samples.length && + replicateRunLength < 128 && + samples[i + replicateRunLength] === samples[i] + ) { + replicateRunLength++; + } + + if (replicateRunLength >= 2) { + output.push(257 - replicateRunLength, samples[i] & 0xff); + i += replicateRunLength; + continue; + } + + const literalStart = i; + i++; + while (i < samples.length) { + replicateRunLength = 1; + while ( + i + replicateRunLength < samples.length && + replicateRunLength < 128 && + samples[i + replicateRunLength] === samples[i] + ) { + replicateRunLength++; + } + + if (replicateRunLength >= 2 || i - literalStart >= 128) { + break; + } + + i++; + } + + const literalLength = i - literalStart; + output.push(literalLength - 1); + for (let j = literalStart; j < i; j++) { + output.push(samples[j] & 0xff); + } + } + + return Uint8Array.from(output); +} + +function bitPackBinaryFrame(frame: ArrayLike) { + const packedLength = Math.ceil(frame.length / 8); + const packed = new Uint8Array(packedLength); + + for (let i = 0; i < frame.length; i++) { + if (frame[i]) { + packed[i >> 3] |= 1 << i % 8; + } + } + + return packed; +} + +function concatUint8Frames(frames: ArrayLike[]) { + const totalLength = frames.reduce((sum, frame) => sum + frame.length, 0); + const combined = new Uint8Array(totalLength); + let offset = 0; + for (const frame of frames) { + for (let i = 0; i < frame.length; i++) { + combined[offset + i] = frame[i] & 0xff; + } + offset += frame.length; + } + return combined; +} + +function concatUint16Frames(frames: ArrayLike[]) { + const totalLength = frames.reduce((sum, frame) => sum + frame.length, 0); + const combined = new Uint16Array(totalLength); + let offset = 0; + for (const frame of frames) { + for (let i = 0; i < frame.length; i++) { + combined[offset + i] = frame[i] & 0xffff; + } + offset += frame.length; + } + return combined; +} + +function getRleSegmentsForFrame( + frame: ArrayLike, + bitsAllocated: number +) { + if (bitsAllocated === 1) { + return [bitPackBinaryFrame(frame)]; + } + + if (bitsAllocated === 8) { + const segment = new Uint8Array(frame.length); + for (let i = 0; i < frame.length; i++) { + segment[i] = frame[i] & 0xff; + } + return [segment]; + } + + if (bitsAllocated === 16) { + const lowByteSegment = new Uint8Array(frame.length); + const highByteSegment = new Uint8Array(frame.length); + for (let i = 0; i < frame.length; i++) { + const sample = frame[i] & 0xffff; + lowByteSegment[i] = sample & 0xff; + highByteSegment[i] = (sample >> 8) & 0xff; + } + return [lowByteSegment, highByteSegment]; + } + + throw new Error( + `Unsupported bitsAllocated for RLE encoding: ${bitsAllocated}. Expected 1, 8, or 16.` + ); +} + +function encodeFrameToRle(frame: ArrayLike, bitsAllocated: number) { + const segmentPlanes = getRleSegmentsForFrame(frame, bitsAllocated); + if (segmentPlanes.length > 15) { + throw new Error( + `RLE segment count ${segmentPlanes.length} exceeds DICOM maximum of 15 segments` + ); + } + + const encodedSegments = segmentPlanes.map((segment) => { + const encoded = packBits(segment); + if (encoded.length % 2 === 0) { + return encoded; + } + + const padded = new Uint8Array(encoded.length + 1); + padded.set(encoded, 0); + return padded; + }); + + const header = new DataView(new ArrayBuffer(64)); + header.setUint32(0, encodedSegments.length, true); + let offset = 64; + for (let i = 0; i < encodedSegments.length; i++) { + header.setUint32((i + 1) * 4, offset, true); + offset += encodedSegments[i].length; + } + + const frameBytes = new Uint8Array(offset); + frameBytes.set(new Uint8Array(header.buffer), 0); + + let writeOffset = 64; + for (let i = 0; i < encodedSegments.length; i++) { + frameBytes.set(encodedSegments[i], writeOffset); + writeOffset += encodedSegments[i].length; + } + + return frameBytes.buffer; +} + +export function encodeFramesToTransferSyntax({ + transferSyntaxUID, + frames, + bitsAllocated, +}: { + transferSyntaxUID: string; + frames: ArrayLike[]; + bitsAllocated: number; +}) { + if (transferSyntaxUID === RLE_LOSSLESS_TRANSFER_SYNTAX_UID) { + return { + transferSyntaxUID, + pixelDataVR: 'OB', + pixelData: frames.map((frame) => encodeFrameToRle(frame, bitsAllocated)), + }; + } + + if (transferSyntaxUID === EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID) { + if (bitsAllocated === 1) { + const packedFrames = frames.map((frame) => bitPackBinaryFrame(frame)); + const combinedPacked = concatUint8Frames(packedFrames); + return { + transferSyntaxUID, + pixelDataVR: 'OW', + pixelData: combinedPacked, + }; + } + + return { + transferSyntaxUID, + pixelDataVR: bitsAllocated <= 8 ? 'OB' : 'OW', + pixelData: + bitsAllocated <= 8 + ? concatUint8Frames(frames) + : concatUint16Frames(frames), + }; + } + + throw new Error( + `Unsupported transfer syntax for SEG encoding: ${transferSyntaxUID}. ` + + `Supported: ${RLE_LOSSLESS_TRANSFER_SYNTAX_UID}, ${EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID}` + ); +} + +export { + RLE_LOSSLESS_TRANSFER_SYNTAX_UID, + EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, +}; From 1c5dbdd604aba198ace433d0ed750f2fc6fe1896 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 13 May 2026 13:29:39 -0400 Subject: [PATCH 72/90] fix: Build issue --- packages/tools/src/tools/segmentation/SegmentLabelTool.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/tools/src/tools/segmentation/SegmentLabelTool.ts b/packages/tools/src/tools/segmentation/SegmentLabelTool.ts index 5e1902e2da..39bf8ac896 100644 --- a/packages/tools/src/tools/segmentation/SegmentLabelTool.ts +++ b/packages/tools/src/tools/segmentation/SegmentLabelTool.ts @@ -17,7 +17,6 @@ import { getSegmentIndexAtWorldPoint } from '../../utilities/segmentation'; import { state } from '../../store/state'; import type { Segmentation } from '../../types/SegmentationStateTypes'; import { drawTextBox as drawTextBoxSvg } from '../../drawingSvg'; -import type { Point2 } from 'packages/core/dist/esm/types'; /** * Represents a tool used for segment selection. It is used to select a segment @@ -199,7 +198,7 @@ class SegmentLabelTool extends BaseTool { const textBoxPosition = [ canvasCoordinates[0] + offset, canvasCoordinates[1] + offset, - ] as Point2; + ] as Types.Point2; const boundingBox = drawTextBoxSvg( svgDrawingHelper, From fb37156fd6f5735b41adbf422473a7f698ae59d8 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 20 May 2026 22:15:21 -0400 Subject: [PATCH 73/90] dcmjs 0.51.1 --- bun.lock | 69 +++++++++++++++++----------------- package.json | 2 +- packages/adapters/package.json | 2 +- packages/ai/package.json | 2 +- yarn.lock | 8 ++-- 5 files changed, 42 insertions(+), 41 deletions(-) diff --git a/bun.lock b/bun.lock index 44c83871ec..edbaddf640 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "root", @@ -119,30 +120,30 @@ }, "packages/adapters": { "name": "@cornerstonejs/adapters", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", - "dcmjs": "0.49.4", + "dcmjs": "0.51.1", "gl-matrix": "3.4.3", "ndarray": "1.0.19", }, "devDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", }, }, "packages/ai": { "name": "@cornerstonejs/ai", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", - "dcmjs": "0.49.4", + "dcmjs": "0.51.1", "gl-matrix": "3.4.3", "lodash.clonedeep": "4.5.0", "ndarray": "1.0.19", @@ -150,17 +151,17 @@ "onnxruntime-web": "1.17.1", }, "devDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", }, }, "packages/core": { "name": "@cornerstonejs/core", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "@kitware/vtk.js": "34.15.1", "comlink": "4.4.2", @@ -170,7 +171,7 @@ }, "packages/dicomImageLoader": { "name": "@cornerstonejs/dicom-image-loader", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "@cornerstonejs/codec-charls": "1.2.3", "@cornerstonejs/codec-libjpeg-turbo-8bit": "1.2.2", @@ -183,73 +184,73 @@ "uuid": "9.0.1", }, "devDependencies": { - "@cornerstonejs/core": "4.22.7", + "@cornerstonejs/core": "4.22.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.22.7", + "@cornerstonejs/core": "4.22.9", "dicom-parser": "1.8.21", }, }, "packages/labelmap-interpolation": { "name": "@cornerstonejs/labelmap-interpolation", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "@itk-wasm/morphological-contour-interpolation": "1.1.0", "itk-wasm": "1.0.0-b.165", }, "devDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", "@kitware/vtk.js": "34.15.1", }, }, "packages/nifti-volume-loader": { "name": "@cornerstonejs/nifti-volume-loader", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "nifti-reader-js": "0.6.9", }, "devDependencies": { - "@cornerstonejs/core": "4.22.7", + "@cornerstonejs/core": "4.22.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.22.7", + "@cornerstonejs/core": "4.22.9", }, }, "packages/polymorphic-segmentation": { "name": "@cornerstonejs/polymorphic-segmentation", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "@icr/polyseg-wasm": "0.4.0", }, "devDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", }, "peerDependencies": { - "@cornerstonejs/core": "4.22.7", - "@cornerstonejs/tools": "4.22.7", + "@cornerstonejs/core": "4.22.9", + "@cornerstonejs/tools": "4.22.9", "@kitware/vtk.js": "34.15.1", }, }, "packages/tools": { "name": "@cornerstonejs/tools", - "version": "4.22.7", + "version": "4.22.9", "dependencies": { "@types/offscreencanvas": "2019.7.3", "comlink": "4.4.2", "lodash.get": "4.4.2", }, "devDependencies": { - "@cornerstonejs/core": "4.22.7", + "@cornerstonejs/core": "4.22.9", "canvas": "3.2.0", }, "peerDependencies": { - "@cornerstonejs/core": "4.22.7", + "@cornerstonejs/core": "4.22.9", "@kitware/vtk.js": "34.15.1", "@types/d3-array": "3.2.1", "@types/d3-interpolate": "3.0.4", @@ -266,7 +267,7 @@ "buffer": "6.0.3", "caniuse-lite": "1.0.30001767", "canvas": "3.2.0", - "dcmjs": "0.49.4", + "dcmjs": "0.51.1", "fast-uri": "3.1.2", "flatted": "3.4.2", "handlebars": "4.7.9", @@ -1653,7 +1654,7 @@ "dateformat": ["dateformat@3.0.3", "", {}, "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q=="], - "dcmjs": ["dcmjs@0.49.4", "", { "dependencies": { "@babel/runtime-corejs3": "^7.22.5", "adm-zip": "^0.5.10", "gl-matrix": "^3.1.0", "lodash.clonedeep": "^4.5.0", "loglevel": "^1.8.1", "ndarray": "^1.0.19", "pako": "^2.0.4" } }, "sha512-w77Gde5JvLjg37FyGIAsTB+oWZIqkO/5NvBeheEVKy6k9XjBgeGsoAbVAByjuGAFLpGqRbf9iWI0edBq87yu/g=="], + "dcmjs": ["dcmjs@0.51.1", "", { "dependencies": { "@babel/runtime-corejs3": "^7.22.5", "adm-zip": "^0.5.10", "gl-matrix": "^3.1.0", "lodash.clonedeep": "^4.5.0", "loglevel": "^1.8.1", "ndarray": "^1.0.19", "pako": "^2.0.4" } }, "sha512-6hJbygOiWvIZHtAh/uRkNU119q3SE/+76lMvq9g3bGq8wky66sHGxJMjB2g/86ewOYmVMrAaIr4Q8tcJEQlwJg=="], "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], diff --git a/package.json b/package.json index 7cb5f6ca45..2650d7e9f1 100644 --- a/package.json +++ b/package.json @@ -192,7 +192,7 @@ "buffer": "6.0.3", "node-forge": "1.4.0", "canvas": "3.2.0", - "dcmjs": "0.49.4", + "dcmjs": "0.51.1", "tar-fs": "2.1.4", "body-parser": "1.20.3", "ws": "8.18.3", diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 8a09affc71..5a6e441dde 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -84,7 +84,7 @@ "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", - "dcmjs": "0.49.4", + "dcmjs": "0.51.1", "gl-matrix": "3.4.3", "ndarray": "1.0.19" }, diff --git a/packages/ai/package.json b/packages/ai/package.json index 5607bd80ab..b72f1762bc 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -53,7 +53,7 @@ "dependencies": { "@babel/runtime-corejs2": "7.26.10", "buffer": "6.0.3", - "dcmjs": "0.49.4", + "dcmjs": "0.51.1", "gl-matrix": "3.4.3", "lodash.clonedeep": "4.5.0", "ndarray": "1.0.19", diff --git a/yarn.lock b/yarn.lock index 957854b37a..d216326a1b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6352,10 +6352,10 @@ dateformat@^3.0.3: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -dcmjs@0.49.4, dcmjs@^0.41.0: - version "0.49.4" - resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.49.4.tgz#833c014eb9e36a6859c80a860b0fb231d9bfeaf8" - integrity sha512-w77Gde5JvLjg37FyGIAsTB+oWZIqkO/5NvBeheEVKy6k9XjBgeGsoAbVAByjuGAFLpGqRbf9iWI0edBq87yu/g== +dcmjs@0.51.1, dcmjs@^0.41.0: + version "0.51.1" + resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.51.1.tgz#6bce64fbb0fde4479613e6a621dcaf22e43ac16f" + integrity sha512-6hJbygOiWvIZHtAh/uRkNU119q3SE/+76lMvq9g3bGq8wky66sHGxJMjB2g/86ewOYmVMrAaIr4Q8tcJEQlwJg== dependencies: "@babel/runtime-corejs3" "^7.22.5" adm-zip "^0.5.10" From 00a33b89fd2614a71de0943750f72dd908688baf Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 21 May 2026 09:13:38 -0400 Subject: [PATCH 74/90] 1 bit support --- .../src/shared/decoders/decodeRLE.ts | 86 ++++++++++++++++++- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts index 82737970ee..cf1b84788a 100644 --- a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts +++ b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts @@ -13,14 +13,78 @@ async function decodeRLE( return decode8(imageFrame, pixelData); } else if (imageFrame.bitsAllocated === 16) { return decode16(imageFrame, pixelData); + } else if (imageFrame.bitsAllocated === 1) { + if (imageFrame.planarConfiguration) { + return decode8Planar(imageFrame, pixelData, true); + } + + return decode1(imageFrame, pixelData); } throw new Error('unsupported pixel format for RLE'); } -function decode8(imageFrame: Types.IImageFrame, pixelData: ByteArray) { +function getFrameSize(imageFrame: Types.IImageFrame, isOneBit = false) { + const pixelCount = imageFrame.rows * imageFrame.columns; + + return isOneBit ? Math.ceil(pixelCount / 8) : pixelCount; +} + +function unpackOneBitInterleaved(packed: Uint8Array, pixelsPerFrame: number) { + const unpacked = new Uint8Array(pixelsPerFrame); + + for (let i = 0; i < pixelsPerFrame; i++) { + const bytePos = Math.floor(i / 8); + const bitPos = i % 8; + unpacked[i] = packed[bytePos] & (1 << bitPos) ? 1 : 0; + } + + return unpacked; +} + +function unpackOneBitPlanar( + packed: Uint8Array, + imageFrame: Types.IImageFrame, + frameSize: number +) { + const pixelsPerPlane = imageFrame.rows * imageFrame.columns; + const unpacked = new Uint8Array(pixelsPerPlane * imageFrame.samplesPerPixel); + + for (let s = 0; s < imageFrame.samplesPerPixel; s++) { + const planeOffset = s * frameSize; + + for (let i = 0; i < pixelsPerPlane; i++) { + const bytePos = planeOffset + Math.floor(i / 8); + const bitPos = i % 8; + unpacked[s * pixelsPerPlane + i] = + packed[bytePos] & (1 << bitPos) ? 1 : 0; + } + } + + return unpacked; +} + +function decode1(imageFrame: Types.IImageFrame, pixelData: ByteArray) { + decode8(imageFrame, pixelData, true); + + const pixelsPerFrame = + imageFrame.rows * imageFrame.columns * imageFrame.samplesPerPixel; + + imageFrame.pixelData = unpackOneBitInterleaved( + imageFrame.pixelData as Uint8Array, + pixelsPerFrame + ); + + return imageFrame; +} + +function decode8( + imageFrame: Types.IImageFrame, + pixelData: ByteArray, + isOneBit = false +) { const frameData = pixelData; - const frameSize = imageFrame.rows * imageFrame.columns; + const frameSize = getFrameSize(imageFrame, isOneBit); const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); const header = new DataView(frameData.buffer, frameData.byteOffset); const data = new Int8Array(frameData.buffer, frameData.byteOffset); @@ -69,9 +133,13 @@ function decode8(imageFrame: Types.IImageFrame, pixelData: ByteArray) { return imageFrame; } -function decode8Planar(imageFrame: Types.IImageFrame, pixelData: ByteArray) { +function decode8Planar( + imageFrame: Types.IImageFrame, + pixelData: ByteArray, + isOneBit = false +) { const frameData = pixelData; - const frameSize = imageFrame.rows * imageFrame.columns; + const frameSize = getFrameSize(imageFrame, isOneBit); const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); const header = new DataView(frameData.buffer, frameData.byteOffset); const data = new Int8Array(frameData.buffer, frameData.byteOffset); @@ -117,6 +185,16 @@ function decode8Planar(imageFrame: Types.IImageFrame, pixelData: ByteArray) { } imageFrame.pixelData = new Uint8Array(outFrame); + if (isOneBit) { + const pixelsPerPlane = imageFrame.rows * imageFrame.columns; + + imageFrame.pixelData = unpackOneBitPlanar( + imageFrame.pixelData as Uint8Array, + imageFrame, + frameSize + ); + } + return imageFrame; } From 1eb6a442a651ab11613fd88c8f69572a771fa170 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 21 May 2026 09:57:25 -0400 Subject: [PATCH 75/90] fix 1 bit rle decode --- .../dicomImageLoader/src/shared/decoders/decodeRLE.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts index cf1b84788a..3fa20fea44 100644 --- a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts +++ b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts @@ -3,7 +3,8 @@ import type { Types } from '@cornerstonejs/core'; async function decodeRLE( imageFrame: Types.IImageFrame, - pixelData: ByteArray + pixelData: ByteArray, + options?: { expandOneBitPlanar?: boolean } ): Promise { if (imageFrame.bitsAllocated === 8) { if (imageFrame.planarConfiguration) { @@ -14,7 +15,7 @@ async function decodeRLE( } else if (imageFrame.bitsAllocated === 16) { return decode16(imageFrame, pixelData); } else if (imageFrame.bitsAllocated === 1) { - if (imageFrame.planarConfiguration) { + if (!options?.expandOneBitPlanar) { return decode8Planar(imageFrame, pixelData, true); } @@ -42,7 +43,7 @@ function unpackOneBitInterleaved(packed: Uint8Array, pixelsPerFrame: number) { return unpacked; } -function unpackOneBitPlanar( +export function unpackOneBitPlanar( packed: Uint8Array, imageFrame: Types.IImageFrame, frameSize: number @@ -64,7 +65,7 @@ function unpackOneBitPlanar( return unpacked; } -function decode1(imageFrame: Types.IImageFrame, pixelData: ByteArray) { +export function decode1(imageFrame: Types.IImageFrame, pixelData: ByteArray) { decode8(imageFrame, pixelData, true); const pixelsPerFrame = From 21e643ce2d5359b699a78391ffd27bd22026d3da Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 21 May 2026 12:46:33 -0400 Subject: [PATCH 76/90] fix: Frame loading --- .../adapters/Cornerstone/Segmentation_4X.js | 183 ++++++++++++--- .../Segmentation/generateSegmentation.ts | 79 ++++--- .../Segmentation/generateToolState.ts | 14 +- .../Segmentation/labelmapImagesFromBuffer.ts | 216 +++++++++++++++--- .../Segmentation/perFrameFunctionalGroups.js | 65 ++++++ 5 files changed, 466 insertions(+), 91 deletions(-) create mode 100644 packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js diff --git a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js index b5e9eb848b..41551839e2 100644 --- a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js +++ b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js @@ -8,7 +8,8 @@ import { import ndarray from 'ndarray'; import getDatasetsFromImages from '../helpers/getDatasetsFromImages'; import checkOrientation from '../helpers/checkOrientation'; -import { utilities as csUtilities } from '@cornerstonejs/core'; +import { utilities as csUtilities, Enums } from '@cornerstonejs/core'; +import { applyPerFrameFunctionalGroups } from '../Cornerstone3D/Segmentation/perFrameFunctionalGroups'; import { Events } from '../enums'; @@ -69,10 +70,43 @@ export function generateSegmentation( * * @returns {object} The filled segmentation object. */ +function labelmapFrameContainsSegment(pixelData, segmentIndex) { + if (!pixelData) { + return false; + } + + for (let i = 0; i < pixelData.length; i++) { + if (pixelData[i] === segmentIndex) { + return true; + } + } + + return false; +} + +function getReferencedSourceImageSequenceItemFromImage(image, metadata) { + const imageData = + metadata?.get?.(Enums.MetadataModules.IMAGE_DATA, image?.imageId) || {}; + const referencedSOPInstanceUID = imageData.SOPInstanceUID; + const frameMatch = image?.imageId?.match?.(/[?&]frame=(\d+)/); + const referencedFrameNumber = frameMatch ? Number(frameMatch[1]) : undefined; + const item = { + ReferencedSOPInstanceUID: referencedSOPInstanceUID, + }; + + if (Number.isFinite(referencedFrameNumber) && referencedFrameNumber > 0) { + item.ReferencedFrameNumber = referencedFrameNumber; + } + + return item; +} + export function fillSegmentation( segmentation, inputLabelmaps3D, - userOptions = {} + userOptions = {}, + images = [], + metadata = null ) { const options = Object.assign( {}, @@ -85,8 +119,8 @@ export function fillSegmentation( ? inputLabelmaps3D : [inputLabelmaps3D]; - let numberOfFrames = 0; const referencedFramesPerLabelmap = []; + const frameDescriptors = []; for ( let labelmapIndex = 0; @@ -94,12 +128,12 @@ export function fillSegmentation( labelmapIndex++ ) { const labelmap3D = labelmaps3D[labelmapIndex]; - const { labelmaps2D, metadata } = labelmap3D; + const { labelmaps2D, metadata: segmentMetadata } = labelmap3D; const referencedFramesPerSegment = []; - for (let i = 1; i < metadata.length; i++) { - if (metadata[i]) { + for (let i = 1; i < segmentMetadata.length; i++) { + if (segmentMetadata[i]) { referencedFramesPerSegment[i] = []; } } @@ -107,21 +141,70 @@ export function fillSegmentation( for (let i = 0; i < labelmaps2D.length; i++) { const labelmap2D = labelmaps2D[i]; - if (labelmaps2D[i]) { - const { segmentsOnLabelmap } = labelmap2D; - - segmentsOnLabelmap.forEach((segmentIndex) => { - if (segmentIndex !== 0) { - referencedFramesPerSegment[segmentIndex].push(i); - numberOfFrames++; - } - }); + if (!labelmap2D?.pixelData) { + continue; } + + const { segmentsOnLabelmap } = labelmap2D; + + segmentsOnLabelmap.forEach((segmentIndex) => { + if ( + segmentIndex !== 0 && + segmentMetadata[segmentIndex] && + referencedFramesPerSegment[segmentIndex] && + labelmapFrameContainsSegment(labelmap2D.pixelData, segmentIndex) + ) { + referencedFramesPerSegment[segmentIndex].push(i); + } + }); } referencedFramesPerLabelmap[labelmapIndex] = referencedFramesPerSegment; } + let numberOfFrames = 0; + + for ( + let labelmapIndex = 0; + labelmapIndex < labelmaps3D.length; + labelmapIndex++ + ) { + const referencedFramesPerSegment = + referencedFramesPerLabelmap[labelmapIndex]; + const labelmap3D = labelmaps3D[labelmapIndex]; + const { metadata: segmentMetadata } = labelmap3D; + + for ( + let segmentIndex = 1; + segmentIndex < referencedFramesPerSegment.length; + segmentIndex++ + ) { + const referencedFrameIndicies = referencedFramesPerSegment[segmentIndex]; + + if (!referencedFrameIndicies?.length || !segmentMetadata[segmentIndex]) { + continue; + } + + const labelmaps = _getLabelmapsFromReferencedFrameIndicies( + labelmap3D, + referencedFrameIndicies + ); + + if ( + !labelmaps.length || + !labelmaps.some((frame) => frame?.length && frame.some((v) => v !== 0)) + ) { + continue; + } + + numberOfFrames += referencedFrameIndicies.length; + } + } + + if (numberOfFrames === 0) { + throw new Error('No non-empty segmentation frames found for SEG export'); + } + segmentation.setNumberOfFrames(numberOfFrames); for ( @@ -133,7 +216,7 @@ export function fillSegmentation( referencedFramesPerLabelmap[labelmapIndex]; const labelmap3D = labelmaps3D[labelmapIndex]; - const { metadata } = labelmap3D; + const { metadata: segmentMetadata } = labelmap3D; for ( let segmentIndex = 1; @@ -142,26 +225,58 @@ export function fillSegmentation( ) { const referencedFrameIndicies = referencedFramesPerSegment[segmentIndex]; - if (referencedFrameIndicies) { - // Frame numbers start from 1. - const referencedFrameNumbers = referencedFrameIndicies.map( - (element) => { - return element + 1; - } - ); - const segmentMetadata = metadata[segmentIndex]; - const labelmaps = _getLabelmapsFromReferencedFrameIndicies( - labelmap3D, - referencedFrameIndicies - ); + if (!referencedFrameIndicies?.length || !segmentMetadata[segmentIndex]) { + continue; + } - segmentation.addSegmentFromLabelmap( - segmentMetadata, - labelmaps, - segmentIndex, - referencedFrameNumbers - ); + const labelmaps = _getLabelmapsFromReferencedFrameIndicies( + labelmap3D, + referencedFrameIndicies + ); + + if ( + !labelmaps.length || + !labelmaps.some((frame) => frame?.length && frame.some((v) => v !== 0)) + ) { + continue; } + + // Frame numbers start from 1. + const referencedFrameNumbers = referencedFrameIndicies.map( + (element) => element + 1 + ); + + referencedFrameNumbers.forEach((frameNumber) => { + frameDescriptors.push({ + referencedSegmentNumber: segmentIndex, + sourceFrameIndex: frameNumber - 1, + }); + }); + + segmentation.addSegmentFromLabelmap( + segmentMetadata[segmentIndex], + labelmaps, + segmentIndex, + referencedFrameNumbers + ); + } + } + + if (frameDescriptors.length && images?.length && metadata) { + const perFrameInputs = frameDescriptors + .map((desc) => ({ + referencedSegmentNumber: desc.referencedSegmentNumber, + sourceImageSequenceItem: getReferencedSourceImageSequenceItemFromImage( + images[desc.sourceFrameIndex], + metadata + ), + })) + .filter( + (frame) => frame.sourceImageSequenceItem?.ReferencedSOPInstanceUID + ); + + if (perFrameInputs.length) { + applyPerFrameFunctionalGroups(segmentation.dataset, perFrameInputs); } } const transferSyntaxUid = diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts index f98bfca72c..d13ecf293c 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts @@ -6,6 +6,10 @@ import { EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, RLE_LOSSLESS_TRANSFER_SYNTAX_UID, } from '../encodePixelData'; +import { + applyPerFrameFunctionalGroups, + normalizeSharedFunctionalGroupsSequence, +} from './perFrameFunctionalGroups.js'; const { MetadataModules } = Enums; const { SEGImageNormalizer } = normalizers; @@ -207,31 +211,37 @@ function fillLabelmapSegmentation( vr: 'UI', }; - // Keep normalizer-generated per-frame items for the filtered input images. - dataset.PerFrameFunctionalGroupsSequence = ( - dataset.PerFrameFunctionalGroupsSequence ?? [] - ).filter(Boolean); - const sourceImageSequence = images .map((image) => getReferencedSourceImageSequenceItem(image, metadata)) .filter((item) => item.ReferencedSOPInstanceUID); if (sourceImageSequence.length) { dataset.SourceImageSequence = sourceImageSequence; - dataset.PerFrameFunctionalGroupsSequence = - dataset.PerFrameFunctionalGroupsSequence.map((group, index) => { - const sourceImageSequenceItem = sourceImageSequence[index]; - if (!sourceImageSequenceItem) { - return group; - } - - return { - ...group, - DerivationImageSequence: { - SourceImageSequence: [sourceImageSequenceItem], - }, - }; - }); + } + + const perFrameInputs = validFrameIndices.map((_, outputIndex) => { + const image = images[outputIndex]; + const sourceImageSequenceItem = getReferencedSourceImageSequenceItem( + image, + metadata + ); + const priorGroup = + dataset.PerFrameFunctionalGroupsSequence?.[outputIndex] ?? {}; + + return { + referencedSegmentNumber: 1, + sourceImageSequenceItem, + planeOrientationSequence: priorGroup?.PlaneOrientationSequence, + planePositionSequence: priorGroup?.PlanePositionSequence, + }; + }); + + const validPerFrameInputs = perFrameInputs.filter( + (frame) => frame.sourceImageSequenceItem?.ReferencedSOPInstanceUID + ); + + if (validPerFrameInputs.length) { + applyPerFrameFunctionalGroups(dataset, validPerFrameInputs); } const sopInstanceUIDs = new Set( @@ -283,15 +293,32 @@ function generateSegmentation( if (shouldExportBitmap) { const transferSyntaxUid = resolveTransferSyntaxUid(options); + const labelmap3D = Array.isArray(labelmaps) ? labelmaps[0] : labelmaps; + const nonEmptyFrameIndices = + labelmap3D?.labelmaps2D + ?.map((frame, index) => + frame?.pixelData && hasAnySegment(frame.pixelData) ? index : -1 + ) + .filter((index) => index >= 0) ?? []; + const filteredImages = nonEmptyFrameIndices.length + ? nonEmptyFrameIndices.map((index) => images[index]).filter(Boolean) + : images; + const segmentation = _createMultiframeSegmentationFromReferencedImages( - images, + filteredImages, metadata, options ); - const segmentationResult = fillBitmapSegmentation(segmentation, labelmaps, { - ...options, - transferSyntaxUid: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, - }); + const segmentationResult = fillBitmapSegmentation( + segmentation, + labelmaps, + { + ...options, + transferSyntaxUid: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + }, + filteredImages, + metadata + ); const { frames, bitsAllocated } = getFrameArrayFromBitmapDataset( segmentationResult.dataset ); @@ -418,8 +445,8 @@ function _createMultiframeSegmentationFromReferencedImages( ); } - multiframe.SharedFunctionalGroupsSequence ||= {}; - multiframe.SharedFunctionalGroupsSequence.PixelMeasuresSequence = {}; + normalizeSharedFunctionalGroupsSequence(multiframe); + multiframe.SharedFunctionalGroupsSequence.PixelMeasuresSequence ||= {}; multiframe.PerFrameFunctionalGroupsSequence ||= []; for (let index = 0; index < images.length; index++) { multiframe.PerFrameFunctionalGroupsSequence[index] ||= { diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index eccdf96f23..cec34784e1 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -39,8 +39,12 @@ function generateToolState( * (e.g. dataset or instanceMeta.dataset). Uncompressed pixel data is obtained via imageLoader.loadImage(segImageId). * * @param referencedImageIds - An array of referenced image IDs e.g., CT, MR etc. - * @param segImageId - Image ID for the SEG instance (loadable via imageLoader; instance metadata must be registered). - * @param options - { metadataProvider, tolerance } + * @param segImageId - Image ID for the SEG instance (metadata via metadataProvider; may be base or frame-qualified). + * @param options - { metadataProvider, tolerance, frameImageIds, getFrameImageId, decodeImageData, allowLegacyDatasetDecode } + * frameImageIds: per-frame loadable imageIds; adapters decode one frame per id when multiframe. + * getFrameImageId: optional (baseSegImageId, frameNumber) => frame imageId when frameImageIds are not pre-built. + * decodeImageData(frameImageId, frameNumber): optional per-frame decode; default uses imageLoader.loadImage per frame. + * allowLegacyDatasetDecode: use dataset PixelData or a single full-volume decode on segImageId when available. * * @returns An object containing: * - `labelMapImages`: Array of label map images for each label map. @@ -58,7 +62,9 @@ function createFromDICOMSegBuffer( metadataProvider, tolerance = 1e-3, parserType = 'bitmap', - decodeImageData, + frameImageIds = undefined, + getFrameImageId = undefined, + decodeImageData = undefined, allowLegacyDatasetDecode = false, } ) { @@ -69,6 +75,8 @@ function createFromDICOMSegBuffer( { tolerance, parserType, + frameImageIds, + getFrameImageId, decodeImageData, allowLegacyDatasetDecode, } diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index a6be2d171b..b6432129aa 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -112,54 +112,210 @@ function decodeFromDatasetPixelData(multiframe) { return normalizeDecodedPixelData(decoded); } -async function defaultDecodeImageData(segImageId) { - const segImage = await imageLoader.loadImage(segImageId); +type DecodeFrameImageData = ( + frameImageId: string, + frameNumber: number +) => Promise< + | ArrayLike + | ArrayLike[] + | Uint8Array + | Uint16Array + | (Uint8Array | Uint16Array)[] +>; + +function getSegNumberOfFrames(multiframe: Record): number { + const fromTag = Number(multiframe.NumberOfFrames); + if (fromTag > 0) { + return fromTag; + } + const perFrame = multiframe.PerFrameFunctionalGroupsSequence; + if (Array.isArray(perFrame) && perFrame.length > 0) { + return perFrame.length; + } + return 1; +} + +/** Expands WADO-RS …/frames/1 into one imageId per frame when frameImageIds are not supplied. */ +function expandWadorsFrameImageIds( + segImageId: string, + numberOfFrames: number +): string[] { + const frameMatch = segImageId.match(/(.*\/frames\/)(\d+)(.*)$/); + if (!frameMatch || numberOfFrames <= 1) { + return [segImageId]; + } + + const prefix = frameMatch[1]; + const suffix = frameMatch[3] || ''; + const frameImageIds: string[] = []; + + for (let frameNumber = 1; frameNumber <= numberOfFrames; frameNumber++) { + frameImageIds.push(`${prefix}${frameNumber}${suffix}`); + } + + return frameImageIds; +} + +function resolveFrameImageIds({ + segImageId, + numberOfFrames, + frameImageIds, + getFrameImageId, +}: { + segImageId: string; + numberOfFrames: number; + frameImageIds?: string[]; + getFrameImageId?: (baseSegImageId: string, frameNumber: number) => string; +}): string[] { + if (frameImageIds?.length) { + return frameImageIds; + } + + if (getFrameImageId) { + return Array.from({ length: numberOfFrames }, (_, index) => + getFrameImageId(segImageId, index + 1) + ); + } + + const wadorsFrameIds = expandWadorsFrameImageIds(segImageId, numberOfFrames); + if (wadorsFrameIds.length > 1) { + return wadorsFrameIds; + } + + return numberOfFrames > 1 + ? Array.from({ length: numberOfFrames }, () => segImageId) + : [segImageId]; +} + +function unpackFramePixelDataIfNeeded( + framePixelData: Uint8Array | Uint16Array, + multiframe: Record, + sliceLength: number +) { + const bitsStored = Number(multiframe.BitsStored); + if (bitsStored === 1 && framePixelData.length < sliceLength) { + const packed = + framePixelData instanceof Uint8Array + ? framePixelData + : new Uint8Array(framePixelData); + return BitArray.unpack(packed); + } + return framePixelData; +} + +async function defaultDecodeFrameImageData( + frameImageId: string, + _frameNumber: number +) { + const segImage = await imageLoader.loadImage(frameImageId); return segImage?.getPixelData?.(); } async function decodeSegPixelData({ segImageId, multiframe, - decodeImageData = defaultDecodeImageData, + frameImageIds, + getFrameImageId, + decodeImageData = defaultDecodeFrameImageData, allowLegacyDatasetDecode = false, }: { segImageId: string; multiframe: Record; - decodeImageData?: ( - imageId: string - ) => Promise< - | ArrayLike - | ArrayLike[] - | Uint8Array - | Uint16Array - | (Uint8Array | Uint16Array)[] - >; + frameImageIds?: string[]; + getFrameImageId?: (baseSegImageId: string, frameNumber: number) => string; + decodeImageData?: DecodeFrameImageData; allowLegacyDatasetDecode?: boolean; }) { - const segPixelData = await decodeImageData(segImageId); + const rows = Number(multiframe.Rows); + const columns = Number(multiframe.Columns); + const sliceLength = rows * columns; + const numberOfFrames = getSegNumberOfFrames(multiframe); + const expectedVoxelCount = getExpectedVoxelCount(multiframe); + const resolvedFrameImageIds = resolveFrameImageIds({ + segImageId, + numberOfFrames, + frameImageIds, + getFrameImageId, + }); - if (!segPixelData) { - throw new Error( - `No decoded pixel data found for SEG imageId: ${segImageId}` + if (allowLegacyDatasetDecode) { + const datasetDecodedPixelData = decodeFromDatasetPixelData(multiframe); + if ( + datasetDecodedPixelData && + datasetDecodedPixelData.length === expectedVoxelCount + ) { + return { decodedPixelData: datasetDecodedPixelData, expectedVoxelCount }; + } + } + + // Legacy: a single decode on the metadata segImageId may return the full multiframe buffer. + const legacyFullVolume = await decodeImageData(segImageId, 0); + if (legacyFullVolume) { + const normalizedLegacy = normalizeDecodedPixelData(legacyFullVolume); + if (normalizedLegacy.length === expectedVoxelCount) { + return { decodedPixelData: normalizedLegacy, expectedVoxelCount }; + } + if (numberOfFrames <= 1) { + return { decodedPixelData: normalizedLegacy, expectedVoxelCount }; + } + } + + if (numberOfFrames <= 1) { + const frameImageId = resolvedFrameImageIds[0] || segImageId; + const framePixelData = await decodeImageData(frameImageId, 1); + if (!framePixelData) { + throw new Error( + `No decoded pixel data found for SEG imageId: ${frameImageId}` + ); + } + const normalized = normalizeDecodedPixelData(framePixelData); + const decodedPixelData = unpackFramePixelDataIfNeeded( + normalized as Uint8Array, + multiframe, + sliceLength ); + return { decodedPixelData, expectedVoxelCount }; } - const normalizedDecodedPixelData = normalizeDecodedPixelData(segPixelData); - const expectedVoxelCount = getExpectedVoxelCount(multiframe); - let decodedPixelData = normalizedDecodedPixelData; + const perFramePixelData: (Uint8Array | Uint16Array)[] = []; - if ( - allowLegacyDatasetDecode && - normalizedDecodedPixelData.length !== expectedVoxelCount - ) { - const datasetDecodedPixelData = decodeFromDatasetPixelData(multiframe); + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const frameNumber = frameIndex + 1; + const frameImageId = resolvedFrameImageIds[frameIndex]; + + if (!frameImageId) { + throw new Error( + `Missing SEG frame imageId at frame ${frameNumber} (expected ${numberOfFrames} frame imageIds)` + ); + } + + const framePixelData = await decodeImageData(frameImageId, frameNumber); - if (datasetDecodedPixelData) { - decodedPixelData = datasetDecodedPixelData; + if (!framePixelData) { + throw new Error( + `No decoded pixel data found for SEG frame imageId: ${frameImageId}` + ); } + + let normalizedFrame = normalizeDecodedPixelData(framePixelData) as + | Uint8Array + | Uint16Array; + + normalizedFrame = unpackFramePixelDataIfNeeded( + normalizedFrame, + multiframe, + sliceLength + ) as Uint8Array | Uint16Array; + + perFramePixelData.push( + normalizedFrame.subarray(0, sliceLength) as Uint8Array | Uint16Array + ); } - return { decodedPixelData, expectedVoxelCount }; + return { + decodedPixelData: normalizeDecodedPixelData(perFramePixelData), + expectedVoxelCount, + }; } const updateSegmentsOnFrame = ({ @@ -250,7 +406,9 @@ async function createLabelmapsFromBufferInternal( TypedArrayConstructor = Uint8Array, maxBytesPerChunk, parserType = 'bitmap', - decodeImageData = defaultDecodeImageData, + frameImageIds, + getFrameImageId, + decodeImageData = defaultDecodeFrameImageData, allowLegacyDatasetDecode = false, } = options ?? {}; @@ -301,6 +459,8 @@ async function createLabelmapsFromBufferInternal( const { decodedPixelData, expectedVoxelCount } = await decodeSegPixelData({ segImageId, multiframe, + frameImageIds, + getFrameImageId, decodeImageData, allowLegacyDatasetDecode, }); diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js new file mode 100644 index 0000000000..aa1a327b8d --- /dev/null +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js @@ -0,0 +1,65 @@ +/** + * Builds DICOM-conformant PerFrameFunctionalGroupsSequence for SEG export/load. + * Matches what @cornerstonejs/adapters labelmapImagesFromBuffer expects: + * - SegmentIdentificationSequence.ReferencedSegmentNumber + * - DerivationImageSequence[0].SourceImageSequence[0] (ReferencedSOPInstanceUID, optional ReferencedFrameNumber) + */ + +export function normalizeSharedFunctionalGroupsSequence(dataset) { + const shared = dataset.SharedFunctionalGroupsSequence; + + if (Array.isArray(shared) && shared.length > 0) { + dataset.SharedFunctionalGroupsSequence = shared[0]; + } else if (!shared || typeof shared !== 'object') { + dataset.SharedFunctionalGroupsSequence = {}; + } +} + +/** + * @param {object} dataset - SEG dataset + * @param {Array<{ + * referencedSegmentNumber: number, + * sourceImageSequenceItem: { ReferencedSOPInstanceUID: string, ReferencedFrameNumber?: number }, + * planeOrientationSequence?: object, + * planePositionSequence?: object, + * }>} frames + */ +export function applyPerFrameFunctionalGroups(dataset, frames) { + normalizeSharedFunctionalGroupsSequence(dataset); + + const validFrames = frames.filter( + (frame) => frame?.sourceImageSequenceItem?.ReferencedSOPInstanceUID + ); + + const existing = dataset.PerFrameFunctionalGroupsSequence; + const existingList = Array.isArray(existing) ? existing : []; + + dataset.NumberOfFrames = validFrames.length; + dataset.PerFrameFunctionalGroupsSequence = validFrames.map((frame, index) => { + const prior = + existingList[index] && typeof existingList[index] === 'object' + ? existingList[index] + : {}; + + const group = { + ...prior, + SegmentIdentificationSequence: { + ReferencedSegmentNumber: frame.referencedSegmentNumber, + }, + DerivationImageSequence: [ + { + SourceImageSequence: [frame.sourceImageSequenceItem], + }, + ], + }; + + if (frame.planeOrientationSequence) { + group.PlaneOrientationSequence = frame.planeOrientationSequence; + } + if (frame.planePositionSequence) { + group.PlanePositionSequence = frame.planePositionSequence; + } + + return group; + }); +} From 50d75cb2bd0ddc71c328afaefa93904a6a59e01b Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 21 May 2026 14:25:44 -0400 Subject: [PATCH 77/90] Load/save stability and correctness fixes --- .../adapters/Cornerstone/Segmentation_4X.js | 154 ++++-- .../Segmentation/generateSegmentation.ts | 102 ++-- .../Segmentation/generateToolState.ts | 73 +-- .../Cornerstone3D/Segmentation/index.ts | 4 + .../Segmentation/labelmapImagesFromBuffer.ts | 450 ++++++++++++++---- .../Segmentation/perFrameFunctionalGroups.js | 6 +- .../adapters/Cornerstone3D/encodePixelData.ts | 359 ++++++++++++++ 7 files changed, 920 insertions(+), 228 deletions(-) diff --git a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js index 41551839e2..625b44b95a 100644 --- a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js +++ b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js @@ -10,6 +10,11 @@ import getDatasetsFromImages from '../helpers/getDatasetsFromImages'; import checkOrientation from '../helpers/checkOrientation'; import { utilities as csUtilities, Enums } from '@cornerstonejs/core'; import { applyPerFrameFunctionalGroups } from '../Cornerstone3D/Segmentation/perFrameFunctionalGroups'; +import { + encodeFramesToTransferSyntax, + getBitmapFramesFromDataset, + RLE_LOSSLESS_TRANSFER_SYNTAX_UID as RLE_TS_UID, +} from '../Cornerstone3D/encodePixelData'; import { Events } from '../enums'; @@ -285,41 +290,69 @@ export function fillSegmentation( RLE_LOSSLESS_TRANSFER_SYNTAX_UID; if (transferSyntaxUid === RLE_LOSSLESS_TRANSFER_SYNTAX_UID) { - const rleEncodedFrames = encode( - segmentation.dataset.PixelData, - numberOfFrames, - segmentation.dataset.Rows, - segmentation.dataset.Columns - ); + const isBinaryBitmap = + segmentation.dataset.SegmentationType === 'BINARY' && + Number(segmentation.dataset.BitsAllocated) === 1; + + if (isBinaryBitmap) { + segmentation.bitPackPixelData(); + const { frames, bitsAllocated } = getBitmapFramesFromDataset( + segmentation.dataset + ); + const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ + transferSyntaxUID: RLE_TS_UID, + frames, + bitsAllocated, + }); + + segmentation.dataset.PixelData = pixelData; + segmentation.dataset._vrMap.PixelData = pixelDataVR; + if (!options.skipTransferSyntaxMeta) { + segmentation.dataset._meta.TransferSyntaxUID = { + Value: [RLE_LOSSLESS_TRANSFER_SYNTAX_UID], + vr: 'UI', + }; + } + segmentation.dataset.SpecificCharacterSet = 'ISO_IR 192'; + } else { + const rleEncodedFrames = encode( + segmentation.dataset.PixelData, + numberOfFrames, + segmentation.dataset.Rows, + segmentation.dataset.Columns + ); + + // Fractional/8-bit labelmaps: legacy dcmjs row RLE (not valid for 1-bit packed binary). + segmentation.assignToDataset({ + BitsAllocated: '8', + BitsStored: '8', + HighBit: '7', + SegmentationType: 'FRACTIONAL', + SegmentationFractionalType: 'PROBABILITY', + MaximumFractionalValue: '255', + }); - // Must use fractional now to RLE encode, as the DICOM standard only allows BitStored && BitsAllocated - // to be 1 for BINARY. This is not ideal and there should be a better format for compression in this manner - // added to the standard. - segmentation.assignToDataset({ - BitsAllocated: '8', - BitsStored: '8', - HighBit: '7', - SegmentationType: 'FRACTIONAL', - SegmentationFractionalType: 'PROBABILITY', - MaximumFractionalValue: '255', - }); - - segmentation.dataset._meta.TransferSyntaxUID = { - Value: [RLE_LOSSLESS_TRANSFER_SYNTAX_UID], - vr: 'UI', - }; - segmentation.dataset.SpecificCharacterSet = 'ISO_IR 192'; - segmentation.dataset._vrMap.PixelData = 'OB'; - segmentation.dataset.PixelData = rleEncodedFrames; + if (!options.skipTransferSyntaxMeta) { + segmentation.dataset._meta.TransferSyntaxUID = { + Value: [RLE_LOSSLESS_TRANSFER_SYNTAX_UID], + vr: 'UI', + }; + } + segmentation.dataset.SpecificCharacterSet = 'ISO_IR 192'; + segmentation.dataset._vrMap.PixelData = 'OB'; + segmentation.dataset.PixelData = rleEncodedFrames; + } } else if ( transferSyntaxUid === EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID ) { // For explicit VR little endian, at least bitpack the data. segmentation.bitPackPixelData(); - segmentation.dataset._meta.TransferSyntaxUID = { - Value: [EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID], - vr: 'UI', - }; + if (!options.skipTransferSyntaxMeta) { + segmentation.dataset._meta.TransferSyntaxUID = { + Value: [EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID], + vr: 'UI', + }; + } } else { throw new Error( `Unsupported SEG transfer syntax: ${transferSyntaxUid}. ` + @@ -1185,18 +1218,46 @@ export function insertOverlappingPixelDataPlanar( } } +function getReferencedSegmentNumberFromIdentificationSequence( + segmentIdentificationSequence +) { + if (!segmentIdentificationSequence) { + return undefined; + } + + const normalized = Array.isArray(segmentIdentificationSequence) + ? segmentIdentificationSequence[0] + : segmentIdentificationSequence; + + return normalized?.ReferencedSegmentNumber; +} + +function getSharedFunctionalGroupsSequence(multiframe) { + const shared = multiframe?.SharedFunctionalGroupsSequence; + + if (Array.isArray(shared)) { + return shared.length > 0 ? shared[0] : undefined; + } + + return shared; +} + export const getSegmentIndex = (multiframe, frame) => { - const { PerFrameFunctionalGroupsSequence, SharedFunctionalGroupsSequence } = - multiframe; - const PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[frame]; - return PerFrameFunctionalGroups && - PerFrameFunctionalGroups.SegmentIdentificationSequence - ? PerFrameFunctionalGroups.SegmentIdentificationSequence - .ReferencedSegmentNumber - : SharedFunctionalGroupsSequence.SegmentIdentificationSequence - ? SharedFunctionalGroupsSequence.SegmentIdentificationSequence - .ReferencedSegmentNumber - : undefined; + const { PerFrameFunctionalGroupsSequence } = multiframe; + const PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence?.[frame]; + const fromPerFrame = getReferencedSegmentNumberFromIdentificationSequence( + PerFrameFunctionalGroups?.SegmentIdentificationSequence + ); + + if (fromPerFrame !== undefined) { + return fromPerFrame; + } + + const shared = getSharedFunctionalGroupsSequence(multiframe); + + return getReferencedSegmentNumberFromIdentificationSequence( + shared?.SegmentIdentificationSequence + ); }; export function insertPixelDataPlanar( @@ -1489,16 +1550,17 @@ export function getImageIdOfSourceImageBySourceImageSequence( } else if (baseImageId.includes('dicomfile:')) { // dicomfile base 1, despite having frame= return baseImageId.replace(/frame=\d+/, `frame=${ReferencedFrameNumber}`); - } else if (baseImageId.includes('frame=')) { - return baseImageId.replace( - /frame=\d+/, - `frame=${ReferencedFrameNumber - 1}` - ); + } else if ( + baseImageId.includes('frame=') || + baseImageId.includes('wadouri:') + ) { + // OHIF local/wadouri use 1-based ?frame= / &frame= (same as dicomfile:). + return baseImageId.replace(/frame=\d+/, `frame=${ReferencedFrameNumber}`); } else { if (baseImageId.includes('wadors:')) { return `${baseImageId}/frames/${ReferencedFrameNumber}`; } else { - return `${baseImageId}?frame=${ReferencedFrameNumber - 1}`; + return `${baseImageId}?frame=${ReferencedFrameNumber}`; } } } diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts index d13ecf293c..a744256763 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts @@ -1,9 +1,10 @@ -import { normalizers, derivations, data as dcmjsData } from 'dcmjs'; +import { normalizers, derivations } from 'dcmjs'; import { Enums } from '@cornerstonejs/core'; import { fillSegmentation as fillBitmapSegmentation } from '../../Cornerstone/Segmentation_4X'; import { encodeFramesToTransferSyntax, EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + getBitmapFramesFromDataset, RLE_LOSSLESS_TRANSFER_SYNTAX_UID, } from '../encodePixelData'; import { @@ -14,7 +15,6 @@ import { const { MetadataModules } = Enums; const { SEGImageNormalizer } = normalizers; const { Segmentation: SegmentationDerivation } = derivations; -const { BitArray } = dcmjsData; const LABELMAP_SEG_SOP_CLASS_UID = '1.2.840.10008.5.1.4.1.1.66.7'; const BITMAP_SEG_SOP_CLASS_UID = '1.2.840.10008.5.1.4.1.1.66.4'; @@ -27,58 +27,33 @@ type Options = IOptions & { }; function resolveTransferSyntaxUid(options: Options = {}) { - return ( + const transferSyntaxUid = (options.transferSyntaxUid as string) || - (options.transferSyntaxUID as string) || - RLE_LOSSLESS_TRANSFER_SYNTAX_UID - ); -} + (options.transferSyntaxUID as string); -function getFrameArrayFromBitmapDataset(dataset) { - const numberOfFrames = Number(dataset.NumberOfFrames) || 1; - const rows = Number(dataset.Rows); - const columns = Number(dataset.Columns); - const samplesPerFrame = rows * columns; - const bitsAllocated = Number(dataset.BitsAllocated); - const pixelData = dataset.PixelData; - - if (!pixelData) { - throw new Error('Bitmap SEG dataset has no PixelData'); + if (!transferSyntaxUid) { + return EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID; } - if (bitsAllocated === 1) { - const packed = - pixelData instanceof Uint8Array ? pixelData : new Uint8Array(pixelData); - const unpacked = BitArray.unpack(packed); - const frames: Uint8Array[] = []; - - for (let i = 0; i < numberOfFrames; i++) { - const start = i * samplesPerFrame; - frames.push(unpacked.slice(start, start + samplesPerFrame)); - } - - return { frames, bitsAllocated }; - } - - if (bitsAllocated <= 8) { - const buffer = - pixelData instanceof Uint8Array ? pixelData : new Uint8Array(pixelData); - const frames: Uint8Array[] = []; - for (let i = 0; i < numberOfFrames; i++) { - const start = i * samplesPerFrame; - frames.push(buffer.slice(start, start + samplesPerFrame)); - } - return { frames, bitsAllocated }; - } + return transferSyntaxUid; +} - const buffer = - pixelData instanceof Uint16Array ? pixelData : new Uint16Array(pixelData); - const frames: Uint16Array[] = []; - for (let i = 0; i < numberOfFrames; i++) { - const start = i * samplesPerFrame; - frames.push(buffer.slice(start, start + samplesPerFrame)); - } - return { frames, bitsAllocated }; +function applySegDatasetTransferSyntax( + dataset: Record, + transferSyntaxUid: string, + pixelData: unknown, + pixelDataVR: string +) { + dataset.PixelData = pixelData; + dataset._vrMap = (dataset._vrMap as Record) || {}; + (dataset._vrMap as Record).PixelData = pixelDataVR; + dataset._meta = (dataset._meta as Record) || {}; + ( + dataset._meta as Record + ).TransferSyntaxUID = { + Value: [transferSyntaxUid], + vr: 'UI', + }; } function hasAnySegment(pixelData: ArrayLike) { @@ -197,13 +172,12 @@ function fillLabelmapSegmentation( frames: framePixelData, bitsAllocated: 8, }); - dataset.PixelData = pixelData; - dataset._vrMap.PixelData = pixelDataVR; - dataset._meta ||= {}; - dataset._meta.TransferSyntaxUID = { - Value: [transferSyntaxUid], - vr: 'UI', - }; + applySegDatasetTransferSyntax( + dataset, + transferSyntaxUid, + pixelData, + pixelDataVR + ); dataset._meta ||= {}; dataset._meta.MediaStorageSOPClassUID = { @@ -315,11 +289,12 @@ function generateSegmentation( { ...options, transferSyntaxUid: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + skipTransferSyntaxMeta: true, }, filteredImages, metadata ); - const { frames, bitsAllocated } = getFrameArrayFromBitmapDataset( + const { frames, bitsAllocated } = getBitmapFramesFromDataset( segmentationResult.dataset ); const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ @@ -328,15 +303,14 @@ function generateSegmentation( bitsAllocated, }); - segmentationResult.dataset.PixelData = pixelData; - segmentationResult.dataset._vrMap ||= {}; - segmentationResult.dataset._vrMap.PixelData = pixelDataVR; + applySegDatasetTransferSyntax( + segmentationResult.dataset, + transferSyntaxUid, + pixelData, + pixelDataVR + ); segmentationResult.dataset.SOPClassUID = BITMAP_SEG_SOP_CLASS_UID; segmentationResult.dataset._meta ||= {}; - segmentationResult.dataset._meta.TransferSyntaxUID = { - Value: [transferSyntaxUid], - vr: 'UI', - }; segmentationResult.dataset._meta.MediaStorageSOPClassUID = { Value: [BITMAP_SEG_SOP_CLASS_UID], vr: 'UI', diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index cec34784e1..454150583f 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -1,19 +1,15 @@ import { generateToolState as generateToolStateCornerstoneLegacy } from '../../Cornerstone/Segmentation'; -import { createLabelmapsFromBufferInternal } from './labelmapImagesFromBuffer'; +import { + createLabelmapsFromDICOMBuffer, + createLabelmapsFromSegImageIds, +} from './labelmapImagesFromBuffer'; /** * generateToolState - Given a set of cornerstoneTools imageIds and a Segmentation buffer, * derive cornerstoneTools toolState and brush metadata. * - * @param imageIds - An array of the imageIds. - * @param arrayBuffer - The SEG arrayBuffer. - * @param skipOverlapping - skip checks for overlapping segs, default value false. - * @param tolerance - default value 1.e-3. - * - * @returns a list of array buffer for each labelMap - * an object from which the segment metadata can be derived - * list containing the track of segments per frame - * list containing the track of segments per frame for each labelMap (available only for the overlapping case). + * Legacy API: parses the Part 10 buffer and decodes pixels from dataset PixelData, + * then delegates to createLabelmapsFromSegImageIds with synthetic frame imageIds. */ function generateToolState( imageIds, @@ -23,37 +19,39 @@ function generateToolState( tolerance = 1e-3, cs3dVersion = 4 ) { - return generateToolStateCornerstoneLegacy( + if (cs3dVersion !== 4) { + return generateToolStateCornerstoneLegacy( + imageIds, + arrayBuffer, + metadataProvider, + skipOverlapping, + tolerance, + cs3dVersion + ); + } + + return createLabelmapsFromDICOMBuffer( imageIds, arrayBuffer, metadataProvider, - skipOverlapping, - tolerance, - cs3dVersion + { + tolerance, + parserType: 'bitmap', + } ); } /** - * Creates a segmentation tool state from a set of image IDs and a SEG instance loaded via its imageId. - * The naturalized SEG dataset must be available from metadataProvider.get('instance', segImageId) - * (e.g. dataset or instanceMeta.dataset). Uncompressed pixel data is obtained via imageLoader.loadImage(segImageId). - * - * @param referencedImageIds - An array of referenced image IDs e.g., CT, MR etc. - * @param segImageId - Image ID for the SEG instance (metadata via metadataProvider; may be base or frame-qualified). - * @param options - { metadataProvider, tolerance, frameImageIds, getFrameImageId, decodeImageData, allowLegacyDatasetDecode } - * frameImageIds: per-frame loadable imageIds; adapters decode one frame per id when multiframe. - * getFrameImageId: optional (baseSegImageId, frameNumber) => frame imageId when frameImageIds are not pre-built. - * decodeImageData(frameImageId, frameNumber): optional per-frame decode; default uses imageLoader.loadImage per frame. - * allowLegacyDatasetDecode: use dataset PixelData or a single full-volume decode on segImageId when available. + * Creates labelmap images from a SEG instance via per-frame imageIds (OHIF / imageLoader path). * - * @returns An object containing: - * - `labelMapImages`: Array of label map images for each label map. - * - `segMetadata`: Metadata related to the segmentation segments. - * - `segmentsOnFrame`: 2D array tracking segments per frame. - * - `centroids`: Map of centroid coordinates for each segment. - * - `overlappingSegments`: Boolean indicating if segments are overlapping. + * @param referencedImageIds - Referenced CT/MR imageIds + * @param segImageId - SEG instance imageId for metadata (base or frame-qualified) + * @param options.metadataProvider - Required metadata provider + * @param options.frameImageIds - Per-frame loadable SEG imageIds + * @param options.getFrameImageId - Optional (baseSegImageId, frameNumber) => frame imageId + * @param options.decodeImageData - Optional (frameImageId, frameNumber) => pixel data; defaults to imageLoader * - * @throws Will throw an error if instance metadata is missing or if the loaded image has no getPixelData(). + * Pixel encoding uses only the provided frame imageIds and decoder (no dataset PixelData shortcut). */ function createFromDICOMSegBuffer( referencedImageIds, @@ -65,10 +63,9 @@ function createFromDICOMSegBuffer( frameImageIds = undefined, getFrameImageId = undefined, decodeImageData = undefined, - allowLegacyDatasetDecode = false, } ) { - return createLabelmapsFromBufferInternal( + return createLabelmapsFromSegImageIds( referencedImageIds, segImageId, metadataProvider, @@ -78,9 +75,13 @@ function createFromDICOMSegBuffer( frameImageIds, getFrameImageId, decodeImageData, - allowLegacyDatasetDecode, } ); } -export { generateToolState, createFromDICOMSegBuffer }; +export { + generateToolState, + createFromDICOMSegBuffer, + createLabelmapsFromSegImageIds, + createLabelmapsFromDICOMBuffer, +}; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts index 15fdaf93b6..9fb4e9982f 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts @@ -3,6 +3,8 @@ import { generateLabelMaps2DFrom3D } from './generateLabelMaps2DFrom3D'; import { generateToolState, createFromDICOMSegBuffer, + createLabelmapsFromSegImageIds, + createLabelmapsFromDICOMBuffer, } from './generateToolState'; export { @@ -10,4 +12,6 @@ export { generateSegmentation, generateToolState, createFromDICOMSegBuffer, + createLabelmapsFromSegImageIds, + createLabelmapsFromDICOMBuffer, }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index b6432129aa..41e79f94ba 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -1,23 +1,183 @@ import { eventTarget, imageLoader, triggerEvent } from '@cornerstonejs/core'; import { utilities as cstUtils } from '@cornerstonejs/tools'; -import { data as dcmjsData, utilities as dcmjsUtilities } from 'dcmjs'; +import { data as dcmjsData, normalizers } from 'dcmjs'; import ndarray from 'ndarray'; import checkOrientation from '../../helpers/checkOrientation'; +import { + createDecodeImageDataFromMultiframe, + getSegNumberOfFramesFromDataset, + unpackBinaryFrameFromPacked, +} from '../encodePixelData'; import { alignPixelDataWithSourceData, calculateCentroid, findReferenceSourceImageId, + getImageIdOfSourceImageBySourceImageSequence, getSegmentIndex, getSegmentMetadata, getValidOrientations, readFromUnpackedChunks, } from '../../Cornerstone/Segmentation_4X'; import { compactMergeSegmentDataWithoutInformationLoss } from './compactMergeSegData'; +import { normalizeSharedFunctionalGroupsSequence } from './perFrameFunctionalGroups'; import { Events } from '../../enums'; -const { BitArray } = dcmjsData; -const { decode } = dcmjsUtilities.compression; +const { DicomMessage, DicomMetaDictionary } = dcmjsData; +const { Normalizer } = normalizers; const LABELMAP_SEG_SOP_CLASS_UID = '1.2.840.10008.5.1.4.1.1.66.7'; +const BUFFER_SEG_IMAGE_ID = 'cornerstone-adapters-buffer-seg:0'; + +/** Frame-agnostic imageId for SOP UID → imageId maps (multiframe stacks). */ +function stripFrameQualifiersFromImageId(imageId: string): string { + if (!imageId) { + return imageId; + } + + if (imageId.includes('/frames/')) { + return imageId.replace(/\/frames\/\d+.*$/, ''); + } + + return imageId.split('&frame=')[0].split('?frame=')[0]; +} + +function prepareSegMultiframeMetadata(multiframe: Record) { + normalizeSharedFunctionalGroupsSequence(multiframe); + + const perFrame = multiframe.PerFrameFunctionalGroupsSequence; + + if (perFrame && !Array.isArray(perFrame)) { + multiframe.PerFrameFunctionalGroupsSequence = [perFrame]; + } +} + +function getFrameNumberFromImageId(imageId: string): number | undefined { + const frameQueryMatch = imageId.match(/(?:&|\?)frame=(\d+)/); + if (frameQueryMatch) { + return Number(frameQueryMatch[1]); + } + + const wadorsFrameMatch = imageId.match(/\/frames\/(\d+)/); + if (wadorsFrameMatch) { + return Number(wadorsFrameMatch[1]); + } + + return undefined; +} + +/** + * Maps a resolved reference imageId (possibly built from stripped SOP base + frame) + * to an imageId that exists in the OHIF/Cornerstone stack and imageIdMaps. + */ +function resolveStackImageId( + imageId: string | undefined, + referencedImageIds: string[], + metadataProvider?, + segFrameIndex?: number +): string | undefined { + if (!imageId) { + return segFrameIndex !== undefined && + segFrameIndex < referencedImageIds.length + ? referencedImageIds[segFrameIndex] + : undefined; + } + + if (referencedImageIds.includes(imageId)) { + return imageId; + } + + const strippedTarget = stripFrameQualifiersFromImageId(imageId); + const targetFrame = getFrameNumberFromImageId(imageId); + + for (const refId of referencedImageIds) { + if (stripFrameQualifiersFromImageId(refId) !== strippedTarget) { + continue; + } + + if (targetFrame === undefined) { + return refId; + } + + const refFrame = getFrameNumberFromImageId(refId) ?? 1; + + if (refFrame === targetFrame) { + return refId; + } + } + + if (metadataProvider?.get) { + const { sopInstanceUID } = + metadataProvider.get('generalImageModule', imageId) || {}; + + if (sopInstanceUID) { + for (const refId of referencedImageIds) { + const refSop = metadataProvider.get( + 'generalImageModule', + refId + )?.sopInstanceUID; + + if (refSop !== sopInstanceUID) { + continue; + } + + if (targetFrame === undefined) { + return refId; + } + + const refFrame = getFrameNumberFromImageId(refId) ?? 1; + + if (refFrame === targetFrame) { + return refId; + } + } + } + } + + if ( + segFrameIndex !== undefined && + segFrameIndex < referencedImageIds.length + ) { + return referencedImageIds[segFrameIndex]; + } + + return undefined; +} + +function ensureImageIdMapsEntry( + imageId: string, + referencedImageIds: string[], + imageIdMaps: { + indices: Record; + metadata: Record>; + }, + metadataProvider, + segFrameIndex?: number +) { + const stackImageId = resolveStackImageId( + imageId, + referencedImageIds, + metadataProvider, + segFrameIndex + ); + + if (!stackImageId) { + return undefined; + } + + if (imageIdMaps.indices[stackImageId] === undefined) { + const index = referencedImageIds.indexOf(stackImageId); + + if (index === -1) { + return undefined; + } + + imageIdMaps.indices[stackImageId] = index; + imageIdMaps.metadata[stackImageId] = + imageIdMaps.metadata[stackImageId] || + metadataProvider.get('instance', stackImageId); + } + + return stackImageId; +} function chunkPixelData( pixelData, @@ -99,19 +259,6 @@ function getExpectedVoxelCount(multiframe) { return multiframe.Rows * multiframe.Columns * numberOfFrames; } -function decodeFromDatasetPixelData(multiframe) { - const encodedFrames = Array.isArray(multiframe.PixelData) - ? multiframe.PixelData - : [multiframe.PixelData]; - - if (!encodedFrames?.length) { - return; - } - - const decoded = decode(encodedFrames, multiframe.Rows, multiframe.Columns); - return normalizeDecodedPixelData(decoded); -} - type DecodeFrameImageData = ( frameImageId: string, frameNumber: number @@ -198,11 +345,38 @@ function unpackFramePixelDataIfNeeded( framePixelData instanceof Uint8Array ? framePixelData : new Uint8Array(framePixelData); - return BitArray.unpack(packed); + return unpackBinaryFrameFromPacked(packed, sliceLength); } return framePixelData; } +function ensureInstanceOnMetadataProvider( + metadataProvider: { + get: (type: string, imageId: string) => unknown; + addCustomMetadata?: ( + imageId: string, + type: string, + metadata: unknown + ) => void; + add?: (imageId: string, type: string, metadata: unknown) => void; + }, + segImageId: string, + multiframe: Record +) { + if (metadataProvider.get('instance', segImageId)) { + return; + } + + if (metadataProvider.addCustomMetadata) { + metadataProvider.addCustomMetadata(segImageId, 'instance', multiframe); + return; + } + + if (metadataProvider.add) { + metadataProvider.add(segImageId, 'instance', multiframe); + } +} + async function defaultDecodeFrameImageData( frameImageId: string, _frameNumber: number @@ -211,20 +385,18 @@ async function defaultDecodeFrameImageData( return segImage?.getPixelData?.(); } -async function decodeSegPixelData({ +async function decodeSegPixelDataFromFrameIds({ segImageId, multiframe, frameImageIds, getFrameImageId, decodeImageData = defaultDecodeFrameImageData, - allowLegacyDatasetDecode = false, }: { segImageId: string; multiframe: Record; frameImageIds?: string[]; getFrameImageId?: (baseSegImageId: string, frameNumber: number) => string; - decodeImageData?: DecodeFrameImageData; - allowLegacyDatasetDecode?: boolean; + decodeImageData: DecodeFrameImageData; }) { const rows = Number(multiframe.Rows); const columns = Number(multiframe.Columns); @@ -238,28 +410,6 @@ async function decodeSegPixelData({ getFrameImageId, }); - if (allowLegacyDatasetDecode) { - const datasetDecodedPixelData = decodeFromDatasetPixelData(multiframe); - if ( - datasetDecodedPixelData && - datasetDecodedPixelData.length === expectedVoxelCount - ) { - return { decodedPixelData: datasetDecodedPixelData, expectedVoxelCount }; - } - } - - // Legacy: a single decode on the metadata segImageId may return the full multiframe buffer. - const legacyFullVolume = await decodeImageData(segImageId, 0); - if (legacyFullVolume) { - const normalizedLegacy = normalizeDecodedPixelData(legacyFullVolume); - if (normalizedLegacy.length === expectedVoxelCount) { - return { decodedPixelData: normalizedLegacy, expectedVoxelCount }; - } - if (numberOfFrames <= 1) { - return { decodedPixelData: normalizedLegacy, expectedVoxelCount }; - } - } - if (numberOfFrames <= 1) { const frameImageId = resolvedFrameImageIds[0] || segImageId; const framePixelData = await decodeImageData(frameImageId, 1); @@ -350,10 +500,27 @@ const extractInfoFromPerFrameFunctionalGroups = ({ sopUIDImageIdIndexMap, multiframe, }) => { + const derivationImageSequence = + PerFrameFunctionalGroups?.DerivationImageSequence; + const normalizedDerivationImageSequence = Array.isArray( + derivationImageSequence + ) + ? derivationImageSequence[0] + : derivationImageSequence; + const sourceImageSequence = + normalizedDerivationImageSequence?.SourceImageSequence; + const normalizedSourceImageSequence = Array.isArray(sourceImageSequence) + ? sourceImageSequence[0] + : sourceImageSequence; const referencedSOPInstanceUid = - PerFrameFunctionalGroups.DerivationImageSequence[0].SourceImageSequence[0] - .ReferencedSOPInstanceUID; - const referencedImageId = sopUIDImageIdIndexMap[referencedSOPInstanceUid]; + normalizedSourceImageSequence?.ReferencedSOPInstanceUID; + const referencedImageId = + referencedSOPInstanceUid && normalizedSourceImageSequence + ? getImageIdOfSourceImageBySourceImageSequence( + normalizedSourceImageSequence, + sopUIDImageIdIndexMap + ) + : undefined; const segmentIndex = getSegmentIndex(multiframe, sequenceIndex); return { referencedSOPInstanceUid, referencedImageId, segmentIndex }; @@ -378,24 +545,21 @@ const getReferencedImageIdFromPerFrameGroup = ({ const referencedSOPInstanceUID = normalizedSourceImageSequence?.ReferencedSOPInstanceUID; - if (!referencedSOPInstanceUID) { + if (!referencedSOPInstanceUID || !normalizedSourceImageSequence) { return; } - return sopUIDImageIdIndexMap[referencedSOPInstanceUID]; + return getImageIdOfSourceImageBySourceImageSequence( + normalizedSourceImageSequence, + sopUIDImageIdIndexMap + ); }; /** - * Creates labelmap images from a SEG instance identified by segImageId. - * Uses metadataProvider.get('instance', segImageId) for the naturalized SEG dataset - * and imageLoader.loadImage(segImageId) for uncompressed pixel data. - * - * @param referencedImageIds - Referenced image IDs (e.g. CT/MR series) - * @param segImageId - Image ID for the SEG instance (loadable via imageLoader) - * @param metadataProvider - Provider for instance metadata (must return naturalized dataset for segImageId) - * @param options - { tolerance, TypedArrayConstructor, maxBytesPerChunk } + * Creates labelmap images from a SEG instance using per-frame imageIds and a decode callback. + * This is the primary entry point for OHIF and other hosts that load pixels via imageLoader. */ -async function createLabelmapsFromBufferInternal( +async function createLabelmapsFromSegImageIds( referencedImageIds, segImageId, metadataProvider, @@ -409,7 +573,6 @@ async function createLabelmapsFromBufferInternal( frameImageIds, getFrameImageId, decodeImageData = defaultDecodeFrameImageData, - allowLegacyDatasetDecode = false, } = options ?? {}; const instanceMeta = metadataProvider.get('instance', segImageId); @@ -420,6 +583,8 @@ async function createLabelmapsFromBufferInternal( } const multiframe = instanceMeta.dataset ?? instanceMeta; + prepareSegMultiframeMetadata(multiframe); + const imagePlaneModule = metadataProvider.get( 'imagePlaneModule', referencedImageIds[0] @@ -456,22 +621,24 @@ async function createLabelmapsFromBufferInternal( throw new Error('Fractional segmentations are not yet supported'); } - const { decodedPixelData, expectedVoxelCount } = await decodeSegPixelData({ - segImageId, - multiframe, - frameImageIds, - getFrameImageId, - decodeImageData, - allowLegacyDatasetDecode, - }); + const { decodedPixelData, expectedVoxelCount } = + await decodeSegPixelDataFromFrameIds({ + segImageId, + multiframe, + frameImageIds, + getFrameImageId, + decodeImageData, + }); const sliceLength = multiframe.Rows * multiframe.Columns; const unpackedPixelData = - multiframe.BitsStored === 1 && decodedPixelData.length < expectedVoxelCount - ? BitArray.unpack( + Number(multiframe.BitsStored) === 1 && + decodedPixelData.length < expectedVoxelCount + ? unpackBinaryFrameFromPacked( decodedPixelData instanceof Uint8Array ? decodedPixelData - : new Uint8Array(decodedPixelData.buffer) + : new Uint8Array(decodedPixelData), + sliceLength ) : decodedPixelData; const decodedFrameCount = Math.max( @@ -499,7 +666,15 @@ async function createLabelmapsFromBufferInternal( 'generalImageModule', imageId ); - acc[sopInstanceUID] = imageId; + + if (!sopInstanceUID) { + return acc; + } + + if (!acc[sopInstanceUID]) { + acc[sopInstanceUID] = stripFrameQualifiersFromImageId(imageId); + } + return acc; }, {}); @@ -654,8 +829,14 @@ export function insertPixelDataPlanar({ const ImageOrientationPatientI = sharedImageOrientationPatient || - PerFrameFunctionalGroups.PlaneOrientationSequence - .ImageOrientationPatient; + PerFrameFunctionalGroups?.PlaneOrientationSequence + ?.ImageOrientationPatient; + + if (!ImageOrientationPatientI) { + throw new Error( + `SEG frame ${i + 1} is missing ImageOrientationPatient in per-frame and shared functional groups.` + ); + } const view = readFromUnpackedChunks( pixelDataChunks, @@ -691,7 +872,7 @@ export function insertPixelDataPlanar({ segmentsPixelIndices.set(segmentIndex, {}); } - const imageId = findReferenceSourceImageId( + let imageId = findReferenceSourceImageId( multiframe, i, referencedImageIds, @@ -700,6 +881,10 @@ export function insertPixelDataPlanar({ sopUIDImageIdIndexMap ); + if (!imageId && i < referencedImageIds.length) { + imageId = referencedImageIds[i]; + } + if (!imageId) { console.warn( "Image not present in stack, can't import frame : " + i + '.' @@ -707,7 +892,30 @@ export function insertPixelDataPlanar({ return; } - const sourceImageMetadata = imageIdMaps.metadata[imageId]; + const stackImageId = ensureImageIdMapsEntry( + imageId, + referencedImageIds, + imageIdMaps, + metadataProvider, + i + ); + + if (!stackImageId) { + console.warn( + `Image not present in stack, can't import frame : ${i}.` + ); + return; + } + + const sourceImageMetadata = imageIdMaps.metadata[stackImageId]; + + if (!sourceImageMetadata) { + console.warn( + `No instance metadata for referenced image at frame : ${i}.` + ); + return; + } + if ( Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns @@ -719,7 +927,7 @@ export function insertPixelDataPlanar({ ); } - const imageIdIndex = imageIdMaps.indices[imageId]; + const imageIdIndex = imageIdMaps.indices[stackImageId]; const labelmapImage = labelMapImages[imageIdIndex]; const labelmap2DView = labelmapImage.getPixelData(); const imageVoxelManager = labelmapImage.voxelManager; @@ -838,7 +1046,7 @@ export function insertPixelDataPlanar({ }); } - if (!imageId && parserType === 'labelmap') { + if (!imageId && i < referencedImageIds.length) { imageId = referencedImageIds[i]; } if (!imageId) { @@ -847,7 +1055,31 @@ export function insertPixelDataPlanar({ ); continue; } - const sourceImageMetadata = imageIdMaps.metadata[imageId]; + + const stackImageId = ensureImageIdMapsEntry( + imageId, + referencedImageIds, + imageIdMaps, + metadataProvider, + i + ); + + if (!stackImageId) { + console.warn( + `Image not present in stack, can't import frame : ${i}.` + ); + continue; + } + + const sourceImageMetadata = imageIdMaps.metadata[stackImageId]; + + if (!sourceImageMetadata) { + console.warn( + `No instance metadata for referenced image at frame : ${i}.` + ); + continue; + } + if ( Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns @@ -858,7 +1090,7 @@ export function insertPixelDataPlanar({ 'Aborting segmentation loading. ' ); } - const imageIdIndex = imageIdMaps.indices[imageId]; + const imageIdIndex = imageIdMaps.indices[stackImageId]; const labelmapImage = labelMapImages[imageIdIndex]; const labelmap2DView = labelmapImage.getPixelData(); // TypedArray const imageVoxelManager = labelmapImage.voxelManager; @@ -1236,5 +1468,63 @@ const getSegmentData = ({ return segmentData; }; -export { createLabelmapsFromBufferInternal }; -export { decodeSegPixelData }; +/** + * Legacy entry: parse a Part 10 buffer, decode pixels from dataset PixelData, and + * delegate to createLabelmapsFromSegImageIds with synthetic frame imageIds. + */ +async function createLabelmapsFromDICOMBuffer( + referencedImageIds, + arrayBuffer, + metadataProvider, + options: Record = {} +) { + const dicomData = DicomMessage.readFile(arrayBuffer); + const dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict); + dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta); + const multiframe = Normalizer.normalizeToDataset([dataset]); + + const segImageId = + (options.segImageId as string | undefined) ?? BUFFER_SEG_IMAGE_ID; + ensureInstanceOnMetadataProvider(metadataProvider, segImageId, multiframe); + + const numberOfFrames = getSegNumberOfFramesFromDataset(multiframe); + const frameImageIds = Array.from( + { length: numberOfFrames }, + (_, index) => `${segImageId}#frame=${index + 1}` + ); + + const decodeImageData = createDecodeImageDataFromMultiframe(multiframe); + + return createLabelmapsFromSegImageIds( + referencedImageIds, + segImageId, + metadataProvider, + { + ...options, + frameImageIds, + decodeImageData, + } + ); +} + +/** @deprecated Use createLabelmapsFromSegImageIds */ +async function createLabelmapsFromBufferInternal( + referencedImageIds, + segImageId, + metadataProvider, + options +) { + return createLabelmapsFromSegImageIds( + referencedImageIds, + segImageId, + metadataProvider, + options + ); +} + +export { + createLabelmapsFromSegImageIds, + createLabelmapsFromDICOMBuffer, + createLabelmapsFromBufferInternal, + decodeSegPixelDataFromFrameIds, +}; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js index aa1a327b8d..42e0925f34 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js @@ -34,8 +34,7 @@ export function applyPerFrameFunctionalGroups(dataset, frames) { const existing = dataset.PerFrameFunctionalGroupsSequence; const existingList = Array.isArray(existing) ? existing : []; - dataset.NumberOfFrames = validFrames.length; - dataset.PerFrameFunctionalGroupsSequence = validFrames.map((frame, index) => { + const nextSequence = validFrames.map((frame, index) => { const prior = existingList[index] && typeof existingList[index] === 'object' ? existingList[index] @@ -62,4 +61,7 @@ export function applyPerFrameFunctionalGroups(dataset, frames) { return group; }); + + dataset.PerFrameFunctionalGroupsSequence = nextSequence; + dataset.NumberOfFrames = nextSequence.length; } diff --git a/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts index e6c7f2aaac..7bbd2041d0 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts @@ -1,6 +1,359 @@ +import { utilities as dcmjsUtilities } from 'dcmjs'; + +const { decode: decodeDcmjsRleRows } = dcmjsUtilities.compression; + const RLE_LOSSLESS_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.5'; const EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.1'; +function getTransferSyntaxUid(multiframe: Record): string { + const meta = multiframe._meta as + | { TransferSyntaxUID?: { Value?: string[] } } + | undefined; + const fromMeta = meta?.TransferSyntaxUID?.Value?.[0]; + + if (fromMeta) { + return fromMeta; + } + + if (typeof multiframe.TransferSyntaxUID === 'string') { + return multiframe.TransferSyntaxUID; + } + + return EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID; +} + +function getSegNumberOfFramesFromDataset( + multiframe: Record +): number { + const fromTag = Number(multiframe.NumberOfFrames); + if (fromTag > 0) { + return fromTag; + } + + const perFrame = multiframe.PerFrameFunctionalGroupsSequence; + if (Array.isArray(perFrame) && perFrame.length > 0) { + return perFrame.length; + } + + return 1; +} + +/** + * Decodes one DICOM RLE-lossless fragment into packed bytes (one sample plane). + */ +function decodeRleLosslessToPackedBytes( + rleData: ArrayBuffer | Uint8Array, + packedByteLength: number +): Uint8Array { + const frameData = + rleData instanceof Uint8Array ? rleData : new Uint8Array(rleData); + const header = new DataView( + frameData.buffer, + frameData.byteOffset, + frameData.byteLength + ); + const data = new Int8Array( + frameData.buffer, + frameData.byteOffset, + frameData.byteLength + ); + const out = new Uint8Array(packedByteLength); + const numSegments = header.getInt32(0, true); + + for (let s = 0; s < numSegments; s++) { + let outIndex = numSegments === 1 ? 0 : s * packedByteLength; + let inIndex = header.getInt32((s + 1) * 4, true); + let maxIndex = header.getInt32((s + 2) * 4, true); + + if (maxIndex === 0) { + maxIndex = frameData.length; + } + + const endOfSegment = + numSegments === 1 ? packedByteLength : (s + 1) * packedByteLength; + + while (inIndex < maxIndex && outIndex < endOfSegment) { + const n = data[inIndex++]; + + if (n >= 0 && n <= 127) { + for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { + out[outIndex++] = data[inIndex++] & 0xff; + } + } else if (n <= -1 && n >= -127) { + const value = data[inIndex++] & 0xff; + for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { + out[outIndex++] = value; + } + } + } + } + + return out; +} + +/** + * Decodes all SEG frames from an in-memory naturalized multiframe (buffer / legacy path). + */ +function decodeSegFramesFromMultiframe( + multiframe: Record +): ArrayLike[] { + const rows = Number(multiframe.Rows); + const columns = Number(multiframe.Columns); + const samplesPerFrame = rows * columns; + const bitsAllocated = Number(multiframe.BitsAllocated); + const numberOfFrames = getSegNumberOfFramesFromDataset(multiframe); + const transferSyntaxUid = getTransferSyntaxUid(multiframe); + + if (!multiframe.PixelData) { + throw new Error('SEG dataset has no PixelData'); + } + + if (bitsAllocated === 1) { + if (transferSyntaxUid === RLE_LOSSLESS_TRANSFER_SYNTAX_UID) { + const encodedFrames = Array.isArray(multiframe.PixelData) + ? multiframe.PixelData + : [multiframe.PixelData]; + const bytesPerFrame = getBytesForBinaryFrame(samplesPerFrame); + const frames: Uint8Array[] = []; + + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const rleFrame = encodedFrames[frameIndex]; + + if (!rleFrame) { + frames.push(new Uint8Array(samplesPerFrame)); + continue; + } + + const packed = decodeRleLosslessToPackedBytes(rleFrame, bytesPerFrame); + frames.push(unpackBinaryFrameFromPacked(packed, samplesPerFrame)); + } + + return frames; + } + + return getBitmapFramesFromDataset(multiframe).frames; + } + + if (transferSyntaxUid === RLE_LOSSLESS_TRANSFER_SYNTAX_UID) { + const encodedFrames = Array.isArray(multiframe.PixelData) + ? multiframe.PixelData + : [multiframe.PixelData]; + const decoded = decodeDcmjsRleRows( + encodedFrames, + rows, + columns + ) as Uint8Array; + const frames: Uint8Array[] = []; + + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const start = frameIndex * samplesPerFrame; + frames.push(decoded.subarray(start, start + samplesPerFrame)); + } + + return frames; + } + + const buffer = asUint8PixelData(multiframe.PixelData); + const frames: Uint8Array[] = []; + + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const start = frameIndex * samplesPerFrame; + frames.push(buffer.subarray(start, start + samplesPerFrame)); + } + + return frames; +} + +function createDecodeImageDataFromMultiframe( + multiframe: Record +) { + let cachedFrames: ArrayLike[] | null = null; + + return async (_frameImageId: string, frameNumber: number) => { + if (!cachedFrames) { + cachedFrames = decodeSegFramesFromMultiframe(multiframe); + } + + const frame = cachedFrames[frameNumber - 1]; + + if (!frame) { + throw new Error(`No SEG frame at index ${frameNumber}`); + } + + return frame; + }; +} + +function getBytesForBinaryFrame(numPixels: number) { + return Math.ceil(numPixels / 8); +} + +function asUint8PixelData(pixelData: unknown): Uint8Array { + if (pixelData instanceof Uint8Array) { + return pixelData; + } + + if (pixelData instanceof ArrayBuffer) { + return new Uint8Array(pixelData); + } + + if (Array.isArray(pixelData)) { + if (pixelData.length === 1) { + return new Uint8Array(pixelData[0] as ArrayBuffer); + } + + throw new Error( + 'Multiframe encapsulated PixelData fragments cannot be converted to binary frames for re-encoding' + ); + } + + return new Uint8Array(pixelData as ArrayLike); +} + +/** Normalizes 0/1 or 0/255 binary mask samples to 0/1. */ +function normalizeBinaryFrameTo01(frame: ArrayLike): Uint8Array { + const normalized = new Uint8Array(frame.length); + + for (let i = 0; i < frame.length; i++) { + normalized[i] = frame[i] ? 1 : 0; + } + + return normalized; +} + +/** + * Unpacks one binary frame from packed bytes where the first pixel is bit 0 of byte 0 + * (DICOM / explicit LEI re-encode convention). + */ +function unpackBinaryFrameFromPacked( + packed: Uint8Array, + samplesPerFrame: number +): Uint8Array { + const frame = new Uint8Array(samplesPerFrame); + + for (let i = 0; i < samplesPerFrame; i++) { + const bytePos = i >> 3; + const bitPos = i % 8; + frame[i] = packed[bytePos] & (1 << bitPos) ? 1 : 0; + } + + return frame; +} + +/** + * Unpacks one frame from a continuous bit stream (dcmjs BitArray.pack across all frames). + */ +function unpackBinaryFrameFromContinuousPack( + packed: Uint8Array, + samplesPerFrame: number, + frameIndex: number +): Uint8Array { + const frame = new Uint8Array(samplesPerFrame); + const bitOffset = frameIndex * samplesPerFrame; + + for (let i = 0; i < samplesPerFrame; i++) { + const bitIndex = bitOffset + i; + const bytePos = bitIndex >> 3; + const bitPos = bitIndex % 8; + frame[i] = packed[bytePos] & (1 << bitPos) ? 1 : 0; + } + + return frame; +} + +/** + * Extracts per-frame 0/1 binary masks from a bitmap SEG dataset's PixelData. + * Supports byte-per-pixel (pre-bitPack), per-frame-aligned packed, or continuous packed layouts. + */ +function getBitmapFramesFromDataset(dataset: { + NumberOfFrames?: number | string; + Rows?: number | string; + Columns?: number | string; + BitsAllocated?: number | string; + PixelData?: unknown; +}) { + const numberOfFrames = Number(dataset.NumberOfFrames) || 1; + const rows = Number(dataset.Rows); + const columns = Number(dataset.Columns); + const samplesPerFrame = rows * columns; + const bitsAllocated = Number(dataset.BitsAllocated); + + if (!dataset.PixelData) { + throw new Error('Bitmap SEG dataset has no PixelData'); + } + + if (bitsAllocated === 1) { + const buffer = asUint8PixelData(dataset.PixelData); + const bytesPerFrame = getBytesForBinaryFrame(samplesPerFrame); + const unpackedFrameBytes = samplesPerFrame * numberOfFrames; + const perFramePackedBytes = bytesPerFrame * numberOfFrames; + const continuousPackedBytes = getBytesForBinaryFrame( + samplesPerFrame * numberOfFrames + ); + const frames: Uint8Array[] = []; + + if (buffer.length === unpackedFrameBytes) { + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const start = frameIndex * samplesPerFrame; + frames.push( + normalizeBinaryFrameTo01( + buffer.subarray(start, start + samplesPerFrame) + ) + ); + } + } else if (buffer.length === perFramePackedBytes) { + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const framePacked = buffer.subarray( + frameIndex * bytesPerFrame, + (frameIndex + 1) * bytesPerFrame + ); + frames.push(unpackBinaryFrameFromPacked(framePacked, samplesPerFrame)); + } + } else if (buffer.length === continuousPackedBytes) { + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + frames.push( + unpackBinaryFrameFromContinuousPack( + buffer, + samplesPerFrame, + frameIndex + ) + ); + } + } else { + throw new Error( + `Unexpected 1-bit SEG PixelData length ${buffer.length} for ${numberOfFrames} frame(s) of ${samplesPerFrame} pixels` + ); + } + + return { frames, bitsAllocated }; + } + + if (bitsAllocated <= 8) { + const buffer = asUint8PixelData(dataset.PixelData); + const frames: Uint8Array[] = []; + + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const start = frameIndex * samplesPerFrame; + frames.push(buffer.slice(start, start + samplesPerFrame)); + } + + return { frames, bitsAllocated }; + } + + const buffer = + dataset.PixelData instanceof Uint16Array + ? dataset.PixelData + : new Uint16Array(dataset.PixelData as ArrayBuffer); + const frames: Uint16Array[] = []; + + for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { + const start = frameIndex * samplesPerFrame; + frames.push(buffer.slice(start, start + samplesPerFrame)); + } + + return { frames, bitsAllocated }; +} + function packBits(samples: ArrayLike) { const output: number[] = []; let i = 0; @@ -207,4 +560,10 @@ export function encodeFramesToTransferSyntax({ export { RLE_LOSSLESS_TRANSFER_SYNTAX_UID, EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + getBitmapFramesFromDataset, + bitPackBinaryFrame, + unpackBinaryFrameFromPacked, + decodeSegFramesFromMultiframe, + createDecodeImageDataFromMultiframe, + getSegNumberOfFramesFromDataset, }; From da0d867b32d0fe275f8875d45ec9557641359bb2 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 11 Jun 2026 22:13:39 -0400 Subject: [PATCH 78/90] fix(adapters/seg): address SEG adapter PR review feedback - Rename createFromDICOMSegBuffer -> createFromDicomSegImageId. The 2nd arg is a SEG instance imageId, not a Part 10 ArrayBuffer; renaming turns a silent contract break into an obvious one (no same-name/different-contract trap). Update the example to use the buffer-path createLabelmapsFromDICOMBuffer. Documented in the 5.x migration guide. - getReferencedSourceImageSequenceItem: derive ReferencedFrameNumber via the metadata provider's frame extraction (falling back to utilities.FrameRange) instead of a one-off /[?&]frame=/ regex that silently dropped the wadors /frames/N form, so multi-frame source references are preserved. - normalizeDecodedPixelData: collapse the duplicated Uint16Array ternary and document that non-16-bit frames are promoted by VALUE (segment indices), not byte-reinterpreted. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../examples/segmentationVolume/utils.ts | 6 +-- .../Segmentation/generateSegmentation.ts | 28 ++++++++++-- .../Segmentation/generateToolState.ts | 11 +++-- .../Cornerstone3D/Segmentation/index.ts | 4 +- .../Segmentation/labelmapImagesFromBuffer.ts | 12 ++--- .../migration-guides/5x/1-migration-notes.md | 45 +++++++++++++++++++ 6 files changed, 88 insertions(+), 18 deletions(-) diff --git a/packages/adapters/examples/segmentationVolume/utils.ts b/packages/adapters/examples/segmentationVolume/utils.ts index 310f2d12bf..73bdb781d3 100644 --- a/packages/adapters/examples/segmentationVolume/utils.ts +++ b/packages/adapters/examples/segmentationVolume/utils.ts @@ -83,12 +83,10 @@ export async function loadSegmentation(arrayBuffer: ArrayBuffer, state) { const { referenceImageIds } = state; const { labelMapImages } = - await Cornerstone3D.Segmentation.createFromDICOMSegBuffer( + await Cornerstone3D.Segmentation.createLabelmapsFromDICOMBuffer( referenceImageIds, arrayBuffer, - { - metadataProvider: metaData, - } + metaData ); await createSegmentation({ state, labelMapImages }); diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts index a744256763..e5cc321b4f 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts @@ -1,5 +1,5 @@ import { normalizers, derivations } from 'dcmjs'; -import { Enums } from '@cornerstonejs/core'; +import { Enums, utilities } from '@cornerstonejs/core'; import { fillSegmentation as fillBitmapSegmentation } from '../../Cornerstone/Segmentation_4X'; import { encodeFramesToTransferSyntax, @@ -79,13 +79,35 @@ function normalizeFramePixelData(pixelData: ArrayLike) { return frame; } +function getReferencedFrameNumber(imageId, metadata) { + if (!imageId) { + return undefined; + } + + // Prefer the metadata provider's own frame extraction when it offers one — it + // understands the full set of imageId shapes the host app produces (wadors + // `/frames/N` as well as `?frame=N` / `&frame=N`). Fall back to the core + // FrameRange helper (handles `/frames/N` and `frameNumber=N`) so that + // provider-agnostic callers still resolve multi-frame references. The prior + // one-off `/[?&]frame=/` regex silently dropped the wadors form. + const providerFrame = metadata?.getFrameInformationFromURL?.(imageId); + const frameNumber = + providerFrame != null + ? Number(providerFrame) + : utilities.FrameRange.imageIdToFrameStart(imageId); + + return Number.isFinite(frameNumber) ? frameNumber : undefined; +} + function getReferencedSourceImageSequenceItem(image, metadata) { const imageData = metadata.get(MetadataModules.IMAGE_DATA, image?.imageId) || {}; const referencedSOPInstanceUID = imageData.SOPInstanceUID; - const frameMatch = image?.imageId?.match?.(/[?&]frame=(\d+)/); - const referencedFrameNumber = frameMatch ? Number(frameMatch[1]) : undefined; + const referencedFrameNumber = getReferencedFrameNumber( + image?.imageId, + metadata + ); const item: { ReferencedSOPInstanceUID: string; ReferencedFrameNumber?: number; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index 454150583f..920e9e4a35 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -44,16 +44,19 @@ function generateToolState( /** * Creates labelmap images from a SEG instance via per-frame imageIds (OHIF / imageLoader path). * + * Note: despite the historical `createFromDICOMSegBuffer` name, this does NOT take a + * Part 10 ArrayBuffer. The second argument is a SEG instance imageId; pixels are + * sourced from the provided per-frame imageIds and decoder. Use + * {@link createLabelmapsFromDICOMBuffer} / {@link generateToolState} for the buffer path. + * * @param referencedImageIds - Referenced CT/MR imageIds * @param segImageId - SEG instance imageId for metadata (base or frame-qualified) * @param options.metadataProvider - Required metadata provider * @param options.frameImageIds - Per-frame loadable SEG imageIds * @param options.getFrameImageId - Optional (baseSegImageId, frameNumber) => frame imageId * @param options.decodeImageData - Optional (frameImageId, frameNumber) => pixel data; defaults to imageLoader - * - * Pixel encoding uses only the provided frame imageIds and decoder (no dataset PixelData shortcut). */ -function createFromDICOMSegBuffer( +function createFromDicomSegImageId( referencedImageIds, segImageId, { @@ -81,7 +84,7 @@ function createFromDICOMSegBuffer( export { generateToolState, - createFromDICOMSegBuffer, + createFromDicomSegImageId, createLabelmapsFromSegImageIds, createLabelmapsFromDICOMBuffer, }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts index 9fb4e9982f..faa0c0b5b7 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts @@ -2,7 +2,7 @@ import { generateSegmentation } from './generateSegmentation'; import { generateLabelMaps2DFrom3D } from './generateLabelMaps2DFrom3D'; import { generateToolState, - createFromDICOMSegBuffer, + createFromDicomSegImageId, createLabelmapsFromSegImageIds, createLabelmapsFromDICOMBuffer, } from './generateToolState'; @@ -11,7 +11,7 @@ export { generateLabelMaps2DFrom3D, generateSegmentation, generateToolState, - createFromDICOMSegBuffer, + createFromDicomSegImageId, createLabelmapsFromSegImageIds, createLabelmapsFromDICOMBuffer, }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index 41e79f94ba..d85ad7bdb5 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -208,12 +208,14 @@ function normalizeDecodedPixelData(pixelData) { ); if (hasUint16Frame) { + // Promote any non-16-bit frame to Uint16Array by VALUE (each segment + // index copied, length preserved) — NOT a byte reinterpret. Decoded + // frames arrive from the imageLoader as typed arrays matching their true + // bit depth, so a Uint8Array frame holds genuine 8-bit segment indices + // that must keep their values when widened. A `new Uint16Array(buffer)` + // byte reinterpretation would halve the length and corrupt the indices. const normalizedFrames = pixelData.map((frame) => - frame instanceof Uint16Array - ? frame - : frame instanceof Uint8Array - ? new Uint16Array(frame) - : new Uint16Array(frame) + frame instanceof Uint16Array ? frame : new Uint16Array(frame) ); const totalLength = normalizedFrames.reduce( (acc, frame) => acc + frame.length, diff --git a/packages/docs/docs/migration-guides/5x/1-migration-notes.md b/packages/docs/docs/migration-guides/5x/1-migration-notes.md index 35e7586d47..b1aa5fb3d2 100644 --- a/packages/docs/docs/migration-guides/5x/1-migration-notes.md +++ b/packages/docs/docs/migration-guides/5x/1-migration-notes.md @@ -54,3 +54,48 @@ iterable/enumerable on the object itself. - When building instance data from naturalized metadata, prefer the `combineFramesInstance` utility so downstream modules receive the expected base object shape. + +## SEG adapter: `createFromDICOMSegBuffer` renamed to `createFromDicomSegImageId` + +### What Changed + +`adaptersSEG.Cornerstone3D.Segmentation.createFromDICOMSegBuffer` has been +renamed to `createFromDicomSegImageId`. Its second argument is a SEG instance +`imageId` (with pixels sourced from the provided per-frame `imageId`s / +decoder) — it does **not** accept a Part 10 `ArrayBuffer`, despite the previous +name implying a buffer. + +```ts +// 4.x +const results = + await adaptersSEG.Cornerstone3D.Segmentation.createFromDICOMSegBuffer( + referencedImageIds, + arrayBuffer, // <-- ArrayBuffer + { metadataProvider } + ); + +// 5.x +const results = + await adaptersSEG.Cornerstone3D.Segmentation.createFromDicomSegImageId( + referencedImageIds, + segImageId, // <-- SEG instance imageId + { metadataProvider, frameImageIds } + ); +``` + +### Why This Matters + +The rename was deliberate: the second argument changed contract entirely +(`ArrayBuffer` -> `imageId`) while keeping the same position. Renaming turns +what would have been a silent runtime failure (an `ArrayBuffer` passed where an +`imageId` is expected) into an immediate, obvious error, rather than shipping a +same-named function with an incompatible contract and no deprecation path. + +### Migration Guidance + +- If you load a SEG via per-frame `imageId`s (the OHIF / imageLoader path), + switch the call to `createFromDicomSegImageId` and pass the SEG instance + `imageId` as the second argument. +- If you still have a Part 10 `ArrayBuffer`, use `createLabelmapsFromDICOMBuffer` + (`(referencedImageIds, arrayBuffer, metadataProvider, options)`) or + `generateToolState`, which retain the buffer-based entry point. From 41beed3b41ffc4653172c5a390976b8e977d834c Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 18 Jun 2026 15:04:04 -0400 Subject: [PATCH 79/90] fix: segmentation encode/decode issues --- .../examples/segmentationVolume/utils.ts | 45 ++- .../adapters/Cornerstone/Segmentation_4X.js | 26 +- .../Segmentation/generateSegmentation.ts | 46 +-- .../Segmentation/perFrameFunctionalGroups.js | 60 ++++ .../adapters/Cornerstone3D/encodePixelData.ts | 8 +- .../adapters/test/encodePixelData.jest.js | 268 ++++++++++++++++++ .../test/perFrameFunctionalGroups.jest.js | 121 ++++++++ .../src/shared/decoders/decodeRLE.ts | 10 +- 8 files changed, 507 insertions(+), 77 deletions(-) create mode 100644 packages/adapters/test/encodePixelData.jest.js create mode 100644 packages/adapters/test/perFrameFunctionalGroups.jest.js diff --git a/packages/adapters/examples/segmentationVolume/utils.ts b/packages/adapters/examples/segmentationVolume/utils.ts index 73bdb781d3..6d1ef159f3 100644 --- a/packages/adapters/examples/segmentationVolume/utils.ts +++ b/packages/adapters/examples/segmentationVolume/utils.ts @@ -74,19 +74,52 @@ export async function readSegmentation(file: File, state) { return; } - const arrayBuffer = image.data.byteArray.buffer; - - await loadSegmentation(arrayBuffer, state); + await loadSegmentationFromImageId(imageId, state); } export async function loadSegmentation(arrayBuffer: ArrayBuffer, state) { + // The new adapter API pulls SEG pixels through the image loader (per-frame + // imageIds) instead of decoding the whole Part-10 buffer up front, so register + // the fetched buffer as a wadouri imageId before loading it. + const segImageId = wadouri.fileManager.add(new Blob([arrayBuffer])); + + await loadSegmentationFromImageId(segImageId, state); +} + +/** Appends a 1-based wadouri frame qualifier (?frame= / &frame=) to an imageId. */ +function appendFrameToImageId(imageId: string, frame: number): string { + const separator = imageId.includes('?') ? '&' : '?'; + return `${imageId}${separator}frame=${frame}`; +} + +export async function loadSegmentationFromImageId(segImageId: string, state) { const { referenceImageIds } = state; + // Make sure the SEG instance metadata is registered for this imageId. + await imageLoader.loadAndCacheImage(segImageId); + + const instance = metaData.get('instance', segImageId) || {}; + const numberOfFrames = + Number(instance.NumberOfFrames) || + instance.PerFrameFunctionalGroupsSequence?.length || + 1; + + // Per-frame loadable SEG imageIds (wadouri frame numbers are 1-based). + const frameImageIds = + numberOfFrames > 1 + ? Array.from({ length: numberOfFrames }, (_, index) => + appendFrameToImageId(segImageId, index + 1) + ) + : [segImageId]; + const { labelMapImages } = - await Cornerstone3D.Segmentation.createLabelmapsFromDICOMBuffer( + await Cornerstone3D.Segmentation.createFromDicomSegImageId( referenceImageIds, - arrayBuffer, - metaData + segImageId, + { + metadataProvider: metaData, + frameImageIds, + } ); await createSegmentation({ state, labelMapImages }); diff --git a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js index 625b44b95a..e1dfddf610 100644 --- a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js +++ b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js @@ -8,8 +8,11 @@ import { import ndarray from 'ndarray'; import getDatasetsFromImages from '../helpers/getDatasetsFromImages'; import checkOrientation from '../helpers/checkOrientation'; -import { utilities as csUtilities, Enums } from '@cornerstonejs/core'; -import { applyPerFrameFunctionalGroups } from '../Cornerstone3D/Segmentation/perFrameFunctionalGroups'; +import { utilities as csUtilities } from '@cornerstonejs/core'; +import { + applyPerFrameFunctionalGroups, + getReferencedSourceImageSequenceItem, +} from '../Cornerstone3D/Segmentation/perFrameFunctionalGroups'; import { encodeFramesToTransferSyntax, getBitmapFramesFromDataset, @@ -89,23 +92,6 @@ function labelmapFrameContainsSegment(pixelData, segmentIndex) { return false; } -function getReferencedSourceImageSequenceItemFromImage(image, metadata) { - const imageData = - metadata?.get?.(Enums.MetadataModules.IMAGE_DATA, image?.imageId) || {}; - const referencedSOPInstanceUID = imageData.SOPInstanceUID; - const frameMatch = image?.imageId?.match?.(/[?&]frame=(\d+)/); - const referencedFrameNumber = frameMatch ? Number(frameMatch[1]) : undefined; - const item = { - ReferencedSOPInstanceUID: referencedSOPInstanceUID, - }; - - if (Number.isFinite(referencedFrameNumber) && referencedFrameNumber > 0) { - item.ReferencedFrameNumber = referencedFrameNumber; - } - - return item; -} - export function fillSegmentation( segmentation, inputLabelmaps3D, @@ -271,7 +257,7 @@ export function fillSegmentation( const perFrameInputs = frameDescriptors .map((desc) => ({ referencedSegmentNumber: desc.referencedSegmentNumber, - sourceImageSequenceItem: getReferencedSourceImageSequenceItemFromImage( + sourceImageSequenceItem: getReferencedSourceImageSequenceItem( images[desc.sourceFrameIndex], metadata ), diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts index e5cc321b4f..993c93ab3e 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts @@ -1,5 +1,5 @@ import { normalizers, derivations } from 'dcmjs'; -import { Enums, utilities } from '@cornerstonejs/core'; +import { Enums } from '@cornerstonejs/core'; import { fillSegmentation as fillBitmapSegmentation } from '../../Cornerstone/Segmentation_4X'; import { encodeFramesToTransferSyntax, @@ -9,6 +9,7 @@ import { } from '../encodePixelData'; import { applyPerFrameFunctionalGroups, + getReferencedSourceImageSequenceItem, normalizeSharedFunctionalGroupsSequence, } from './perFrameFunctionalGroups.js'; @@ -79,49 +80,6 @@ function normalizeFramePixelData(pixelData: ArrayLike) { return frame; } -function getReferencedFrameNumber(imageId, metadata) { - if (!imageId) { - return undefined; - } - - // Prefer the metadata provider's own frame extraction when it offers one — it - // understands the full set of imageId shapes the host app produces (wadors - // `/frames/N` as well as `?frame=N` / `&frame=N`). Fall back to the core - // FrameRange helper (handles `/frames/N` and `frameNumber=N`) so that - // provider-agnostic callers still resolve multi-frame references. The prior - // one-off `/[?&]frame=/` regex silently dropped the wadors form. - const providerFrame = metadata?.getFrameInformationFromURL?.(imageId); - const frameNumber = - providerFrame != null - ? Number(providerFrame) - : utilities.FrameRange.imageIdToFrameStart(imageId); - - return Number.isFinite(frameNumber) ? frameNumber : undefined; -} - -function getReferencedSourceImageSequenceItem(image, metadata) { - const imageData = - metadata.get(MetadataModules.IMAGE_DATA, image?.imageId) || {}; - const referencedSOPInstanceUID = imageData.SOPInstanceUID; - - const referencedFrameNumber = getReferencedFrameNumber( - image?.imageId, - metadata - ); - const item: { - ReferencedSOPInstanceUID: string; - ReferencedFrameNumber?: number; - } = { - ReferencedSOPInstanceUID: referencedSOPInstanceUID, - }; - - if (Number.isFinite(referencedFrameNumber) && referencedFrameNumber > 0) { - item.ReferencedFrameNumber = referencedFrameNumber; - } - - return item; -} - function fillLabelmapSegmentation( segmentation, inputLabelmaps3D, diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js index 42e0925f34..8cf4948965 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups.js @@ -5,6 +5,66 @@ * - DerivationImageSequence[0].SourceImageSequence[0] (ReferencedSOPInstanceUID, optional ReferencedFrameNumber) */ +import { Enums, utilities } from '@cornerstonejs/core'; + +const { MetadataModules } = Enums; + +/** + * Resolves the 1-based DICOM frame number referenced by an imageId. + * + * Prefer the metadata provider's own frame extraction when it offers one — it + * understands the full set of imageId shapes the host app produces (wadors + * `/frames/N` as well as `?frame=N` / `&frame=N`). Fall back to the core + * FrameRange helper (handles `/frames/N` and `frameNumber=N`) so that + * provider-agnostic callers still resolve multi-frame references. A one-off + * `/[?&]frame=/` regex silently drops the wadors form, so it must not be used. + * + * @param {string} imageId + * @param {object} metadata - metadata provider + * @returns {number|undefined} + */ +export function getReferencedFrameNumber(imageId, metadata) { + if (!imageId) { + return undefined; + } + + const providerFrame = metadata?.getFrameInformationFromURL?.(imageId); + const frameNumber = + providerFrame != null + ? Number(providerFrame) + : utilities.FrameRange.imageIdToFrameStart(imageId); + + return Number.isFinite(frameNumber) ? frameNumber : undefined; +} + +/** + * Builds a SourceImageSequence item (ReferencedSOPInstanceUID + optional + * ReferencedFrameNumber) for a cornerstone image, using the shared frame + * extraction so all SEG export paths resolve multi-frame references identically. + * + * @param {{ imageId?: string }} image + * @param {object} metadata - metadata provider + * @returns {{ ReferencedSOPInstanceUID: string, ReferencedFrameNumber?: number }} + */ +export function getReferencedSourceImageSequenceItem(image, metadata) { + const imageData = + metadata?.get?.(MetadataModules.IMAGE_DATA, image?.imageId) || {}; + const referencedFrameNumber = getReferencedFrameNumber( + image?.imageId, + metadata + ); + + const item = { + ReferencedSOPInstanceUID: imageData.SOPInstanceUID, + }; + + if (Number.isFinite(referencedFrameNumber) && referencedFrameNumber > 0) { + item.ReferencedFrameNumber = referencedFrameNumber; + } + + return item; +} + export function normalizeSharedFunctionalGroupsSequence(dataset) { const shared = dataset.SharedFunctionalGroupsSequence; diff --git a/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts index 7bbd2041d0..e8309d91fd 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts @@ -459,14 +459,16 @@ function getRleSegmentsForFrame( } if (bitsAllocated === 16) { - const lowByteSegment = new Uint8Array(frame.length); const highByteSegment = new Uint8Array(frame.length); + const lowByteSegment = new Uint8Array(frame.length); for (let i = 0; i < frame.length; i++) { const sample = frame[i] & 0xffff; - lowByteSegment[i] = sample & 0xff; highByteSegment[i] = (sample >> 8) & 0xff; + lowByteSegment[i] = sample & 0xff; } - return [lowByteSegment, highByteSegment]; + // DICOM PS3.5 Annex G orders RLE byte segments most-significant-byte first + // (segment 0 = high byte), matching the dicomImageLoader decode16 reader. + return [highByteSegment, lowByteSegment]; } throw new Error( diff --git a/packages/adapters/test/encodePixelData.jest.js b/packages/adapters/test/encodePixelData.jest.js new file mode 100644 index 0000000000..5c982d0abe --- /dev/null +++ b/packages/adapters/test/encodePixelData.jest.js @@ -0,0 +1,268 @@ +import { describe, it, expect } from '@jest/globals'; +import { + RLE_LOSSLESS_TRANSFER_SYNTAX_UID, + EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + getBitmapFramesFromDataset, + bitPackBinaryFrame, + unpackBinaryFrameFromPacked, + decodeSegFramesFromMultiframe, + getSegNumberOfFramesFromDataset, + encodeFramesToTransferSyntax, +} from '../src/adapters/Cornerstone3D/encodePixelData'; + +/** + * Minimal PackBits (DICOM RLE) decoder used to inspect encoder output directly, + * independent of the production decode path. Decodes until `expectedLength` + * output bytes are produced so trailing even-length padding is ignored. + */ +function packBitsDecode(bytes, signed, start, end, expectedLength) { + const out = []; + let i = start; + + while (out.length < expectedLength && i < end) { + const n = signed[i++]; + + if (n >= 0) { + for (let k = 0; k < n + 1 && out.length < expectedLength; k++) { + out.push(bytes[i++]); + } + } else if (n >= -127) { + const value = bytes[i++]; + for (let k = 0; k < -n + 1 && out.length < expectedLength; k++) { + out.push(value); + } + } + // n === -128 is a no-op per the PackBits spec. + } + + return Uint8Array.from(out); +} + +/** Splits one RLE frame buffer into its decoded byte-plane segments. */ +function decodeRleSegments(arrayBuffer, expectedLength) { + const bytes = new Uint8Array(arrayBuffer); + const signed = new Int8Array(arrayBuffer); + const dataView = new DataView(arrayBuffer); + const numSegments = dataView.getInt32(0, true); + const offsets = []; + + for (let s = 0; s < numSegments; s++) { + offsets.push(dataView.getInt32((s + 1) * 4, true)); + } + + const segments = []; + for (let s = 0; s < numSegments; s++) { + const start = offsets[s]; + const end = s + 1 < numSegments ? offsets[s + 1] : bytes.length; + segments.push(packBitsDecode(bytes, signed, start, end, expectedLength)); + } + + return segments; +} + +describe('encodePixelData - binary frame bit packing', () => { + it('round-trips a binary frame through bitPack/unpack', () => { + const samplesPerFrame = 37; // not a multiple of 8, exercises the tail byte + const frame = new Uint8Array(samplesPerFrame); + for (let i = 0; i < samplesPerFrame; i++) { + frame[i] = i % 3 === 0 ? 1 : 0; + } + + const packed = bitPackBinaryFrame(frame); + expect(packed.length).toBe(Math.ceil(samplesPerFrame / 8)); + + const unpacked = unpackBinaryFrameFromPacked(packed, samplesPerFrame); + expect(Array.from(unpacked)).toEqual(Array.from(frame)); + }); +}); + +describe('getSegNumberOfFramesFromDataset', () => { + it('prefers NumberOfFrames', () => { + expect(getSegNumberOfFramesFromDataset({ NumberOfFrames: 5 })).toBe(5); + }); + + it('falls back to PerFrameFunctionalGroupsSequence length', () => { + expect( + getSegNumberOfFramesFromDataset({ + PerFrameFunctionalGroupsSequence: [{}, {}, {}], + }) + ).toBe(3); + }); + + it('defaults to 1', () => { + expect(getSegNumberOfFramesFromDataset({})).toBe(1); + }); +}); + +describe('getBitmapFramesFromDataset', () => { + const baseDataset = { NumberOfFrames: 2, Rows: 2, Columns: 2 }; + + it('reads a byte-per-pixel (pre-bitpack) 1-bit layout and normalizes to 0/1', () => { + const { frames, bitsAllocated } = getBitmapFramesFromDataset({ + ...baseDataset, + BitsAllocated: 1, + PixelData: new Uint8Array([0, 255, 0, 1, 1, 1, 0, 0]), + }); + + expect(bitsAllocated).toBe(1); + expect(Array.from(frames[0])).toEqual([0, 1, 0, 1]); + expect(Array.from(frames[1])).toEqual([1, 1, 0, 0]); + }); + + it('reads a per-frame-aligned packed 1-bit layout', () => { + // byte0 bits LSB-first: pixel0=1, pixel2=1 -> 0b0101 = 5 + // byte1 bits LSB-first: pixel1=1, pixel3=1 -> 0b1010 = 10 + const { frames } = getBitmapFramesFromDataset({ + ...baseDataset, + BitsAllocated: 1, + PixelData: new Uint8Array([5, 10]), + }); + + expect(Array.from(frames[0])).toEqual([1, 0, 1, 0]); + expect(Array.from(frames[1])).toEqual([0, 1, 0, 1]); + }); + + it('reads a continuous packed 1-bit bitstream across frames', () => { + // single byte 0xA5 = 0b10100101, LSB-first bits: 1,0,1,0,0,1,0,1 + const { frames } = getBitmapFramesFromDataset({ + ...baseDataset, + BitsAllocated: 1, + PixelData: new Uint8Array([0xa5]), + }); + + expect(Array.from(frames[0])).toEqual([1, 0, 1, 0]); + expect(Array.from(frames[1])).toEqual([0, 1, 0, 1]); + }); + + it('reads an 8-bit labelmap layout', () => { + const { frames, bitsAllocated } = getBitmapFramesFromDataset({ + ...baseDataset, + BitsAllocated: 8, + PixelData: new Uint8Array([1, 2, 0, 3, 0, 0, 4, 0]), + }); + + expect(bitsAllocated).toBe(8); + expect(Array.from(frames[0])).toEqual([1, 2, 0, 3]); + expect(Array.from(frames[1])).toEqual([0, 0, 4, 0]); + }); + + it('throws on an unexpected 1-bit PixelData length', () => { + expect(() => + getBitmapFramesFromDataset({ + ...baseDataset, + BitsAllocated: 1, + PixelData: new Uint8Array(5), + }) + ).toThrow(/Unexpected 1-bit SEG PixelData length/); + }); +}); + +describe('encodeFramesToTransferSyntax - Explicit VR Little Endian', () => { + it('bit-packs 1-bit frames into a single OW blob', () => { + const frames = [ + Uint8Array.from([1, 0, 1, 0]), + Uint8Array.from([0, 0, 1, 1]), + ]; + + const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ + transferSyntaxUID: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + frames, + bitsAllocated: 1, + }); + + expect(pixelDataVR).toBe('OW'); + // frame0: bit0,bit2 set -> 5 ; frame1: bit2,bit3 set -> 12 + expect(Array.from(pixelData)).toEqual([5, 12]); + }); + + it('concatenates 8-bit frames as OB', () => { + const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ + transferSyntaxUID: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + frames: [Uint8Array.from([1, 2]), Uint8Array.from([3, 4])], + bitsAllocated: 8, + }); + + expect(pixelDataVR).toBe('OB'); + expect(Array.from(pixelData)).toEqual([1, 2, 3, 4]); + }); + + it('concatenates 16-bit frames as OW', () => { + const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ + transferSyntaxUID: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, + frames: [Uint16Array.from([0x1234, 0x5678])], + bitsAllocated: 16, + }); + + expect(pixelDataVR).toBe('OW'); + expect(pixelData).toBeInstanceOf(Uint16Array); + expect(Array.from(pixelData)).toEqual([0x1234, 0x5678]); + }); +}); + +describe('encodeFramesToTransferSyntax - RLE Lossless', () => { + it('round-trips 1-bit frames through the local RLE encoder and decoder', () => { + const Rows = 4; + const Columns = 4; + const samplesPerFrame = Rows * Columns; + const frames = [ + Uint8Array.from([1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0]), + Uint8Array.from([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1]), + ]; + + const { pixelData, pixelDataVR } = encodeFramesToTransferSyntax({ + transferSyntaxUID: RLE_LOSSLESS_TRANSFER_SYNTAX_UID, + frames, + bitsAllocated: 1, + }); + + expect(pixelDataVR).toBe('OB'); + expect(Array.isArray(pixelData)).toBe(true); + + const decoded = decodeSegFramesFromMultiframe({ + Rows, + Columns, + BitsAllocated: 1, + NumberOfFrames: 2, + PixelData: pixelData, + _meta: { + TransferSyntaxUID: { Value: [RLE_LOSSLESS_TRANSFER_SYNTAX_UID] }, + }, + }); + + expect(decoded).toHaveLength(2); + expect(decoded[0]).toHaveLength(samplesPerFrame); + expect(Array.from(decoded[0])).toEqual(Array.from(frames[0])); + expect(Array.from(decoded[1])).toEqual(Array.from(frames[1])); + }); + + it('actually run-length encodes (a uniform frame compresses well)', () => { + const frame = new Uint8Array(4096); // 64x64 all-zero 8-bit frame + + const { pixelData } = encodeFramesToTransferSyntax({ + transferSyntaxUID: RLE_LOSSLESS_TRANSFER_SYNTAX_UID, + frames: [frame], + bitsAllocated: 8, + }); + + // 64-byte header + a handful of replicate-run control bytes — must be far + // smaller than the raw 4096 bytes (the old encoder emitted ~1 count/pixel). + expect(pixelData[0].byteLength).toBeLessThan(256); + }); + + it('orders 16-bit RLE byte segments most-significant-byte first', () => { + // DICOM PS3.5 Annex G: segment 0 = high byte, segment 1 = low byte. + const samples = Uint16Array.from([0x1234, 0x00ff, 0xab00]); + + const { pixelData } = encodeFramesToTransferSyntax({ + transferSyntaxUID: RLE_LOSSLESS_TRANSFER_SYNTAX_UID, + frames: [samples], + bitsAllocated: 16, + }); + + const segments = decodeRleSegments(pixelData[0], samples.length); + expect(segments).toHaveLength(2); + // segment 0 must be the high bytes, segment 1 the low bytes. + expect(Array.from(segments[0])).toEqual([0x12, 0x00, 0xab]); + expect(Array.from(segments[1])).toEqual([0x34, 0xff, 0x00]); + }); +}); diff --git a/packages/adapters/test/perFrameFunctionalGroups.jest.js b/packages/adapters/test/perFrameFunctionalGroups.jest.js new file mode 100644 index 0000000000..3645c82969 --- /dev/null +++ b/packages/adapters/test/perFrameFunctionalGroups.jest.js @@ -0,0 +1,121 @@ +import { describe, it, expect } from '@jest/globals'; +import { + getReferencedFrameNumber, + getReferencedSourceImageSequenceItem, + applyPerFrameFunctionalGroups, + normalizeSharedFunctionalGroupsSequence, +} from '../src/adapters/Cornerstone3D/Segmentation/perFrameFunctionalGroups'; + +// Metadata stub whose getFrameInformationFromURL understands every imageId shape +// the host produces (wadors /frames/N as well as ?frame=N / &frame=N), so the +// helper never has to fall back to the core FrameRange parser. +const metadata = { + get: (_module, imageId) => ({ SOPInstanceUID: `SOP:${imageId}` }), + getFrameInformationFromURL: (imageId) => { + const match = + imageId.match(/[?&]frame=(\d+)/) || imageId.match(/\/frames\/(\d+)/); + return match ? Number(match[1]) : undefined; + }, +}; + +describe('getReferencedFrameNumber', () => { + it('returns undefined for a missing imageId', () => { + expect(getReferencedFrameNumber(undefined, metadata)).toBeUndefined(); + }); + + it('extracts the frame from a wadors /frames/N imageId (the regressed form)', () => { + expect( + getReferencedFrameNumber('wadors:https://x/studies/1/frames/7', metadata) + ).toBe(7); + }); + + it('extracts the frame from a ?frame=N / &frame=N imageId', () => { + expect(getReferencedFrameNumber('wadouri:blob:abc?frame=4', metadata)).toBe( + 4 + ); + expect( + getReferencedFrameNumber('wadouri:blob:abc?x=1&frame=9', metadata) + ).toBe(9); + }); +}); + +describe('getReferencedSourceImageSequenceItem', () => { + it('includes ReferencedFrameNumber for a multiframe wadors imageId', () => { + const item = getReferencedSourceImageSequenceItem( + { imageId: 'wadors:https://x/studies/1/frames/3' }, + metadata + ); + + expect(item.ReferencedSOPInstanceUID).toBe( + 'SOP:wadors:https://x/studies/1/frames/3' + ); + expect(item.ReferencedFrameNumber).toBe(3); + }); + + it('omits ReferencedFrameNumber when none can be resolved', () => { + const item = getReferencedSourceImageSequenceItem( + { imageId: 'wadors:https://x/instance' }, + metadata + ); + + expect(item.ReferencedSOPInstanceUID).toBe('SOP:wadors:https://x/instance'); + expect('ReferencedFrameNumber' in item).toBe(false); + }); +}); + +describe('normalizeSharedFunctionalGroupsSequence', () => { + it('unwraps an array-wrapped shared sequence', () => { + const dataset = { SharedFunctionalGroupsSequence: [{ a: 1 }] }; + normalizeSharedFunctionalGroupsSequence(dataset); + expect(dataset.SharedFunctionalGroupsSequence).toEqual({ a: 1 }); + }); + + it('creates an empty object when missing', () => { + const dataset = {}; + normalizeSharedFunctionalGroupsSequence(dataset); + expect(dataset.SharedFunctionalGroupsSequence).toEqual({}); + }); +}); + +describe('applyPerFrameFunctionalGroups', () => { + it('builds per-frame groups for valid frames and sets NumberOfFrames', () => { + const dataset = {}; + applyPerFrameFunctionalGroups(dataset, [ + { + referencedSegmentNumber: 1, + sourceImageSequenceItem: { + ReferencedSOPInstanceUID: 'SOP-A', + ReferencedFrameNumber: 2, + }, + }, + { + referencedSegmentNumber: 1, + sourceImageSequenceItem: { ReferencedSOPInstanceUID: 'SOP-B' }, + }, + ]); + + expect(dataset.NumberOfFrames).toBe(2); + expect(dataset.PerFrameFunctionalGroupsSequence).toHaveLength(2); + + const [first] = dataset.PerFrameFunctionalGroupsSequence; + expect(first.SegmentIdentificationSequence.ReferencedSegmentNumber).toBe(1); + expect( + first.DerivationImageSequence[0].SourceImageSequence[0] + .ReferencedSOPInstanceUID + ).toBe('SOP-A'); + }); + + it('drops frames without a referenced SOP instance UID', () => { + const dataset = {}; + applyPerFrameFunctionalGroups(dataset, [ + { + referencedSegmentNumber: 1, + sourceImageSequenceItem: { ReferencedSOPInstanceUID: 'SOP-A' }, + }, + { referencedSegmentNumber: 1, sourceImageSequenceItem: {} }, + ]); + + expect(dataset.NumberOfFrames).toBe(1); + expect(dataset.PerFrameFunctionalGroupsSequence).toHaveLength(1); + }); +}); diff --git a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts index 3fa20fea44..0f64fcac03 100644 --- a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts +++ b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts @@ -4,7 +4,9 @@ import type { Types } from '@cornerstonejs/core'; async function decodeRLE( imageFrame: Types.IImageFrame, pixelData: ByteArray, - options?: { expandOneBitPlanar?: boolean } + // For 1-bit RLE, the bits are unpacked as separate planes by default. Set + // `interleavedOneBit: true` to unpack them as a single interleaved plane instead. + options?: { interleavedOneBit?: boolean } ): Promise { if (imageFrame.bitsAllocated === 8) { if (imageFrame.planarConfiguration) { @@ -15,11 +17,11 @@ async function decodeRLE( } else if (imageFrame.bitsAllocated === 16) { return decode16(imageFrame, pixelData); } else if (imageFrame.bitsAllocated === 1) { - if (!options?.expandOneBitPlanar) { - return decode8Planar(imageFrame, pixelData, true); + if (options?.interleavedOneBit) { + return decode1(imageFrame, pixelData); } - return decode1(imageFrame, pixelData); + return decode8Planar(imageFrame, pixelData, true); } throw new Error('unsupported pixel format for RLE'); From 61746d4f6dba1f2d647a824f37ed6f35be9e49ce Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 18 Jun 2026 16:20:09 -0400 Subject: [PATCH 80/90] PR comments --- .../adapters/Cornerstone/Segmentation_4X.js | 37 +++--- .../Segmentation/generateSegmentation.ts | 27 +++-- .../test/fillSegmentationFrames.jest.js | 109 ++++++++++++++++++ 3 files changed, 152 insertions(+), 21 deletions(-) create mode 100644 packages/adapters/test/fillSegmentationFrames.jest.js diff --git a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js index e1dfddf610..4b91f906cc 100644 --- a/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js +++ b/packages/adapters/src/adapters/Cornerstone/Segmentation_4X.js @@ -254,21 +254,32 @@ export function fillSegmentation( } if (frameDescriptors.length && images?.length && metadata) { - const perFrameInputs = frameDescriptors - .map((desc) => ({ - referencedSegmentNumber: desc.referencedSegmentNumber, - sourceImageSequenceItem: getReferencedSourceImageSequenceItem( - images[desc.sourceFrameIndex], - metadata - ), - })) - .filter( - (frame) => frame.sourceImageSequenceItem?.ReferencedSOPInstanceUID + // Every SEG frame must reference a resolvable source SOP Instance UID. + // Reject rather than silently dropping frames: a dropped frame would make + // the per-frame functional groups disagree with the encoded PixelData and + // produce a SEG whose source-image references are unreliable. + const perFrameInputs = frameDescriptors.map((desc) => { + const sourceImageSequenceItem = getReferencedSourceImageSequenceItem( + images[desc.sourceFrameIndex], + metadata ); - if (perFrameInputs.length) { - applyPerFrameFunctionalGroups(segmentation.dataset, perFrameInputs); - } + if (!sourceImageSequenceItem?.ReferencedSOPInstanceUID) { + throw new Error( + `Cannot resolve a source ReferencedSOPInstanceUID for SEG frame ` + + `(sourceFrameIndex ${desc.sourceFrameIndex}, segment ` + + `${desc.referencedSegmentNumber}). Refusing to write a SEG with ` + + `unreliable source image references.` + ); + } + + return { + referencedSegmentNumber: desc.referencedSegmentNumber, + sourceImageSequenceItem, + }; + }); + + applyPerFrameFunctionalGroups(segmentation.dataset, perFrameInputs); } const transferSyntaxUid = options.transferSyntaxUid ?? diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts index 993c93ab3e..fcbbfa0be1 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateSegmentation.ts @@ -173,12 +173,25 @@ function fillLabelmapSegmentation( dataset.SourceImageSequence = sourceImageSequence; } + // Every SEG frame must reference a resolvable source SOP Instance UID. + // Reject rather than silently dropping frames, otherwise the per-frame + // functional groups would disagree with the encoded PixelData and produce a + // SEG with unreliable source image references. const perFrameInputs = validFrameIndices.map((_, outputIndex) => { const image = images[outputIndex]; const sourceImageSequenceItem = getReferencedSourceImageSequenceItem( image, metadata ); + + if (!sourceImageSequenceItem?.ReferencedSOPInstanceUID) { + throw new Error( + `Cannot resolve a source ReferencedSOPInstanceUID for labelmap SEG ` + + `frame ${outputIndex}. Refusing to write a SEG with unreliable ` + + `source image references.` + ); + } + const priorGroup = dataset.PerFrameFunctionalGroupsSequence?.[outputIndex] ?? {}; @@ -190,13 +203,7 @@ function fillLabelmapSegmentation( }; }); - const validPerFrameInputs = perFrameInputs.filter( - (frame) => frame.sourceImageSequenceItem?.ReferencedSOPInstanceUID - ); - - if (validPerFrameInputs.length) { - applyPerFrameFunctionalGroups(dataset, validPerFrameInputs); - } + applyPerFrameFunctionalGroups(dataset, perFrameInputs); const sopInstanceUIDs = new Set( images @@ -271,7 +278,11 @@ function generateSegmentation( transferSyntaxUid: EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID, skipTransferSyntaxMeta: true, }, - filteredImages, + // Pass the full, unfiltered images: fillSegmentation references source + // images by the original labelmap frame index, so the array must stay + // aligned 1:1 with labelmaps2D. Passing filteredImages here would shift + // every reference once any interior frame is empty. + images, metadata ); const { frames, bitsAllocated } = getBitmapFramesFromDataset( diff --git a/packages/adapters/test/fillSegmentationFrames.jest.js b/packages/adapters/test/fillSegmentationFrames.jest.js new file mode 100644 index 0000000000..397bfc4b24 --- /dev/null +++ b/packages/adapters/test/fillSegmentationFrames.jest.js @@ -0,0 +1,109 @@ +import { describe, it, expect } from '@jest/globals'; +import { fillSegmentation } from '../src/adapters/Cornerstone/Segmentation_4X'; + +const EXPLICIT_VR_LITTLE_ENDIAN = '1.2.840.10008.1.2.1'; + +// Minimal fake of the dcmjs Segmentation derivation. fillSegmentation reaches +// the per-frame functional group logic (and the source-UID resolution we care +// about) before any pixel encoding, and the Explicit VR LE branch only calls +// bitPackPixelData(), so these no-ops are enough. +function makeFakeSegmentation() { + return { + dataset: { _vrMap: {}, _meta: {}, Rows: 2, Columns: 2 }, + setNumberOfFrames() {}, + addSegmentFromLabelmap() {}, + bitPackPixelData() {}, + assignToDataset() {}, + }; +} + +const frameWithSegment = () => ({ + pixelData: new Uint8Array([0, 1, 0, 1]), + segmentsOnLabelmap: [1], +}); + +const emptyFrame = () => ({ + pixelData: new Uint8Array([0, 0, 0, 0]), + segmentsOnLabelmap: [], +}); + +function makeLabelmap3D(labelmaps2D) { + return { + metadata: [undefined, { SegmentNumber: '1', SegmentLabel: 'Segment 1' }], + labelmaps2D, + }; +} + +function makeMetadata(sopByImageId) { + return { + get: (_module, imageId) => + imageId && sopByImageId[imageId] + ? { SOPInstanceUID: sopByImageId[imageId] } + : {}, + // Keep frame resolution deterministic (never falls through to FrameRange). + getFrameInformationFromURL: () => 1, + }; +} + +describe('fillSegmentation - per-frame source image references', () => { + it('references source images by original frame index when interior frames are empty', () => { + // Frames 0 and 2 carry the segment; frame 1 is empty and filtered out of the + // SEG, but the source references must still resolve to imgA and imgC — not + // imgA/imgB — which only holds if images stay aligned to original indices. + const labelmap3D = makeLabelmap3D([ + frameWithSegment(), + emptyFrame(), + frameWithSegment(), + ]); + + const images = [ + { imageId: 'imgA' }, + { imageId: 'imgB' }, + { imageId: 'imgC' }, + ]; + + const metadata = makeMetadata({ + imgA: 'SOP-A', + imgB: 'SOP-B', + imgC: 'SOP-C', + }); + + const segmentation = makeFakeSegmentation(); + + fillSegmentation( + segmentation, + labelmap3D, + { transferSyntaxUid: EXPLICIT_VR_LITTLE_ENDIAN }, + images, + metadata + ); + + const perFrame = segmentation.dataset.PerFrameFunctionalGroupsSequence; + expect(perFrame).toHaveLength(2); + + const sopOf = (group) => + group.DerivationImageSequence[0].SourceImageSequence[0] + .ReferencedSOPInstanceUID; + + expect(sopOf(perFrame[0])).toBe('SOP-A'); + expect(sopOf(perFrame[1])).toBe('SOP-C'); + expect(segmentation.dataset.NumberOfFrames).toBe(2); + }); + + it('rejects when a frame source SOP Instance UID cannot be resolved', () => { + const labelmap3D = makeLabelmap3D([frameWithSegment()]); + const images = [{ imageId: 'imgA' }]; + // Metadata returns no SOPInstanceUID for imgA. + const metadata = makeMetadata({}); + + expect(() => + fillSegmentation( + makeFakeSegmentation(), + labelmap3D, + { transferSyntaxUid: EXPLICIT_VR_LITTLE_ENDIAN }, + images, + metadata + ) + ).toThrow(/Cannot resolve a source ReferencedSOPInstanceUID/); + }); +}); From 0bcb165101ab26926a2ea185851f88059c84fa48 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 19 Jun 2026 10:24:39 -0400 Subject: [PATCH 81/90] Add transfer syntaxes object in metadata --- .../adapters/Cornerstone3D/encodePixelData.ts | 52 +++++++++-------- .../metadata/src/enums/TransferSyntaxes.ts | 56 +++++++++++++++++++ packages/metadata/src/enums/index.ts | 4 +- .../src/utilities/isVideoTransferSyntax.ts | 34 +++++------ 4 files changed, 107 insertions(+), 39 deletions(-) create mode 100644 packages/metadata/src/enums/TransferSyntaxes.ts diff --git a/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts index e8309d91fd..c2b09f575e 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/encodePixelData.ts @@ -1,9 +1,11 @@ -import { utilities as dcmjsUtilities } from 'dcmjs'; +import { constants, utilities as dcmjsUtilities } from 'dcmjs'; const { decode: decodeDcmjsRleRows } = dcmjsUtilities.compression; +// dcmjs has no named constant for RLE Lossless, so keep it declared here. const RLE_LOSSLESS_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.5'; -const EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID = '1.2.840.10008.1.2.1'; +const EXPLICIT_VR_LITTLE_ENDIAN_TRANSFER_SYNTAX_UID = + constants.EXPLICIT_LITTLE_ENDIAN; function getTransferSyntaxUid(multiframe: Record): string { const meta = multiframe._meta as @@ -60,30 +62,36 @@ function decodeRleLosslessToPackedBytes( const out = new Uint8Array(packedByteLength); const numSegments = header.getInt32(0, true); - for (let s = 0; s < numSegments; s++) { - let outIndex = numSegments === 1 ? 0 : s * packedByteLength; - let inIndex = header.getInt32((s + 1) * 4, true); - let maxIndex = header.getInt32((s + 2) * 4, true); + // This decoder produces a single packed sample plane (see the function's + // docstring) and only sizes `out` for one segment. Binary (1-bit) SEG RLE + // frames always carry exactly one segment; multi-byte planes are decoded + // elsewhere via dcmjs. Reject anything else rather than silently dropping + // the extra segments' data. + if (numSegments !== 1) { + throw new Error( + `Expected a single RLE segment for SEG re-encode, got ${numSegments}` + ); + } - if (maxIndex === 0) { - maxIndex = frameData.length; - } + let outIndex = 0; + let inIndex = header.getInt32(4, true); + let maxIndex = header.getInt32(8, true); - const endOfSegment = - numSegments === 1 ? packedByteLength : (s + 1) * packedByteLength; + if (maxIndex === 0) { + maxIndex = frameData.length; + } - while (inIndex < maxIndex && outIndex < endOfSegment) { - const n = data[inIndex++]; + while (inIndex < maxIndex && outIndex < packedByteLength) { + const n = data[inIndex++]; - if (n >= 0 && n <= 127) { - for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { - out[outIndex++] = data[inIndex++] & 0xff; - } - } else if (n <= -1 && n >= -127) { - const value = data[inIndex++] & 0xff; - for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { - out[outIndex++] = value; - } + if (n >= 0 && n <= 127) { + for (let i = 0; i < n + 1 && outIndex < packedByteLength; ++i) { + out[outIndex++] = data[inIndex++] & 0xff; + } + } else if (n <= -1 && n >= -127) { + const value = data[inIndex++] & 0xff; + for (let j = 0; j < -n + 1 && outIndex < packedByteLength; ++j) { + out[outIndex++] = value; } } } diff --git a/packages/metadata/src/enums/TransferSyntaxes.ts b/packages/metadata/src/enums/TransferSyntaxes.ts new file mode 100644 index 0000000000..583e4fee0f --- /dev/null +++ b/packages/metadata/src/enums/TransferSyntaxes.ts @@ -0,0 +1,56 @@ +import { constants } from 'dcmjs'; + +/** + * DICOM Transfer Syntax UIDs, keyed by name. + * + * Declared as a string-valued constant object (not a TypeScript `enum`) so each + * UID stays a plain `string` that is freely assignable to and comparable with + * the string UIDs flowing through dcmjs datasets and the metadata providers. + * + * UIDs that dcmjs already exposes as named constants are referenced from + * `dcmjs.constants` rather than re-typing the literal here. dcmjs does not + * export a named constant for RLE Lossless, so it is declared directly. + */ +export const TransferSyntaxes = { + // Uncompressed / native + IMPLICIT_VR_LITTLE_ENDIAN: constants.IMPLICIT_LITTLE_ENDIAN, + EXPLICIT_VR_LITTLE_ENDIAN: constants.EXPLICIT_LITTLE_ENDIAN, + DEFLATED_EXPLICIT_VR_LITTLE_ENDIAN: constants.DEFLATED_EXPLICIT_LITTLE_ENDIAN, + EXPLICIT_VR_BIG_ENDIAN: constants.EXPLICIT_BIG_ENDIAN, + + // Run Length Encoding + RLE_LOSSLESS: '1.2.840.10008.1.2.5', + + // MPEG-2 + MPEG2_MAIN_PROFILE_MAIN_LEVEL: '1.2.840.10008.1.2.4.100', + MPEG2_MAIN_PROFILE_MAIN_LEVEL_FRAGMENTABLE: '1.2.840.10008.1.2.4.100.1', + MPEG2_MAIN_PROFILE_HIGH_LEVEL: '1.2.840.10008.1.2.4.101', + MPEG2_MAIN_PROFILE_HIGH_LEVEL_FRAGMENTABLE: '1.2.840.10008.1.2.4.101.1', + + // MPEG-4 AVC / H.264 + MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_1: '1.2.840.10008.1.2.4.102', + MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_1_FRAGMENTABLE: + '1.2.840.10008.1.2.4.102.1', + MPEG4_AVC_H264_BD_COMPATIBLE_HIGH_PROFILE_LEVEL_4_1: + '1.2.840.10008.1.2.4.103', + MPEG4_AVC_H264_BD_COMPATIBLE_HIGH_PROFILE_LEVEL_4_1_FRAGMENTABLE: + '1.2.840.10008.1.2.4.103.1', + MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_2D_VIDEO: '1.2.840.10008.1.2.4.104', + MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_2D_VIDEO_FRAGMENTABLE: + '1.2.840.10008.1.2.4.104.1', + MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_3D_VIDEO: '1.2.840.10008.1.2.4.105', + MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_3D_VIDEO_FRAGMENTABLE: + '1.2.840.10008.1.2.4.105.1', + MPEG4_AVC_H264_STEREO_HIGH_PROFILE_LEVEL_4_2: '1.2.840.10008.1.2.4.106', + MPEG4_AVC_H264_STEREO_HIGH_PROFILE_LEVEL_4_2_FRAGMENTABLE: + '1.2.840.10008.1.2.4.106.1', + + // HEVC / H.265 + HEVC_H265_MAIN_PROFILE_LEVEL_5_1: '1.2.840.10008.1.2.4.107', + HEVC_H265_MAIN_10_PROFILE_LEVEL_5_1: '1.2.840.10008.1.2.4.108', +} as const; + +export type TransferSyntaxUID = + (typeof TransferSyntaxes)[keyof typeof TransferSyntaxes]; + +export default TransferSyntaxes; diff --git a/packages/metadata/src/enums/index.ts b/packages/metadata/src/enums/index.ts index b4df18bac8..e899c3dae9 100644 --- a/packages/metadata/src/enums/index.ts +++ b/packages/metadata/src/enums/index.ts @@ -1,5 +1,7 @@ import CalibrationTypes from './CalibrationTypes'; import MetadataModules from './MetadataModules'; +import TransferSyntaxes from './TransferSyntaxes'; export { getAddModuleType, ADD_MODULE_TYPE_SUFFIX } from './MetadataModules'; +export type { TransferSyntaxUID } from './TransferSyntaxes'; -export { CalibrationTypes, MetadataModules }; +export { CalibrationTypes, MetadataModules, TransferSyntaxes }; diff --git a/packages/metadata/src/utilities/isVideoTransferSyntax.ts b/packages/metadata/src/utilities/isVideoTransferSyntax.ts index c82c9ba309..6ee1c611af 100644 --- a/packages/metadata/src/utilities/isVideoTransferSyntax.ts +++ b/packages/metadata/src/utilities/isVideoTransferSyntax.ts @@ -1,20 +1,22 @@ +import TransferSyntaxes from '../enums/TransferSyntaxes'; + export const videoUIDs = new Set([ - '1.2.840.10008.1.2.4.100', - '1.2.840.10008.1.2.4.100.1', - '1.2.840.10008.1.2.4.101', - '1.2.840.10008.1.2.4.101.1', - '1.2.840.10008.1.2.4.102', - '1.2.840.10008.1.2.4.102.1', - '1.2.840.10008.1.2.4.103', - '1.2.840.10008.1.2.4.103.1', - '1.2.840.10008.1.2.4.104', - '1.2.840.10008.1.2.4.104.1', - '1.2.840.10008.1.2.4.105', - '1.2.840.10008.1.2.4.105.1', - '1.2.840.10008.1.2.4.106', - '1.2.840.10008.1.2.4.106.1', - '1.2.840.10008.1.2.4.107', - '1.2.840.10008.1.2.4.108', + TransferSyntaxes.MPEG2_MAIN_PROFILE_MAIN_LEVEL, + TransferSyntaxes.MPEG2_MAIN_PROFILE_MAIN_LEVEL_FRAGMENTABLE, + TransferSyntaxes.MPEG2_MAIN_PROFILE_HIGH_LEVEL, + TransferSyntaxes.MPEG2_MAIN_PROFILE_HIGH_LEVEL_FRAGMENTABLE, + TransferSyntaxes.MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_1, + TransferSyntaxes.MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_1_FRAGMENTABLE, + TransferSyntaxes.MPEG4_AVC_H264_BD_COMPATIBLE_HIGH_PROFILE_LEVEL_4_1, + TransferSyntaxes.MPEG4_AVC_H264_BD_COMPATIBLE_HIGH_PROFILE_LEVEL_4_1_FRAGMENTABLE, + TransferSyntaxes.MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_2D_VIDEO, + TransferSyntaxes.MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_2D_VIDEO_FRAGMENTABLE, + TransferSyntaxes.MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_3D_VIDEO, + TransferSyntaxes.MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_2_FOR_3D_VIDEO_FRAGMENTABLE, + TransferSyntaxes.MPEG4_AVC_H264_STEREO_HIGH_PROFILE_LEVEL_4_2, + TransferSyntaxes.MPEG4_AVC_H264_STEREO_HIGH_PROFILE_LEVEL_4_2_FRAGMENTABLE, + TransferSyntaxes.HEVC_H265_MAIN_PROFILE_LEVEL_5_1, + TransferSyntaxes.HEVC_H265_MAIN_10_PROFILE_LEVEL_5_1, ]); export default function isVideoTransferSyntax(uidOrUids: string | string[]) { From 428940c8dbff0b6811e629109e4897a2d7a367eb Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 19 Jun 2026 11:23:41 -0400 Subject: [PATCH 82/90] PR comments --- .../Segmentation/labelmapImagesFromBuffer.ts | 39 ++++++++ .../adapters/test/encodePixelData.jest.js | 14 +++ .../test/fillSegmentationFrames.jest.js | 6 +- .../test/resolveFrameImageIds.jest.js | 89 +++++++++++++++++++ .../src/shared/decoders/decodeRLE.ts | 2 - .../migration-guides/5x/1-migration-notes.md | 45 ++++++++++ 6 files changed, 191 insertions(+), 4 deletions(-) create mode 100644 packages/adapters/test/resolveFrameImageIds.jest.js diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index d85ad7bdb5..d0a5b3e744 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -305,6 +305,32 @@ function expandWadorsFrameImageIds( return frameImageIds; } +const WADO_URI_FRAME_SCHEME = /^(wadouri:|dicomfile:)/; + +/** + * Expands a WADO-URI / local SEG imageId into one imageId per frame using the + * `?frame=N` / `&frame=N` (1-based) convention. Returns `[segImageId]` when the + * scheme is not WADO-URI-style or the SEG is single-frame. + */ +function expandWadoUriFrameImageIds( + segImageId: string, + numberOfFrames: number +): string[] { + if (numberOfFrames <= 1 || !WADO_URI_FRAME_SCHEME.test(segImageId)) { + return [segImageId]; + } + + const base = segImageId.split('&frame=')[0].split('?frame=')[0]; + const separator = base.includes('?') ? '&' : '?'; + const frameImageIds: string[] = []; + + for (let frameNumber = 1; frameNumber <= numberOfFrames; frameNumber++) { + frameImageIds.push(`${base}${separator}frame=${frameNumber}`); + } + + return frameImageIds; +} + function resolveFrameImageIds({ segImageId, numberOfFrames, @@ -326,11 +352,23 @@ function resolveFrameImageIds({ ); } + // The adapter can only synthesize per-frame imageIds for schemes whose + // frame-addressing convention it knows: WADO-RS (`.../frames/N`) and WADO-URI + // (`?frame=N` / `&frame=N`). For any other scheme the caller must supply + // frameImageIds or getFrameImageId. const wadorsFrameIds = expandWadorsFrameImageIds(segImageId, numberOfFrames); if (wadorsFrameIds.length > 1) { return wadorsFrameIds; } + const wadoUriFrameIds = expandWadoUriFrameImageIds( + segImageId, + numberOfFrames + ); + if (wadoUriFrameIds.length > 1) { + return wadoUriFrameIds; + } + return numberOfFrames > 1 ? Array.from({ length: numberOfFrames }, () => segImageId) : [segImageId]; @@ -1529,4 +1567,5 @@ export { createLabelmapsFromDICOMBuffer, createLabelmapsFromBufferInternal, decodeSegPixelDataFromFrameIds, + resolveFrameImageIds, }; diff --git a/packages/adapters/test/encodePixelData.jest.js b/packages/adapters/test/encodePixelData.jest.js index 5c982d0abe..775395a4eb 100644 --- a/packages/adapters/test/encodePixelData.jest.js +++ b/packages/adapters/test/encodePixelData.jest.js @@ -146,6 +146,20 @@ describe('getBitmapFramesFromDataset', () => { expect(Array.from(frames[1])).toEqual([0, 0, 4, 0]); }); + it('reads a 16-bit labelmap layout', () => { + const { frames, bitsAllocated } = getBitmapFramesFromDataset({ + ...baseDataset, + BitsAllocated: 16, + // values > 255 exercise the 16-bit path that the 8-bit branch can't carry + PixelData: new Uint16Array([1, 2, 0, 300, 0, 0, 4, 40000]), + }); + + expect(bitsAllocated).toBe(16); + expect(frames[0]).toBeInstanceOf(Uint16Array); + expect(Array.from(frames[0])).toEqual([1, 2, 0, 300]); + expect(Array.from(frames[1])).toEqual([0, 0, 4, 40000]); + }); + it('throws on an unexpected 1-bit PixelData length', () => { expect(() => getBitmapFramesFromDataset({ diff --git a/packages/adapters/test/fillSegmentationFrames.jest.js b/packages/adapters/test/fillSegmentationFrames.jest.js index 397bfc4b24..3dce4d07d7 100644 --- a/packages/adapters/test/fillSegmentationFrames.jest.js +++ b/packages/adapters/test/fillSegmentationFrames.jest.js @@ -36,8 +36,10 @@ function makeLabelmap3D(labelmaps2D) { function makeMetadata(sopByImageId) { return { - get: (_module, imageId) => - imageId && sopByImageId[imageId] + // fillSegmentation resolves source SOP Instance UIDs via the 'ImageData' + // module; gate on it so a regression that queries the wrong module fails. + get: (module, imageId) => + module === 'ImageData' && imageId && sopByImageId[imageId] ? { SOPInstanceUID: sopByImageId[imageId] } : {}, // Keep frame resolution deterministic (never falls through to FrameRange). diff --git a/packages/adapters/test/resolveFrameImageIds.jest.js b/packages/adapters/test/resolveFrameImageIds.jest.js new file mode 100644 index 0000000000..04b931435c --- /dev/null +++ b/packages/adapters/test/resolveFrameImageIds.jest.js @@ -0,0 +1,89 @@ +import { describe, it, expect } from '@jest/globals'; +import { resolveFrameImageIds } from '../src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer'; + +describe('resolveFrameImageIds', () => { + it('returns explicitly provided frameImageIds as-is', () => { + const frameImageIds = ['a?frame=1', 'a?frame=2']; + expect( + resolveFrameImageIds({ + segImageId: 'a', + numberOfFrames: 2, + frameImageIds, + }) + ).toBe(frameImageIds); + }); + + it('builds frame imageIds from a getFrameImageId callback', () => { + const result = resolveFrameImageIds({ + segImageId: 'seg', + numberOfFrames: 3, + getFrameImageId: (base, frameNumber) => `${base}#${frameNumber}`, + }); + expect(result).toEqual(['seg#1', 'seg#2', 'seg#3']); + }); + + it('auto-expands a WADO-RS /frames/N imageId', () => { + const result = resolveFrameImageIds({ + segImageId: 'wadors:https://x/studies/1/series/2/instances/3/frames/1', + numberOfFrames: 3, + }); + expect(result).toEqual([ + 'wadors:https://x/studies/1/series/2/instances/3/frames/1', + 'wadors:https://x/studies/1/series/2/instances/3/frames/2', + 'wadors:https://x/studies/1/series/2/instances/3/frames/3', + ]); + }); + + it('auto-expands a WADO-URI imageId with ?frame=', () => { + const result = resolveFrameImageIds({ + segImageId: 'wadouri:https://x/seg.dcm', + numberOfFrames: 2, + }); + expect(result).toEqual([ + 'wadouri:https://x/seg.dcm?frame=1', + 'wadouri:https://x/seg.dcm?frame=2', + ]); + }); + + it('auto-expands a WADO-URI imageId that already has a query with &frame=', () => { + const result = resolveFrameImageIds({ + segImageId: 'wadouri:https://x/seg.dcm?foo=bar', + numberOfFrames: 2, + }); + expect(result).toEqual([ + 'wadouri:https://x/seg.dcm?foo=bar&frame=1', + 'wadouri:https://x/seg.dcm?foo=bar&frame=2', + ]); + }); + + it('auto-expands a dicomfile: imageId', () => { + const result = resolveFrameImageIds({ + segImageId: 'dicomfile:42', + numberOfFrames: 2, + }); + expect(result).toEqual(['dicomfile:42?frame=1', 'dicomfile:42?frame=2']); + }); + + it('returns a single id for single-frame SEG', () => { + expect( + resolveFrameImageIds({ + segImageId: 'wadouri:https://x/seg.dcm', + numberOfFrames: 1, + }) + ).toEqual(['wadouri:https://x/seg.dcm']); + }); + + it('cannot auto-generate for an unrecognized scheme: repeats the base id', () => { + // Documented fallback — callers must pass frameImageIds/getFrameImageId for + // schemes the adapter does not know how to address per-frame. + const result = resolveFrameImageIds({ + segImageId: 'custom:opaque-handle', + numberOfFrames: 3, + }); + expect(result).toEqual([ + 'custom:opaque-handle', + 'custom:opaque-handle', + 'custom:opaque-handle', + ]); + }); +}); diff --git a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts index 0f64fcac03..04adb9b201 100644 --- a/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts +++ b/packages/dicomImageLoader/src/shared/decoders/decodeRLE.ts @@ -189,8 +189,6 @@ function decode8Planar( imageFrame.pixelData = new Uint8Array(outFrame); if (isOneBit) { - const pixelsPerPlane = imageFrame.rows * imageFrame.columns; - imageFrame.pixelData = unpackOneBitPlanar( imageFrame.pixelData as Uint8Array, imageFrame, diff --git a/packages/docs/docs/migration-guides/5x/1-migration-notes.md b/packages/docs/docs/migration-guides/5x/1-migration-notes.md index b1aa5fb3d2..b78911994f 100644 --- a/packages/docs/docs/migration-guides/5x/1-migration-notes.md +++ b/packages/docs/docs/migration-guides/5x/1-migration-notes.md @@ -91,6 +91,51 @@ what would have been a silent runtime failure (an `ArrayBuffer` passed where an `imageId` is expected) into an immediate, obvious error, rather than shipping a same-named function with an incompatible contract and no deprecation path. +### The `frameImageIds` option + +`frameImageIds` is the list of loadable imageIds — one per SEG frame — that the +adapter passes to the image loader to read pixel data. It exists because of the +underlying change in how pixels are obtained. + +The old buffer-based path decoded the entire SEG from a single Part 10 +`ArrayBuffer` held in memory, so individual frames never needed their own +imageIds. The new path instead loads each frame's pixels through the image +loader, which means it needs one addressable imageId **per frame**. + +The adapter can only build that per-frame list itself when the SEG `imageId` +uses a frame-addressing convention it recognizes: + +- **WADO-RS / DICOMweb** — frames are separate resources (`.../frames/1`, + `.../frames/2`, …), so the list is derived by substituting the frame number. +- **WADO-URI** — frames are selected with a query parameter (`?frame=1`, + `&frame=2`, …), so the list is derived by appending the frame query. + +For any other imageId form (custom schemes, blob/object URLs that are not +WADO-URI, application-specific loaders, etc.) there is no general rule for +turning a base `imageId` into per-frame imageIds, so the adapter cannot +auto-generate the list. In those cases you must pass `frameImageIds` explicitly +(or a `getFrameImageId(segImageId, frameNumber)` callback). If you omit it for an +unrecognized multi-frame `imageId`, every frame falls back to the same base +`imageId` and decodes identical pixels. + +```ts +// Multi-frame SEG on a non-WADO scheme: provide the per-frame imageIds. +const results = + await adaptersSEG.Cornerstone3D.Segmentation.createFromDicomSegImageId( + referencedImageIds, + segImageId, + { + metadataProvider, + frameImageIds, // one loadable imageId per frame + } + ); + +// Or supply a builder instead of the full list: +// getFrameImageId: (segImageId, frameNumber) => `${segImageId}?frame=${frameNumber}` +``` + +Single-frame SEG, WADO-RS, and WADO-URI imageIds do not require `frameImageIds`. + ### Migration Guidance - If you load a SEG via per-frame `imageId`s (the OHIF / imageLoader path), From da56f072a5c5b603f1d5b69c9ba504db6579576d Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 19 Jun 2026 11:44:37 -0400 Subject: [PATCH 83/90] audit high undici --- pnpm-lock.yaml | 9 +++++---- pnpm-workspace.yaml | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1261e9451b..726fbe6f83 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,7 @@ overrides: tar-fs: 2.1.4 body-parser: 1.20.3 ws: 8.21.0 + undici@<6.27.0: 6.27.0 qs: 6.14.1 lodash: 4.18.1 tar: 7.5.11 @@ -11389,8 +11390,8 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici@6.26.0: - resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} + undici@6.27.0: + resolution: {integrity: sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==} engines: {node: '>=18.17'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -22246,7 +22247,7 @@ snapshots: semver: 7.7.2 tar: 7.5.11 tinyglobby: 0.2.16 - undici: 6.26.0 + undici: 6.27.0 which: 6.0.1 node-int64@0.4.0: {} @@ -25494,7 +25495,7 @@ snapshots: undici-types@6.19.8: {} - undici@6.26.0: {} + undici@6.27.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ab52f82809..b99380181d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,6 +32,9 @@ overrides: tar-fs: 2.1.4 body-parser: 1.20.3 ws: 8.21.0 + # undici <6.27.0 (reached only via lerna > node-gyp) is vulnerable to a + # WebSocket DoS via fragment count bypass (GHSA-vxpw-j846-p89q). + 'undici@<6.27.0': 6.27.0 qs: 6.14.1 lodash: 4.18.1 tar: 7.5.11 From f0ac6d6fd1433599c95bf7ec82fc4511cc9b64c3 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 19 Jun 2026 13:14:31 -0400 Subject: [PATCH 84/90] Add legacy version back in as call to the new seg loader --- .../Segmentation/generateToolState.ts | 31 +++ .../Cornerstone3D/Segmentation/index.ts | 3 + .../Segmentation/labelmapImagesFromBuffer.ts | 23 +- .../test/segBufferMetadataRoundTrip.jest.js | 215 ++++++++++++++++++ .../migration-guides/5x/1-migration-notes.md | 35 ++- 5 files changed, 290 insertions(+), 17 deletions(-) create mode 100644 packages/adapters/test/segBufferMetadataRoundTrip.jest.js diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index 920e9e4a35..e21931e169 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -82,9 +82,40 @@ function createFromDicomSegImageId( ); } +/** + * @deprecated Renamed/split in 5.x. This wrapper is kept for backward + * compatibility and will be removed in a future major. + * + * It preserves the original 4.x contract — a Part 10 SEG `ArrayBuffer` as the + * second argument — by parsing the buffer and delegating to + * {@link createLabelmapsFromDICOMBuffer}. + * + * - For the buffer path, prefer {@link createLabelmapsFromDICOMBuffer} or + * {@link generateToolState}. + * - For the per-frame `imageId` path (OHIF / imageLoader), use + * {@link createFromDicomSegImageId}, whose second argument is a SEG instance + * `imageId` rather than an `ArrayBuffer`. + */ +function createFromDICOMSegBuffer( + referencedImageIds, + arrayBuffer, + { metadataProvider, tolerance = 1e-3 } +) { + return createLabelmapsFromDICOMBuffer( + referencedImageIds, + arrayBuffer, + metadataProvider, + { + tolerance, + parserType: 'bitmap', + } + ); +} + export { generateToolState, createFromDicomSegImageId, + createFromDICOMSegBuffer, createLabelmapsFromSegImageIds, createLabelmapsFromDICOMBuffer, }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts index faa0c0b5b7..5250ce1ee6 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/index.ts @@ -3,6 +3,7 @@ import { generateLabelMaps2DFrom3D } from './generateLabelMaps2DFrom3D'; import { generateToolState, createFromDicomSegImageId, + createFromDICOMSegBuffer, createLabelmapsFromSegImageIds, createLabelmapsFromDICOMBuffer, } from './generateToolState'; @@ -12,6 +13,8 @@ export { generateSegmentation, generateToolState, createFromDicomSegImageId, + // Deprecated alias kept for backward compatibility; see generateToolState.ts + createFromDICOMSegBuffer, createLabelmapsFromSegImageIds, createLabelmapsFromDICOMBuffer, }; diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index d0a5b3e744..3d579a989a 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -613,15 +613,23 @@ async function createLabelmapsFromSegImageIds( frameImageIds, getFrameImageId, decodeImageData = defaultDecodeFrameImageData, + // Callers that already hold the normalized SEG dataset (e.g. the buffer + // path) can pass it directly to avoid a metadata-provider round-trip. Some + // providers (notably OHIF's) short-circuit `get('instance', ...)` before + // consulting custom metadata, so a synthetic SEG imageId is not retrievable. + multiframe: providedMultiframe = undefined, } = options ?? {}; - const instanceMeta = metadataProvider.get('instance', segImageId); - if (!instanceMeta) { - throw new Error( - `No instance metadata found for SEG imageId: ${segImageId}. Ensure the SEG instance is registered in the metadata provider (e.g. after loading the image).` - ); + let multiframe = providedMultiframe; + if (!multiframe) { + const instanceMeta = metadataProvider.get('instance', segImageId); + if (!instanceMeta) { + throw new Error( + `No instance metadata found for SEG imageId: ${segImageId}. Ensure the SEG instance is registered in the metadata provider (e.g. after loading the image).` + ); + } + multiframe = instanceMeta.dataset ?? instanceMeta; } - const multiframe = instanceMeta.dataset ?? instanceMeta; prepareSegMultiframeMetadata(multiframe); @@ -1543,6 +1551,9 @@ async function createLabelmapsFromDICOMBuffer( ...options, frameImageIds, decodeImageData, + // Pass the parsed dataset directly so the SEG metadata does not have to be + // resolved back out of the provider via the synthetic buffer imageId. + multiframe, } ); } diff --git a/packages/adapters/test/segBufferMetadataRoundTrip.jest.js b/packages/adapters/test/segBufferMetadataRoundTrip.jest.js new file mode 100644 index 0000000000..75345bc63c --- /dev/null +++ b/packages/adapters/test/segBufferMetadataRoundTrip.jest.js @@ -0,0 +1,215 @@ +import { describe, it, expect, jest, beforeAll } from '@jest/globals'; +import { data as dcmjsData } from 'dcmjs'; + +// Only the derived-labelmap image factory needs stubbing — the referenced +// images are not really loaded in this unit test. Everything else (decode, +// orientation, insert, centroid) runs for real. +jest.mock('@cornerstonejs/core', () => { + const actual = jest.requireActual('@cornerstonejs/core'); + return { + ...actual, + imageLoader: { + ...actual.imageLoader, + createAndCacheDerivedLabelmapImage: (referencedImageId) => { + const pixelData = new Uint8Array(4); + return { + referencedImageId, + getPixelData: () => pixelData, + voxelManager: { + setAtIndex: (index, value) => (pixelData[index] = value), + }, + }; + }, + }, + }; +}); + +// Imported after jest.mock so the mocked core is wired in. +const { + createFromDICOMSegBuffer, +} = require('../src/adapters/Cornerstone3D/Segmentation/generateToolState'); + +const SEG_SOP_CLASS = '1.2.840.10008.5.1.4.1.1.66.4'; +const CT_SOP_CLASS = '1.2.840.10008.5.1.4.1.1.2'; +const EXPLICIT_VR_LITTLE_ENDIAN = '1.2.840.10008.1.2.1'; + +const REFERENCED_SOP_INSTANCE_UID = '1.2.3.4.5.100'; +const REFERENCED_IMAGE_ID = 'ref:0'; +const SEG_SERIES_INSTANCE_UID = '1.2.3.4.2'; + +/** + * Builds a real Part-10 DICOM SEG ArrayBuffer: a single 2x2 binary frame with + * segment 1 set at the top-left and bottom-right pixels, referencing one CT + * instance. Written and read back through dcmjs so it exercises the genuine + * parse path inside createFromDICOMSegBuffer. + */ +function buildSegPart10Buffer() { + const { DicomMetaDictionary, DicomDict } = dcmjsData; + + const frame = new Uint8Array([1, 0, 0, 1]); + + const dataset = { + SOPClassUID: SEG_SOP_CLASS, + SOPInstanceUID: '1.2.3.4.5.999', + StudyInstanceUID: '1.2.3.4.1', + SeriesInstanceUID: SEG_SERIES_INSTANCE_UID, + Modality: 'SEG', + Rows: 2, + Columns: 2, + NumberOfFrames: 1, + BitsAllocated: 8, + BitsStored: 8, + HighBit: 7, + PixelRepresentation: 0, + SamplesPerPixel: 1, + SegmentationType: 'BINARY', + PhotometricInterpretation: 'MONOCHROME2', + ContentLabel: 'SEG', + SegmentSequence: [ + { + SegmentNumber: 1, + SegmentLabel: 'seg1', + SegmentAlgorithmType: 'MANUAL', + SegmentedPropertyCategoryCodeSequence: [ + { + CodeValue: 'T-D0050', + CodingSchemeDesignator: 'SRT', + CodeMeaning: 'Tissue', + }, + ], + SegmentedPropertyTypeCodeSequence: [ + { + CodeValue: 'T-D0050', + CodingSchemeDesignator: 'SRT', + CodeMeaning: 'Tissue', + }, + ], + }, + ], + SharedFunctionalGroupsSequence: [ + { + PlaneOrientationSequence: [ + { ImageOrientationPatient: [1, 0, 0, 0, 1, 0] }, + ], + PixelMeasuresSequence: [{ PixelSpacing: [1, 1], SliceThickness: 1 }], + }, + ], + PerFrameFunctionalGroupsSequence: [ + { + FrameContentSequence: [{ DimensionIndexValues: [1, 1] }], + PlanePositionSequence: [{ ImagePositionPatient: [0, 0, 0] }], + SegmentIdentificationSequence: [{ ReferencedSegmentNumber: 1 }], + DerivationImageSequence: [ + { + SourceImageSequence: [ + { + ReferencedSOPClassUID: CT_SOP_CLASS, + ReferencedSOPInstanceUID: REFERENCED_SOP_INSTANCE_UID, + }, + ], + }, + ], + }, + ], + PixelData: [frame.buffer], + // PixelData VR is ambiguous (OB/OW) for this synthetic dataset; pin it so + // dcmjs does not log a write-time warning. + _vrMap: { PixelData: 'OW' }, + }; + + const meta = { + MediaStorageSOPClassUID: SEG_SOP_CLASS, + MediaStorageSOPInstanceUID: dataset.SOPInstanceUID, + TransferSyntaxUID: EXPLICIT_VR_LITTLE_ENDIAN, + ImplementationClassUID: '1.2.3.4', + }; + + const dicomDict = new DicomDict( + DicomMetaDictionary.denaturalizeDataset(meta) + ); + dicomDict.dict = DicomMetaDictionary.denaturalizeDataset(dataset); + return dicomDict.write(); +} + +/** + * Mimics OHIF's MetadataProvider: `get('instance', imageId)` resolves the real + * DICOM instance and returns *before* it ever consults custom metadata. So a + * synthetic SEG imageId (the one the buffer path registers) is never + * retrievable as an 'instance', which is exactly what broke the buffer path. + * Here it returns undefined for the SEG instance but answers the referenced CT. + */ +function makeOhifLikeProvider() { + const get = jest.fn((type, imageId) => { + if (imageId !== REFERENCED_IMAGE_ID) { + // Notably: get('instance', '') => undefined. + return undefined; + } + switch (type) { + case 'imagePlaneModule': + return { + rowCosines: [1, 0, 0], + columnCosines: [0, 1, 0], + imagePositionPatient: [0, 0, 0], + rowPixelSpacing: 1, + columnPixelSpacing: 1, + rows: 2, + columns: 2, + }; + case 'generalSeriesModule': + return { seriesInstanceUID: SEG_SERIES_INSTANCE_UID }; + case 'generalImageModule': + return { sopInstanceUID: REFERENCED_SOP_INSTANCE_UID }; + case 'instance': + return { + Rows: 2, + Columns: 2, + SOPInstanceUID: REFERENCED_SOP_INSTANCE_UID, + }; + default: + return undefined; + } + }); + return get; +} + +describe('createFromDICOMSegBuffer (legacy buffer API)', () => { + let arrayBuffer; + + beforeAll(() => { + arrayBuffer = buildSegPart10Buffer(); + }); + + it('decodes a Part-10 SEG buffer without resolving the SEG instance through the provider', async () => { + const get = makeOhifLikeProvider(); + const metadataProvider = { get }; + + // Regression: the buffer path used to re-fetch the parsed SEG via + // get('instance', ''), which an OHIF-like provider + // returns undefined for -> "No instance metadata found". With the dataset + // threaded through, the call completes against the same provider. + const result = await createFromDICOMSegBuffer( + [REFERENCED_IMAGE_ID], + arrayBuffer, + { + metadataProvider, + } + ); + + // It produced a labelmap with segment 1 written at the expected pixels. + const labelMapImages = result.labelMapImages.flat(); + expect(labelMapImages).toHaveLength(1); + expect(Array.from(labelMapImages[0].getPixelData())).toEqual([1, 0, 0, 1]); + expect(result.segMetadata.data[1].SegmentLabel).toBe('seg1'); + + // The provider WAS asked for the synthetic SEG instance and every such + // lookup returned undefined — yet the call still succeeded, proving the + // parsed dataset was used directly rather than round-tripped back out of + // the provider (the original regression). + const segInstanceResults = get.mock.results.filter((_, i) => { + const [type, imageId] = get.mock.calls[i]; + return type === 'instance' && imageId !== REFERENCED_IMAGE_ID; + }); + expect(segInstanceResults.length).toBeGreaterThan(0); + segInstanceResults.forEach((r) => expect(r.value).toBeUndefined()); + }); +}); diff --git a/packages/docs/docs/migration-guides/5x/1-migration-notes.md b/packages/docs/docs/migration-guides/5x/1-migration-notes.md index b78911994f..99d41701a5 100644 --- a/packages/docs/docs/migration-guides/5x/1-migration-notes.md +++ b/packages/docs/docs/migration-guides/5x/1-migration-notes.md @@ -55,15 +55,23 @@ iterable/enumerable on the object itself. `combineFramesInstance` utility so downstream modules receive the expected base object shape. -## SEG adapter: `createFromDICOMSegBuffer` renamed to `createFromDicomSegImageId` +## SEG adapter: `createFromDICOMSegBuffer` deprecated in favor of `createFromDicomSegImageId` ### What Changed -`adaptersSEG.Cornerstone3D.Segmentation.createFromDICOMSegBuffer` has been -renamed to `createFromDicomSegImageId`. Its second argument is a SEG instance -`imageId` (with pixels sourced from the provided per-frame `imageId`s / -decoder) — it does **not** accept a Part 10 `ArrayBuffer`, despite the previous -name implying a buffer. +A new `adaptersSEG.Cornerstone3D.Segmentation.createFromDicomSegImageId` entry +point has been added. Its second argument is a SEG instance `imageId` (with +pixels sourced from the provided per-frame `imageId`s / decoder) — it does +**not** accept a Part 10 `ArrayBuffer`, despite the older name implying a +buffer. + +`createFromDICOMSegBuffer` is **not removed**. It remains exported as a +deprecated alias that preserves its original 4.x contract (a Part 10 +`ArrayBuffer` as the second argument) by delegating to +`createLabelmapsFromDICOMBuffer`. Existing buffer-based callers continue to work +unchanged; no major version bump is required to upgrade. New code should migrate +to `createFromDicomSegImageId` (for the per-frame `imageId` path) or +`createLabelmapsFromDICOMBuffer` (for the buffer path). ```ts // 4.x @@ -85,11 +93,13 @@ const results = ### Why This Matters -The rename was deliberate: the second argument changed contract entirely -(`ArrayBuffer` -> `imageId`) while keeping the same position. Renaming turns -what would have been a silent runtime failure (an `ArrayBuffer` passed where an -`imageId` is expected) into an immediate, obvious error, rather than shipping a -same-named function with an incompatible contract and no deprecation path. +The new name exists because the per-frame `imageId` path changed the second +argument contract entirely (`ArrayBuffer` -> `imageId`). Rather than silently +repurpose the same-named function with an incompatible contract, the new +behavior lives under the new name `createFromDicomSegImageId`. The original +`createFromDICOMSegBuffer` is retained as a deprecated alias that keeps its old +`ArrayBuffer` contract, so existing callers keep working without code changes +and the upgrade does not require a major version bump. ### The `frameImageIds` option @@ -144,3 +154,6 @@ Single-frame SEG, WADO-RS, and WADO-URI imageIds do not require `frameImageIds`. - If you still have a Part 10 `ArrayBuffer`, use `createLabelmapsFromDICOMBuffer` (`(referencedImageIds, arrayBuffer, metadataProvider, options)`) or `generateToolState`, which retain the buffer-based entry point. +- Existing `createFromDICOMSegBuffer(referencedImageIds, arrayBuffer, { metadataProvider })` + calls keep working unchanged — the function is now a deprecated alias for the + buffer path. Migrate at your own pace to `createLabelmapsFromDICOMBuffer`. From afb4f7e53ab71fd8e93e7894ef39f8cf33ec0d2d Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Fri, 19 Jun 2026 13:44:23 -0400 Subject: [PATCH 85/90] Update docs --- .../Segmentation/generateToolState.ts | 13 ++++-- .../Segmentation/labelmapImagesFromBuffer.ts | 6 +++ .../migration-guides/5x/1-migration-notes.md | 42 ++++++++++++------- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index e21931e169..bea0d6db05 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -52,9 +52,16 @@ function generateToolState( * @param referencedImageIds - Referenced CT/MR imageIds * @param segImageId - SEG instance imageId for metadata (base or frame-qualified) * @param options.metadataProvider - Required metadata provider - * @param options.frameImageIds - Per-frame loadable SEG imageIds - * @param options.getFrameImageId - Optional (baseSegImageId, frameNumber) => frame imageId - * @param options.decodeImageData - Optional (frameImageId, frameNumber) => pixel data; defaults to imageLoader + * @param [options.frameImageIds] - Optional. The list of per-frame loadable + * imageIds that make up the segmentation — i.e. the frames produced when the + * segmentation object is loaded. Only required for data sources whose + * imageIds do NOT follow the DICOMweb (WADO-RS) or WADO-URI conventions; for + * those the per-frame list is derived automatically from `segImageId` and + * does not need to be passed. + * @param [options.getFrameImageId] - Optional `(baseSegImageId, frameNumber) => frame imageId` + * builder, an alternative to passing the full `frameImageIds` list. + * @param [options.decodeImageData] - Optional `(frameImageId, frameNumber) => pixel data`; + * defaults to the cornerstone image loader. */ function createFromDicomSegImageId( referencedImageIds, diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index 3d579a989a..4a749cc1e9 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -598,6 +598,12 @@ const getReferencedImageIdFromPerFrameGroup = ({ /** * Creates labelmap images from a SEG instance using per-frame imageIds and a decode callback. * This is the primary entry point for OHIF and other hosts that load pixels via imageLoader. + * + * `options.frameImageIds` is optional: it is the list of per-frame imageIds the + * segmentation contains (as produced when the SEG object is loaded). It only + * needs to be supplied for data sources whose imageIds do not follow the + * DICOMweb (WADO-RS) or WADO-URI conventions — for those, the per-frame list is + * derived automatically from `segImageId` (see `resolveFrameImageIds`). */ async function createLabelmapsFromSegImageIds( referencedImageIds, diff --git a/packages/docs/docs/migration-guides/5x/1-migration-notes.md b/packages/docs/docs/migration-guides/5x/1-migration-notes.md index 99d41701a5..5892b1af90 100644 --- a/packages/docs/docs/migration-guides/5x/1-migration-notes.md +++ b/packages/docs/docs/migration-guides/5x/1-migration-notes.md @@ -101,19 +101,23 @@ behavior lives under the new name `createFromDicomSegImageId`. The original `ArrayBuffer` contract, so existing callers keep working without code changes and the upgrade does not require a major version bump. -### The `frameImageIds` option +### The `frameImageIds` option (optional) -`frameImageIds` is the list of loadable imageIds — one per SEG frame — that the -adapter passes to the image loader to read pixel data. It exists because of the -underlying change in how pixels are obtained. +`frameImageIds` is **optional** and most integrations never need to set it. -The old buffer-based path decoded the entire SEG from a single Part 10 -`ArrayBuffer` held in memory, so individual frames never needed their own -imageIds. The new path instead loads each frame's pixels through the image -loader, which means it needs one addressable imageId **per frame**. +It is the list of loadable imageIds — one per SEG frame — that the adapter +passes to the image loader to read pixel data. In other words, it is the set of +frames the segmentation contains, exactly as produced when the segmentation +object is loaded. It exists because of a change in how pixels are obtained: the +old buffer-based path decoded the entire SEG from a single Part 10 `ArrayBuffer` +held in memory, so individual frames never needed their own imageIds, whereas +the new path loads each frame's pixels through the image loader and therefore +needs one addressable imageId **per frame**. -The adapter can only build that per-frame list itself when the SEG `imageId` -uses a frame-addressing convention it recognizes: +You only need to pass it for **data sources whose imageIds do not follow the +DICOMweb (WADO-RS) or WADO-URI conventions.** When the SEG `imageId` uses a +frame-addressing scheme the adapter recognizes, the per-frame list is derived +automatically and `frameImageIds` can be omitted: - **WADO-RS / DICOMweb** — frames are separate resources (`.../frames/1`, `.../frames/2`, …), so the list is derived by substituting the frame number. @@ -123,20 +127,28 @@ uses a frame-addressing convention it recognizes: For any other imageId form (custom schemes, blob/object URLs that are not WADO-URI, application-specific loaders, etc.) there is no general rule for turning a base `imageId` into per-frame imageIds, so the adapter cannot -auto-generate the list. In those cases you must pass `frameImageIds` explicitly -(or a `getFrameImageId(segImageId, frameNumber)` callback). If you omit it for an +auto-generate the list. In those cases pass `frameImageIds` explicitly (or a +`getFrameImageId(segImageId, frameNumber)` callback). If you omit it for an unrecognized multi-frame `imageId`, every frame falls back to the same base `imageId` and decodes identical pixels. ```ts -// Multi-frame SEG on a non-WADO scheme: provide the per-frame imageIds. +// Single-frame SEG, WADO-RS, and WADO-URI imageIds: frameImageIds is not needed. +const results = + await adaptersSEG.Cornerstone3D.Segmentation.createFromDicomSegImageId( + referencedImageIds, + segImageId, + { metadataProvider } + ); + +// Non-WADO scheme only: provide the per-frame imageIds from loading the SEG. const results = await adaptersSEG.Cornerstone3D.Segmentation.createFromDicomSegImageId( referencedImageIds, segImageId, { metadataProvider, - frameImageIds, // one loadable imageId per frame + frameImageIds, // one loadable imageId per SEG frame } ); @@ -144,8 +156,6 @@ const results = // getFrameImageId: (segImageId, frameNumber) => `${segImageId}?frame=${frameNumber}` ``` -Single-frame SEG, WADO-RS, and WADO-URI imageIds do not require `frameImageIds`. - ### Migration Guidance - If you load a SEG via per-frame `imageId`s (the OHIF / imageLoader path), From c5d9653084739b23bcfdf13882320fd59313b1b2 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 24 Jun 2026 10:54:40 -0400 Subject: [PATCH 86/90] fix: Segmentation failures --- packages/ai/package.json | 6 +-- packages/core/package.json | 4 +- .../utilities/getVolumeViewportScrollInfo.ts | 16 ++++-- packages/dicomImageLoader/package.json | 4 +- packages/labelmap-interpolation/package.json | 6 +-- packages/metadata/package.json | 4 +- packages/nifti-volume-loader/package.json | 4 +- .../polymorphic-segmentation/package.json | 6 +-- packages/tools/package.json | 4 +- .../viewportReferencesSegmentationImages.ts | 52 +++++++++++++++++++ .../internalAddSegmentationRepresentation.ts | 18 +++++++ .../Labelmap/syncStackLabelmapActors.ts | 11 ++++ .../tools/src/tools/segmentation/BrushTool.ts | 3 ++ packages/utils/package.json | 4 +- 14 files changed, 117 insertions(+), 25 deletions(-) create mode 100644 packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts diff --git a/packages/ai/package.json b/packages/ai/package.json index 36519155ef..c1ff2556cc 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -31,10 +31,10 @@ "clean:deep": "pnpm run clean && shx rm -rf node_modules", "build": "pnpm run build:esm", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", - "dev": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "build:all": "pnpm run build:esm", - "start": "tsc --project ./tsconfig.json --watch", + "start": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "format": "prettier --write 'src/**/*.js' 'test/**/*.js'", "lint": "oxlint .", "api-check": "api-extractor --debug run ", diff --git a/packages/core/package.json b/packages/core/package.json index 7dd59573ba..6b62480f81 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -73,12 +73,12 @@ "scripts": { "prebuild": "node ../../scripts/generate-version.js ./", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "clean": "rm -rf node_modules/.cache/storybook && shx rm -rf dist", "clean:deep": "pnpm run clean && shx rm -rf node_modules", "build": "pnpm run build:esm", "build:all": "pnpm run build:esm", - "dev": "tsc --project ./tsconfig.json --watch", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "api-check": "api-extractor --debug run ", "lint": "oxlint .", "prepublishOnly": "pnpm run build" diff --git a/packages/core/src/utilities/getVolumeViewportScrollInfo.ts b/packages/core/src/utilities/getVolumeViewportScrollInfo.ts index 0b7c5852ae..a4d0ce0449 100644 --- a/packages/core/src/utilities/getVolumeViewportScrollInfo.ts +++ b/packages/core/src/utilities/getVolumeViewportScrollInfo.ts @@ -19,13 +19,21 @@ function getVolumeViewportScrollInfo( const { min, max, current } = sliceRange; - // Now we can see how many steps there are in this direction - const numScrollSteps = Math.round((max - min) / spacingInNormalDirection); + const range = max - min; + + // A single-slice volume collapses the range to zero (min === max === current). + // Guard against it so `(current - min) / range` doesn't evaluate to 0 / 0 = NaN, + // which would propagate to getCurrentImageIdIndex() and the overlay (rendering + // "NaN/1" and an undefined imageId). + const numScrollSteps = + range === 0 ? 0 : Math.round(range / spacingInNormalDirection); // Find out current frameIndex - const fraction = (current - min) / (max - min); + const fraction = range === 0 ? 0 : (current - min) / range; const floatingStepNumber = fraction * numScrollSteps; - const currentStepIndex = Math.round(floatingStepNumber); + const currentStepIndex = Number.isFinite(floatingStepNumber) + ? Math.round(floatingStepNumber) + : 0; return { numScrollSteps, diff --git a/packages/dicomImageLoader/package.json b/packages/dicomImageLoader/package.json index a563e01311..cc643925ae 100644 --- a/packages/dicomImageLoader/package.json +++ b/packages/dicomImageLoader/package.json @@ -68,7 +68,7 @@ "build:loader": "pnpm run build:all && pnpm run copy-dts", "build": "pnpm run build:esm", "build:esm": "tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "build:umd:dynamic": "cross-env NODE_ENV=production webpack --config .webpack/webpack-dynamic-import.js", "build:umd:bundle": "cross-env NODE_ENV=production webpack --config .webpack/webpack-bundle.js", "build:all": "pnpm run build:esm", @@ -82,7 +82,7 @@ "clean:coverage": "shx rm -rf coverage", "doc": "npm run doc:generate && opn documentation/index.html", "doc:generate": "npm run clean:docs && jsdoc -c .jsdocrc", - "dev": "tsc --project ./tsconfig.json --watch", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "lint": "oxlint .", "start": "npm run webpack:dev", "start:dev": "webpack-dev-server --config .webpack/webpack-dev", diff --git a/packages/labelmap-interpolation/package.json b/packages/labelmap-interpolation/package.json index e7c3cadb6f..0e6e9737ba 100644 --- a/packages/labelmap-interpolation/package.json +++ b/packages/labelmap-interpolation/package.json @@ -31,10 +31,10 @@ "clean:deep": "pnpm run clean && shx rm -rf node_modules", "build": "pnpm run build:esm", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", - "dev": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "build:all": "pnpm run build:esm", - "start": "tsc --project ./tsconfig.json --watch", + "start": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "format": "prettier --write 'src/**/*.js' 'test/**/*.js'", "lint": "oxlint .", "api-check": "api-extractor --debug run ", diff --git a/packages/metadata/package.json b/packages/metadata/package.json index 3ae7f6eb4a..cc0e164e9a 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -68,12 +68,12 @@ "scripts": { "prebuild": "node ../../scripts/generate-version.js ./", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "clean": "rm -rf node_modules/.cache/storybook && shx rm -rf dist", "clean:deep": "pnpm run clean && shx rm -rf node_modules", "build": "pnpm run build:esm", "build:all": "pnpm run build:esm", - "dev": "tsc --project ./tsconfig.json --watch", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "api-check": "api-extractor --debug run", "lint": "oxlint .", "prepublishOnly": "pnpm run build" diff --git a/packages/nifti-volume-loader/package.json b/packages/nifti-volume-loader/package.json index 74bbc37e2d..0e1af15f05 100644 --- a/packages/nifti-volume-loader/package.json +++ b/packages/nifti-volume-loader/package.json @@ -50,9 +50,9 @@ "scripts": { "prebuild": "node ../../scripts/generate-version.js ./", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "build:all": "pnpm run build:esm", - "dev": "tsc --project ./tsconfig.json --watch", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "build": "pnpm run build:all", "clean": "rm -rf node_modules/.cache/storybook && shx rm -rf dist", "clean:deep": "pnpm run clean && shx rm -rf node_modules", diff --git a/packages/polymorphic-segmentation/package.json b/packages/polymorphic-segmentation/package.json index 180bf6a229..45bd577830 100644 --- a/packages/polymorphic-segmentation/package.json +++ b/packages/polymorphic-segmentation/package.json @@ -30,10 +30,10 @@ "clean": "rimraf dist", "build": "pnpm run build:esm", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", - "dev": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "build:all": "pnpm run build:esm", - "start": "tsc --project ./tsconfig.json --watch", + "start": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "format": "prettier --write 'src/**/*.js' 'test/**/*.js'", "lint": "oxlint .", "api-check": "api-extractor --debug run ", diff --git a/packages/tools/package.json b/packages/tools/package.json index 4cffa68b3f..1c3bb6e478 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -90,13 +90,13 @@ "scripts": { "prebuild": "node ../../scripts/generate-version.js ./", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "build:umd": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js", "build:all": "pnpm run build:umd && pnpm run build:esm", "build": "pnpm run build:esm", "clean": "rm -rf node_modules/.cache/storybook && shx rm -rf dist", "clean:deep": "pnpm run clean && shx rm -rf node_modules", - "dev": "tsc --project ./tsconfig.json --watch", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "lint": "oxlint .", "api-check": "api-extractor --debug run ", "prepublishOnly": "pnpm run build", diff --git a/packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts b/packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts new file mode 100644 index 0000000000..448fd42459 --- /dev/null +++ b/packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts @@ -0,0 +1,52 @@ +import type { Types } from '@cornerstonejs/core'; +import { getSegmentation } from '../getSegmentation'; +import { getLabelmaps } from '../labelmapModel'; + +/** + * Determines whether a viewport is a suitable destination for a labelmap + * segmentation, i.e. whether it actually displays any of the images the labelmap + * applies to. + * + * A labelmap carries `referencedImageIds` (the source series it was derived + * from). A viewport (stack or volume) that shows none of those images - e.g. a + * different series that merely shares a frame of reference, or an unrelated + * single-image series - is not a suitable destination: rendering the labelmap + * there mounts nothing useful while still disturbing that viewport (blanking it + * in the shared rendering engine, or corrupting its image-index overlay). + * + * Returns `true` when the suitability cannot be determined (no referenced images + * known, or the viewport's images are not loaded yet) so callers never wrongly + * suppress a representation that may legitimately belong. + */ +export function viewportReferencesSegmentationImages( + viewport: Types.IViewport | undefined, + segmentationId: string +): boolean { + if (!viewport) { + return true; + } + + const segmentation = getSegmentation(segmentationId); + + if (!segmentation) { + return true; + } + + const referencedImageIds = getLabelmaps(segmentation).flatMap( + (layer) => layer.referencedImageIds ?? layer.imageIds ?? [] + ); + + if (!referencedImageIds.length) { + return true; + } + + const viewportImageIds = + (viewport as { getImageIds?: () => string[] }).getImageIds?.() ?? []; + + if (!viewportImageIds.length) { + return true; + } + + const referencedImageIdSet = new Set(referencedImageIds); + return viewportImageIds.some((imageId) => referencedImageIdSet.has(imageId)); +} diff --git a/packages/tools/src/stateManagement/segmentation/internalAddSegmentationRepresentation.ts b/packages/tools/src/stateManagement/segmentation/internalAddSegmentationRepresentation.ts index 499369e9aa..f1d1581684 100644 --- a/packages/tools/src/stateManagement/segmentation/internalAddSegmentationRepresentation.ts +++ b/packages/tools/src/stateManagement/segmentation/internalAddSegmentationRepresentation.ts @@ -12,6 +12,7 @@ import { } from './triggerSegmentationEvents'; import { addColorLUT } from './addColorLUT'; import { defaultSegmentationStateManager } from './SegmentationStateManager'; +import { viewportReferencesSegmentationImages } from './helpers/viewportReferencesSegmentationImages'; import { addDefaultSegmentationListener } from './segmentationEventManager'; import { getActiveSegmentIndex, setActiveSegmentIndex } from './segmentIndex'; @@ -21,6 +22,23 @@ function internalAddSegmentationRepresentation( ) { const { segmentationId, config } = representationInput; + // Only associate a labelmap with a viewport that actually displays the images + // the labelmap applies to. A viewport that shows none of them - e.g. a + // different series that merely shares a frame of reference, or an unrelated + // single-image series - must not receive the representation: it can mount + // nothing useful, yet the forced re-render of it in the shared rendering engine + // blanks the unrelated series. MPR views of the referenced series still match, + // because the volume's imageIds are the referenced series' imageIds. + if ( + representationInput.type === SegmentationRepresentations.Labelmap && + !viewportReferencesSegmentationImages( + getEnabledElementByViewportId(viewportId)?.viewport, + segmentationId + ) + ) { + return; + } + // need to be able to override from the outside const renderingConfig: RenderingConfig = { colorLUTIndex: getColorLUTIndex(config), diff --git a/packages/tools/src/tools/displayTools/Labelmap/syncStackLabelmapActors.ts b/packages/tools/src/tools/displayTools/Labelmap/syncStackLabelmapActors.ts index fb4abea319..eaf5c1889b 100644 --- a/packages/tools/src/tools/displayTools/Labelmap/syncStackLabelmapActors.ts +++ b/packages/tools/src/tools/displayTools/Labelmap/syncStackLabelmapActors.ts @@ -7,6 +7,7 @@ import { type Types, } from '@cornerstonejs/core'; import { triggerSegmentationRender } from '../../../stateManagement/segmentation/SegmentationRenderingEngine'; +import { viewportReferencesSegmentationImages } from '../../../stateManagement/segmentation/helpers/viewportReferencesSegmentationImages'; import { updateLabelmapSegmentationImageReferences } from '../../../stateManagement/segmentation/updateLabelmapSegmentationImageReferences'; import { getCurrentLabelmapImageIdsForViewport } from '../../../stateManagement/segmentation/getCurrentLabelmapImageIdForViewport'; import { getLabelmapActorEntries } from '../../../stateManagement/segmentation/helpers/getSegmentationActor'; @@ -31,6 +32,16 @@ export function syncStackLabelmapActors( return; } + // Skip entirely when this stack viewport is not a suitable destination for the + // labelmap (it displays none of the images the labelmap applies to). Without + // this, an unrelated series that merely shares a frame of reference gets a + // segmentation image actor added to it, which corrupts its image-index overlay + // and inflates its navigable image count. The low-level addImages/addActors + // stay permissive on purpose - the suitability decision lives here. + if (!viewportReferencesSegmentationImages(viewport, segmentationId)) { + return; + } + updateLabelmapSegmentationImageReferences(viewport.id, segmentationId); const derivedImageIds = diff --git a/packages/tools/src/tools/segmentation/BrushTool.ts b/packages/tools/src/tools/segmentation/BrushTool.ts index bc8d8452f3..bf44d28861 100644 --- a/packages/tools/src/tools/segmentation/BrushTool.ts +++ b/packages/tools/src/tools/segmentation/BrushTool.ts @@ -281,6 +281,9 @@ class BrushTool extends LabelmapBaseTool { }; this._hoverData = this.createHoverData(element, canvasPoint); + if (!this._hoverData) { + return false; + } this._calculateCursor(element, canvasPoint); this._resetLazyEditState(); diff --git a/packages/utils/package.json b/packages/utils/package.json index 93f8b1b795..cde557ee9b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -62,12 +62,12 @@ "scripts": { "prebuild": "node ../../scripts/generate-version.js ./", "build:esm": "pnpm run prebuild && tsc --project ./tsconfig.json", - "build:esm:watch": "tsc --project ./tsconfig.json --watch", + "build:esm:watch": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "clean": "rm -rf node_modules/.cache/storybook && shx rm -rf dist", "clean:deep": "pnpm run clean && shx rm -rf node_modules", "build": "pnpm run build:esm", "build:all": "pnpm run build:esm", - "dev": "tsc --project ./tsconfig.json --watch", + "dev": "tsc --project ./tsconfig.json --watch --sourceMap --inlineSources", "api-check": "api-extractor --debug run", "lint": "oxlint .", "prepublishOnly": "pnpm run build" From 9789a2a69e17aa050332282f1d8f732ceda557f7 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Wed, 24 Jun 2026 16:06:27 -0400 Subject: [PATCH 87/90] perf(seg): parallelize SEG frame fetch/decode with bounded concurrency Loading a multiframe SEG awaited each frame's fetch/decode before issuing the next, so only one request was ever in flight. For 800+ frame SEGs this serialized hundreds of round trips and made the imageLoader-based load slow. Decode frames through a bounded-concurrency worker pool (default N=16), preserving frame order and fail-fast behavior. Concurrency is configurable via the new `concurrency` option on createLabelmapsFromSegImageIds. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Segmentation/labelmapImagesFromBuffer.ts | 98 +++++++++++++------ 1 file changed, 69 insertions(+), 29 deletions(-) diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts index 4a749cc1e9..a2bb557251 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/labelmapImagesFromBuffer.ts @@ -272,6 +272,37 @@ type DecodeFrameImageData = ( | (Uint8Array | Uint16Array)[] >; +/** Default cap on concurrent SEG frame fetch/decode operations. */ +const DEFAULT_SEG_FRAME_DECODE_CONCURRENCY = 16; + +/** + * Maps items through an async fn with at most `limit` concurrent calls, + * preserving input order in the result array. Used to overlap SEG frame + * fetch/decode instead of awaiting each frame serially: a pool of `limit` + * workers pulls the next frame index as soon as it finishes the previous one, + * keeping up to `limit` requests in flight at all times. + */ +async function mapWithConcurrency( + items: T[], + limit: number, + fn: (item: T, index: number) => Promise +): Promise { + const results = new Array(items.length); + let nextIndex = 0; + + const worker = async () => { + while (nextIndex < items.length) { + const index = nextIndex++; + results[index] = await fn(items[index], index); + } + }; + + const poolSize = Math.max(1, Math.min(limit, items.length)); + await Promise.all(Array.from({ length: poolSize }, worker)); + + return results; +} + function getSegNumberOfFrames(multiframe: Record): number { const fromTag = Number(multiframe.NumberOfFrames); if (fromTag > 0) { @@ -431,12 +462,14 @@ async function decodeSegPixelDataFromFrameIds({ frameImageIds, getFrameImageId, decodeImageData = defaultDecodeFrameImageData, + concurrency = DEFAULT_SEG_FRAME_DECODE_CONCURRENCY, }: { segImageId: string; multiframe: Record; frameImageIds?: string[]; getFrameImageId?: (baseSegImageId: string, frameNumber: number) => string; decodeImageData: DecodeFrameImageData; + concurrency?: number; }) { const rows = Number(multiframe.Rows); const columns = Number(multiframe.Columns); @@ -467,40 +500,44 @@ async function decodeSegPixelDataFromFrameIds({ return { decodedPixelData, expectedVoxelCount }; } - const perFramePixelData: (Uint8Array | Uint16Array)[] = []; - - for (let frameIndex = 0; frameIndex < numberOfFrames; frameIndex++) { - const frameNumber = frameIndex + 1; - const frameImageId = resolvedFrameImageIds[frameIndex]; - - if (!frameImageId) { - throw new Error( - `Missing SEG frame imageId at frame ${frameNumber} (expected ${numberOfFrames} frame imageIds)` - ); - } + // Fetch/decode frames with bounded concurrency so up to `concurrency` + // requests overlap instead of awaiting each frame serially. Order is + // preserved by mapWithConcurrency, keeping perFramePixelData frame-aligned. + const perFramePixelData = await mapWithConcurrency( + resolvedFrameImageIds.slice(0, numberOfFrames), + concurrency, + async (frameImageId, frameIndex) => { + const frameNumber = frameIndex + 1; + + if (!frameImageId) { + throw new Error( + `Missing SEG frame imageId at frame ${frameNumber} (expected ${numberOfFrames} frame imageIds)` + ); + } - const framePixelData = await decodeImageData(frameImageId, frameNumber); + const framePixelData = await decodeImageData(frameImageId, frameNumber); - if (!framePixelData) { - throw new Error( - `No decoded pixel data found for SEG frame imageId: ${frameImageId}` - ); - } + if (!framePixelData) { + throw new Error( + `No decoded pixel data found for SEG frame imageId: ${frameImageId}` + ); + } - let normalizedFrame = normalizeDecodedPixelData(framePixelData) as - | Uint8Array - | Uint16Array; + let normalizedFrame = normalizeDecodedPixelData(framePixelData) as + | Uint8Array + | Uint16Array; - normalizedFrame = unpackFramePixelDataIfNeeded( - normalizedFrame, - multiframe, - sliceLength - ) as Uint8Array | Uint16Array; + normalizedFrame = unpackFramePixelDataIfNeeded( + normalizedFrame, + multiframe, + sliceLength + ) as Uint8Array | Uint16Array; - perFramePixelData.push( - normalizedFrame.subarray(0, sliceLength) as Uint8Array | Uint16Array - ); - } + return normalizedFrame.subarray(0, sliceLength) as + | Uint8Array + | Uint16Array; + } + ); return { decodedPixelData: normalizeDecodedPixelData(perFramePixelData), @@ -619,6 +656,8 @@ async function createLabelmapsFromSegImageIds( frameImageIds, getFrameImageId, decodeImageData = defaultDecodeFrameImageData, + // Max number of SEG frames fetched/decoded concurrently (default 16). + concurrency = DEFAULT_SEG_FRAME_DECODE_CONCURRENCY, // Callers that already hold the normalized SEG dataset (e.g. the buffer // path) can pass it directly to avoid a metadata-provider round-trip. Some // providers (notably OHIF's) short-circuit `get('instance', ...)` before @@ -682,6 +721,7 @@ async function createLabelmapsFromSegImageIds( frameImageIds, getFrameImageId, decodeImageData, + concurrency, }); const sliceLength = multiframe.Rows * multiframe.Columns; From d2c6a4de9a5ae4f09eb58cc58944b205001f4f8a Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 25 Jun 2026 10:54:16 -0400 Subject: [PATCH 88/90] perf(seg): forward concurrency option through createFromDicomSegImageId createFromDicomSegImageId dropped the concurrency option, so callers could not control SEG frame fetch/decode parallelism. Thread it through to createLabelmapsFromSegImageIds (defaults to the loader's own default when omitted). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../adapters/Cornerstone3D/Segmentation/generateToolState.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts index bea0d6db05..1c1ad3fc65 100644 --- a/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts +++ b/packages/adapters/src/adapters/Cornerstone3D/Segmentation/generateToolState.ts @@ -62,6 +62,8 @@ function generateToolState( * builder, an alternative to passing the full `frameImageIds` list. * @param [options.decodeImageData] - Optional `(frameImageId, frameNumber) => pixel data`; * defaults to the cornerstone image loader. + * @param [options.concurrency] - Optional max number of SEG frames fetched/decoded + * concurrently. Defaults to the loader's own default (16) when omitted. */ function createFromDicomSegImageId( referencedImageIds, @@ -73,6 +75,7 @@ function createFromDicomSegImageId( frameImageIds = undefined, getFrameImageId = undefined, decodeImageData = undefined, + concurrency = undefined, } ) { return createLabelmapsFromSegImageIds( @@ -85,6 +88,7 @@ function createFromDicomSegImageId( frameImageIds, getFrameImageId, decodeImageData, + concurrency, } ); } From e8c0cd9b238f56407e7fec4f0bc297227b7be878 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 25 Jun 2026 15:46:17 -0400 Subject: [PATCH 89/90] Add a prefetch using part 10 for performance --- .../src/imageLoader/prefetchPart10Instance.ts | 35 +++++++ .../src/imageLoader/wadors/loadImage.ts | 16 +++ .../wadors/loadImageFromRegistry.ts | 97 +++++++++++++++++++ packages/dicomImageLoader/src/index.ts | 3 + 4 files changed, 151 insertions(+) create mode 100644 packages/dicomImageLoader/src/imageLoader/prefetchPart10Instance.ts create mode 100644 packages/dicomImageLoader/src/imageLoader/wadors/loadImageFromRegistry.ts diff --git a/packages/dicomImageLoader/src/imageLoader/prefetchPart10Instance.ts b/packages/dicomImageLoader/src/imageLoader/prefetchPart10Instance.ts new file mode 100644 index 0000000000..ecb44290c0 --- /dev/null +++ b/packages/dicomImageLoader/src/imageLoader/prefetchPart10Instance.ts @@ -0,0 +1,35 @@ +import { utilities } from '@cornerstonejs/metadata'; + +const { addDicomPart10Instance } = utilities; + +type Part10Input = + | ArrayBuffer + | Uint8Array + | (() => ArrayBuffer | Uint8Array | Promise); + +/** + * Registers a full Part 10 multiframe instance into the NATURALIZED metadata + * registry (the single uniform frame registry) so that subsequent per-frame + * image loads — WADO-RS (`loadImageFromCompressedFrameRegistry`) and WADO-URI + * (`loadImageFromNaturalizedMetadata`) — are served from the registry's + * compressed frame data instead of issuing one network request per frame. + * + * Parsing is done by `addDicomPart10Instance`, which uses the dcmjs + * AsyncDicomReader; the decode path for each frame is unchanged. + * + * @param baseImageId - The instance imageId. Frame qualifiers (`/frames/N`, + * `?frame=N`, `&frame=N`) are normalized away by the registry, so passing a + * base or a frame imageId resolves to the same instance key. + * @param part10 - The Part 10 `ArrayBuffer`/`Uint8Array`, or a (possibly async) + * resolver returning it. A resolver lets the fetch start lazily and be + * raced against a deadline by the caller. + * @returns A promise that resolves once the instance is parsed and registered. + */ +export function prefetchPart10Instance( + baseImageId: string, + part10: Part10Input +) { + return addDicomPart10Instance(baseImageId, part10); +} + +export default prefetchPart10Instance; diff --git a/packages/dicomImageLoader/src/imageLoader/wadors/loadImage.ts b/packages/dicomImageLoader/src/imageLoader/wadors/loadImage.ts index 19760efd51..bde9b23215 100644 --- a/packages/dicomImageLoader/src/imageLoader/wadors/loadImage.ts +++ b/packages/dicomImageLoader/src/imageLoader/wadors/loadImage.ts @@ -7,6 +7,7 @@ import { Enums as csCoreEnums, type Types } from '@cornerstonejs/core'; import createImage from '../createImage'; import getPixelData from './getPixelData'; +import { loadImageFromCompressedFrameRegistry } from './loadImageFromRegistry'; import type { DICOMLoaderIImage, DICOMLoaderImageOptions } from '../../types'; const { ProgressiveIterator } = utilities; @@ -125,6 +126,21 @@ function loadImage( imageId: string, options: CornerstoneWadoRsLoaderOptions = {} ): Types.IImageLoadObject { + // If a full Part 10 instance was prefetched/registered into the NATURALIZED + // metadata registry, serve this frame from there instead of a per-frame + // /frames/N request. Returns undefined (and we fall through to the network) + // when nothing is registered for this frame. + const registryPromise = loadImageFromCompressedFrameRegistry( + imageId, + options + ); + if (registryPromise) { + return { + promise: registryPromise as Promise, + cancelFn: undefined, + }; + } + const imageRetrievalPool = getImageRetrievalPool(); const start = new Date().getTime(); diff --git a/packages/dicomImageLoader/src/imageLoader/wadors/loadImageFromRegistry.ts b/packages/dicomImageLoader/src/imageLoader/wadors/loadImageFromRegistry.ts new file mode 100644 index 0000000000..c547302e1a --- /dev/null +++ b/packages/dicomImageLoader/src/imageLoader/wadors/loadImageFromRegistry.ts @@ -0,0 +1,97 @@ +import { Enums, metaData } from '@cornerstonejs/core'; +import { Enums as MetadataEnums } from '@cornerstonejs/metadata'; +import createImage from '../createImage'; +import type { DICOMLoaderIImage, DICOMLoaderImageOptions } from '../../types'; + +const { ImageQualityStatus } = Enums; +const COMPRESSED_FRAME_DATA = + MetadataEnums.MetadataModules.COMPRESSED_FRAME_DATA; + +/** 0-based frame index from a WADO-RS frame imageId (…/frames/N). Defaults to 0. */ +function getWadorsFrameIndex(imageId: string): number { + const match = imageId.match(/\/frames\/(\d+)/); + return match ? Math.max(0, Number(match[1]) - 1) : 0; +} + +const asByteArray = (data) => + data instanceof ArrayBuffer ? new Uint8Array(data) : data; + +/** Concatenate encapsulated fragments (array) or pass a single buffer through. */ +function concatPixelData(pixelData) { + if (!Array.isArray(pixelData)) { + return asByteArray(pixelData); + } + if (pixelData.length === 0) { + return undefined; + } + if (pixelData.length === 1) { + return asByteArray(pixelData[0]); + } + + let totalLength = 0; + for (const fragment of pixelData) { + totalLength += asByteArray(fragment).length; + } + const result = new Uint8Array(totalLength); + let offset = 0; + for (const fragment of pixelData) { + const view = asByteArray(fragment); + result.set(view, offset); + offset += view.length; + } + return result; +} + +/** + * If a full Part 10 instance has been registered into the NATURALIZED metadata + * registry (e.g. by a full-instance prefetch via `addDicomPart10Instance` / + * `prefetchPart10Instance`), serve this WADO-RS frame's compressed pixel data + * from that registry instead of issuing a per-frame `/frames/N` request. + * + * Returns `undefined` when the registry has no data for this frame, in which + * case the caller must fall back to the normal network path. This keeps the + * registry the single uniform source: WADO-URI already consults it via + * `loadImageFromNaturalizedMetadata`, and this makes WADO-RS consult it too. + * + * Decode is identical to the network path (same `createImage` + worker + * decoder); only the origin of the compressed bytes differs. + */ +export function loadImageFromCompressedFrameRegistry( + imageId: string, + options: DICOMLoaderImageOptions = {} +): Promise | undefined { + const frameIndex = getWadorsFrameIndex(imageId); + + let frameData; + try { + frameData = metaData.getTyped(COMPRESSED_FRAME_DATA, imageId, { + frameIndex, + }); + } catch (error) { + // A misbehaving provider must never break normal per-frame loading. + return undefined; + } + + if (!frameData?.pixelData) { + return undefined; + } + + const { pixelData, transferSyntaxUid } = frameData; + const concatenated = concatPixelData(pixelData); + if (!concatenated?.length || !transferSyntaxUid) { + return undefined; + } + + const start = Date.now(); + return createImage(imageId, concatenated, transferSyntaxUid, options).then( + (image) => { + const out = image as DICOMLoaderIImage; + out.imageQualityStatus = ImageQualityStatus.FULL_RESOLUTION; + out.transferSyntaxUID = transferSyntaxUid; + out.loadTimeInMS = Date.now() - start; + return out; + } + ); +} + +export default loadImageFromCompressedFrameRegistry; diff --git a/packages/dicomImageLoader/src/index.ts b/packages/dicomImageLoader/src/index.ts index 00efdbc4a8..64be7e85de 100644 --- a/packages/dicomImageLoader/src/index.ts +++ b/packages/dicomImageLoader/src/index.ts @@ -18,6 +18,7 @@ import { default as getMinMax } from './shared/getMinMax'; import { default as isColorImage } from './shared/isColorImage'; import { default as isJPEGBaseline8BitColor } from './imageLoader/isJPEGBaseline8BitColor'; import { default as getPixelData } from './imageLoader/wadors/getPixelData'; +import { default as prefetchPart10Instance } from './imageLoader/prefetchPart10Instance'; import { internal } from './imageLoader/internal/index'; import * as constants from './constants'; import type * as Types from './types'; @@ -43,6 +44,7 @@ const cornerstoneDICOMImageLoader = { decodeJPEGBaseline8BitColor, getImageFrame, getPixelData, + prefetchPart10Instance, getMinMax, isColorImage, isJPEGBaseline8BitColor, @@ -69,6 +71,7 @@ export { decodeJPEGBaseline8BitColor, getImageFrame, getPixelData, + prefetchPart10Instance, getMinMax, isColorImage, isJPEGBaseline8BitColor, From 96a4ce17e665c246a41c51689422a2461b230e45 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Thu, 25 Jun 2026 19:33:21 -0400 Subject: [PATCH 90/90] Fix for detecting applicability of segmentation --- .../viewportReferencesSegmentationImages.ts | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts b/packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts index 448fd42459..7442f0ea1e 100644 --- a/packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts +++ b/packages/tools/src/stateManagement/segmentation/helpers/viewportReferencesSegmentationImages.ts @@ -1,7 +1,38 @@ -import type { Types } from '@cornerstonejs/core'; +import { cache, type Types } from '@cornerstonejs/core'; import { getSegmentation } from '../getSegmentation'; import { getLabelmaps } from '../labelmapModel'; +/** + * The source (referenced) imageIds a labelmap layer applies to. + * + * Prefer an explicit `referencedImageIds` list. Otherwise derive the source + * images from each labelmap image's `referencedImageId` (a derived labelmap + * image points back at the source image it overlays). We must NOT fall back to + * the layer's own `imageIds`: those are the labelmap image ids, which never + * equal the viewport's source image ids, so the suitability check would wrongly + * fail for any layer created without an explicit `referencedImageIds` list + * (e.g. via `createAndCacheDerivedLabelmapImage`). Returns `[]` when the source + * cannot be determined yet, so callers stay permissive. + */ +function getLayerReferencedImageIds(layer): string[] { + if (layer.referencedImageIds?.length) { + return layer.referencedImageIds; + } + + const labelmapImageIds = + layer.imageIds ?? + (layer.volumeId + ? (cache.getVolume(layer.volumeId) as Types.IImageVolume)?.imageIds + : undefined) ?? + []; + + return labelmapImageIds + .map( + (labelmapImageId) => cache.getImage(labelmapImageId)?.referencedImageId + ) + .filter(Boolean) as string[]; +} + /** * Determines whether a viewport is a suitable destination for a labelmap * segmentation, i.e. whether it actually displays any of the images the labelmap @@ -32,8 +63,8 @@ export function viewportReferencesSegmentationImages( return true; } - const referencedImageIds = getLabelmaps(segmentation).flatMap( - (layer) => layer.referencedImageIds ?? layer.imageIds ?? [] + const referencedImageIds = getLabelmaps(segmentation).flatMap((layer) => + getLayerReferencedImageIds(layer) ); if (!referencedImageIds.length) {

{3rL?2W4>z-v*9Oofq%f9&{3?(; z>!KoN3eIo~UXRfC%k2W6rARC(dQ1T}MK-B^gS-ZR)6vcg&>$;B zh=LE{9a0mLDV-3h*t01uL%*exvwzGz1`sj1av@}Mp>QF0O}c!cgFcJxP9EuFmrv_w z)Ww(gNVpX~U8?{ZERY+@w^S0lilCr6B-&x#w6!tX*7Fp2(#HDR3^WI4%m+;hW$rDZ z)Ai|&7)#pFZ=6mmS6_=FvWUIE9zik=Ujnm-F|qv6xa54xGD#=1-!@*cX4p_b?LRD{ z79H)0f7R4wqF!jVFHtr{^luhiQasIndVoO8+#>4=uWyx{D&a+HD{XM%(qx!vDlEPs z^S_mNUUR!;KgDc(6Y*v4I?H!^_W5*K8%N6Nx^N?Dfj>#wE3QsAq0*%2aUsYcaob4k zW1E|R-jp}V###qB=x7qV)Tc@9Vo#@gDe zntI?*?gaGKde5PHH=Nzpr=5Vl4~{EN;vebm!!iT2;imgu2#F+u$g&Lgn2OoOf~cia z){ModAK?vQw+yl(Jf(`LseY%G<=g&m_LZ)l`2w^rD#aurx1C3M3r3tj7Rr_OQ)6vg zQZyoq+IRfrCKHJS$Tf5-iWvzAx5lduG;z-=Zr*I%?(6%mzKsu{cZ%`U9p;UpSs*RbY# zG+l|z*aX+vlfZ3t?qR)ogRoxynY8&SlJbyvT^%{{j@e$86OM_B)&6mZ_hTUneF?irKE_ za`&VlS3APuHl6Ae+WQcTxe1^;VI|}3#bI!K=8cXrmppnYGLm5#R2LgiGAKt6f-fab zo?(&VYsj>W#T+ghJUy!@j|6*tE`lByDNgZQ|GS9J4O}(}veD-je=R#*71sXkUvK5@ zS6}O_z=Lp9!DDSkpFj8zv1846})1clj3+G?~RLg(`cWJS830{ zU*nCIUdzWE9Ed1~_1u(ayMBxjX%!0C3L3U0R$;0(nyBp{sPj*oVuIPl^2Z}Kr0>lx zmaG5O1u#r^`7fZxQxWxiSE(nn7JfV5+W7N@lwpZ@|v+E*Gfg z*rX?Pk?f|zSwuVa^Ur;ynq%J`l5-zTAkQq31f?7~Y6Rv#-_rkI^Uq}IrqsLXJAEWr9L=#BszD}iPJHnehBA}N!PK$1l z{lH`z0{E=}t5CAPsO_E>+1TVC>qzG&;9Dl8=9dnRx@{|Pfn1%6bl0-CQIGCN>aI-m9fGz9P3v zblNAfz(N>JA?^)Tyr6Gsr*S}W0K&G#;kKO~j;I~_ieDTB=5Vgn#h?xbV z9%aIfCbC^zt16Jp#XM4n=LEk$ph?uCW3EPHDn^7?z_StJF-*#{Z}O1`i8`|Y398CG zDDTA-GGka7!)vZ3o2)oLj>+RQrcRYq^k7#yw)R@jLX>pYWRJTZD16nFXgo1@X8Llm?G3LF=#f5$Y2tpQleo;c9+I+^!3`;ML_&1ws*7?f>oBd91>JNEONR)x48;tPMQmLksR~@bUr1`d}@hT ziyHH1%9cE0xoE_%^9B=EohDVU={vG7E0m2r^MI0OdGK0SA(tJEB44l9c2#6lxnBiXgYpZK%zB& z%S+6fWKa$kE$UJpUJqpqas z@#$*)^vX|>X0rs`DdzG~Ldi|gRKOyy3IQ37s+U@U2Amjg5Q zz0i1tW;8>K0v8?*m2Mcr?y~Q_4+02QqECJx0TuN18kS+ z_{BDZz>6GGwAE??VWPK5j84 z_?cCS<=Cx5BTNve08cE?0HaQX=B-^(O@we$@Qsx_lCE3%c`tmty}n6l$_CEi zL~rY*W96fJiTpQ0(oGgPWc#nT)(8vBjpHDJg< zSz~SLW6SJP+_k80f&Iz;IA>_+s@*-KK_1Tf>n(S38;;KUel zvNXggETZ9U80DjP<~tb?hRZXGPvTLV2Bqni&DczOv);<^lclSI7I)=YX4b!K^yu~o zWXd~-^%e)1H_!JK^9fLEsm)N4#u?;Xm`|V*10x}(YXTf0e|7LnSew5pQ5n0Z{vPFL z;nPnXXl~GP@m9-)xp0fIvUkWd|7+R^ZQS4a0ALc6YchPbXiW~(O|#rEug4BD(Z3lJ zr`qVM|2)@*0<6`ZD*rIgZN6QD*_Q~YF6g+8xdSww$5@@R@jeQj3}raA*|nGu0%xK^ zYl@2YX9K^$2$8_N$&)O|VR+O3S6a@fS2q%AK2A!>$92=ODsI5|i^nF#SEVVBm5Ft4 z+%qaRjz?yUEKKN@nTrMvIk8SIENteW!6kP{CP~ShTP`3umMKfN#}NKC%BK(=Nq;5z zUBvU|v_y}QQ`(KoO!#j7RwXhLjShtB!r74A?s=s<5W4)D}|}47cNNsT>4NhY7!7Y+`FX-!9rW z0++u9=X|j)4GYb;iHV%&-dDkl;^*wk;BSg_S0k3Y63cR z{>D<}CSN_}jHWhKgst!p^9*T{Pav2hg`qpgpewbw>ig^OSH<+;wza}aBM^cMFM#OH z1$Ntw&h9}ANi3-yqSL`sQ&%!i20uu~a5N5uVD&AD61%CCDgNm51Yc>l_B=7_zPBX{ z>(veH}`k!Y{2tEB!*) zNEZMr`2QVu8q|5r7sJGhG4=Uh2b|2d#He9f$dl0N_yJU_SeQDw zspX-Dd-Jg`!N`w%YsC!I;OZn*(v1U(=y{EdU^3Qu6EN9$J+ve3d+i%2h(qYp~EB)Ky~R7X^S zRsO-wN^$!rfr8?J-AHXJbY#`M=%@L7QZzQi#LHun)5|W?n3cLYBrUEZxAS{~ackpj zCo~J9l?A4ieDCMoaQ%A?=wrWI#Y~`lq5$rk(j7B|l022oHCMKMW!r`E?AGF@OZ`&K zTLE|J(OHz|jvx2$2zOqPwaxli>ie9OM83B@e>$dY<#^r~tF@AXMLMAtXKx#(WTq8C=q(6<}q9~KV~0l*5vSmOH)QQnIq4KCy*(-SpI3^x4-Ru z`Vww@PfrVZjXC@deI|8rw@O3x9~5F5)zOw!fPMo@0goJ(4^%aYDxd5T^)$?Gv#njX z0&Lw`j z{?JQoalo;tooB#))7CthHPpo*d!X;klAv>9PT{>o;b9Gr-jc#5b^D#Qnu%{guUf9J zI=)74t1)nXR^K=MmN8brO(0wyrT-901wYa{$-#9>vi^JYaF|a5sf<0o(UHdl%SAA{L*Erz?1B#^A zR6fh&jDKtvU)5H`0D3m%AS$-YjqG~rZ9#!S6nXQq+gk>MBjO7Z=l|3HXX9Xoh>hX+)0U#}1YQ-E9(q<;oWrY(G zHupw>oZDENMwo%Fc$*#A-Br{AYSYCgV9DZ+c!{Jb>opHEA-#8^v5V~qe8^hz9}scY z-&J(I?vk{M^Sc@0`rqv}Fqk)80(w4z!%w$uZE(em|8Z@pu8LY|8Rw&Nt`A&cgw65= zXRRz$*Mtb&j5{QmbY^X-#G=3HI+eznKdP)1Cq|7scgmeKQS-N|#8ES%He=ikotNdZ z!fo?WB^YE{w-bRP>n+aYVNWw$?+Q#R&5M|Lw?(}f)%$~;3V>_Zkki-9>|lV zhxM?coTVV8{}&5r`&2-wemsY%QogH_K$#Jfi5VkZ?8;WCM2Qwgb3p(QHB=%B=+d`}K{aonX5pBhS_lU)uaO}WZ`4W0nr;UDNgX>r|Z~>y>O%NZF=GsQ~ z>P(`Ez!uiP^`h1Abv}KFu`t?IV$$8reA*l;8H+NW5Il64(j{ z2A!BsJx&XPVeXQRWp%LWIwl&hSjRH`Rg@zkQmMq(wN-IZry_vAwS~eL`4pERXa^V$ z5|Ge&BZmj4px%0&NDs~cvR<}^$E-IoKCb42@)_rVM^hY%z2z#$; zn%R}p@3j&pm1!N?ubAnd#OaKDQL9K~PSNB5m+U(Rg87UC^pa`FmzM;jbU zT`+t1A7BO1(f0OOFswFl4%*zW1l4h))S`52)i}Kk?uVa$JsA*q7X8s8^KiaJrZ2Zp zaRnz<25ZA2KJ5=z```5h!tWtknzNJ%x8u%&sx}?ACs6ng=yk zqV1xw&K``zUa%!b&IV8RH%afxjpI&Si2NaFh&pjxKbh6x`-0in%{+nQ!M@i3OQ$$3 z0X1*g!~OO6OtuC|=%hvqTRbAHe1BY>_1`xD?U0TmQjv*Tk;GYX}Y;hiG-{ zzF6qqL07X47i-!^`AZ!6z0=3#_1>EB%NE%oI#$$K4Hbc4ek}@wGsyUJ3yvGH zD`&wnDB5|(!@$-c+R35Dk|1wsV6E9Q;Nvde)*baWYOFoGfA2D@RD;`39#m zw}a3I{po>p{?TB;mT>>~+eY53?qDaF0Ln$dLH6~vD$TN4n{9d$IzDBqo#Ve!cG70A zr2bvkeHmmRhCNRBpmOB3c)o<%&gIqU_i4f|TDn!EQ{4 zloQZI5YUQx92_POCijjTJwy|L=kYT`_H`UxMa`0JroZxgU-48Tc$i9V^0s-MASUb5 z9cAHN@wlcq^vm?+{?AkdCk5LLdx3-NfDe%UXH)JXx6P)PVHt2JrT|6gIkTK2c@Mk92B^S*h@cc>5813Un;ytu(4*AvvYn1E2?8rg* zT9@_j~#>B3n}+%0*UWGrlZIl(Z|O@ z)dOwQDCYjYTWto{xa|<#uq?4!(2vE-&T_3;gwG=BhZqJ9aEP$PYFQ5S7ykuv$-}ln zmU;CRHKUNoy6cNMbd^ly<_HtvV3n2O7k~`vgpxquxj)>6 z5rJus|GH~+66rWnJEKeWfNMcw-Amv@OlF)lQnouAMFy8FVNfBoL%1#qC~epFqM>EDN3&UTT}xBw;_yC~VI%AGrMWQlWdg?TtY%he!O7j#<2pjtTdCqLJ3 zU;|sSADrs?D^_GgS6b0)7?+P9MTE)es<`p_c^Ju&_YP!RjYE5{8cAGKdE;}{y66w7 zK1$9;q=H%00Zycs*9eJGS2yd-o#*!_m9fYb!s7e5a?d!oO@R-l;h|L>Gz>_aEmB{Y ztKj$5T;u<*y{mkS>TB1CBA_^glyrwMNOv zEsZqH04m*_@w`8M-|JlG4>%vrr?s#BVXd{-v-e)>dG7mup3x)Rg#%>TrQ2sr+xxrl zd33h_`)ZvqGpSfv;OykW#EK3N@uNaXoL0e>%sLR$) zze796Quwtv1FuHe(xAQV{YMi&UW-npG$9D=Q|UU7D^7Vty?xy_>lSCeT<(bTsQaoW z1MBI%N$Gef9xeP^7e4f;bIyQ9qNuVzEQRmr1x;OFs$S57QlORDm zK<)hz0BpCETv3P0lMvs6AY4c_aI#BA$T&js9FOMovCPTjXV?*+EpH`+{uZ+brq#z01UA$*ZHZ-c61R8A&+{``nA$*z{Q;SkkA0_co; z*k{Q(nx^qBB+WUPPWw&-UgS4{V*;ndFQ}(a?jRpw^=D34{O;n!wP#S93C91z(p38ouOT%oBh#2;jXq;c%7`$OYnjD~L@N~p(I&KSW3;nX|=Z`Oz ziYq!4*zY!~3}X=1c%YX!T_waA_!{Yb`_*d8M}c9{Zt=&I4rGtr?P_#q4x7x%w|Xlm%@Ouo#& z+A%$@m^>%QJz#FCpLGggv5Ct!U~A)S9qluy_}SE*MHRSGx{Kx~1L%0G$86Fss~S@| z%58oLazAAs2iHM<)8ShJ?vJDxbXF|>V%KY3y1gFH!_vJswJ=;TgVpaOMmx;min4MI z4YVt@t);Ayg>Gd^`|d5l7+d!{BOUy*ABpw;@)4}&@RS~y=385>%GW2+==GCPt&*0q z%wE3X@b@nYo4>O&`f;11D1~Ui20oy&Dbd`fekWm%p|E7cno#5A(G(dUgNte*88#F32I-?Ii{H7I2A02> z1!l0xl#OL&*=SCDSbq3y!;&c5N(9QQOxC!qg&8HOFeguc$zZED2I-_e0ABd1<%L|A zJ&(}xm=C^$rC9b?OMt0I!<4v})5NGYqmAocIP|GMk=?Fb-f_CSnaz|*JQjkg=|zR6 zrqXwv?|!1?Q7hZ$yX8VnAH1Ys!;descYi^ng0e`Z97X&S_f3}JkQFytP_YvrWM{~ zSJde?ZkHajUkg6B9p82VJ}A#`_m6bs)Sf-p08y4mFWD<$w~6z*ZI zFY*JWEE6_c+GcePB3?qHahuCt2~W|ctL6JGbji2&+r@Y;&px-Z+JP898-$DdUt-L@ z87-?sSlT~U+RRlpbXFgPrN_eu|Oj-jb$BliS(jh(GND%$P;i zT!!0w9N27P%cN+Go`bdXywYjl6orJ4eyADB6bAW@|J5d)J5grK`OBPbMl0_-T1QGn zKHO3{*H!D6TWl-Z{XS0Lccei?Lc$bTQ?beGhAVlgN#0>}Yy;s4RO8=xJYf@skx%OU z^{}$BrF)S7G?0>>1Ln-a2Ig+y`%oUNYK5(aGfO6@DD)>5a8C>T`7D&J17R9)YBewi zV}PnUt_I;Vk_Wwu!IY%oHy&|p7`;QHDgh({lnDuW*hu`oGupHqobcDtBL!jY-Q*4c#0g66L2d$OG&-yIetBuQNm9tQiwz`M5{}3alRd5SP6EPajZMMmrC0xwN|I zn<>dG?!a%6BwbZ!%`+|EEfwc)tvI-qDsx<~AFOIffpvP#5(l;*6}-xe`ucabogcv` zahe(4?E*Cb+(7;i?c;Y`U+UJ-Pj8LEBbF~N>}==3-=cE|OmF%r@!?>!8|S96>`diQ zlljTC6C;e77CG9p^DYBSI7p!~<&w`Zp^LNT~lTJNe)7qgL7zI7Qz>j_)B%XRj9l8%hMa1|pZSJpXYp-aFbU6tVH^L+K zx+q4V1&cXPUXa>enb<&|-*@Rtao+&y% zV%Q!|EgtOwm+Y3L`e7!jlh1V>6@Zy=sC^wRsU6kZUUm%GLf8O9qU72Zv&MF~<)sed zFLNj;wu{#TzABUj)*fd?j^a%CBB!yMOBL_O{U;y4RlTgt-lTayGU3{ zaY_@*Vpke~JLBQa#2$2crFCADXg6+luaS6a4f<6VEYj857!_lxUz4&8GW3?E6*M+- z1)Y4tMp`+fjBgR8O>DG_Ii5X%V5%DEcBL`A_CAWIoxP8q2L2&Lk-gD3%8}HWf zLZF$xR5P9x;o~041Zm{>64*L~dQDO#iK8EK6kq~6eF`?InttcCQMe`~CE`$UrmFYz z9k=!aR_5iQJ0&(sLB5|NQHQIaG>*3%%FSct%eESQSXqUJTIRThx&csKslu?~o8dWB zjN#fX>>S-}(h+6TtE*aDmu&Br&4_nVPNB$ou4 zp$$vMB|2>F_r33=FcZ*mYggo*D&ZB)OFqsj!V)a5u@bxXn}#U0<`@ZPXuK-qb=DWk zaE!=-q{E$HaM(Nlvi{Q>4<8?m!vO&xQ9R3*9!K72VG*e<{mt2#o6i zvR8@K#obE~eBM0Jo$R6lXPPs%>fGrfh5IU19DqdQBkNctFZ3gb$=u8@++nteK6KG| z0i!2L`_A^5!SOlBk^eY2%rY@k$&xs`)ZhsAs_0WJx3J~&RIf1yH zxc(cPqbnY^Ua9iz9}TTz7w7~O0;ftlY?E#m0(Pyr1_7A0*MfTjV2{v~Q|BjOzuh?r z1j&i{QG%!S_$2U9MSqMS%dgTaYiYYtW_J=1;rD~VaM`6L?Ji{-2 zF!|--UOoPg?f?d!iNu6=LnOO}JhR$2as?<XzEw1$`d3kev*Vq z4jz@=E-|P-Y2O%ub@d6C8%uGy6nlwl>WF#h-Cs&|R9P0aA4@REdNNnB78+6Ftwoz+ zP&V(@FJ+G&6#IbWP;2BK)6FN{1=Z5Fzd1~$zqL4asq5QI`=FB7{DHvv(d^4=NrPzJ z%jVx@H%_Avqz#(u%^wVlvDw`bdHd|M;imWNX# znL6V$$kAmNeWyhed20alhv&BNI!elyO4GM~GXC)JqDzUC2fn#eQdw$EMHpz%!%;NN< zXdW{51Uu!JPSskQpfh_f%N|dTm^9UJ<~ye(a-{+Gpg42(-i~fkBH%AlpCaZcr%VZV z6&Z4;oZEX-Jh!*#MQS66j2V^JrW~Lm^y}9br~3r+!)&>Z(lMUO_Y^pdB3hHPhYM7T zn{~_l*cr4*a#~6(z)Ds}O^hkXh85M+)L;w$NNtjcegyD~205wUX021F#)xBWbdr(t zqSVt5vfJ)M&q&fev)}d%K0AJH1Eg|Ud@^!=0(KzKwObDWLc{IRpP@HOxGB>*viw)J z4PyfL$jtx&sYfi8(y!8eKd-b3l-gkBd({@|c2oP~)A9f2wN$1J&s+)Z57e!6f0m;7 zcG0><9#{h{XzT0ghdO;R8pKC|tC2H^H2r)hI(+Z!5`aSJ1GLX;(w_I3RB=Mect-VW z?~8x1#Jn6-dO3*R*R5wN-f`1WZ?j_;_3oHk2z4UbtPTlKPi$rioy^X->rKjTFQ&_z zwkKW`FeyQC6IoDF7}a8PNTVK0g}S1!NP(7fB!Q8(-Flh~qU6fyD0aBwQu=GIyRPev z7P%ssEKkT9h405{JXph1Q&|)cw8+toYL3h?I;pMZ<4z(0{+5Rx2_|+V-JactZ0X$7 z=LP7+zXuQ8EQ(|Lx=_~3H%ua-5;NPdrr<8xICyDv`U;Z|Dize`G+mB*KbX7|8N!tX z(&?Aqy#i1abkfM}l#DxsXi@I@A%L3kN+C2Om{-jRHKrjvd-!NA*ehoHkuB#+h%BG3 z2h|?J%^&%Q*-P&L$7I6rl02bMe||D>p>>Nrl`i(X#4px?nV;xd>HZsUA3vK_$1pk( zR4+X2Gh_NU2F?c1v-O?{?AYM(M{4;C70g=~OFda6i!S59hjfx>BL%Lajo~ zYjs&S0+_vb$HVm6D!b<{&gNko0LySWwpdKvu0+Exi0o~iKzM+4wli6+OnM?qych@Y z?l#eb$R}*-ptl|Rdxzrcsqy1mM=A2vMa|qeLCG%#jaO@f(;{)L^acaQCkwSgs#R>V zTLq3Z3XZ*Hf_!bQ1>HCIJ#el*M82E8A|cG%R}6mJ4qJlRRyt1$2dMH@@Ri?mI8+i2 zl^vjrY;iG6#5&Y6Y{MNMN!FZT%)pp2PIi(6Fi~nO_;5)ON2=?7vcl5gVE2vv(qrb5 z1-#z!!@0gFi0Y(!METv8<6t_;6|03klN1|gX_KVPoElTq2j0b9fw&SU-aX&*e1wRlNu3zU)NZ^zRP=Mk4`-}%Zah; znNRhmS zYT~nLTg#s?NlrLVt>{X)FVxrJFt8eUE|s#w=+alIu_d#e>}wFQXI0;FC9cV`vgw;N z)#?vqJlZPIm^`>Tk20UnYo>248?Ga}PBvd3n=SXA(SPSPo0=UHwC&i*Xax{0wE){< z{8;jfoca|SJrmN}#KdV+8oh?J^PLLwJM?+aZu{;RiiJW!D|0jJ7o|KOlpY4JxsKqA zi8GRc+k$-ky}7?$Zv^tUMAcN+E=G2o{Ry|$kGkfO&B$3_+{oW2t*&!5NNPUz%Q(b$ zymcY4!rz(^dn&Dz`OUrT(wu6hdq_0u@Q((toR>Tcc!B&*P+im!ek1|AIJH?1>_Yrm zi*`mJeE836@>`e>?+o}N9Cq#1JQ?D4{Xw7W!gWbiqL%6(M^ruQAJF?Zm9w1!&QkNI zBP{#Ao&^$G_Yd6myD?z3q;HW8sLFI}sg8vIM?#?~{ literal 356903 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%0A)oJ<8tb%(t8sdCN8TN-nMB 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 P$*EwNEN$V}|0Lw)L=fC=T5XrJ$c+z<56c{#QH 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%0AB?PCDZy1I%4_W@aI$ou^ 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